Repository: envoyproxy/gateway

Issue:
ObservedGeneration is missing in Policy Status
As the below yaml snippet shows, the generation in is 6, but no observedGeneration in status.
```yaml
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
  creationTimestamp: "2025-06-23T02:52:40Z"
  generation: 6
  name: response-override-myapp
  namespace: default
  resourceVersion: "181277"
  uid: e95c3a10-b9ea-45cd-9d64-d00fd3fd0223
spec:
  responseOverride:
  - match:
      statusCodes:
      - type: Value
        value: 403
    response:
      body:
     .....
status:
  ancestors:
  - ancestorRef:
      group: gateway.networking.k8s.io
      kind: Gateway
      name: eg
      namespace: default
    conditions:
    - lastTransitionTime: "2025-06-24T05:23:08Z"
      message: Policy has been accepted.
      reason: Accepted
      status: "True"
      type: Accepted
    controllerName: gateway.envoyproxy.io/gatewayclass-controller
  - ancestorRef:
      group: gateway.networking.k8s.io
      kind: Gateway
      name: eg1
      namespace: default
    conditions:
    - lastTransitionTime: "2025-06-24T05:23:08Z"
      message: Policy has been accepted.
      reason: Accepted
      status: "True"
      type: Accepted
    controllerName: gateway.envoyproxy.io/gatewayclass-controller
```


Discussion:

Solution patch:
diff --git a/api/v1alpha1/shared_types.go b/api/v1alpha1/shared_types.go
index 2318c4ad5..0924896bb 100644
--- a/api/v1alpha1/shared_types.go
+++ b/api/v1alpha1/shared_types.go
@@ -231,6 +231,7 @@ type KubernetesContainerSpec struct {
 	// Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
 	// This field is mutually exclusive with ImageRepository.
 	//
+	// +kubebuilder:validation:XValidation:rule="self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')",message="Image must include a tag and allowed characters only (e.g., 'repo:tag')."
 	// +optional
 	Image *string `json:"image,omitempty"`
 
@@ -238,6 +239,7 @@ type KubernetesContainerSpec struct {
 	// The default tag will be used.
 	// This field is mutually exclusive with Image.
 	//
+	// +kubebuilder:validation:XValidation:rule="self.matches('^[a-zA-Z0-9._/-]+$')",message="ImageRepository must contain only allowed characters and must not include a tag or any colons."
 	// +optional
 	ImageRepository *string `json:"imageRepository,omitempty"`
 
diff --git a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
index d6546ae3c..bfafe4985 100644
--- a/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-crds-helm/templates/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -608,12 +608,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
@@ -4445,12 +4453,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
diff --git a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
index a2bd3b2d2..b352b9e36 100644
--- a/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
+++ b/charts/gateway-helm/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml
@@ -607,12 +607,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
@@ -4444,12 +4452,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
diff --git a/internal/gatewayapi/backendtlspolicy.go b/internal/gatewayapi/backendtlspolicy.go
index 106648527..95cd795ed 100644
--- a/internal/gatewayapi/backendtlspolicy.go
+++ b/internal/gatewayapi/backendtlspolicy.go
@@ -151,7 +151,7 @@ func (t *Translator) processBackendTLSPolicy(
 		return nil, err
 	}
 
-	status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+	status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 	return tlsBundle, nil
 }
 
diff --git a/internal/gatewayapi/backendtrafficpolicy.go b/internal/gatewayapi/backendtrafficpolicy.go
index 4dd9743ec..9d7dd3361 100644
--- a/internal/gatewayapi/backendtrafficpolicy.go
+++ b/internal/gatewayapi/backendtrafficpolicy.go
@@ -226,7 +226,7 @@ func (t *Translator) ProcessBackendTrafficPolicies(resources *resource.Resources
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 			}
 		}
 	}
@@ -280,7 +280,7 @@ func (t *Translator) ProcessBackendTrafficPolicies(resources *resource.Resources
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 
 				// Check if this policy is overridden by other policies targeting at
 				// route level
diff --git a/internal/gatewayapi/clienttrafficpolicy.go b/internal/gatewayapi/clienttrafficpolicy.go
index 54421eb75..9db58a47f 100644
--- a/internal/gatewayapi/clienttrafficpolicy.go
+++ b/internal/gatewayapi/clienttrafficpolicy.go
@@ -159,7 +159,7 @@ func (t *Translator) ProcessClientTrafficPolicies(
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 			}
 		}
 	}
@@ -277,7 +277,7 @@ func (t *Translator) ProcessClientTrafficPolicies(
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 			}
 		}
 	}
diff --git a/internal/gatewayapi/envoyextensionpolicy.go b/internal/gatewayapi/envoyextensionpolicy.go
index dcfcab30d..de83c0d69 100644
--- a/internal/gatewayapi/envoyextensionpolicy.go
+++ b/internal/gatewayapi/envoyextensionpolicy.go
@@ -143,7 +143,7 @@ func (t *Translator) ProcessEnvoyExtensionPolicies(envoyExtensionPolicies []*egv
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 			}
 		}
 	}
@@ -197,7 +197,7 @@ func (t *Translator) ProcessEnvoyExtensionPolicies(envoyExtensionPolicies []*egv
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 
 				// Check if this policy is overridden by other policies targeting at
 				// route level
diff --git a/internal/gatewayapi/envoypatchpolicy.go b/internal/gatewayapi/envoypatchpolicy.go
index 599108012..e39205dac 100644
--- a/internal/gatewayapi/envoypatchpolicy.go
+++ b/internal/gatewayapi/envoypatchpolicy.go
@@ -123,6 +123,6 @@ func (t *Translator) ProcessEnvoyPatchPolicies(envoyPatchPolicies []*egv1a1.Envo
 		}
 
 		// Set Accepted=True
-		status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName)
+		status.SetAcceptedForPolicyAncestors(&policy.Status, ancestorRefs, t.GatewayControllerName, policy.Generation)
 	}
 }
diff --git a/internal/gatewayapi/extensionserverpolicy.go b/internal/gatewayapi/extensionserverpolicy.go
index e7f65f57a..b08630804 100644
--- a/internal/gatewayapi/extensionserverpolicy.go
+++ b/internal/gatewayapi/extensionserverpolicy.go
@@ -84,7 +84,7 @@ func (t *Translator) ProcessExtensionServerPolicies(policies []unstructured.Unst
 				ancestorRefs := []gwapiv1a2.ParentReference{
 					getAncestorRefForPolicy(gatewayNN, currTarget.SectionName),
 				}
-				status.SetAcceptedForPolicyAncestors(&policyStatus, ancestorRefs, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policyStatus, ancestorRefs, t.GatewayControllerName, policy.GetGeneration())
 				accepted = true
 			}
 		}
diff --git a/internal/gatewayapi/securitypolicy.go b/internal/gatewayapi/securitypolicy.go
index 5272d0c33..8f4c4c161 100644
--- a/internal/gatewayapi/securitypolicy.go
+++ b/internal/gatewayapi/securitypolicy.go
@@ -184,7 +184,7 @@ func (t *Translator) ProcessSecurityPolicies(securityPolicies []*egv1a1.Security
 				}
 
 				// Set Accepted condition if it is unset
-				status.SetAcceptedForPolicyAncestors(&policy.Status, parentGateways, t.GatewayControllerName)
+				status.SetAcceptedForPolicyAncestors(&policy.Status, parentGateways, t.GatewayControllerName, policy.Generation)
 			}
 		}
 	}
@@ -279,7 +279,7 @@ func (t *Translator) processSecurityPolicyForGateway(
 	}
 
 	// Set Accepted condition if it is unset
-	status.SetAcceptedForPolicyAncestors(&policy.Status, parentGateways, t.GatewayControllerName)
+	status.SetAcceptedForPolicyAncestors(&policy.Status, parentGateways, t.GatewayControllerName, policy.Generation)
 
 	// Check if this policy is overridden by other policies targeting at route and listener levels
 	overriddenTargetsMessage := getOverriddenTargetsMessage(
diff --git a/internal/gatewayapi/status/policy.go b/internal/gatewayapi/status/policy.go
index 23c6b5ad7..70e319e68 100644
--- a/internal/gatewayapi/status/policy.go
+++ b/internal/gatewayapi/status/policy.go
@@ -35,13 +35,13 @@ func SetTranslationErrorForPolicyAncestors(policyStatus *gwapiv1a2.PolicyStatus,
 }
 
 // SetAcceptedForPolicyAncestors sets accepted conditions for each ancestor reference if it is unset.
-func SetAcceptedForPolicyAncestors(policyStatus *gwapiv1a2.PolicyStatus, ancestorRefs []gwapiv1a2.ParentReference, controllerName string) {
+func SetAcceptedForPolicyAncestors(policyStatus *gwapiv1a2.PolicyStatus, ancestorRefs []gwapiv1a2.ParentReference, controllerName string, generation int64) {
 	for _, ancestorRef := range ancestorRefs {
-		setAcceptedForPolicyAncestor(policyStatus, ancestorRef, controllerName)
+		setAcceptedForPolicyAncestor(policyStatus, ancestorRef, controllerName, generation)
 	}
 }
 
-func setAcceptedForPolicyAncestor(policyStatus *gwapiv1a2.PolicyStatus, ancestorRef gwapiv1a2.ParentReference, controllerName string) {
+func setAcceptedForPolicyAncestor(policyStatus *gwapiv1a2.PolicyStatus, ancestorRef gwapiv1a2.ParentReference, controllerName string, generation int64) {
 	// Return early if Accepted condition is already set for specific ancestor.
 	for _, ancestor := range policyStatus.Ancestors {
 		if string(ancestor.ControllerName) == controllerName && cmp.Equal(ancestor.AncestorRef, ancestorRef) {
@@ -55,7 +55,7 @@ func setAcceptedForPolicyAncestor(policyStatus *gwapiv1a2.PolicyStatus, ancestor
 
 	message := "Policy has been accepted."
 	SetConditionForPolicyAncestor(policyStatus, ancestorRef, controllerName,
-		gwapiv1a2.PolicyConditionAccepted, metav1.ConditionTrue, gwapiv1a2.PolicyReasonAccepted, message, 0)
+		gwapiv1a2.PolicyConditionAccepted, metav1.ConditionTrue, gwapiv1a2.PolicyReasonAccepted, message, generation)
 }
 
 func SetConditionForPolicyAncestors(policyStatus *gwapiv1a2.PolicyStatus, ancestorRefs []gwapiv1a2.ParentReference, controllerName string,
diff --git a/site/.gitignore b/site/.gitignore
index 40b67f41a..8e87a0799 100644
--- a/site/.gitignore
+++ b/site/.gitignore
@@ -2,4 +2,5 @@
 resources/
 node_modules/
 package-lock.json
-.hugo_build.lock
\ No newline at end of file
+.hugo_build.lock
+dist/
diff --git a/site/assets/scss/_styles_project.scss b/site/assets/scss/_styles_project.scss
index 3b9578044..f2765281f 100644
--- a/site/assets/scss/_styles_project.scss
+++ b/site/assets/scss/_styles_project.scss
@@ -1,3 +1,8 @@
+// Import Bootstrap variables and mixins
+@import "../../node_modules/bootstrap/scss/functions";
+@import "../../node_modules/bootstrap/scss/variables";
+@import "../../node_modules/bootstrap/scss/mixins";
+
 // Custom theme colors and variables
 $primary: #9333EA;
 $secondary: #4F46E5;
diff --git a/site/content/en/tools/benchmark-report-explorer/index.md b/site/content/en/tools/benchmark-report-explorer/index.md
new file mode 100644
index 000000000..e250d8d75
--- /dev/null
+++ b/site/content/en/tools/benchmark-report-explorer/index.md
@@ -0,0 +1,48 @@
+---
+title: "Performance Benchmark Report Explorer"
+description: "Envoy Gateway Performance Benchmark Report Explorer Tool"
+type: "tools"
+includeBenchmark: true
+---
+
+<style>
+  .bt-container {
+    max-width: 1200px;
+    margin: 0 auto;
+    padding: 2rem;
+    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+  }
+
+  .bt-title {
+    font-size: 3.5rem;
+    font-weight: 800;
+    margin-bottom: 2.5rem;
+    background: linear-gradient(135deg, #9333EA 0%, #4F46E5 100%);
+    -webkit-background-clip: text;
+    background-clip: text;
+    -webkit-text-fill-color: transparent;
+    line-height: 1.4;
+    letter-spacing: -0.02em;
+  }
+
+  .bt-description {
+    font-size: 1.25rem;
+    color: #666;
+    margin-bottom: 2rem;
+    line-height: 1.6;
+  }
+</style>
+
+<div class="bt-container">
+  <h1 class="bt-title">Performance Benchmark Report Explorer</h1>
+  <p class="bt-description">
+    Explore benchmark results from Envoy Gateway Releleases. The test code is open source and available for you to run and contribute to.
+  </p>
+  <p class="bt-description">Curious to learn more? Join the conversation in <code>#gateway-users</code> channel in <a href="https://communityinviter.com/apps/envoyproxy/envoy">Envoy Slack</a></p>
+
+  {{< benchmark-dashboard
+    version="latest"
+    showHeader="false"
+    class="mt-4"
+  >}}
+</div>
diff --git a/site/layouts/partials/navbar.html b/site/layouts/partials/navbar.html
index 3db868922..4060ba40c 100644
--- a/site/layouts/partials/navbar.html
+++ b/site/layouts/partials/navbar.html
@@ -1,5 +1,5 @@
 {{ $cover := .HasShortcode "blocks/cover" }}
-<nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar">
+<nav class="js-navbar-scroll navbar navbar-expand-lg navbar-light td-navbar">
   <a class="navbar-brand" href="{{ .Site.Home.RelPermalink }}">
     {{ $logoRegular := resources.Get "icons/logo.svg" }}
     {{ $logoWhite := resources.Get "icons/logo-white.svg" }}
diff --git a/site/layouts/shortcodes/benchmark-dashboard.html b/site/layouts/shortcodes/benchmark-dashboard.html
new file mode 100644
index 000000000..023b320f9
--- /dev/null
+++ b/site/layouts/shortcodes/benchmark-dashboard.html
@@ -0,0 +1,36 @@
+<!-- layouts/shortcodes/benchmark-dashboard.html -->
+{{- $apiBase := .Get "apiBase" | default site.Params.benchmark.apiBase -}}
+{{- $version := .Get "version" | default "latest" -}}
+{{- $theme := .Get "theme" | default "light" -}}
+{{- $showHeader := .Get "showHeader" | default "false" -}}
+{{- $showVersionSelector := .Get "showVersionSelector" | default "true" -}}
+{{- $showSummaryCards := .Get "showSummaryCards" | default "true" -}}
+{{- $tabs := .Get "tabs" | default "overview,latency,resources" -}}
+{{- $containerClass := .Get "class" | default "my-8" -}}
+
+<!-- Always load CSS to make it available for Shadow DOM -->
+<link rel="stylesheet" href="{{ "/css/benchmark-dashboard.css" | relURL }}">
+
+<div
+  data-react-component="benchmark-dashboard"
+  data-api-base="{{ $apiBase }}"
+  data-version="{{ $version }}"
+  data-theme="{{ $theme }}"
+  data-show-header="{{ $showHeader }}"
+  data-show-version-selector="{{ $showVersionSelector }}"
+  data-show-summary-cards="{{ $showSummaryCards }}"
+  data-tabs="{{ $tabs }}"
+  data-container-class="{{ $containerClass }}"
+  class="benchmark-dashboard-container {{ $containerClass }}"
+>
+  <!-- Loading placeholder -->
+  <div class="flex items-center justify-center py-12">
+    <div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mr-3"></div>
+    <span class="text-gray-600">Loading Benchmark Dashboard...</span>
+  </div>
+</div>
+
+<!-- Only load JS if not on a standalone page (which loads shadow DOM version via body-end.html) -->
+{{ if not .Page.Params.includeBenchmark }}
+<script type="module" src="{{ "/js/benchmark-dashboard.js" | relURL }}"></script>
+{{ end }}
diff --git a/site/layouts/tools/single.html b/site/layouts/tools/single.html
new file mode 100644
index 000000000..a9f8b88b1
--- /dev/null
+++ b/site/layouts/tools/single.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="{{ .Site.Language.Lang }}" class="no-js">
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+  <meta http-equiv="x-ua-compatible" content="ie=edge">
+
+  {{/* SEO meta tags */}}
+  <title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
+  <meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ if .IsPage }}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
+
+  {{/* Open Graph meta tags */}}
+  <meta property="og:title" content="{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }}{{ end }}">
+  <meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{ if .IsPage }}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
+  <meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
+  <meta property="og:url" content="{{ .Permalink }}">
+
+  {{/* Bootstrap CSS from CDN for reliable styling */}}
+  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
+  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
+
+  {{/* Custom project styles */}}
+  {{ $projectStyles := resources.Get "scss/_styles_project.scss" | css.Sass }}
+  <link rel="stylesheet" href="{{ $projectStyles.RelPermalink }}">
+
+
+</head>
+<body class="td-{{ .Kind }}">
+  <!-- Include site navbar -->
+  {{ partial "navbar.html" . }}
+
+  <div class="tool-container">
+    <main role="main" class="tool-content">
+      {{ block "main" . }}
+        {{ .Content }}
+      {{ end }}
+    </main>
+  </div>
+
+  <!-- Include site footer -->
+  {{ partial "footer.html" . }}
+
+  {{/* Bootstrap JS from CDN */}}
+  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
+
+  <!-- Include any additional JavaScript needed for the Tools -->
+  {{ if .Params.includeBenchmark }}
+    <script type="module" src="{{ "/js/benchmark-dashboard.js" | relURL }}"></script>
+  {{ end }}
+</body>
+</html>
diff --git a/site/static/css/benchmark-dashboard.css b/site/static/css/benchmark-dashboard.css
new file mode 100644
index 000000000..f86edaacb
--- /dev/null
+++ b/site/static/css/benchmark-dashboard.css
@@ -0,0 +1,3856 @@
+*, ::before, ::after {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-gradient-from-position:  ;
+  --tw-gradient-via-position:  ;
+  --tw-gradient-to-position:  ;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+  --tw-contain-size:  ;
+  --tw-contain-layout:  ;
+  --tw-contain-paint:  ;
+  --tw-contain-style:  ;
+}
+
+::backdrop {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-gradient-from-position:  ;
+  --tw-gradient-via-position:  ;
+  --tw-gradient-to-position:  ;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+  --tw-contain-size:  ;
+  --tw-contain-layout:  ;
+  --tw-contain-paint:  ;
+  --tw-contain-style:  ;
+}
+
+:root {
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 84% 4.9%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+  --sidebar-background: 0 0% 98%;
+  --sidebar-foreground: 240 5.3% 26.1%;
+  --sidebar-primary: 240 5.9% 10%;
+  --sidebar-primary-foreground: 0 0% 98%;
+  --sidebar-accent: 240 4.8% 95.9%;
+  --sidebar-accent-foreground: 240 5.9% 10%;
+  --sidebar-border: 220 13% 91%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+body {
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 84% 4.9%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+  --sidebar-background: 0 0% 98%;
+  --sidebar-foreground: 240 5.3% 26.1%;
+  --sidebar-primary: 240 5.9% 10%;
+  --sidebar-primary-foreground: 0 0% 98%;
+  --sidebar-accent: 240 4.8% 95.9%;
+  --sidebar-accent-foreground: 240 5.9% 10%;
+  --sidebar-border: 220 13% 91%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+.dark, body.dark {
+  --background: 222.2 84% 4.9%;
+  --foreground: 210 40% 98%;
+  --card: 222.2 84% 4.9%;
+  --card-foreground: 210 40% 98%;
+  --popover: 222.2 84% 4.9%;
+  --popover-foreground: 210 40% 98%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 217.2 32.6% 17.5%;
+  --secondary-foreground: 210 40% 98%;
+  --muted: 217.2 32.6% 17.5%;
+  --muted-foreground: 215 20.2% 65.1%;
+  --accent: 217.2 32.6% 17.5%;
+  --accent-foreground: 210 40% 98%;
+  --destructive: 0 62.8% 30.6%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 217.2 32.6% 17.5%;
+  --input: 217.2 32.6% 17.5%;
+  --ring: 212.7 26.8% 83.9%;
+  --sidebar-background: 240 5.9% 10%;
+  --sidebar-foreground: 240 4.8% 95.9%;
+  --sidebar-primary: 224.3 76.3% 48%;
+  --sidebar-primary-foreground: 0 0% 100%;
+  --sidebar-accent: 240 3.7% 15.9%;
+  --sidebar-accent-foreground: 240 4.8% 95.9%;
+  --sidebar-border: 240 3.7% 15.9%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+* {
+  border-color: hsl(var(--border));
+}
+
+body {
+  background-color: hsl(var(--background));
+  color: hsl(var(--foreground));
+}
+
+.container {
+  width: 100%;
+  margin-right: auto;
+  margin-left: auto;
+  padding-right: 2rem;
+  padding-left: 2rem;
+}
+
+@media (min-width: 1400px) {
+  .container {
+    max-width: 1400px;
+  }
+}
+
+/* Radix popper content wrapper styling - these elements are rendered via React portals */
+
+[data-radix-popper-content-wrapper] {
+  /* Ensure high z-index for proper layering */
+  z-index: 9999 !important;
+  /* Apply CSS variables that should be inherited from the document */
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --border: 214.3 31.8% 91.4%;
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+}
+
+/* Dark mode support for portals */
+
+.dark [data-radix-popper-content-wrapper],
+  body.dark [data-radix-popper-content-wrapper] {
+  --popover: 222.2 84% 4.9%;
+  --popover-foreground: 210 40% 98%;
+  --border: 217.2 32.6% 17.5%;
+  --background: 222.2 84% 4.9%;
+  --foreground: 210 40% 98%;
+  --muted: 217.2 32.6% 17.5%;
+  --muted-foreground: 215 20.2% 65.1%;
+  --accent: 217.2 32.6% 17.5%;
+  --accent-foreground: 210 40% 98%;
+  --destructive: 0 62.8% 30.6%;
+  --destructive-foreground: 210 40% 98%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 217.2 32.6% 17.5%;
+  --secondary-foreground: 210 40% 98%;
+  --ring: 212.7 26.8% 83.9%;
+}
+
+/* Ensure portal content gets proper styling */
+
+[data-radix-popper-content-wrapper] .bg-popover {
+  background-color: hsl(var(--popover)) !important;
+}
+
+[data-radix-popper-content-wrapper] .text-popover-foreground {
+  color: hsl(var(--popover-foreground)) !important;
+}
+
+[data-radix-popper-content-wrapper] .border {
+  border-color: hsl(var(--border)) !important;
+}
+
+[data-radix-popper-content-wrapper] .shadow-md {
+  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+}
+
+[data-radix-popper-content-wrapper] .rounded-md {
+  border-radius: calc(var(--radius) - 2px) !important;
+}
+
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0;
+}
+
+.not-sr-only {
+  position: static;
+  width: auto;
+  height: auto;
+  padding: 0;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+  white-space: normal;
+}
+
+.pointer-events-none {
+  pointer-events: none;
+}
+
+.pointer-events-auto {
+  pointer-events: auto;
+}
+
+.visible {
+  visibility: visible;
+}
+
+.invisible {
+  visibility: hidden;
+}
+
+.static {
+  position: static;
+}
+
+.fixed {
+  position: fixed;
+}
+
+.absolute {
+  position: absolute;
+}
+
+.relative {
+  position: relative;
+}
+
+.sticky {
+  position: sticky;
+}
+
+.inset-0 {
+  inset: 0px;
+}
+
+.inset-x-0 {
+  left: 0px;
+  right: 0px;
+}
+
+.inset-y-0 {
+  top: 0px;
+  bottom: 0px;
+}
+
+.-bottom-12 {
+  bottom: -3rem;
+}
+
+.-left-12 {
+  left: -3rem;
+}
+
+.-right-12 {
+  right: -3rem;
+}
+
+.-top-12 {
+  top: -3rem;
+}
+
+.bottom-0 {
+  bottom: 0px;
+}
+
+.bottom-8 {
+  bottom: 2rem;
+}
+
+.left-0 {
+  left: 0px;
+}
+
+.left-1 {
+  left: 0.25rem;
+}
+
+.left-1\/2 {
+  left: 50%;
+}
+
+.left-2 {
+  left: 0.5rem;
+}
+
+.left-4 {
+  left: 1rem;
+}
+
+.left-\[50\%\] {
+  left: 50%;
+}
+
+.right-0 {
+  right: 0px;
+}
+
+.right-1 {
+  right: 0.25rem;
+}
+
+.right-2 {
+  right: 0.5rem;
+}
+
+.right-3 {
+  right: 0.75rem;
+}
+
+.right-4 {
+  right: 1rem;
+}
+
+.top-0 {
+  top: 0px;
+}
+
+.top-1\.5 {
+  top: 0.375rem;
+}
+
+.top-1\/2 {
+  top: 50%;
+}
+
+.top-2 {
+  top: 0.5rem;
+}
+
+.top-3\.5 {
+  top: 0.875rem;
+}
+
+.top-4 {
+  top: 1rem;
+}
+
+.top-\[1px\] {
+  top: 1px;
+}
+
+.top-\[50\%\] {
+  top: 50%;
+}
+
+.top-\[60\%\] {
+  top: 60%;
+}
+
+.top-full {
+  top: 100%;
+}
+
+.z-10 {
+  z-index: 10;
+}
+
+.z-20 {
+  z-index: 20;
+}
+
+.z-50 {
+  z-index: 50;
+}
+
+.z-\[100\] {
+  z-index: 100;
+}
+
+.z-\[1\] {
+  z-index: 1;
+}
+
+.m-0 {
+  margin: 0px;
+}
+
+.m-1 {
+  margin: 0.25rem;
+}
+
+.m-2 {
+  margin: 0.5rem;
+}
+
+.m-4 {
+  margin: 1rem;
+}
+
+.m-6 {
+  margin: 1.5rem;
+}
+
+.m-8 {
+  margin: 2rem;
+}
+
+.-mx-1 {
+  margin-left: -0.25rem;
+  margin-right: -0.25rem;
+}
+
+.mx-2 {
+  margin-left: 0.5rem;
+  margin-right: 0.5rem;
+}
+
+.mx-3\.5 {
+  margin-left: 0.875rem;
+  margin-right: 0.875rem;
+}
+
+.mx-auto {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.my-0\.5 {
+  margin-top: 0.125rem;
+  margin-bottom: 0.125rem;
+}
+
+.my-1 {
+  margin-top: 0.25rem;
+  margin-bottom: 0.25rem;
+}
+
+.-ml-4 {
+  margin-left: -1rem;
+}
+
+.-mt-4 {
+  margin-top: -1rem;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem;
+}
+
+.mb-10 {
+  margin-bottom: 2.5rem;
+}
+
+.mb-12 {
+  margin-bottom: 3rem;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem;
+}
+
+.mb-3 {
+  margin-bottom: 0.75rem;
+}
+
+.mb-4 {
+  margin-bottom: 1rem;
+}
+
+.mb-5 {
+  margin-bottom: 1.25rem;
+}
+
+.mb-6 {
+  margin-bottom: 1.5rem;
+}
+
+.mb-8 {
+  margin-bottom: 2rem;
+}
+
+.ml-1 {
+  margin-left: 0.25rem;
+}
+
+.ml-3 {
+  margin-left: 0.75rem;
+}
+
+.ml-auto {
+  margin-left: auto;
+}
+
+.mr-2 {
+  margin-right: 0.5rem;
+}
+
+.mr-3 {
+  margin-right: 0.75rem;
+}
+
+.mr-4 {
+  margin-right: 1rem;
+}
+
+.mt-1 {
+  margin-top: 0.25rem;
+}
+
+.mt-1\.5 {
+  margin-top: 0.375rem;
+}
+
+.mt-2 {
+  margin-top: 0.5rem;
+}
+
+.mt-24 {
+  margin-top: 6rem;
+}
+
+.mt-4 {
+  margin-top: 1rem;
+}
+
+.mt-5 {
+  margin-top: 1.25rem;
+}
+
+.mt-auto {
+  margin-top: auto;
+}
+
+.block {
+  display: block;
+}
+
+.inline-block {
+  display: inline-block;
+}
+
+.inline {
+  display: inline;
+}
+
+.flex {
+  display: flex;
+}
+
+.inline-flex {
+  display: inline-flex;
+}
+
+.table {
+  display: table;
+}
+
+.grid {
+  display: grid;
+}
+
+.hidden {
+  display: none;
+}
+
+.aspect-square {
+  aspect-ratio: 1 / 1;
+}
+
+.aspect-video {
+  aspect-ratio: 16 / 9;
+}
+
+.size-4 {
+  width: 1rem;
+  height: 1rem;
+}
+
+.h-1\.5 {
+  height: 0.375rem;
+}
+
+.h-10 {
+  height: 2.5rem;
+}
+
+.h-11 {
+  height: 2.75rem;
+}
+
+.h-12 {
+  height: 3rem;
+}
+
+.h-2 {
+  height: 0.5rem;
+}
+
+.h-2\.5 {
+  height: 0.625rem;
+}
+
+.h-3 {
+  height: 0.75rem;
+}
+
+.h-3\.5 {
+  height: 0.875rem;
+}
+
+.h-4 {
+  height: 1rem;
+}
+
+.h-5 {
+  height: 1.25rem;
+}
+
+.h-6 {
+  height: 1.5rem;
+}
+
+.h-7 {
+  height: 1.75rem;
+}
+
+.h-8 {
+  height: 2rem;
+}
+
+.h-9 {
+  height: 2.25rem;
+}
+
+.h-\[1px\] {
+  height: 1px;
+}
+
+.h-\[var\(--radix-navigation-menu-viewport-height\)\] {
+  height: var(--radix-navigation-menu-viewport-height);
+}
+
+.h-\[var\(--radix-select-trigger-height\)\] {
+  height: var(--radix-select-trigger-height);
+}
+
+.h-auto {
+  height: auto;
+}
+
+.h-full {
+  height: 100%;
+}
+
+.h-px {
+  height: 1px;
+}
+
+.h-svh {
+  height: 100svh;
+}
+
+.max-h-96 {
+  max-height: 24rem;
+}
+
+.max-h-\[300px\] {
+  max-height: 300px;
+}
+
+.max-h-screen {
+  max-height: 100vh;
+}
+
+.min-h-0 {
+  min-height: 0px;
+}
+
+.min-h-\[400px\] {
+  min-height: 400px;
+}
+
+.min-h-\[80px\] {
+  min-height: 80px;
+}
+
+.min-h-full {
+  min-height: 100%;
+}
+
+.min-h-svh {
+  min-height: 100svh;
+}
+
+.w-0 {
+  width: 0px;
+}
+
+.w-1 {
+  width: 0.25rem;
+}
+
+.w-10 {
+  width: 2.5rem;
+}
+
+.w-11 {
+  width: 2.75rem;
+}
+
+.w-12 {
+  width: 3rem;
+}
+
+.w-2 {
+  width: 0.5rem;
+}
+
+.w-2\.5 {
+  width: 0.625rem;
+}
+
+.w-3 {
+  width: 0.75rem;
+}
+
+.w-3\.5 {
+  width: 0.875rem;
+}
+
+.w-3\/4 {
+  width: 75%;
+}
+
+.w-32 {
+  width: 8rem;
+}
+
+.w-4 {
+  width: 1rem;
+}
+
+.w-5 {
+  width: 1.25rem;
+}
+
+.w-6 {
+  width: 1.5rem;
+}
+
+.w-64 {
+  width: 16rem;
+}
+
+.w-7 {
+  width: 1.75rem;
+}
+
+.w-72 {
+  width: 18rem;
+}
+
+.w-8 {
+  width: 2rem;
+}
+
+.w-9 {
+  width: 2.25rem;
+}
+
+.w-\[--sidebar-width\] {
+  width: var(--sidebar-width);
+}
+
+.w-\[100px\] {
+  width: 100px;
+}
+
+.w-\[1px\] {
+  width: 1px;
+}
+
+.w-auto {
+  width: auto;
+}
+
+.w-full {
+  width: 100%;
+}
+
+.w-max {
+  width: -moz-max-content;
+  width: max-content;
+}
+
+.w-px {
+  width: 1px;
+}
+
+.min-w-0 {
+  min-width: 0px;
+}
+
+.min-w-5 {
+  min-width: 1.25rem;
+}
+
+.min-w-\[12rem\] {
+  min-width: 12rem;
+}
+
+.min-w-\[8rem\] {
+  min-width: 8rem;
+}
+
+.min-w-\[var\(--radix-select-trigger-width\)\] {
+  min-width: var(--radix-select-trigger-width);
+}
+
+.max-w-4xl {
+  max-width: 56rem;
+}
+
+.max-w-7xl {
+  max-width: 80rem;
+}
+
+.max-w-\[--skeleton-width\] {
+  max-width: var(--skeleton-width);
+}
+
+.max-w-lg {
+  max-width: 32rem;
+}
+
+.max-w-max {
+  max-width: -moz-max-content;
+  max-width: max-content;
+}
+
+.max-w-none {
+  max-width: none;
+}
+
+.max-w-sm {
+  max-width: 24rem;
+}
+
+.max-w-xs {
+  max-width: 20rem;
+}
+
+.flex-1 {
+  flex: 1 1 0%;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0;
+}
+
+.shrink-0 {
+  flex-shrink: 0;
+}
+
+.flex-grow {
+  flex-grow: 1;
+}
+
+.grow {
+  flex-grow: 1;
+}
+
+.grow-0 {
+  flex-grow: 0;
+}
+
+.basis-full {
+  flex-basis: 100%;
+}
+
+.caption-bottom {
+  caption-side: bottom;
+}
+
+.border-collapse {
+  border-collapse: collapse;
+}
+
+.-translate-x-1\/2 {
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-px {
+  --tw-translate-x: -1px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\/2 {
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-\[-50\%\] {
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-px {
+  --tw-translate-x: 1px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-\[-50\%\] {
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-45 {
+  --tw-rotate: 45deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-90 {
+  --tw-rotate: 90deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.transform {
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes pulse {
+  50% {
+    opacity: .5;
+  }
+}
+
+.animate-pulse {
+  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+
+@keyframes spin {
+  to {
+    transform: rotate(360deg);
+  }
+}
+
+.animate-spin {
+  animation: spin 1s linear infinite;
+}
+
+.cursor-default {
+  cursor: default;
+}
+
+.cursor-pointer {
+  cursor: pointer;
+}
+
+.touch-none {
+  touch-action: none;
+}
+
+.select-none {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+}
+
+.list-none {
+  list-style-type: none;
+}
+
+.grid-cols-1 {
+  grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+
+.grid-cols-2 {
+  grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+.grid-cols-3 {
+  grid-template-columns: repeat(3, minmax(0, 1fr));
+}
+
+.flex-row {
+  flex-direction: row;
+}
+
+.flex-col {
+  flex-direction: column;
+}
+
+.flex-col-reverse {
+  flex-direction: column-reverse;
+}
+
+.flex-wrap {
+  flex-wrap: wrap;
+}
+
+.items-start {
+  align-items: flex-start;
+}
+
+.items-end {
+  align-items: flex-end;
+}
+
+.items-center {
+  align-items: center;
+}
+
+.items-stretch {
+  align-items: stretch;
+}
+
+.justify-start {
+  justify-content: flex-start;
+}
+
+.justify-center {
+  justify-content: center;
+}
+
+.justify-between {
+  justify-content: space-between;
+}
+
+.gap-1 {
+  gap: 0.25rem;
+}
+
+.gap-1\.5 {
+  gap: 0.375rem;
+}
+
+.gap-2 {
+  gap: 0.5rem;
+}
+
+.gap-3 {
+  gap: 0.75rem;
+}
+
+.gap-4 {
+  gap: 1rem;
+}
+
+.gap-6 {
+  gap: 1.5rem;
+}
+
+.space-x-1 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.25rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-3 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-4 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(1rem * var(--tw-space-x-reverse));
+  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-y-0 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-1 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1\.5 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
+
+.overflow-auto {
+  overflow: auto;
+}
+
+.overflow-hidden {
+  overflow: hidden;
+}
+
+.overflow-x-auto {
+  overflow-x: auto;
+}
+
+.overflow-y-auto {
+  overflow-y: auto;
+}
+
+.overflow-x-hidden {
+  overflow-x: hidden;
+}
+
+.truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.whitespace-nowrap {
+  white-space: nowrap;
+}
+
+.whitespace-pre-wrap {
+  white-space: pre-wrap;
+}
+
+.break-words {
+  overflow-wrap: break-word;
+}
+
+.rounded {
+  border-radius: 0.25rem;
+}
+
+.rounded-2xl {
+  border-radius: 1rem;
+}
+
+.rounded-\[2px\] {
+  border-radius: 2px;
+}
+
+.rounded-\[inherit\] {
+  border-radius: inherit;
+}
+
+.rounded-full {
+  border-radius: 9999px;
+}
+
+.rounded-lg {
+  border-radius: var(--radius);
+}
+
+.rounded-md {
+  border-radius: calc(var(--radius) - 2px);
+}
+
+.rounded-none {
+  border-radius: 0px;
+}
+
+.rounded-sm {
+  border-radius: calc(var(--radius) - 4px);
+}
+
+.rounded-xl {
+  border-radius: 0.75rem;
+}
+
+.rounded-t-\[10px\] {
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+}
+
+.rounded-t-lg {
+  border-top-left-radius: var(--radius);
+  border-top-right-radius: var(--radius);
+}
+
+.rounded-tl-sm {
+  border-top-left-radius: calc(var(--radius) - 4px);
+}
+
+.border {
+  border-width: 1px;
+}
+
+.border-2 {
+  border-width: 2px;
+}
+
+.border-\[1\.5px\] {
+  border-width: 1.5px;
+}
+
+.border-y {
+  border-top-width: 1px;
+  border-bottom-width: 1px;
+}
+
+.border-b {
+  border-bottom-width: 1px;
+}
+
+.border-b-2 {
+  border-bottom-width: 2px;
+}
+
+.border-l {
+  border-left-width: 1px;
+}
+
+.border-r {
+  border-right-width: 1px;
+}
+
+.border-t {
+  border-top-width: 1px;
+}
+
+.border-dashed {
+  border-style: dashed;
+}
+
+.border-\[--color-border\] {
+  border-color: var(--color-border);
+}
+
+.border-blue-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));
+}
+
+.border-blue-600 {
+  --tw-border-opacity: 1;
+  border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));
+}
+
+.border-border\/50 {
+  border-color: hsl(var(--border) / 0.5);
+}
+
+.border-destructive {
+  border-color: hsl(var(--destructive));
+}
+
+.border-destructive\/50 {
+  border-color: hsl(var(--destructive) / 0.5);
+}
+
+.border-gray-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-200\/30 {
+  border-color: rgb(229 231 235 / 0.3);
+}
+
+.border-gray-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-700 {
+  --tw-border-opacity: 1;
+  border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
+}
+
+.border-input {
+  border-color: hsl(var(--input));
+}
+
+.border-primary {
+  border-color: hsl(var(--primary));
+}
+
+.border-purple-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));
+}
+
+.border-purple-600 {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 51 234 / var(--tw-border-opacity, 1));
+}
+
+.border-red-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));
+}
+
+.border-red-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));
+}
+
+.border-sidebar-border {
+  border-color: hsl(var(--sidebar-border));
+}
+
+.border-transparent {
+  border-color: transparent;
+}
+
+.border-l-transparent {
+  border-left-color: transparent;
+}
+
+.border-t-transparent {
+  border-top-color: transparent;
+}
+
+.bg-\[--color-bg\] {
+  background-color: var(--color-bg);
+}
+
+.bg-accent {
+  background-color: hsl(var(--accent));
+}
+
+.bg-background {
+  background-color: hsl(var(--background));
+}
+
+.bg-black\/80 {
+  background-color: rgb(0 0 0 / 0.8);
+}
+
+.bg-blue-50\/50 {
+  background-color: rgb(239 246 255 / 0.5);
+}
+
+.bg-blue-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
+}
+
+.bg-border {
+  background-color: hsl(var(--border));
+}
+
+.bg-card {
+  background-color: hsl(var(--card));
+}
+
+.bg-destructive {
+  background-color: hsl(var(--destructive));
+}
+
+.bg-foreground {
+  background-color: hsl(var(--foreground));
+}
+
+.bg-gray-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-700 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-800 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.bg-indigo-600\/40 {
+  background-color: rgb(79 70 229 / 0.4);
+}
+
+.bg-muted {
+  background-color: hsl(var(--muted));
+}
+
+.bg-muted\/30 {
+  background-color: hsl(var(--muted) / 0.3);
+}
+
+.bg-muted\/50 {
+  background-color: hsl(var(--muted) / 0.5);
+}
+
+.bg-popover {
+  background-color: hsl(var(--popover));
+}
+
+.bg-primary {
+  background-color: hsl(var(--primary));
+}
+
+.bg-red-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
+}
+
+.bg-red-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
+}
+
+.bg-secondary {
+  background-color: hsl(var(--secondary));
+}
+
+.bg-sidebar {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.bg-sidebar-border {
+  background-color: hsl(var(--sidebar-border));
+}
+
+.bg-transparent {
+  background-color: transparent;
+}
+
+.bg-white {
+  --tw-bg-opacity: 1;
+  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gradient-to-r {
+  background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.from-blue-50 {
+  --tw-gradient-from: #eff6ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-blue-50\/50 {
+  --tw-gradient-from: rgb(239 246 255 / 0.5) var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-indigo-100 {
+  --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-100 {
+  --tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-50\/50 {
+  --tw-gradient-from: rgb(250 245 255 / 0.5) var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-600 {
+  --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.to-blue-100 {
+  --tw-gradient-to: #dbeafe var(--tw-gradient-to-position);
+}
+
+.to-indigo-100 {
+  --tw-gradient-to: #e0e7ff var(--tw-gradient-to-position);
+}
+
+.to-indigo-50 {
+  --tw-gradient-to: #eef2ff var(--tw-gradient-to-position);
+}
+
+.to-indigo-50\/50 {
+  --tw-gradient-to: rgb(238 242 255 / 0.5) var(--tw-gradient-to-position);
+}
+
+.to-indigo-600 {
+  --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position);
+}
+
+.fill-current {
+  fill: currentColor;
+}
+
+.p-0 {
+  padding: 0px;
+}
+
+.p-1 {
+  padding: 0.25rem;
+}
+
+.p-2 {
+  padding: 0.5rem;
+}
+
+.p-3 {
+  padding: 0.75rem;
+}
+
+.p-4 {
+  padding: 1rem;
+}
+
+.p-5 {
+  padding: 1.25rem;
+}
+
+.p-6 {
+  padding: 1.5rem;
+}
+
+.p-8 {
+  padding: 2rem;
+}
+
+.p-\[1px\] {
+  padding: 1px;
+}
+
+.px-1 {
+  padding-left: 0.25rem;
+  padding-right: 0.25rem;
+}
+
+.px-2 {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.px-2\.5 {
+  padding-left: 0.625rem;
+  padding-right: 0.625rem;
+}
+
+.px-3 {
+  padding-left: 0.75rem;
+  padding-right: 0.75rem;
+}
+
+.px-4 {
+  padding-left: 1rem;
+  padding-right: 1rem;
+}
+
+.px-5 {
+  padding-left: 1.25rem;
+  padding-right: 1.25rem;
+}
+
+.px-6 {
+  padding-left: 1.5rem;
+  padding-right: 1.5rem;
+}
+
+.px-8 {
+  padding-left: 2rem;
+  padding-right: 2rem;
+}
+
+.py-0\.5 {
+  padding-top: 0.125rem;
+  padding-bottom: 0.125rem;
+}
+
+.py-1 {
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+}
+
+.py-1\.5 {
+  padding-top: 0.375rem;
+  padding-bottom: 0.375rem;
+}
+
+.py-12 {
+  padding-top: 3rem;
+  padding-bottom: 3rem;
+}
+
+.py-2 {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
+
+.py-3 {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.py-4 {
+  padding-top: 1rem;
+  padding-bottom: 1rem;
+}
+
+.py-6 {
+  padding-top: 1.5rem;
+  padding-bottom: 1.5rem;
+}
+
+.py-8 {
+  padding-top: 2rem;
+  padding-bottom: 2rem;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem;
+}
+
+.pb-3 {
+  padding-bottom: 0.75rem;
+}
+
+.pb-4 {
+  padding-bottom: 1rem;
+}
+
+.pb-6 {
+  padding-bottom: 1.5rem;
+}
+
+.pl-2\.5 {
+  padding-left: 0.625rem;
+}
+
+.pl-4 {
+  padding-left: 1rem;
+}
+
+.pl-8 {
+  padding-left: 2rem;
+}
+
+.pr-2 {
+  padding-right: 0.5rem;
+}
+
+.pr-2\.5 {
+  padding-right: 0.625rem;
+}
+
+.pr-8 {
+  padding-right: 2rem;
+}
+
+.pt-0 {
+  padding-top: 0px;
+}
+
+.pt-1 {
+  padding-top: 0.25rem;
+}
+
+.pt-3 {
+  padding-top: 0.75rem;
+}
+
+.pt-4 {
+  padding-top: 1rem;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.align-middle {
+  vertical-align: middle;
+}
+
+.font-mono {
+  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+}
+
+.text-2xl {
+  font-size: 1.5rem;
+  line-height: 2rem;
+}
+
+.text-3xl {
+  font-size: 1.875rem;
+  line-height: 2.25rem;
+}
+
+.text-\[0\.8rem\] {
+  font-size: 0.8rem;
+}
+
+.text-base {
+  font-size: 1rem;
+  line-height: 1.5rem;
+}
+
+.text-lg {
+  font-size: 1.125rem;
+  line-height: 1.75rem;
+}
+
+.text-sm {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.text-xl {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+}
+
+.text-xs {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.font-bold {
+  font-weight: 700;
+}
+
+.font-medium {
+  font-weight: 500;
+}
+
+.font-normal {
+  font-weight: 400;
+}
+
+.font-semibold {
+  font-weight: 600;
+}
+
+.capitalize {
+  text-transform: capitalize;
+}
+
+.tabular-nums {
+  --tw-numeric-spacing: tabular-nums;
+  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.leading-none {
+  line-height: 1;
+}
+
+.leading-relaxed {
+  line-height: 1.625;
+}
+
+.tracking-tight {
+  letter-spacing: -0.025em;
+}
+
+.tracking-widest {
+  letter-spacing: 0.1em;
+}
+
+.text-accent-foreground {
+  color: hsl(var(--accent-foreground));
+}
+
+.text-blue-600 {
+  --tw-text-opacity: 1;
+  color: rgb(37 99 235 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-700 {
+  --tw-text-opacity: 1;
+  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-800 {
+  --tw-text-opacity: 1;
+  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
+}
+
+.text-card-foreground {
+  color: hsl(var(--card-foreground));
+}
+
+.text-current {
+  color: currentColor;
+}
+
+.text-destructive {
+  color: hsl(var(--destructive));
+}
+
+.text-destructive-foreground {
+  color: hsl(var(--destructive-foreground));
+}
+
+.text-foreground {
+  color: hsl(var(--foreground));
+}
+
+.text-foreground\/50 {
+  color: hsl(var(--foreground) / 0.5);
+}
+
+.text-gray-300 {
+  --tw-text-opacity: 1;
+  color: rgb(209 213 219 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-400 {
+  --tw-text-opacity: 1;
+  color: rgb(156 163 175 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-500 {
+  --tw-text-opacity: 1;
+  color: rgb(107 114 128 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-600 {
+  --tw-text-opacity: 1;
+  color: rgb(75 85 99 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-700 {
+  --tw-text-opacity: 1;
+  color: rgb(55 65 81 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-800 {
+  --tw-text-opacity: 1;
+  color: rgb(31 41 55 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-900 {
+  --tw-text-opacity: 1;
+  color: rgb(17 24 39 / var(--tw-text-opacity, 1));
+}
+
+.text-green-600 {
+  --tw-text-opacity: 1;
+  color: rgb(22 163 74 / var(--tw-text-opacity, 1));
+}
+
+.text-green-700 {
+  --tw-text-opacity: 1;
+  color: rgb(21 128 61 / var(--tw-text-opacity, 1));
+}
+
+.text-indigo-600 {
+  --tw-text-opacity: 1;
+  color: rgb(79 70 229 / var(--tw-text-opacity, 1));
+}
+
+.text-muted-foreground {
+  color: hsl(var(--muted-foreground));
+}
+
+.text-popover-foreground {
+  color: hsl(var(--popover-foreground));
+}
+
+.text-primary {
+  color: hsl(var(--primary));
+}
+
+.text-primary-foreground {
+  color: hsl(var(--primary-foreground));
+}
+
+.text-purple-100 {
+  --tw-text-opacity: 1;
+  color: rgb(243 232 255 / var(--tw-text-opacity, 1));
+}
+
+.text-purple-600 {
+  --tw-text-opacity: 1;
+  color: rgb(147 51 234 / var(--tw-text-opacity, 1));
+}
+
+.text-red-500 {
+  --tw-text-opacity: 1;
+  color: rgb(239 68 68 / var(--tw-text-opacity, 1));
+}
+
+.text-red-600 {
+  --tw-text-opacity: 1;
+  color: rgb(220 38 38 / var(--tw-text-opacity, 1));
+}
+
+.text-red-700 {
+  --tw-text-opacity: 1;
+  color: rgb(185 28 28 / var(--tw-text-opacity, 1));
+}
+
+.text-red-800 {
+  --tw-text-opacity: 1;
+  color: rgb(153 27 27 / var(--tw-text-opacity, 1));
+}
+
+.text-secondary-foreground {
+  color: hsl(var(--secondary-foreground));
+}
+
+.text-sidebar-foreground {
+  color: hsl(var(--sidebar-foreground));
+}
+
+.text-sidebar-foreground\/70 {
+  color: hsl(var(--sidebar-foreground) / 0.7);
+}
+
+.text-white {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.underline-offset-4 {
+  text-underline-offset: 4px;
+}
+
+.antialiased {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.opacity-0 {
+  opacity: 0;
+}
+
+.opacity-50 {
+  opacity: 0.5;
+}
+
+.opacity-60 {
+  opacity: 0.6;
+}
+
+.opacity-70 {
+  opacity: 0.7;
+}
+
+.opacity-90 {
+  opacity: 0.9;
+}
+
+.shadow {
+  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\] {
+  --tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));
+  --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-md {
+  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-none {
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-sm {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-xl {
+  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.outline-none {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.outline {
+  outline-style: solid;
+}
+
+.ring-0 {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-2 {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-ring {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.ring-sidebar-ring {
+  --tw-ring-color: hsl(var(--sidebar-ring));
+}
+
+.ring-offset-background {
+  --tw-ring-offset-color: hsl(var(--background));
+}
+
+.grayscale {
+  --tw-grayscale: grayscale(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);
+}
+
+.filter {
+  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.transition {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\[left\2c right\2c width\] {
+  transition-property: left,right,width;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\[margin\2c opa\] {
+  transition-property: margin,opa;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\[width\2c height\2c padding\] {
+  transition-property: width,height,padding;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\[width\] {
+  transition-property: width;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-all {
+  transition-property: all;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-colors {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-opacity {
+  transition-property: opacity;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-shadow {
+  transition-property: box-shadow;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-transform {
+  transition-property: transform;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.duration-1000 {
+  transition-duration: 1000ms;
+}
+
+.duration-200 {
+  transition-duration: 200ms;
+}
+
+.ease-in-out {
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.ease-linear {
+  transition-timing-function: linear;
+}
+
+@keyframes enter {
+  from {
+    opacity: var(--tw-enter-opacity, 1);
+    transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));
+  }
+}
+
+@keyframes exit {
+  to {
+    opacity: var(--tw-exit-opacity, 1);
+    transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));
+  }
+}
+
+.animate-in {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.fade-in-0 {
+  --tw-enter-opacity: 0;
+}
+
+.fade-in-80 {
+  --tw-enter-opacity: 0.8;
+}
+
+.zoom-in-95 {
+  --tw-enter-scale: .95;
+}
+
+.duration-1000 {
+  animation-duration: 1000ms;
+}
+
+.duration-200 {
+  animation-duration: 200ms;
+}
+
+.ease-in-out {
+  animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.ease-linear {
+  animation-timing-function: linear;
+}
+
+/* Definition of the design system. All colors, gradients, fonts, etc should be defined here. */
+
+/* Global styles for Radix UI portals rendered outside Shadow DOM */
+
+[data-radix-popper-content-wrapper] .hover\:shadow-md:hover {
+  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+}
+
+[data-radix-popper-content-wrapper] .group[data-variant="floating"] .group-data-\[variant\=floating\]\:border {
+  border-color: hsl(var(--border)) !important;
+}
+
+.file\:border-0::file-selector-button {
+  border-width: 0px;
+}
+
+.file\:bg-transparent::file-selector-button {
+  background-color: transparent;
+}
+
+.file\:text-sm::file-selector-button {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.file\:font-medium::file-selector-button {
+  font-weight: 500;
+}
+
+.file\:text-foreground::file-selector-button {
+  color: hsl(var(--foreground));
+}
+
+.placeholder\:text-muted-foreground::-moz-placeholder {
+  color: hsl(var(--muted-foreground));
+}
+
+.placeholder\:text-muted-foreground::placeholder {
+  color: hsl(var(--muted-foreground));
+}
+
+.after\:absolute::after {
+  content: var(--tw-content);
+  position: absolute;
+}
+
+.after\:-inset-2::after {
+  content: var(--tw-content);
+  inset: -0.5rem;
+}
+
+.after\:inset-y-0::after {
+  content: var(--tw-content);
+  top: 0px;
+  bottom: 0px;
+}
+
+.after\:left-1\/2::after {
+  content: var(--tw-content);
+  left: 50%;
+}
+
+.after\:w-1::after {
+  content: var(--tw-content);
+  width: 0.25rem;
+}
+
+.after\:w-\[2px\]::after {
+  content: var(--tw-content);
+  width: 2px;
+}
+
+.after\:-translate-x-1\/2::after {
+  content: var(--tw-content);
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.first\:rounded-l-md:first-child {
+  border-top-left-radius: calc(var(--radius) - 2px);
+  border-bottom-left-radius: calc(var(--radius) - 2px);
+}
+
+.first\:border-l:first-child {
+  border-left-width: 1px;
+}
+
+.last\:rounded-r-md:last-child {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.focus-within\:relative:focus-within {
+  position: relative;
+}
+
+.focus-within\:z-20:focus-within {
+  z-index: 20;
+}
+
+.hover\:bg-accent:hover {
+  background-color: hsl(var(--accent));
+}
+
+.hover\:bg-blue-700:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
+}
+
+.hover\:bg-destructive\/80:hover {
+  background-color: hsl(var(--destructive) / 0.8);
+}
+
+.hover\:bg-destructive\/90:hover {
+  background-color: hsl(var(--destructive) / 0.9);
+}
+
+.hover\:bg-gray-50:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
+}
+
+.hover\:bg-gray-700:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+.hover\:bg-muted:hover {
+  background-color: hsl(var(--muted));
+}
+
+.hover\:bg-muted\/50:hover {
+  background-color: hsl(var(--muted) / 0.5);
+}
+
+.hover\:bg-primary:hover {
+  background-color: hsl(var(--primary));
+}
+
+.hover\:bg-primary\/80:hover {
+  background-color: hsl(var(--primary) / 0.8);
+}
+
+.hover\:bg-primary\/90:hover {
+  background-color: hsl(var(--primary) / 0.9);
+}
+
+.hover\:bg-red-100:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
+}
+
+.hover\:bg-secondary:hover {
+  background-color: hsl(var(--secondary));
+}
+
+.hover\:bg-secondary\/80:hover {
+  background-color: hsl(var(--secondary) / 0.8);
+}
+
+.hover\:bg-sidebar-accent:hover {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.hover\:text-accent-foreground:hover {
+  color: hsl(var(--accent-foreground));
+}
+
+.hover\:text-blue-800:hover {
+  --tw-text-opacity: 1;
+  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
+}
+
+.hover\:text-foreground:hover {
+  color: hsl(var(--foreground));
+}
+
+.hover\:text-muted-foreground:hover {
+  color: hsl(var(--muted-foreground));
+}
+
+.hover\:text-primary-foreground:hover {
+  color: hsl(var(--primary-foreground));
+}
+
+.hover\:text-sidebar-accent-foreground:hover {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.hover\:underline:hover {
+  text-decoration-line: underline;
+}
+
+.hover\:opacity-100:hover {
+  opacity: 1;
+}
+
+.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover {
+  --tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));
+  --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\:shadow-md:hover {
+  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\:shadow-sm:hover {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\:after\:bg-sidebar-border:hover::after {
+  content: var(--tw-content);
+  background-color: hsl(var(--sidebar-border));
+}
+
+.focus\:bg-accent:focus {
+  background-color: hsl(var(--accent));
+}
+
+.focus\:bg-primary:focus {
+  background-color: hsl(var(--primary));
+}
+
+.focus\:text-accent-foreground:focus {
+  color: hsl(var(--accent-foreground));
+}
+
+.focus\:text-primary-foreground:focus {
+  color: hsl(var(--primary-foreground));
+}
+
+.focus\:opacity-100:focus {
+  opacity: 1;
+}
+
+.focus\:outline-none:focus {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.focus\:ring-2:focus {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus\:ring-ring:focus {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.focus\:ring-offset-2:focus {
+  --tw-ring-offset-width: 2px;
+}
+
+.focus-visible\:outline-none:focus-visible {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.focus-visible\:ring-1:focus-visible {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus-visible\:ring-2:focus-visible {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus-visible\:ring-ring:focus-visible {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.focus-visible\:ring-sidebar-ring:focus-visible {
+  --tw-ring-color: hsl(var(--sidebar-ring));
+}
+
+.focus-visible\:ring-offset-1:focus-visible {
+  --tw-ring-offset-width: 1px;
+}
+
+.focus-visible\:ring-offset-2:focus-visible {
+  --tw-ring-offset-width: 2px;
+}
+
+.focus-visible\:ring-offset-background:focus-visible {
+  --tw-ring-offset-color: hsl(var(--background));
+}
+
+.active\:bg-sidebar-accent:active {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.active\:text-sidebar-accent-foreground:active {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.disabled\:pointer-events-none:disabled {
+  pointer-events: none;
+}
+
+.disabled\:cursor-not-allowed:disabled {
+  cursor: not-allowed;
+}
+
+.disabled\:opacity-50:disabled {
+  opacity: 0.5;
+}
+
+.group\/menu-item:focus-within .group-focus-within\/menu-item\:opacity-100 {
+  opacity: 1;
+}
+
+.group\/menu-item:hover .group-hover\/menu-item\:opacity-100 {
+  opacity: 1;
+}
+
+.group:hover .group-hover\:opacity-100 {
+  opacity: 1;
+}
+
+.group.destructive .group-\[\.destructive\]\:border-muted\/40 {
+  border-color: hsl(var(--muted) / 0.4);
+}
+
+.group.toaster .group-\[\.toaster\]\:border-border {
+  border-color: hsl(var(--border));
+}
+
+.group.toast .group-\[\.toast\]\:bg-muted {
+  background-color: hsl(var(--muted));
+}
+
+.group.toast .group-\[\.toast\]\:bg-primary {
+  background-color: hsl(var(--primary));
+}
+
+.group.toaster .group-\[\.toaster\]\:bg-background {
+  background-color: hsl(var(--background));
+}
+
+.group.destructive .group-\[\.destructive\]\:text-red-300 {
+  --tw-text-opacity: 1;
+  color: rgb(252 165 165 / var(--tw-text-opacity, 1));
+}
+
+.group.toast .group-\[\.toast\]\:text-muted-foreground {
+  color: hsl(var(--muted-foreground));
+}
+
+.group.toast .group-\[\.toast\]\:text-primary-foreground {
+  color: hsl(var(--primary-foreground));
+}
+
+.group.toaster .group-\[\.toaster\]\:text-foreground {
+  color: hsl(var(--foreground));
+}
+
+.group.toaster .group-\[\.toaster\]\:shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover {
+  border-color: hsl(var(--destructive) / 0.3);
+}
+
+.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover {
+  background-color: hsl(var(--destructive));
+}
+
+.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover {
+  color: hsl(var(--destructive-foreground));
+}
+
+.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover {
+  --tw-text-opacity: 1;
+  color: rgb(254 242 242 / var(--tw-text-opacity, 1));
+}
+
+.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus {
+  --tw-ring-color: hsl(var(--destructive));
+}
+
+.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus {
+  --tw-ring-opacity: 1;
+  --tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1));
+}
+
+.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus {
+  --tw-ring-offset-color: #dc2626;
+}
+
+.peer\/menu-button:hover ~ .peer-hover\/menu-button\:text-sidebar-accent-foreground {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.peer:disabled ~ .peer-disabled\:cursor-not-allowed {
+  cursor: not-allowed;
+}
+
+.peer:disabled ~ .peer-disabled\:opacity-70 {
+  opacity: 0.7;
+}
+
+.has-\[\[data-variant\=inset\]\]\:bg-sidebar:has([data-variant=inset]) {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.has-\[\:disabled\]\:opacity-50:has(:disabled) {
+  opacity: 0.5;
+}
+
+.group\/menu-item:has([data-sidebar=menu-action]) .group-has-\[\[data-sidebar\=menu-action\]\]\/menu-item\:pr-8 {
+  padding-right: 2rem;
+}
+
+.aria-disabled\:pointer-events-none[aria-disabled="true"] {
+  pointer-events: none;
+}
+
+.aria-disabled\:opacity-50[aria-disabled="true"] {
+  opacity: 0.5;
+}
+
+.aria-selected\:bg-accent[aria-selected="true"] {
+  background-color: hsl(var(--accent));
+}
+
+.aria-selected\:bg-accent\/50[aria-selected="true"] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.aria-selected\:text-accent-foreground[aria-selected="true"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.aria-selected\:text-muted-foreground[aria-selected="true"] {
+  color: hsl(var(--muted-foreground));
+}
+
+.aria-selected\:opacity-100[aria-selected="true"] {
+  opacity: 1;
+}
+
+.aria-selected\:opacity-30[aria-selected="true"] {
+  opacity: 0.3;
+}
+
+.data-\[disabled\=true\]\:pointer-events-none[data-disabled="true"] {
+  pointer-events: none;
+}
+
+.data-\[disabled\]\:pointer-events-none[data-disabled] {
+  pointer-events: none;
+}
+
+.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction="vertical"] {
+  height: 1px;
+}
+
+.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction="vertical"] {
+  width: 100%;
+}
+
+.data-\[side\=bottom\]\:translate-y-1[data-side="bottom"] {
+  --tw-translate-y: 0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[side\=left\]\:-translate-x-1[data-side="left"] {
+  --tw-translate-x: -0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[side\=right\]\:translate-x-1[data-side="right"] {
+  --tw-translate-x: 0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[side\=top\]\:-translate-y-1[data-side="top"] {
+  --tw-translate-y: -0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[state\=checked\]\:translate-x-5[data-state="checked"] {
+  --tw-translate-x: 1.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[state\=unchecked\]\:translate-x-0[data-state="unchecked"] {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[swipe\=cancel\]\:translate-x-0[data-swipe="cancel"] {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe="end"] {
+  --tw-translate-x: var(--radix-toast-swipe-end-x);
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe="move"] {
+  --tw-translate-x: var(--radix-toast-swipe-move-x);
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes accordion-up {
+  from {
+    height: var(--radix-accordion-content-height);
+  }
+
+  to {
+    height: 0;
+  }
+}
+
+.data-\[state\=closed\]\:animate-accordion-up[data-state="closed"] {
+  animation: accordion-up 0.2s ease-out;
+}
+
+@keyframes accordion-down {
+  from {
+    height: 0;
+  }
+
+  to {
+    height: var(--radix-accordion-content-height);
+  }
+}
+
+.data-\[state\=open\]\:animate-accordion-down[data-state="open"] {
+  animation: accordion-down 0.2s ease-out;
+}
+
+.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction="vertical"] {
+  flex-direction: column;
+}
+
+.data-\[state\=active\]\:border-b-2[data-state="active"] {
+  border-bottom-width: 2px;
+}
+
+.data-\[state\=active\]\:border-purple-600[data-state="active"] {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 51 234 / var(--tw-border-opacity, 1));
+}
+
+.data-\[active\=true\]\:bg-sidebar-accent[data-active="true"] {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.data-\[active\]\:bg-accent\/50[data-active] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.data-\[selected\=\'true\'\]\:bg-accent[data-selected='true'] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\[state\=active\]\:bg-background[data-state="active"] {
+  background-color: hsl(var(--background));
+}
+
+.data-\[state\=checked\]\:bg-primary[data-state="checked"] {
+  background-color: hsl(var(--primary));
+}
+
+.data-\[state\=on\]\:bg-accent[data-state="on"] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\[state\=open\]\:bg-accent[data-state="open"] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\[state\=open\]\:bg-accent\/50[data-state="open"] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.data-\[state\=open\]\:bg-secondary[data-state="open"] {
+  background-color: hsl(var(--secondary));
+}
+
+.data-\[state\=selected\]\:bg-muted[data-state="selected"] {
+  background-color: hsl(var(--muted));
+}
+
+.data-\[state\=unchecked\]\:bg-input[data-state="unchecked"] {
+  background-color: hsl(var(--input));
+}
+
+.data-\[state\=active\]\:bg-gradient-to-r[data-state="active"] {
+  background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.data-\[state\=active\]\:from-purple-600[data-state="active"] {
+  --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.data-\[state\=active\]\:to-indigo-600[data-state="active"] {
+  --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position);
+}
+
+.data-\[active\=true\]\:font-medium[data-active="true"] {
+  font-weight: 500;
+}
+
+.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active="true"] {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.data-\[selected\=true\]\:text-accent-foreground[data-selected="true"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\[state\=active\]\:text-foreground[data-state="active"] {
+  color: hsl(var(--foreground));
+}
+
+.data-\[state\=active\]\:text-white[data-state="active"] {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.data-\[state\=checked\]\:text-primary-foreground[data-state="checked"] {
+  color: hsl(var(--primary-foreground));
+}
+
+.data-\[state\=on\]\:text-accent-foreground[data-state="on"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\[state\=open\]\:text-accent-foreground[data-state="open"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\[state\=open\]\:text-muted-foreground[data-state="open"] {
+  color: hsl(var(--muted-foreground));
+}
+
+.data-\[disabled\=true\]\:opacity-50[data-disabled="true"] {
+  opacity: 0.5;
+}
+
+.data-\[disabled\]\:opacity-50[data-disabled] {
+  opacity: 0.5;
+}
+
+.data-\[state\=open\]\:opacity-100[data-state="open"] {
+  opacity: 1;
+}
+
+.data-\[state\=active\]\:shadow-lg[data-state="active"] {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.data-\[state\=active\]\:shadow-sm[data-state="active"] {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.data-\[swipe\=move\]\:transition-none[data-swipe="move"] {
+  transition-property: none;
+}
+
+.data-\[state\=closed\]\:duration-300[data-state="closed"] {
+  transition-duration: 300ms;
+}
+
+.data-\[state\=open\]\:duration-500[data-state="open"] {
+  transition-duration: 500ms;
+}
+
+.data-\[motion\^\=from-\]\:animate-in[data-motion^="from-"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\[state\=open\]\:animate-in[data-state="open"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\[state\=visible\]\:animate-in[data-state="visible"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\[motion\^\=to-\]\:animate-out[data-motion^="to-"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\[state\=closed\]\:animate-out[data-state="closed"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\[state\=hidden\]\:animate-out[data-state="hidden"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\[swipe\=end\]\:animate-out[data-swipe="end"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\[motion\^\=from-\]\:fade-in[data-motion^="from-"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\[motion\^\=to-\]\:fade-out[data-motion^="to-"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\[state\=closed\]\:fade-out-0[data-state="closed"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\[state\=closed\]\:fade-out-80[data-state="closed"] {
+  --tw-exit-opacity: 0.8;
+}
+
+.data-\[state\=hidden\]\:fade-out[data-state="hidden"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\[state\=open\]\:fade-in-0[data-state="open"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\[state\=visible\]\:fade-in[data-state="visible"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\[state\=closed\]\:zoom-out-95[data-state="closed"] {
+  --tw-exit-scale: .95;
+}
+
+.data-\[state\=open\]\:zoom-in-90[data-state="open"] {
+  --tw-enter-scale: .9;
+}
+
+.data-\[state\=open\]\:zoom-in-95[data-state="open"] {
+  --tw-enter-scale: .95;
+}
+
+.data-\[motion\=from-end\]\:slide-in-from-right-52[data-motion="from-end"] {
+  --tw-enter-translate-x: 13rem;
+}
+
+.data-\[motion\=from-start\]\:slide-in-from-left-52[data-motion="from-start"] {
+  --tw-enter-translate-x: -13rem;
+}
+
+.data-\[motion\=to-end\]\:slide-out-to-right-52[data-motion="to-end"] {
+  --tw-exit-translate-x: 13rem;
+}
+
+.data-\[motion\=to-start\]\:slide-out-to-left-52[data-motion="to-start"] {
+  --tw-exit-translate-x: -13rem;
+}
+
+.data-\[side\=bottom\]\:slide-in-from-top-2[data-side="bottom"] {
+  --tw-enter-translate-y: -0.5rem;
+}
+
+.data-\[side\=left\]\:slide-in-from-right-2[data-side="left"] {
+  --tw-enter-translate-x: 0.5rem;
+}
+
+.data-\[side\=right\]\:slide-in-from-left-2[data-side="right"] {
+  --tw-enter-translate-x: -0.5rem;
+}
+
+.data-\[side\=top\]\:slide-in-from-bottom-2[data-side="top"] {
+  --tw-enter-translate-y: 0.5rem;
+}
+
+.data-\[state\=closed\]\:slide-out-to-bottom[data-state="closed"] {
+  --tw-exit-translate-y: 100%;
+}
+
+.data-\[state\=closed\]\:slide-out-to-left[data-state="closed"] {
+  --tw-exit-translate-x: -100%;
+}
+
+.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state="closed"] {
+  --tw-exit-translate-x: -50%;
+}
+
+.data-\[state\=closed\]\:slide-out-to-right[data-state="closed"] {
+  --tw-exit-translate-x: 100%;
+}
+
+.data-\[state\=closed\]\:slide-out-to-right-full[data-state="closed"] {
+  --tw-exit-translate-x: 100%;
+}
+
+.data-\[state\=closed\]\:slide-out-to-top[data-state="closed"] {
+  --tw-exit-translate-y: -100%;
+}
+
+.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state="closed"] {
+  --tw-exit-translate-y: -48%;
+}
+
+.data-\[state\=open\]\:slide-in-from-bottom[data-state="open"] {
+  --tw-enter-translate-y: 100%;
+}
+
+.data-\[state\=open\]\:slide-in-from-left[data-state="open"] {
+  --tw-enter-translate-x: -100%;
+}
+
+.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state="open"] {
+  --tw-enter-translate-x: -50%;
+}
+
+.data-\[state\=open\]\:slide-in-from-right[data-state="open"] {
+  --tw-enter-translate-x: 100%;
+}
+
+.data-\[state\=open\]\:slide-in-from-top[data-state="open"] {
+  --tw-enter-translate-y: -100%;
+}
+
+.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state="open"] {
+  --tw-enter-translate-y: -48%;
+}
+
+.data-\[state\=open\]\:slide-in-from-top-full[data-state="open"] {
+  --tw-enter-translate-y: -100%;
+}
+
+.data-\[state\=closed\]\:duration-300[data-state="closed"] {
+  animation-duration: 300ms;
+}
+
+.data-\[state\=open\]\:duration-500[data-state="open"] {
+  animation-duration: 500ms;
+}
+
+.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  left: 0px;
+}
+
+.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  height: 0.25rem;
+}
+
+.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  width: 100%;
+}
+
+.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\[state\=open\]\:hover\:bg-sidebar-accent:hover[data-state="open"] {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground:hover[data-state="open"] {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\] {
+  left: calc(var(--sidebar-width) * -1);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\] {
+  right: calc(var(--sidebar-width) * -1);
+}
+
+.group[data-side="left"] .group-data-\[side\=left\]\:-right-4 {
+  right: -1rem;
+}
+
+.group[data-side="right"] .group-data-\[side\=right\]\:left-0 {
+  left: 0px;
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:-mt-8 {
+  margin-top: -2rem;
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:hidden {
+  display: none;
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:\!size-8 {
+  width: 2rem !important;
+  height: 2rem !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:w-\[--sidebar-width-icon\] {
+  width: var(--sidebar-width-icon);
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)\)\] {
+  width: calc(var(--sidebar-width-icon) + 1rem);
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)_\+_theme\(spacing\.4\)_\+2px\)\] {
+  width: calc(var(--sidebar-width-icon) + 1rem + 2px);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:w-0 {
+  width: 0px;
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:translate-x-0 {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-side="right"] .group-data-\[side\=right\]\:rotate-180 {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-state="open"] .group-data-\[state\=open\]\:rotate-180 {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:overflow-hidden {
+  overflow: hidden;
+}
+
+.group[data-variant="floating"] .group-data-\[variant\=floating\]\:rounded-lg {
+  border-radius: var(--radius);
+}
+
+.group[data-variant="floating"] .group-data-\[variant\=floating\]\:border {
+  border-width: 1px;
+}
+
+.group[data-side="left"] .group-data-\[side\=left\]\:border-r {
+  border-right-width: 1px;
+}
+
+.group[data-side="right"] .group-data-\[side\=right\]\:border-l {
+  border-left-width: 1px;
+}
+
+.group[data-variant="floating"] .group-data-\[variant\=floating\]\:border-sidebar-border {
+  border-color: hsl(var(--sidebar-border));
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:\!p-0 {
+  padding: 0px !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:\!p-2 {
+  padding: 0.5rem !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\[collapsible\=icon\]\:opacity-0 {
+  opacity: 0;
+}
+
+.group[data-variant="floating"] .group-data-\[variant\=floating\]\:shadow {
+  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:after\:left-full::after {
+  content: var(--tw-content);
+  left: 100%;
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:hover {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.peer\/menu-button[data-size="default"] ~ .peer-data-\[size\=default\]\/menu-button\:top-1\.5 {
+  top: 0.375rem;
+}
+
+.peer\/menu-button[data-size="lg"] ~ .peer-data-\[size\=lg\]\/menu-button\:top-2\.5 {
+  top: 0.625rem;
+}
+
+.peer\/menu-button[data-size="sm"] ~ .peer-data-\[size\=sm\]\/menu-button\:top-1 {
+  top: 0.25rem;
+}
+
+.peer[data-variant="inset"] ~ .peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\] {
+  min-height: calc(100svh - 1rem);
+}
+
+.peer\/menu-button[data-active="true"] ~ .peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.dark\:border-destructive:is(.dark *) {
+  border-color: hsl(var(--destructive));
+}
+
+.dark\:border-gray-700:is(.dark *) {
+  --tw-border-opacity: 1;
+  border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
+}
+
+.dark\:bg-gray-800:is(.dark *) {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.dark\:text-gray-300:is(.dark *) {
+  --tw-text-opacity: 1;
+  color: rgb(209 213 219 / var(--tw-text-opacity, 1));
+}
+
+.dark\:hover\:bg-gray-700:hover:is(.dark *) {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+@media (min-width: 640px) {
+  .sm\:bottom-0 {
+    bottom: 0px;
+  }
+
+  .sm\:right-0 {
+    right: 0px;
+  }
+
+  .sm\:top-auto {
+    top: auto;
+  }
+
+  .sm\:mt-0 {
+    margin-top: 0px;
+  }
+
+  .sm\:inline {
+    display: inline;
+  }
+
+  .sm\:flex {
+    display: flex;
+  }
+
+  .sm\:max-w-sm {
+    max-width: 24rem;
+  }
+
+  .sm\:flex-row {
+    flex-direction: row;
+  }
+
+  .sm\:flex-col {
+    flex-direction: column;
+  }
+
+  .sm\:items-center {
+    align-items: center;
+  }
+
+  .sm\:justify-end {
+    justify-content: flex-end;
+  }
+
+  .sm\:gap-2\.5 {
+    gap: 0.625rem;
+  }
+
+  .sm\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+    margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(1rem * var(--tw-space-x-reverse));
+    margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\:space-y-0 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-y-reverse: 0;
+    margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+    margin-bottom: calc(0px * var(--tw-space-y-reverse));
+  }
+
+  .sm\:rounded-lg {
+    border-radius: var(--radius);
+  }
+
+  .sm\:px-6 {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+
+  .sm\:text-left {
+    text-align: left;
+  }
+
+  .sm\:text-base {
+    font-size: 1rem;
+    line-height: 1.5rem;
+  }
+
+  .data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state="open"] {
+    --tw-enter-translate-y: 100%;
+  }
+}
+
+@media (min-width: 768px) {
+  .md\:absolute {
+    position: absolute;
+  }
+
+  .md\:block {
+    display: block;
+  }
+
+  .md\:flex {
+    display: flex;
+  }
+
+  .md\:w-\[var\(--radix-navigation-menu-viewport-width\)\] {
+    width: var(--radix-navigation-menu-viewport-width);
+  }
+
+  .md\:w-auto {
+    width: auto;
+  }
+
+  .md\:max-w-\[420px\] {
+    max-width: 420px;
+  }
+
+  .md\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .md\:grid-cols-4 {
+    grid-template-columns: repeat(4, minmax(0, 1fr));
+  }
+
+  .md\:text-sm {
+    font-size: 0.875rem;
+    line-height: 1.25rem;
+  }
+
+  .md\:opacity-0 {
+    opacity: 0;
+  }
+
+  .after\:md\:hidden::after {
+    content: var(--tw-content);
+    display: none;
+  }
+
+  .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:m-2 {
+    margin: 0.5rem;
+  }
+
+  .peer[data-state="collapsed"][data-variant="inset"] ~ .md\:peer-data-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2 {
+    margin-left: 0.5rem;
+  }
+
+  .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:ml-0 {
+    margin-left: 0px;
+  }
+
+  .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:rounded-xl {
+    border-radius: 0.75rem;
+  }
+
+  .peer[data-variant="inset"] ~ .md\:peer-data-\[variant\=inset\]\:shadow {
+    --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+    --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+  }
+}
+
+@media (min-width: 1024px) {
+  .lg\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .lg\:px-8 {
+    padding-left: 2rem;
+    padding-right: 2rem;
+  }
+}
+
+.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]) {
+  background-color: hsl(var(--accent));
+}
+
+.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:has([aria-selected]):first-child {
+  border-top-left-radius: calc(var(--radius) - 2px);
+  border-bottom-left-radius: calc(var(--radius) - 2px);
+}
+
+.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:has([aria-selected]):last-child {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.\[\&\:has\(\[aria-selected\]\.day-outside\)\]\:bg-accent\/50:has([aria-selected].day-outside) {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end) {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]) {
+  padding-right: 0px;
+}
+
+.\[\&\>button\]\:hidden>button {
+  display: none;
+}
+
+.\[\&\>span\:last-child\]\:truncate>span:last-child {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.\[\&\>span\]\:line-clamp-1>span {
+  overflow: hidden;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 1;
+}
+
+.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div {
+  --tw-translate-y: -3px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\[\&\>svg\]\:absolute>svg {
+  position: absolute;
+}
+
+.\[\&\>svg\]\:left-4>svg {
+  left: 1rem;
+}
+
+.\[\&\>svg\]\:top-4>svg {
+  top: 1rem;
+}
+
+.\[\&\>svg\]\:size-3\.5>svg {
+  width: 0.875rem;
+  height: 0.875rem;
+}
+
+.\[\&\>svg\]\:size-4>svg {
+  width: 1rem;
+  height: 1rem;
+}
+
+.\[\&\>svg\]\:h-2\.5>svg {
+  height: 0.625rem;
+}
+
+.\[\&\>svg\]\:h-3>svg {
+  height: 0.75rem;
+}
+
+.\[\&\>svg\]\:w-2\.5>svg {
+  width: 0.625rem;
+}
+
+.\[\&\>svg\]\:w-3>svg {
+  width: 0.75rem;
+}
+
+.\[\&\>svg\]\:shrink-0>svg {
+  flex-shrink: 0;
+}
+
+.\[\&\>svg\]\:text-destructive>svg {
+  color: hsl(var(--destructive));
+}
+
+.\[\&\>svg\]\:text-foreground>svg {
+  color: hsl(var(--foreground));
+}
+
+.\[\&\>svg\]\:text-muted-foreground>svg {
+  color: hsl(var(--muted-foreground));
+}
+
+.\[\&\>svg\]\:text-sidebar-accent-foreground>svg {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.\[\&\>svg\~\*\]\:pl-7>svg~* {
+  padding-left: 1.75rem;
+}
+
+.\[\&\>tr\]\:last\:border-b-0:last-child>tr {
+  border-bottom-width: 0px;
+}
+
+.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div {
+  --tw-rotate: 90deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\[\&_\.recharts-cartesian-axis-tick_text\]\:fill-muted-foreground .recharts-cartesian-axis-tick text {
+  fill: hsl(var(--muted-foreground));
+}
+
+.\[\&_\.recharts-cartesian-grid_line\[stroke\=\'\#ccc\'\]\]\:stroke-border\/50 .recharts-cartesian-grid line[stroke='#ccc'] {
+  stroke: hsl(var(--border) / 0.5);
+}
+
+.\[\&_\.recharts-curve\.recharts-tooltip-cursor\]\:stroke-border .recharts-curve.recharts-tooltip-cursor {
+  stroke: hsl(var(--border));
+}
+
+.\[\&_\.recharts-dot\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-dot[stroke='#fff'] {
+  stroke: transparent;
+}
+
+.\[\&_\.recharts-layer\]\:outline-none .recharts-layer {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\[\&_\.recharts-polar-grid_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-polar-grid [stroke='#ccc'] {
+  stroke: hsl(var(--border));
+}
+
+.\[\&_\.recharts-radial-bar-background-sector\]\:fill-muted .recharts-radial-bar-background-sector {
+  fill: hsl(var(--muted));
+}
+
+.\[\&_\.recharts-rectangle\.recharts-tooltip-cursor\]\:fill-muted .recharts-rectangle.recharts-tooltip-cursor {
+  fill: hsl(var(--muted));
+}
+
+.\[\&_\.recharts-reference-line_\[stroke\=\'\#ccc\'\]\]\:stroke-border .recharts-reference-line [stroke='#ccc'] {
+  stroke: hsl(var(--border));
+}
+
+.\[\&_\.recharts-sector\[stroke\=\'\#fff\'\]\]\:stroke-transparent .recharts-sector[stroke='#fff'] {
+  stroke: transparent;
+}
+
+.\[\&_\.recharts-sector\]\:outline-none .recharts-sector {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\[\&_\.recharts-surface\]\:outline-none .recharts-surface {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading] {
+  padding-top: 0.375rem;
+  padding-bottom: 0.375rem;
+}
+
+.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading] {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading] {
+  font-weight: 500;
+}
+
+.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading] {
+  color: hsl(var(--muted-foreground));
+}
+
+.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {
+  padding-top: 0px;
+}
+
+.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg {
+  height: 1.25rem;
+}
+
+.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg {
+  width: 1.25rem;
+}
+
+.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input] {
+  height: 3rem;
+}
+
+.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item] {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg {
+  height: 1.25rem;
+}
+
+.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg {
+  width: 1.25rem;
+}
+
+.\[\&_p\]\:leading-relaxed p {
+  line-height: 1.625;
+}
+
+.\[\&_svg\]\:pointer-events-none svg {
+  pointer-events: none;
+}
+
+.\[\&_svg\]\:size-4 svg {
+  width: 1rem;
+  height: 1rem;
+}
+
+.\[\&_svg\]\:shrink-0 svg {
+  flex-shrink: 0;
+}
+
+.\[\&_tr\:last-child\]\:border-0 tr:last-child {
+  border-width: 0px;
+}
+
+.\[\&_tr\]\:border-b tr {
+  border-bottom-width: 1px;
+}
+
+[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2 {
+  right: -0.5rem;
+}
+
+[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize {
+  cursor: e-resize;
+}
+
+[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize {
+  cursor: w-resize;
+}
+
+[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2 {
+  left: -0.5rem;
+}
+
+[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize {
+  cursor: w-resize;
+}
+
+[data-side=right] .\[\[data-side\=right\]_\&\]\:cursor-e-resize {
+  cursor: e-resize;
+}
diff --git a/site/static/js/benchmark-dashboard.js b/site/static/js/benchmark-dashboard.js
new file mode 100644
index 000000000..7e2f1804c
--- /dev/null
+++ b/site/static/js/benchmark-dashboard.js
@@ -0,0 +1,4428 @@
+var CO=Object.defineProperty;var c1=e=>{throw TypeError(e)};var EO=(e,t,n)=>t in e?CO(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var f1=(e,t,n)=>EO(e,typeof t!="symbol"?t+"":t,n),qd=(e,t,n)=>t.has(e)||c1("Cannot "+n);var B=(e,t,n)=>(qd(e,t,"read from private field"),n?n.call(e):t.get(e)),me=(e,t,n)=>t.has(e)?c1("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),ae=(e,t,n,r)=>(qd(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),wt=(e,t,n)=>(qd(e,t,"access private method"),n);var zu=(e,t,n,r)=>({set _(a){ae(e,t,a,n)},get _(){return B(e,t,r)}});function TO(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const a in r)if(a!=="default"&&!(a in e)){const o=Object.getOwnPropertyDescriptor(r,a);o&&Object.defineProperty(e,a,o.get?o:{enumerable:!0,get:()=>r[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var Bu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ce(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var r5={exports:{}},kp={},a5={exports:{}},ce={};/**
+ * @license React
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var ku=Symbol.for("react.element"),jO=Symbol.for("react.portal"),$O=Symbol.for("react.fragment"),NO=Symbol.for("react.strict_mode"),MO=Symbol.for("react.profiler"),RO=Symbol.for("react.provider"),IO=Symbol.for("react.context"),DO=Symbol.for("react.forward_ref"),LO=Symbol.for("react.suspense"),FO=Symbol.for("react.memo"),zO=Symbol.for("react.lazy"),p1=Symbol.iterator;function BO(e){return e===null||typeof e!="object"?null:(e=p1&&e[p1]||e["@@iterator"],typeof e=="function"?e:null)}var o5={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},i5=Object.assign,s5={};function ls(e,t,n){this.props=e,this.context=t,this.refs=s5,this.updater=n||o5}ls.prototype.isReactComponent={};ls.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};ls.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function l5(){}l5.prototype=ls.prototype;function By(e,t,n){this.props=e,this.context=t,this.refs=s5,this.updater=n||o5}var Hy=By.prototype=new l5;Hy.constructor=By;i5(Hy,ls.prototype);Hy.isPureReactComponent=!0;var d1=Array.isArray,u5=Object.prototype.hasOwnProperty,Gy={current:null},c5={key:!0,ref:!0,__self:!0,__source:!0};function f5(e,t,n){var r,a={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)u5.call(t,r)&&!c5.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(s===1)a.children=n;else if(1<s){for(var l=Array(s),u=0;u<s;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(r in s=e.defaultProps,s)a[r]===void 0&&(a[r]=s[r]);return{$$typeof:ku,type:e,key:o,ref:i,props:a,_owner:Gy.current}}function HO(e,t){return{$$typeof:ku,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Uy(e){return typeof e=="object"&&e!==null&&e.$$typeof===ku}function GO(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var m1=/\/+/g;function Vd(e,t){return typeof e=="object"&&e!==null&&e.key!=null?GO(""+e.key):t.toString(36)}function _c(e,t,n,r,a){var o=typeof e;(o==="undefined"||o==="boolean")&&(e=null);var i=!1;if(e===null)i=!0;else switch(o){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case ku:case jO:i=!0}}if(i)return i=e,a=a(i),e=r===""?"."+Vd(i,0):r,d1(a)?(n="",e!=null&&(n=e.replace(m1,"$&/")+"/"),_c(a,t,n,"",function(u){return u})):a!=null&&(Uy(a)&&(a=HO(a,n+(!a.key||i&&i.key===a.key?"":(""+a.key).replace(m1,"$&/")+"/")+e)),t.push(a)),1;if(i=0,r=r===""?".":r+":",d1(e))for(var s=0;s<e.length;s++){o=e[s];var l=r+Vd(o,s);i+=_c(o,t,n,l,a)}else if(l=BO(e),typeof l=="function")for(e=l.call(e),s=0;!(o=e.next()).done;)o=o.value,l=r+Vd(o,s++),i+=_c(o,t,n,l,a);else if(o==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return i}function Hu(e,t,n){if(e==null)return e;var r=[],a=0;return _c(e,r,"","",function(o){return t.call(n,o,a++)}),r}function UO(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var Lt={current:null},Ac={transition:null},WO={ReactCurrentDispatcher:Lt,ReactCurrentBatchConfig:Ac,ReactCurrentOwner:Gy};function p5(){throw Error("act(...) is not supported in production builds of React.")}ce.Children={map:Hu,forEach:function(e,t,n){Hu(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return Hu(e,function(){t++}),t},toArray:function(e){return Hu(e,function(t){return t})||[]},only:function(e){if(!Uy(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};ce.Component=ls;ce.Fragment=$O;ce.Profiler=MO;ce.PureComponent=By;ce.StrictMode=NO;ce.Suspense=LO;ce.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=WO;ce.act=p5;ce.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=i5({},e.props),a=e.key,o=e.ref,i=e._owner;if(t!=null){if(t.ref!==void 0&&(o=t.ref,i=Gy.current),t.key!==void 0&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)u5.call(t,l)&&!c5.hasOwnProperty(l)&&(r[l]=t[l]===void 0&&s!==void 0?s[l]:t[l])}var l=arguments.length-2;if(l===1)r.children=n;else if(1<l){s=Array(l);for(var u=0;u<l;u++)s[u]=arguments[u+2];r.children=s}return{$$typeof:ku,type:e.type,key:a,ref:o,props:r,_owner:i}};ce.createContext=function(e){return e={$$typeof:IO,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:RO,_context:e},e.Consumer=e};ce.createElement=f5;ce.createFactory=function(e){var t=f5.bind(null,e);return t.type=e,t};ce.createRef=function(){return{current:null}};ce.forwardRef=function(e){return{$$typeof:DO,render:e}};ce.isValidElement=Uy;ce.lazy=function(e){return{$$typeof:zO,_payload:{_status:-1,_result:e},_init:UO}};ce.memo=function(e,t){return{$$typeof:FO,type:e,compare:t===void 0?null:t}};ce.startTransition=function(e){var t=Ac.transition;Ac.transition={};try{e()}finally{Ac.transition=t}};ce.unstable_act=p5;ce.useCallback=function(e,t){return Lt.current.useCallback(e,t)};ce.useContext=function(e){return Lt.current.useContext(e)};ce.useDebugValue=function(){};ce.useDeferredValue=function(e){return Lt.current.useDeferredValue(e)};ce.useEffect=function(e,t){return Lt.current.useEffect(e,t)};ce.useId=function(){return Lt.current.useId()};ce.useImperativeHandle=function(e,t,n){return Lt.current.useImperativeHandle(e,t,n)};ce.useInsertionEffect=function(e,t){return Lt.current.useInsertionEffect(e,t)};ce.useLayoutEffect=function(e,t){return Lt.current.useLayoutEffect(e,t)};ce.useMemo=function(e,t){return Lt.current.useMemo(e,t)};ce.useReducer=function(e,t,n){return Lt.current.useReducer(e,t,n)};ce.useRef=function(e){return Lt.current.useRef(e)};ce.useState=function(e){return Lt.current.useState(e)};ce.useSyncExternalStore=function(e,t,n){return Lt.current.useSyncExternalStore(e,t,n)};ce.useTransition=function(){return Lt.current.useTransition()};ce.version="18.3.1";a5.exports=ce;var k=a5.exports;const C=Ce(k),d5=TO({__proto__:null,default:C},[k]);/**
+ * @license React
+ * react-jsx-runtime.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var qO=k,VO=Symbol.for("react.element"),KO=Symbol.for("react.fragment"),XO=Object.prototype.hasOwnProperty,YO=qO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,QO={key:!0,ref:!0,__self:!0,__source:!0};function m5(e,t,n){var r,a={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)XO.call(t,r)&&!QO.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)a[r]===void 0&&(a[r]=t[r]);return{$$typeof:VO,type:e,key:o,ref:i,props:a,_owner:YO.current}}kp.Fragment=KO;kp.jsx=m5;kp.jsxs=m5;r5.exports=kp;var b=r5.exports,Gc={},h5={exports:{}},on={},v5={exports:{}},y5={};/**
+ * @license React
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */(function(e){function t($,D){var H=$.length;$.push(D);e:for(;0<H;){var W=H-1>>>1,G=$[W];if(0<a(G,D))$[W]=D,$[H]=G,H=W;else break e}}function n($){return $.length===0?null:$[0]}function r($){if($.length===0)return null;var D=$[0],H=$.pop();if(H!==D){$[0]=H;e:for(var W=0,G=$.length,Z=G>>>1;W<Z;){var ie=2*(W+1)-1,ve=$[ie],Pe=ie+1,J=$[Pe];if(0>a(ve,H))Pe<G&&0>a(J,ve)?($[W]=J,$[Pe]=H,W=Pe):($[W]=ve,$[ie]=H,W=ie);else if(Pe<G&&0>a(J,H))$[W]=J,$[Pe]=H,W=Pe;else break e}}return D}function a($,D){var H=$.sortIndex-D.sortIndex;return H!==0?H:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,s=i.now();e.unstable_now=function(){return i.now()-s}}var l=[],u=[],f=1,c=null,p=3,d=!1,h=!1,m=!1,g=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x($){for(var D=n(u);D!==null;){if(D.callback===null)r(u);else if(D.startTime<=$)r(u),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(u)}}function P($){if(m=!1,x($),!h)if(n(l)!==null)h=!0,R(w);else{var D=n(u);D!==null&&L(P,D.startTime-$)}}function w($,D){h=!1,m&&(m=!1,v(_),_=-1),d=!0;var H=p;try{for(x(D),c=n(l);c!==null&&(!(c.expirationTime>D)||$&&!E());){var W=c.callback;if(typeof W=="function"){c.callback=null,p=c.priorityLevel;var G=W(c.expirationTime<=D);D=e.unstable_now(),typeof G=="function"?c.callback=G:c===n(l)&&r(l),x(D)}else r(l);c=n(l)}if(c!==null)var Z=!0;else{var ie=n(u);ie!==null&&L(P,ie.startTime-D),Z=!1}return Z}finally{c=null,p=H,d=!1}}var S=!1,O=null,_=-1,A=5,j=-1;function E(){return!(e.unstable_now()-j<A)}function T(){if(O!==null){var $=e.unstable_now();j=$;var D=!0;try{D=O(!0,$)}finally{D?N():(S=!1,O=null)}}else S=!1}var N;if(typeof y=="function")N=function(){y(T)};else if(typeof MessageChannel<"u"){var M=new MessageChannel,I=M.port2;M.port1.onmessage=T,N=function(){I.postMessage(null)}}else N=function(){g(T,0)};function R($){O=$,S||(S=!0,N())}function L($,D){_=g(function(){$(e.unstable_now())},D)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function($){$.callback=null},e.unstable_continueExecution=function(){h||d||(h=!0,R(w))},e.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"):A=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return p},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(p){case 1:case 2:case 3:var D=3;break;default:D=p}var H=p;p=D;try{return $()}finally{p=H}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var H=p;p=$;try{return D()}finally{p=H}},e.unstable_scheduleCallback=function($,D,H){var W=e.unstable_now();switch(typeof H=="object"&&H!==null?(H=H.delay,H=typeof H=="number"&&0<H?W+H:W):H=W,$){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=H+G,$={id:f++,callback:D,priorityLevel:$,startTime:H,expirationTime:G,sortIndex:-1},H>W?($.sortIndex=H,t(u,$),n(l)===null&&$===n(u)&&(m?(v(_),_=-1):m=!0,L(P,H-W))):($.sortIndex=G,t(l,$),h||d||(h=!0,R(w))),$},e.unstable_shouldYield=E,e.unstable_wrapCallback=function($){var D=p;return function(){var H=p;p=D;try{return $.apply(this,arguments)}finally{p=H}}}})(y5);v5.exports=y5;var ZO=v5.exports;/**
+ * @license React
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var JO=k,an=ZO;function U(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var g5=new Set,xl={};function Eo(e,t){Ai(e,t),Ai(e+"Capture",t)}function Ai(e,t){for(xl[e]=t,e=0;e<t.length;e++)g5.add(t[e])}var Mr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),oh=Object.prototype.hasOwnProperty,ek=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,h1={},v1={};function tk(e){return oh.call(v1,e)?!0:oh.call(h1,e)?!1:ek.test(e)?v1[e]=!0:(h1[e]=!0,!1)}function nk(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function rk(e,t,n,r){if(t===null||typeof t>"u"||nk(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Ft(e,t,n,r,a,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var xt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){xt[e]=new Ft(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];xt[t]=new Ft(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){xt[e]=new Ft(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){xt[e]=new Ft(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){xt[e]=new Ft(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){xt[e]=new Ft(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){xt[e]=new Ft(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){xt[e]=new Ft(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){xt[e]=new Ft(e,5,!1,e.toLowerCase(),null,!1,!1)});var Wy=/[\-:]([a-z])/g;function qy(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Wy,qy);xt[t]=new Ft(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Wy,qy);xt[t]=new Ft(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Wy,qy);xt[t]=new Ft(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){xt[e]=new Ft(e,1,!1,e.toLowerCase(),null,!1,!1)});xt.xlinkHref=new Ft("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){xt[e]=new Ft(e,1,!1,e.toLowerCase(),null,!0,!0)});function Vy(e,t,n,r){var a=xt.hasOwnProperty(t)?xt[t]:null;(a!==null?a.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(rk(t,n,a,r)&&(n=null),r||a===null?tk(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=n===null?a.type===3?!1:"":n:(t=a.attributeName,r=a.attributeNamespace,n===null?e.removeAttribute(t):(a=a.type,n=a===3||a===4&&n===!0?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}var Gr=JO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Gu=Symbol.for("react.element"),Uo=Symbol.for("react.portal"),Wo=Symbol.for("react.fragment"),Ky=Symbol.for("react.strict_mode"),ih=Symbol.for("react.profiler"),x5=Symbol.for("react.provider"),w5=Symbol.for("react.context"),Xy=Symbol.for("react.forward_ref"),sh=Symbol.for("react.suspense"),lh=Symbol.for("react.suspense_list"),Yy=Symbol.for("react.memo"),ea=Symbol.for("react.lazy"),b5=Symbol.for("react.offscreen"),y1=Symbol.iterator;function js(e){return e===null||typeof e!="object"?null:(e=y1&&e[y1]||e["@@iterator"],typeof e=="function"?e:null)}var Ue=Object.assign,Kd;function Qs(e){if(Kd===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Kd=t&&t[1]||""}return`
+`+Kd+e}var Xd=!1;function Yd(e,t){if(!e||Xd)return"";Xd=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(u){var r=u}Reflect.construct(e,[],t)}else{try{t.call()}catch(u){r=u}e.call(t.prototype)}else{try{throw Error()}catch(u){r=u}e()}}catch(u){if(u&&r&&typeof u.stack=="string"){for(var a=u.stack.split(`
+`),o=r.stack.split(`
+`),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(i!==1||s!==1)do if(i--,s--,0>s||a[i]!==o[s]){var l=`
+`+a[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}while(1<=i&&0<=s);break}}}finally{Xd=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Qs(e):""}function ak(e){switch(e.tag){case 5:return Qs(e.type);case 16:return Qs("Lazy");case 13:return Qs("Suspense");case 19:return Qs("SuspenseList");case 0:case 2:case 15:return e=Yd(e.type,!1),e;case 11:return e=Yd(e.type.render,!1),e;case 1:return e=Yd(e.type,!0),e;default:return""}}function uh(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Wo:return"Fragment";case Uo:return"Portal";case ih:return"Profiler";case Ky:return"StrictMode";case sh:return"Suspense";case lh:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case w5:return(e.displayName||"Context")+".Consumer";case x5:return(e._context.displayName||"Context")+".Provider";case Xy:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Yy:return t=e.displayName||null,t!==null?t:uh(e.type)||"Memo";case ea:t=e._payload,e=e._init;try{return uh(e(t))}catch{}}return null}function ok(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return uh(t);case 8:return t===Ky?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ka(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function P5(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ik(e){var t=P5(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Uu(e){e._valueTracker||(e._valueTracker=ik(e))}function S5(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=P5(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Uc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function ch(e,t){var n=t.checked;return Ue({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function g1(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ka(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function O5(e,t){t=t.checked,t!=null&&Vy(e,"checked",t,!1)}function fh(e,t){O5(e,t);var n=ka(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?ph(e,t.type,n):t.hasOwnProperty("defaultValue")&&ph(e,t.type,ka(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function x1(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function ph(e,t,n){(t!=="number"||Uc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var Zs=Array.isArray;function oi(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+ka(n),t=null,a=0;a<e.length;a++){if(e[a].value===n){e[a].selected=!0,r&&(e[a].defaultSelected=!0);return}t!==null||e[a].disabled||(t=e[a])}t!==null&&(t.selected=!0)}}function dh(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(U(91));return Ue({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function w1(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(U(92));if(Zs(n)){if(1<n.length)throw Error(U(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:ka(n)}}function k5(e,t){var n=ka(t.value),r=ka(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function b1(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function _5(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function mh(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?_5(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Wu,A5=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,a){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,a)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Wu=Wu||document.createElement("div"),Wu.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Wu.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function wl(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var rl={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},sk=["Webkit","ms","Moz","O"];Object.keys(rl).forEach(function(e){sk.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),rl[t]=rl[e]})});function C5(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||rl.hasOwnProperty(e)&&rl[e]?(""+t).trim():t+"px"}function E5(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,a=C5(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}var lk=Ue({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function hh(e,t){if(t){if(lk[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(U(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(U(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(U(61))}if(t.style!=null&&typeof t.style!="object")throw Error(U(62))}}function vh(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var yh=null;function Qy(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var gh=null,ii=null,si=null;function P1(e){if(e=Cu(e)){if(typeof gh!="function")throw Error(U(280));var t=e.stateNode;t&&(t=Tp(t),gh(e.stateNode,e.type,t))}}function T5(e){ii?si?si.push(e):si=[e]:ii=e}function j5(){if(ii){var e=ii,t=si;if(si=ii=null,P1(e),t)for(e=0;e<t.length;e++)P1(t[e])}}function $5(e,t){return e(t)}function N5(){}var Qd=!1;function M5(e,t,n){if(Qd)return e(t,n);Qd=!0;try{return $5(e,t,n)}finally{Qd=!1,(ii!==null||si!==null)&&(N5(),j5())}}function bl(e,t){var n=e.stateNode;if(n===null)return null;var r=Tp(n);if(r===null)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(e=e.type,r=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!r;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(U(231,t,typeof n));return n}var xh=!1;if(Mr)try{var $s={};Object.defineProperty($s,"passive",{get:function(){xh=!0}}),window.addEventListener("test",$s,$s),window.removeEventListener("test",$s,$s)}catch{xh=!1}function uk(e,t,n,r,a,o,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(f){this.onError(f)}}var al=!1,Wc=null,qc=!1,wh=null,ck={onError:function(e){al=!0,Wc=e}};function fk(e,t,n,r,a,o,i,s,l){al=!1,Wc=null,uk.apply(ck,arguments)}function pk(e,t,n,r,a,o,i,s,l){if(fk.apply(this,arguments),al){if(al){var u=Wc;al=!1,Wc=null}else throw Error(U(198));qc||(qc=!0,wh=u)}}function To(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function R5(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function S1(e){if(To(e)!==e)throw Error(U(188))}function dk(e){var t=e.alternate;if(!t){if(t=To(e),t===null)throw Error(U(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var o=a.alternate;if(o===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return S1(a),e;if(o===r)return S1(a),t;o=o.sibling}throw Error(U(188))}if(n.return!==r.return)n=a,r=o;else{for(var i=!1,s=a.child;s;){if(s===n){i=!0,n=a,r=o;break}if(s===r){i=!0,r=a,n=o;break}s=s.sibling}if(!i){for(s=o.child;s;){if(s===n){i=!0,n=o,r=a;break}if(s===r){i=!0,r=o,n=a;break}s=s.sibling}if(!i)throw Error(U(189))}}if(n.alternate!==r)throw Error(U(190))}if(n.tag!==3)throw Error(U(188));return n.stateNode.current===n?e:t}function I5(e){return e=dk(e),e!==null?D5(e):null}function D5(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=D5(e);if(t!==null)return t;e=e.sibling}return null}var L5=an.unstable_scheduleCallback,O1=an.unstable_cancelCallback,mk=an.unstable_shouldYield,hk=an.unstable_requestPaint,Ke=an.unstable_now,vk=an.unstable_getCurrentPriorityLevel,Zy=an.unstable_ImmediatePriority,F5=an.unstable_UserBlockingPriority,Vc=an.unstable_NormalPriority,yk=an.unstable_LowPriority,z5=an.unstable_IdlePriority,_p=null,ur=null;function gk(e){if(ur&&typeof ur.onCommitFiberRoot=="function")try{ur.onCommitFiberRoot(_p,e,void 0,(e.current.flags&128)===128)}catch{}}var Hn=Math.clz32?Math.clz32:bk,xk=Math.log,wk=Math.LN2;function bk(e){return e>>>=0,e===0?32:31-(xk(e)/wk|0)|0}var qu=64,Vu=4194304;function Js(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Kc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var s=i&~a;s!==0?r=Js(s):(o&=i,o!==0&&(r=Js(o)))}else i=n&~a,i!==0?r=Js(i):o!==0&&(r=Js(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&a)&&(a=r&-r,o=t&-t,a>=o||a===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0<t;)n=31-Hn(t),a=1<<n,r|=e[n],t&=~a;return r}function Pk(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64: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:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Sk(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-Hn(o),s=1<<i,l=a[i];l===-1?(!(s&n)||s&r)&&(a[i]=Pk(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}function bh(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function B5(){var e=qu;return qu<<=1,!(qu&4194240)&&(qu=64),e}function Zd(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function _u(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Hn(t),e[t]=n}function Ok(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-Hn(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}function Jy(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-Hn(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var ke=0;function H5(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var G5,e0,U5,W5,q5,Ph=!1,Ku=[],va=null,ya=null,ga=null,Pl=new Map,Sl=new Map,ra=[],kk="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function k1(e,t){switch(e){case"focusin":case"focusout":va=null;break;case"dragenter":case"dragleave":ya=null;break;case"mouseover":case"mouseout":ga=null;break;case"pointerover":case"pointerout":Pl.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Sl.delete(t.pointerId)}}function Ns(e,t,n,r,a,o){return e===null||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},t!==null&&(t=Cu(t),t!==null&&e0(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,a!==null&&t.indexOf(a)===-1&&t.push(a),e)}function _k(e,t,n,r,a){switch(t){case"focusin":return va=Ns(va,e,t,n,r,a),!0;case"dragenter":return ya=Ns(ya,e,t,n,r,a),!0;case"mouseover":return ga=Ns(ga,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Pl.set(o,Ns(Pl.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,Sl.set(o,Ns(Sl.get(o)||null,e,t,n,r,a)),!0}return!1}function V5(e){var t=Xa(e.target);if(t!==null){var n=To(t);if(n!==null){if(t=n.tag,t===13){if(t=R5(n),t!==null){e.blockedOn=t,q5(e.priority,function(){U5(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function Cc(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=Sh(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);yh=r,n.target.dispatchEvent(r),yh=null}else return t=Cu(n),t!==null&&e0(t),e.blockedOn=n,!1;t.shift()}return!0}function _1(e,t,n){Cc(e)&&n.delete(t)}function Ak(){Ph=!1,va!==null&&Cc(va)&&(va=null),ya!==null&&Cc(ya)&&(ya=null),ga!==null&&Cc(ga)&&(ga=null),Pl.forEach(_1),Sl.forEach(_1)}function Ms(e,t){e.blockedOn===t&&(e.blockedOn=null,Ph||(Ph=!0,an.unstable_scheduleCallback(an.unstable_NormalPriority,Ak)))}function Ol(e){function t(a){return Ms(a,e)}if(0<Ku.length){Ms(Ku[0],e);for(var n=1;n<Ku.length;n++){var r=Ku[n];r.blockedOn===e&&(r.blockedOn=null)}}for(va!==null&&Ms(va,e),ya!==null&&Ms(ya,e),ga!==null&&Ms(ga,e),Pl.forEach(t),Sl.forEach(t),n=0;n<ra.length;n++)r=ra[n],r.blockedOn===e&&(r.blockedOn=null);for(;0<ra.length&&(n=ra[0],n.blockedOn===null);)V5(n),n.blockedOn===null&&ra.shift()}var li=Gr.ReactCurrentBatchConfig,Xc=!0;function Ck(e,t,n,r){var a=ke,o=li.transition;li.transition=null;try{ke=1,t0(e,t,n,r)}finally{ke=a,li.transition=o}}function Ek(e,t,n,r){var a=ke,o=li.transition;li.transition=null;try{ke=4,t0(e,t,n,r)}finally{ke=a,li.transition=o}}function t0(e,t,n,r){if(Xc){var a=Sh(e,t,n,r);if(a===null)lm(e,t,r,Yc,n),k1(e,r);else if(_k(a,e,t,n,r))r.stopPropagation();else if(k1(e,r),t&4&&-1<kk.indexOf(e)){for(;a!==null;){var o=Cu(a);if(o!==null&&G5(o),o=Sh(e,t,n,r),o===null&&lm(e,t,r,Yc,n),o===a)break;a=o}a!==null&&r.stopPropagation()}else lm(e,t,r,null,n)}}var Yc=null;function Sh(e,t,n,r){if(Yc=null,e=Qy(r),e=Xa(e),e!==null)if(t=To(e),t===null)e=null;else if(n=t.tag,n===13){if(e=R5(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Yc=e,null}function K5(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(vk()){case Zy:return 1;case F5:return 4;case Vc:case yk:return 16;case z5:return 536870912;default:return 16}default:return 16}}var fa=null,n0=null,Ec=null;function X5(){if(Ec)return Ec;var e,t=n0,n=t.length,r,a="value"in fa?fa.value:fa.textContent,o=a.length;for(e=0;e<n&&t[e]===a[e];e++);var i=n-e;for(r=1;r<=i&&t[n-r]===a[o-r];r++);return Ec=a.slice(e,1<r?1-r:void 0)}function Tc(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Xu(){return!0}function A1(){return!1}function sn(e){function t(n,r,a,o,i){this._reactName=n,this._targetInst=a,this.type=r,this.nativeEvent=o,this.target=i,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(n=e[s],this[s]=n?n(o):o[s]);return this.isDefaultPrevented=(o.defaultPrevented!=null?o.defaultPrevented:o.returnValue===!1)?Xu:A1,this.isPropagationStopped=A1,this}return Ue(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Xu)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Xu)},persist:function(){},isPersistent:Xu}),t}var us={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},r0=sn(us),Au=Ue({},us,{view:0,detail:0}),Tk=sn(Au),Jd,em,Rs,Ap=Ue({},Au,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:a0,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Rs&&(Rs&&e.type==="mousemove"?(Jd=e.screenX-Rs.screenX,em=e.screenY-Rs.screenY):em=Jd=0,Rs=e),Jd)},movementY:function(e){return"movementY"in e?e.movementY:em}}),C1=sn(Ap),jk=Ue({},Ap,{dataTransfer:0}),$k=sn(jk),Nk=Ue({},Au,{relatedTarget:0}),tm=sn(Nk),Mk=Ue({},us,{animationName:0,elapsedTime:0,pseudoElement:0}),Rk=sn(Mk),Ik=Ue({},us,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Dk=sn(Ik),Lk=Ue({},us,{data:0}),E1=sn(Lk),Fk={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},zk={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Bk={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Hk(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=Bk[e])?!!t[e]:!1}function a0(){return Hk}var Gk=Ue({},Au,{key:function(e){if(e.key){var t=Fk[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Tc(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?zk[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:a0,charCode:function(e){return e.type==="keypress"?Tc(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Tc(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Uk=sn(Gk),Wk=Ue({},Ap,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),T1=sn(Wk),qk=Ue({},Au,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:a0}),Vk=sn(qk),Kk=Ue({},us,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xk=sn(Kk),Yk=Ue({},Ap,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Qk=sn(Yk),Zk=[9,13,27,32],o0=Mr&&"CompositionEvent"in window,ol=null;Mr&&"documentMode"in document&&(ol=document.documentMode);var Jk=Mr&&"TextEvent"in window&&!ol,Y5=Mr&&(!o0||ol&&8<ol&&11>=ol),j1=" ",$1=!1;function Q5(e,t){switch(e){case"keyup":return Zk.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Z5(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var qo=!1;function e_(e,t){switch(e){case"compositionend":return Z5(t);case"keypress":return t.which!==32?null:($1=!0,j1);case"textInput":return e=t.data,e===j1&&$1?null:e;default:return null}}function t_(e,t){if(qo)return e==="compositionend"||!o0&&Q5(e,t)?(e=X5(),Ec=n0=fa=null,qo=!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.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Y5&&t.locale!=="ko"?null:t.data;default:return null}}var n_={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function N1(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!n_[e.type]:t==="textarea"}function J5(e,t,n,r){T5(r),t=Qc(t,"onChange"),0<t.length&&(n=new r0("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var il=null,kl=null;function r_(e){c9(e,0)}function Cp(e){var t=Xo(e);if(S5(t))return e}function a_(e,t){if(e==="change")return t}var e9=!1;if(Mr){var nm;if(Mr){var rm="oninput"in document;if(!rm){var M1=document.createElement("div");M1.setAttribute("oninput","return;"),rm=typeof M1.oninput=="function"}nm=rm}else nm=!1;e9=nm&&(!document.documentMode||9<document.documentMode)}function R1(){il&&(il.detachEvent("onpropertychange",t9),kl=il=null)}function t9(e){if(e.propertyName==="value"&&Cp(kl)){var t=[];J5(t,kl,e,Qy(e)),M5(r_,t)}}function o_(e,t,n){e==="focusin"?(R1(),il=t,kl=n,il.attachEvent("onpropertychange",t9)):e==="focusout"&&R1()}function i_(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return Cp(kl)}function s_(e,t){if(e==="click")return Cp(t)}function l_(e,t){if(e==="input"||e==="change")return Cp(t)}function u_(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Un=typeof Object.is=="function"?Object.is:u_;function _l(e,t){if(Un(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!oh.call(t,a)||!Un(e[a],t[a]))return!1}return!0}function I1(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function D1(e,t){var n=I1(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=I1(n)}}function n9(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?n9(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function r9(){for(var e=window,t=Uc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Uc(e.document)}return t}function i0(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")}function c_(e){var t=r9(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&n9(n.ownerDocument.documentElement,n)){if(r!==null&&i0(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=r.end===void 0?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=D1(n,o);var i=D1(n,r);a&&i&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var f_=Mr&&"documentMode"in document&&11>=document.documentMode,Vo=null,Oh=null,sl=null,kh=!1;function L1(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;kh||Vo==null||Vo!==Uc(r)||(r=Vo,"selectionStart"in r&&i0(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),sl&&_l(sl,r)||(sl=r,r=Qc(Oh,"onSelect"),0<r.length&&(t=new r0("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=Vo)))}function Yu(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Ko={animationend:Yu("Animation","AnimationEnd"),animationiteration:Yu("Animation","AnimationIteration"),animationstart:Yu("Animation","AnimationStart"),transitionend:Yu("Transition","TransitionEnd")},am={},a9={};Mr&&(a9=document.createElement("div").style,"AnimationEvent"in window||(delete Ko.animationend.animation,delete Ko.animationiteration.animation,delete Ko.animationstart.animation),"TransitionEvent"in window||delete Ko.transitionend.transition);function Ep(e){if(am[e])return am[e];if(!Ko[e])return e;var t=Ko[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in a9)return am[e]=t[n];return e}var o9=Ep("animationend"),i9=Ep("animationiteration"),s9=Ep("animationstart"),l9=Ep("transitionend"),u9=new Map,F1="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ta(e,t){u9.set(e,t),Eo(t,[e])}for(var om=0;om<F1.length;om++){var im=F1[om],p_=im.toLowerCase(),d_=im[0].toUpperCase()+im.slice(1);Ta(p_,"on"+d_)}Ta(o9,"onAnimationEnd");Ta(i9,"onAnimationIteration");Ta(s9,"onAnimationStart");Ta("dblclick","onDoubleClick");Ta("focusin","onFocus");Ta("focusout","onBlur");Ta(l9,"onTransitionEnd");Ai("onMouseEnter",["mouseout","mouseover"]);Ai("onMouseLeave",["mouseout","mouseover"]);Ai("onPointerEnter",["pointerout","pointerover"]);Ai("onPointerLeave",["pointerout","pointerover"]);Eo("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Eo("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Eo("onBeforeInput",["compositionend","keypress","textInput","paste"]);Eo("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));Eo("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Eo("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var el="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),m_=new Set("cancel close invalid load scroll toggle".split(" ").concat(el));function z1(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,pk(r,t,void 0,e),e.currentTarget=null}function c9(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,u=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;z1(a,s,u),o=l}else for(i=0;i<r.length;i++){if(s=r[i],l=s.instance,u=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;z1(a,s,u),o=l}}}if(qc)throw e=wh,qc=!1,wh=null,e}function Ie(e,t){var n=t[Th];n===void 0&&(n=t[Th]=new Set);var r=e+"__bubble";n.has(r)||(f9(t,e,2,!1),n.add(r))}function sm(e,t,n){var r=0;t&&(r|=4),f9(n,e,r,t)}var Qu="_reactListening"+Math.random().toString(36).slice(2);function Al(e){if(!e[Qu]){e[Qu]=!0,g5.forEach(function(n){n!=="selectionchange"&&(m_.has(n)||sm(n,!1,e),sm(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Qu]||(t[Qu]=!0,sm("selectionchange",!1,t))}}function f9(e,t,n,r){switch(K5(t)){case 1:var a=Ck;break;case 4:a=Ek;break;default:a=t0}n=a.bind(null,t,n,e),a=void 0,!xh||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(a=!0),r?a!==void 0?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):a!==void 0?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function lm(e,t,n,r,a){var o=r;if(!(t&1)&&!(t&2)&&r!==null)e:for(;;){if(r===null)return;var i=r.tag;if(i===3||i===4){var s=r.stateNode.containerInfo;if(s===a||s.nodeType===8&&s.parentNode===a)break;if(i===4)for(i=r.return;i!==null;){var l=i.tag;if((l===3||l===4)&&(l=i.stateNode.containerInfo,l===a||l.nodeType===8&&l.parentNode===a))return;i=i.return}for(;s!==null;){if(i=Xa(s),i===null)return;if(l=i.tag,l===5||l===6){r=o=i;continue e}s=s.parentNode}}r=r.return}M5(function(){var u=o,f=Qy(n),c=[];e:{var p=u9.get(e);if(p!==void 0){var d=r0,h=e;switch(e){case"keypress":if(Tc(n)===0)break e;case"keydown":case"keyup":d=Uk;break;case"focusin":h="focus",d=tm;break;case"focusout":h="blur",d=tm;break;case"beforeblur":case"afterblur":d=tm;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":d=C1;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":d=$k;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":d=Vk;break;case o9:case i9:case s9:d=Rk;break;case l9:d=Xk;break;case"scroll":d=Tk;break;case"wheel":d=Qk;break;case"copy":case"cut":case"paste":d=Dk;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":d=T1}var m=(t&4)!==0,g=!m&&e==="scroll",v=m?p!==null?p+"Capture":null:p;m=[];for(var y=u,x;y!==null;){x=y;var P=x.stateNode;if(x.tag===5&&P!==null&&(x=P,v!==null&&(P=bl(y,v),P!=null&&m.push(Cl(y,P,x)))),g)break;y=y.return}0<m.length&&(p=new d(p,h,null,n,f),c.push({event:p,listeners:m}))}}if(!(t&7)){e:{if(p=e==="mouseover"||e==="pointerover",d=e==="mouseout"||e==="pointerout",p&&n!==yh&&(h=n.relatedTarget||n.fromElement)&&(Xa(h)||h[Rr]))break e;if((d||p)&&(p=f.window===f?f:(p=f.ownerDocument)?p.defaultView||p.parentWindow:window,d?(h=n.relatedTarget||n.toElement,d=u,h=h?Xa(h):null,h!==null&&(g=To(h),h!==g||h.tag!==5&&h.tag!==6)&&(h=null)):(d=null,h=u),d!==h)){if(m=C1,P="onMouseLeave",v="onMouseEnter",y="mouse",(e==="pointerout"||e==="pointerover")&&(m=T1,P="onPointerLeave",v="onPointerEnter",y="pointer"),g=d==null?p:Xo(d),x=h==null?p:Xo(h),p=new m(P,y+"leave",d,n,f),p.target=g,p.relatedTarget=x,P=null,Xa(f)===u&&(m=new m(v,y+"enter",h,n,f),m.target=x,m.relatedTarget=g,P=m),g=P,d&&h)t:{for(m=d,v=h,y=0,x=m;x;x=Io(x))y++;for(x=0,P=v;P;P=Io(P))x++;for(;0<y-x;)m=Io(m),y--;for(;0<x-y;)v=Io(v),x--;for(;y--;){if(m===v||v!==null&&m===v.alternate)break t;m=Io(m),v=Io(v)}m=null}else m=null;d!==null&&B1(c,p,d,m,!1),h!==null&&g!==null&&B1(c,g,h,m,!0)}}e:{if(p=u?Xo(u):window,d=p.nodeName&&p.nodeName.toLowerCase(),d==="select"||d==="input"&&p.type==="file")var w=a_;else if(N1(p))if(e9)w=l_;else{w=i_;var S=o_}else(d=p.nodeName)&&d.toLowerCase()==="input"&&(p.type==="checkbox"||p.type==="radio")&&(w=s_);if(w&&(w=w(e,u))){J5(c,w,n,f);break e}S&&S(e,p,u),e==="focusout"&&(S=p._wrapperState)&&S.controlled&&p.type==="number"&&ph(p,"number",p.value)}switch(S=u?Xo(u):window,e){case"focusin":(N1(S)||S.contentEditable==="true")&&(Vo=S,Oh=u,sl=null);break;case"focusout":sl=Oh=Vo=null;break;case"mousedown":kh=!0;break;case"contextmenu":case"mouseup":case"dragend":kh=!1,L1(c,n,f);break;case"selectionchange":if(f_)break;case"keydown":case"keyup":L1(c,n,f)}var O;if(o0)e:{switch(e){case"compositionstart":var _="onCompositionStart";break e;case"compositionend":_="onCompositionEnd";break e;case"compositionupdate":_="onCompositionUpdate";break e}_=void 0}else qo?Q5(e,n)&&(_="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(_="onCompositionStart");_&&(Y5&&n.locale!=="ko"&&(qo||_!=="onCompositionStart"?_==="onCompositionEnd"&&qo&&(O=X5()):(fa=f,n0="value"in fa?fa.value:fa.textContent,qo=!0)),S=Qc(u,_),0<S.length&&(_=new E1(_,e,null,n,f),c.push({event:_,listeners:S}),O?_.data=O:(O=Z5(n),O!==null&&(_.data=O)))),(O=Jk?e_(e,n):t_(e,n))&&(u=Qc(u,"onBeforeInput"),0<u.length&&(f=new E1("onBeforeInput","beforeinput",null,n,f),c.push({event:f,listeners:u}),f.data=O))}c9(c,t)})}function Cl(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Qc(e,t){for(var n=t+"Capture",r=[];e!==null;){var a=e,o=a.stateNode;a.tag===5&&o!==null&&(a=o,o=bl(e,n),o!=null&&r.unshift(Cl(e,o,a)),o=bl(e,t),o!=null&&r.push(Cl(e,o,a))),e=e.return}return r}function Io(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function B1(e,t,n,r,a){for(var o=t._reactName,i=[];n!==null&&n!==r;){var s=n,l=s.alternate,u=s.stateNode;if(l!==null&&l===r)break;s.tag===5&&u!==null&&(s=u,a?(l=bl(n,o),l!=null&&i.unshift(Cl(n,l,s))):a||(l=bl(n,o),l!=null&&i.push(Cl(n,l,s)))),n=n.return}i.length!==0&&e.push({event:t,listeners:i})}var h_=/\r\n?/g,v_=/\u0000|\uFFFD/g;function H1(e){return(typeof e=="string"?e:""+e).replace(h_,`
+`).replace(v_,"")}function Zu(e,t,n){if(t=H1(t),H1(e)!==t&&n)throw Error(U(425))}function Zc(){}var _h=null,Ah=null;function Ch(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var Eh=typeof setTimeout=="function"?setTimeout:void 0,y_=typeof clearTimeout=="function"?clearTimeout:void 0,G1=typeof Promise=="function"?Promise:void 0,g_=typeof queueMicrotask=="function"?queueMicrotask:typeof G1<"u"?function(e){return G1.resolve(null).then(e).catch(x_)}:Eh;function x_(e){setTimeout(function(){throw e})}function um(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(r===0){e.removeChild(a),Ol(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=a}while(n);Ol(t)}function xa(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function U1(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var cs=Math.random().toString(36).slice(2),nr="__reactFiber$"+cs,El="__reactProps$"+cs,Rr="__reactContainer$"+cs,Th="__reactEvents$"+cs,w_="__reactListeners$"+cs,b_="__reactHandles$"+cs;function Xa(e){var t=e[nr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Rr]||n[nr]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=U1(e);e!==null;){if(n=e[nr])return n;e=U1(e)}return t}e=n,n=e.parentNode}return null}function Cu(e){return e=e[nr]||e[Rr],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Xo(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(U(33))}function Tp(e){return e[El]||null}var jh=[],Yo=-1;function ja(e){return{current:e}}function Fe(e){0>Yo||(e.current=jh[Yo],jh[Yo]=null,Yo--)}function $e(e,t){Yo++,jh[Yo]=e.current,e.current=t}var _a={},Tt=ja(_a),Gt=ja(!1),ho=_a;function Ci(e,t){var n=e.type.contextTypes;if(!n)return _a;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ut(e){return e=e.childContextTypes,e!=null}function Jc(){Fe(Gt),Fe(Tt)}function W1(e,t,n){if(Tt.current!==_a)throw Error(U(168));$e(Tt,t),$e(Gt,n)}function p9(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(U(108,ok(e)||"Unknown",a));return Ue({},n,r)}function ef(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||_a,ho=Tt.current,$e(Tt,e),$e(Gt,Gt.current),!0}function q1(e,t,n){var r=e.stateNode;if(!r)throw Error(U(169));n?(e=p9(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,Fe(Gt),Fe(Tt),$e(Tt,e)):Fe(Gt),$e(Gt,n)}var Sr=null,jp=!1,cm=!1;function d9(e){Sr===null?Sr=[e]:Sr.push(e)}function P_(e){jp=!0,d9(e)}function $a(){if(!cm&&Sr!==null){cm=!0;var e=0,t=ke;try{var n=Sr;for(ke=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}Sr=null,jp=!1}catch(a){throw Sr!==null&&(Sr=Sr.slice(e+1)),L5(Zy,$a),a}finally{ke=t,cm=!1}}return null}var Qo=[],Zo=0,tf=null,nf=0,dn=[],mn=0,vo=null,kr=1,_r="";function Ua(e,t){Qo[Zo++]=nf,Qo[Zo++]=tf,tf=e,nf=t}function m9(e,t,n){dn[mn++]=kr,dn[mn++]=_r,dn[mn++]=vo,vo=e;var r=kr;e=_r;var a=32-Hn(r)-1;r&=~(1<<a),n+=1;var o=32-Hn(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,kr=1<<32-Hn(t)+a|n<<a|r,_r=o+e}else kr=1<<o|n<<a|r,_r=e}function s0(e){e.return!==null&&(Ua(e,1),m9(e,1,0))}function l0(e){for(;e===tf;)tf=Qo[--Zo],Qo[Zo]=null,nf=Qo[--Zo],Qo[Zo]=null;for(;e===vo;)vo=dn[--mn],dn[mn]=null,_r=dn[--mn],dn[mn]=null,kr=dn[--mn],dn[mn]=null}var nn=null,en=null,ze=!1,Rn=null;function h9(e,t){var n=hn(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function V1(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,nn=e,en=xa(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,nn=e,en=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=vo!==null?{id:kr,overflow:_r}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=hn(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,nn=e,en=null,!0):!1;default:return!1}}function $h(e){return(e.mode&1)!==0&&(e.flags&128)===0}function Nh(e){if(ze){var t=en;if(t){var n=t;if(!V1(e,t)){if($h(e))throw Error(U(418));t=xa(n.nextSibling);var r=nn;t&&V1(e,t)?h9(r,n):(e.flags=e.flags&-4097|2,ze=!1,nn=e)}}else{if($h(e))throw Error(U(418));e.flags=e.flags&-4097|2,ze=!1,nn=e}}}function K1(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;nn=e}function Ju(e){if(e!==nn)return!1;if(!ze)return K1(e),ze=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!Ch(e.type,e.memoizedProps)),t&&(t=en)){if($h(e))throw v9(),Error(U(418));for(;t;)h9(e,t),t=xa(t.nextSibling)}if(K1(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(U(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){en=xa(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}en=null}}else en=nn?xa(e.stateNode.nextSibling):null;return!0}function v9(){for(var e=en;e;)e=xa(e.nextSibling)}function Ei(){en=nn=null,ze=!1}function u0(e){Rn===null?Rn=[e]:Rn.push(e)}var S_=Gr.ReactCurrentBatchConfig;function Is(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(U(309));var r=n.stateNode}if(!r)throw Error(U(147,e));var a=r,o=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===o?t.ref:(t=function(i){var s=a.refs;i===null?delete s[o]:s[o]=i},t._stringRef=o,t)}if(typeof e!="string")throw Error(U(284));if(!n._owner)throw Error(U(290,e))}return e}function ec(e,t){throw e=Object.prototype.toString.call(t),Error(U(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function X1(e){var t=e._init;return t(e._payload)}function y9(e){function t(v,y){if(e){var x=v.deletions;x===null?(v.deletions=[y],v.flags|=16):x.push(y)}}function n(v,y){if(!e)return null;for(;y!==null;)t(v,y),y=y.sibling;return null}function r(v,y){for(v=new Map;y!==null;)y.key!==null?v.set(y.key,y):v.set(y.index,y),y=y.sibling;return v}function a(v,y){return v=Sa(v,y),v.index=0,v.sibling=null,v}function o(v,y,x){return v.index=x,e?(x=v.alternate,x!==null?(x=x.index,x<y?(v.flags|=2,y):x):(v.flags|=2,y)):(v.flags|=1048576,y)}function i(v){return e&&v.alternate===null&&(v.flags|=2),v}function s(v,y,x,P){return y===null||y.tag!==6?(y=ym(x,v.mode,P),y.return=v,y):(y=a(y,x),y.return=v,y)}function l(v,y,x,P){var w=x.type;return w===Wo?f(v,y,x.props.children,P,x.key):y!==null&&(y.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===ea&&X1(w)===y.type)?(P=a(y,x.props),P.ref=Is(v,y,x),P.return=v,P):(P=Dc(x.type,x.key,x.props,null,v.mode,P),P.ref=Is(v,y,x),P.return=v,P)}function u(v,y,x,P){return y===null||y.tag!==4||y.stateNode.containerInfo!==x.containerInfo||y.stateNode.implementation!==x.implementation?(y=gm(x,v.mode,P),y.return=v,y):(y=a(y,x.children||[]),y.return=v,y)}function f(v,y,x,P,w){return y===null||y.tag!==7?(y=co(x,v.mode,P,w),y.return=v,y):(y=a(y,x),y.return=v,y)}function c(v,y,x){if(typeof y=="string"&&y!==""||typeof y=="number")return y=ym(""+y,v.mode,x),y.return=v,y;if(typeof y=="object"&&y!==null){switch(y.$$typeof){case Gu:return x=Dc(y.type,y.key,y.props,null,v.mode,x),x.ref=Is(v,null,y),x.return=v,x;case Uo:return y=gm(y,v.mode,x),y.return=v,y;case ea:var P=y._init;return c(v,P(y._payload),x)}if(Zs(y)||js(y))return y=co(y,v.mode,x,null),y.return=v,y;ec(v,y)}return null}function p(v,y,x,P){var w=y!==null?y.key:null;if(typeof x=="string"&&x!==""||typeof x=="number")return w!==null?null:s(v,y,""+x,P);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case Gu:return x.key===w?l(v,y,x,P):null;case Uo:return x.key===w?u(v,y,x,P):null;case ea:return w=x._init,p(v,y,w(x._payload),P)}if(Zs(x)||js(x))return w!==null?null:f(v,y,x,P,null);ec(v,x)}return null}function d(v,y,x,P,w){if(typeof P=="string"&&P!==""||typeof P=="number")return v=v.get(x)||null,s(y,v,""+P,w);if(typeof P=="object"&&P!==null){switch(P.$$typeof){case Gu:return v=v.get(P.key===null?x:P.key)||null,l(y,v,P,w);case Uo:return v=v.get(P.key===null?x:P.key)||null,u(y,v,P,w);case ea:var S=P._init;return d(v,y,x,S(P._payload),w)}if(Zs(P)||js(P))return v=v.get(x)||null,f(y,v,P,w,null);ec(y,P)}return null}function h(v,y,x,P){for(var w=null,S=null,O=y,_=y=0,A=null;O!==null&&_<x.length;_++){O.index>_?(A=O,O=null):A=O.sibling;var j=p(v,O,x[_],P);if(j===null){O===null&&(O=A);break}e&&O&&j.alternate===null&&t(v,O),y=o(j,y,_),S===null?w=j:S.sibling=j,S=j,O=A}if(_===x.length)return n(v,O),ze&&Ua(v,_),w;if(O===null){for(;_<x.length;_++)O=c(v,x[_],P),O!==null&&(y=o(O,y,_),S===null?w=O:S.sibling=O,S=O);return ze&&Ua(v,_),w}for(O=r(v,O);_<x.length;_++)A=d(O,v,_,x[_],P),A!==null&&(e&&A.alternate!==null&&O.delete(A.key===null?_:A.key),y=o(A,y,_),S===null?w=A:S.sibling=A,S=A);return e&&O.forEach(function(E){return t(v,E)}),ze&&Ua(v,_),w}function m(v,y,x,P){var w=js(x);if(typeof w!="function")throw Error(U(150));if(x=w.call(x),x==null)throw Error(U(151));for(var S=w=null,O=y,_=y=0,A=null,j=x.next();O!==null&&!j.done;_++,j=x.next()){O.index>_?(A=O,O=null):A=O.sibling;var E=p(v,O,j.value,P);if(E===null){O===null&&(O=A);break}e&&O&&E.alternate===null&&t(v,O),y=o(E,y,_),S===null?w=E:S.sibling=E,S=E,O=A}if(j.done)return n(v,O),ze&&Ua(v,_),w;if(O===null){for(;!j.done;_++,j=x.next())j=c(v,j.value,P),j!==null&&(y=o(j,y,_),S===null?w=j:S.sibling=j,S=j);return ze&&Ua(v,_),w}for(O=r(v,O);!j.done;_++,j=x.next())j=d(O,v,_,j.value,P),j!==null&&(e&&j.alternate!==null&&O.delete(j.key===null?_:j.key),y=o(j,y,_),S===null?w=j:S.sibling=j,S=j);return e&&O.forEach(function(T){return t(v,T)}),ze&&Ua(v,_),w}function g(v,y,x,P){if(typeof x=="object"&&x!==null&&x.type===Wo&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case Gu:e:{for(var w=x.key,S=y;S!==null;){if(S.key===w){if(w=x.type,w===Wo){if(S.tag===7){n(v,S.sibling),y=a(S,x.props.children),y.return=v,v=y;break e}}else if(S.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===ea&&X1(w)===S.type){n(v,S.sibling),y=a(S,x.props),y.ref=Is(v,S,x),y.return=v,v=y;break e}n(v,S);break}else t(v,S);S=S.sibling}x.type===Wo?(y=co(x.props.children,v.mode,P,x.key),y.return=v,v=y):(P=Dc(x.type,x.key,x.props,null,v.mode,P),P.ref=Is(v,y,x),P.return=v,v=P)}return i(v);case Uo:e:{for(S=x.key;y!==null;){if(y.key===S)if(y.tag===4&&y.stateNode.containerInfo===x.containerInfo&&y.stateNode.implementation===x.implementation){n(v,y.sibling),y=a(y,x.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=gm(x,v.mode,P),y.return=v,v=y}return i(v);case ea:return S=x._init,g(v,y,S(x._payload),P)}if(Zs(x))return h(v,y,x,P);if(js(x))return m(v,y,x,P);ec(v,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,y!==null&&y.tag===6?(n(v,y.sibling),y=a(y,x),y.return=v,v=y):(n(v,y),y=ym(x,v.mode,P),y.return=v,v=y),i(v)):n(v,y)}return g}var Ti=y9(!0),g9=y9(!1),rf=ja(null),af=null,Jo=null,c0=null;function f0(){c0=Jo=af=null}function p0(e){var t=rf.current;Fe(rf),e._currentValue=t}function Mh(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ui(e,t){af=e,c0=Jo=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function xn(e){var t=e._currentValue;if(c0!==e)if(e={context:e,memoizedValue:t,next:null},Jo===null){if(af===null)throw Error(U(308));Jo=e,af.dependencies={lanes:0,firstContext:e}}else Jo=Jo.next=e;return t}var Ya=null;function d0(e){Ya===null?Ya=[e]:Ya.push(e)}function x9(e,t,n,r){var a=t.interleaved;return a===null?(n.next=n,d0(t)):(n.next=a.next,a.next=n),t.interleaved=n,Ir(e,r)}function Ir(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ta=!1;function m0(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function w9(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Tr(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,de&2){var a=r.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Ir(e,n)}return a=r.interleaved,a===null?(t.next=t,d0(r)):(t.next=a.next,a.next=t),r.interleaved=t,Ir(e,n)}function jc(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Jy(e,n)}}function Y1(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var a=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?a=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?a=o=t:o=o.next=t}else a=o=t;n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function of(e,t,n,r){var a=e.updateQueue;ta=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(s!==null){a.shared.pending=null;var l=s,u=l.next;l.next=null,i===null?o=u:i.next=u,i=l;var f=e.alternate;f!==null&&(f=f.updateQueue,s=f.lastBaseUpdate,s!==i&&(s===null?f.firstBaseUpdate=u:s.next=u,f.lastBaseUpdate=l))}if(o!==null){var c=a.baseState;i=0,f=u=l=null,s=o;do{var p=s.lane,d=s.eventTime;if((r&p)===p){f!==null&&(f=f.next={eventTime:d,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(p=t,d=n,m.tag){case 1:if(h=m.payload,typeof h=="function"){c=h.call(d,c,p);break e}c=h;break e;case 3:h.flags=h.flags&-65537|128;case 0:if(h=m.payload,p=typeof h=="function"?h.call(d,c,p):h,p==null)break e;c=Ue({},c,p);break e;case 2:ta=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,p=a.effects,p===null?a.effects=[s]:p.push(s))}else d={eventTime:d,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},f===null?(u=f=d,l=c):f=f.next=d,i|=p;if(s=s.next,s===null){if(s=a.shared.pending,s===null)break;p=s,s=p.next,p.next=null,a.lastBaseUpdate=p,a.shared.pending=null}}while(!0);if(f===null&&(l=c),a.baseState=l,a.firstBaseUpdate=u,a.lastBaseUpdate=f,t=a.shared.interleaved,t!==null){a=t;do i|=a.lane,a=a.next;while(a!==t)}else o===null&&(a.shared.lanes=0);go|=i,e.lanes=i,e.memoizedState=c}}function Q1(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(a!==null){if(r.callback=null,r=n,typeof a!="function")throw Error(U(191,a));a.call(r)}}}var Eu={},cr=ja(Eu),Tl=ja(Eu),jl=ja(Eu);function Qa(e){if(e===Eu)throw Error(U(174));return e}function h0(e,t){switch($e(jl,t),$e(Tl,e),$e(cr,Eu),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:mh(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=mh(t,e)}Fe(cr),$e(cr,t)}function ji(){Fe(cr),Fe(Tl),Fe(jl)}function b9(e){Qa(jl.current);var t=Qa(cr.current),n=mh(t,e.type);t!==n&&($e(Tl,e),$e(cr,n))}function v0(e){Tl.current===e&&(Fe(cr),Fe(Tl))}var He=ja(0);function sf(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var fm=[];function y0(){for(var e=0;e<fm.length;e++)fm[e]._workInProgressVersionPrimary=null;fm.length=0}var $c=Gr.ReactCurrentDispatcher,pm=Gr.ReactCurrentBatchConfig,yo=0,Ge=null,at=null,ct=null,lf=!1,ll=!1,$l=0,O_=0;function bt(){throw Error(U(321))}function g0(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Un(e[n],t[n]))return!1;return!0}function x0(e,t,n,r,a,o){if(yo=o,Ge=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,$c.current=e===null||e.memoizedState===null?C_:E_,e=n(r,a),ll){o=0;do{if(ll=!1,$l=0,25<=o)throw Error(U(301));o+=1,ct=at=null,t.updateQueue=null,$c.current=T_,e=n(r,a)}while(ll)}if($c.current=uf,t=at!==null&&at.next!==null,yo=0,ct=at=Ge=null,lf=!1,t)throw Error(U(300));return e}function w0(){var e=$l!==0;return $l=0,e}function Qn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return ct===null?Ge.memoizedState=ct=e:ct=ct.next=e,ct}function wn(){if(at===null){var e=Ge.alternate;e=e!==null?e.memoizedState:null}else e=at.next;var t=ct===null?Ge.memoizedState:ct.next;if(t!==null)ct=t,at=e;else{if(e===null)throw Error(U(310));at=e,e={memoizedState:at.memoizedState,baseState:at.baseState,baseQueue:at.baseQueue,queue:at.queue,next:null},ct===null?Ge.memoizedState=ct=e:ct=ct.next=e}return ct}function Nl(e,t){return typeof t=="function"?t(e):t}function dm(e){var t=wn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=at,a=r.baseQueue,o=n.pending;if(o!==null){if(a!==null){var i=a.next;a.next=o.next,o.next=i}r.baseQueue=a=o,n.pending=null}if(a!==null){o=a.next,r=r.baseState;var s=i=null,l=null,u=o;do{var f=u.lane;if((yo&f)===f)l!==null&&(l=l.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var c={lane:f,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};l===null?(s=l=c,i=r):l=l.next=c,Ge.lanes|=f,go|=f}u=u.next}while(u!==null&&u!==o);l===null?i=r:l.next=s,Un(r,t.memoizedState)||(Bt=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=l,n.lastRenderedState=r}if(e=n.interleaved,e!==null){a=e;do o=a.lane,Ge.lanes|=o,go|=o,a=a.next;while(a!==e)}else a===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function mm(e){var t=wn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(a!==null){n.pending=null;var i=a=a.next;do o=e(o,i.action),i=i.next;while(i!==a);Un(o,t.memoizedState)||(Bt=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function P9(){}function S9(e,t){var n=Ge,r=wn(),a=t(),o=!Un(r.memoizedState,a);if(o&&(r.memoizedState=a,Bt=!0),r=r.queue,b0(_9.bind(null,n,r,e),[e]),r.getSnapshot!==t||o||ct!==null&&ct.memoizedState.tag&1){if(n.flags|=2048,Ml(9,k9.bind(null,n,r,a,t),void 0,null),pt===null)throw Error(U(349));yo&30||O9(n,t,a)}return a}function O9(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function k9(e,t,n,r){t.value=n,t.getSnapshot=r,A9(t)&&C9(e)}function _9(e,t,n){return n(function(){A9(t)&&C9(e)})}function A9(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Un(e,n)}catch{return!0}}function C9(e){var t=Ir(e,1);t!==null&&Gn(t,e,1,-1)}function Z1(e){var t=Qn();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Nl,lastRenderedState:e},t.queue=e,e=e.dispatch=A_.bind(null,Ge,e),[t.memoizedState,e]}function Ml(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e)),e}function E9(){return wn().memoizedState}function Nc(e,t,n,r){var a=Qn();Ge.flags|=e,a.memoizedState=Ml(1|t,n,void 0,r===void 0?null:r)}function $p(e,t,n,r){var a=wn();r=r===void 0?null:r;var o=void 0;if(at!==null){var i=at.memoizedState;if(o=i.destroy,r!==null&&g0(r,i.deps)){a.memoizedState=Ml(t,n,o,r);return}}Ge.flags|=e,a.memoizedState=Ml(1|t,n,o,r)}function J1(e,t){return Nc(8390656,8,e,t)}function b0(e,t){return $p(2048,8,e,t)}function T9(e,t){return $p(4,2,e,t)}function j9(e,t){return $p(4,4,e,t)}function $9(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function N9(e,t,n){return n=n!=null?n.concat([e]):null,$p(4,4,$9.bind(null,t,e),n)}function P0(){}function M9(e,t){var n=wn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&g0(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function R9(e,t){var n=wn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&g0(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function I9(e,t,n){return yo&21?(Un(n,t)||(n=B5(),Ge.lanes|=n,go|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Bt=!0),e.memoizedState=n)}function k_(e,t){var n=ke;ke=n!==0&&4>n?n:4,e(!0);var r=pm.transition;pm.transition={};try{e(!1),t()}finally{ke=n,pm.transition=r}}function D9(){return wn().memoizedState}function __(e,t,n){var r=Pa(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},L9(e))F9(t,n);else if(n=x9(e,t,n,r),n!==null){var a=Dt();Gn(n,e,r,a),z9(n,t,r)}}function A_(e,t,n){var r=Pa(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(L9(e))F9(t,a);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,Un(s,i)){var l=t.interleaved;l===null?(a.next=a,d0(t)):(a.next=l.next,l.next=a),t.interleaved=a;return}}catch{}finally{}n=x9(e,t,a,r),n!==null&&(a=Dt(),Gn(n,e,r,a),z9(n,t,r))}}function L9(e){var t=e.alternate;return e===Ge||t!==null&&t===Ge}function F9(e,t){ll=lf=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function z9(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Jy(e,n)}}var uf={readContext:xn,useCallback:bt,useContext:bt,useEffect:bt,useImperativeHandle:bt,useInsertionEffect:bt,useLayoutEffect:bt,useMemo:bt,useReducer:bt,useRef:bt,useState:bt,useDebugValue:bt,useDeferredValue:bt,useTransition:bt,useMutableSource:bt,useSyncExternalStore:bt,useId:bt,unstable_isNewReconciler:!1},C_={readContext:xn,useCallback:function(e,t){return Qn().memoizedState=[e,t===void 0?null:t],e},useContext:xn,useEffect:J1,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Nc(4194308,4,$9.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Nc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Nc(4,2,e,t)},useMemo:function(e,t){var n=Qn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=__.bind(null,Ge,e),[r.memoizedState,e]},useRef:function(e){var t=Qn();return e={current:e},t.memoizedState=e},useState:Z1,useDebugValue:P0,useDeferredValue:function(e){return Qn().memoizedState=e},useTransition:function(){var e=Z1(!1),t=e[0];return e=k_.bind(null,e[1]),Qn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ge,a=Qn();if(ze){if(n===void 0)throw Error(U(407));n=n()}else{if(n=t(),pt===null)throw Error(U(349));yo&30||O9(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,J1(_9.bind(null,r,o,e),[e]),r.flags|=2048,Ml(9,k9.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qn(),t=pt.identifierPrefix;if(ze){var n=_r,r=kr;n=(r&~(1<<32-Hn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=$l++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=O_++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},E_={readContext:xn,useCallback:M9,useContext:xn,useEffect:b0,useImperativeHandle:N9,useInsertionEffect:T9,useLayoutEffect:j9,useMemo:R9,useReducer:dm,useRef:E9,useState:function(){return dm(Nl)},useDebugValue:P0,useDeferredValue:function(e){var t=wn();return I9(t,at.memoizedState,e)},useTransition:function(){var e=dm(Nl)[0],t=wn().memoizedState;return[e,t]},useMutableSource:P9,useSyncExternalStore:S9,useId:D9,unstable_isNewReconciler:!1},T_={readContext:xn,useCallback:M9,useContext:xn,useEffect:b0,useImperativeHandle:N9,useInsertionEffect:T9,useLayoutEffect:j9,useMemo:R9,useReducer:mm,useRef:E9,useState:function(){return mm(Nl)},useDebugValue:P0,useDeferredValue:function(e){var t=wn();return at===null?t.memoizedState=e:I9(t,at.memoizedState,e)},useTransition:function(){var e=mm(Nl)[0],t=wn().memoizedState;return[e,t]},useMutableSource:P9,useSyncExternalStore:S9,useId:D9,unstable_isNewReconciler:!1};function Cn(e,t){if(e&&e.defaultProps){t=Ue({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function Rh(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:Ue({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var Np={isMounted:function(e){return(e=e._reactInternals)?To(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Dt(),a=Pa(e),o=Tr(r,a);o.payload=t,n!=null&&(o.callback=n),t=wa(e,o,a),t!==null&&(Gn(t,e,a,r),jc(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Dt(),a=Pa(e),o=Tr(r,a);o.tag=1,o.payload=t,n!=null&&(o.callback=n),t=wa(e,o,a),t!==null&&(Gn(t,e,a,r),jc(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Dt(),r=Pa(e),a=Tr(n,r);a.tag=2,t!=null&&(a.callback=t),t=wa(e,a,r),t!==null&&(Gn(t,e,r,n),jc(t,e,r))}};function ex(e,t,n,r,a,o,i){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(r,o,i):t.prototype&&t.prototype.isPureReactComponent?!_l(n,r)||!_l(a,o):!0}function B9(e,t,n){var r=!1,a=_a,o=t.contextType;return typeof o=="object"&&o!==null?o=xn(o):(a=Ut(t)?ho:Tt.current,r=t.contextTypes,o=(r=r!=null)?Ci(e,a):_a),t=new t(n,o),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=Np,e.stateNode=t,t._reactInternals=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function tx(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Np.enqueueReplaceState(t,t.state,null)}function Ih(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs={},m0(e);var o=t.contextType;typeof o=="object"&&o!==null?a.context=xn(o):(o=Ut(t)?ho:Tt.current,a.context=Ci(e,o)),a.state=e.memoizedState,o=t.getDerivedStateFromProps,typeof o=="function"&&(Rh(e,t,o,n),a.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof a.getSnapshotBeforeUpdate=="function"||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(t=a.state,typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount(),t!==a.state&&Np.enqueueReplaceState(a,a.state,null),of(e,n,a,r),a.state=e.memoizedState),typeof a.componentDidMount=="function"&&(e.flags|=4194308)}function $i(e,t){try{var n="",r=t;do n+=ak(r),r=r.return;while(r);var a=n}catch(o){a=`
+Error generating stack: `+o.message+`
+`+o.stack}return{value:e,source:t,stack:a,digest:null}}function hm(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Dh(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var j_=typeof WeakMap=="function"?WeakMap:Map;function H9(e,t,n){n=Tr(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){ff||(ff=!0,Vh=r),Dh(e,t)},n}function G9(e,t,n){n=Tr(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){Dh(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Dh(e,t),typeof r!="function"&&(ba===null?ba=new Set([this]):ba.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function nx(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new j_;var a=new Set;r.set(t,a)}else a=r.get(t),a===void 0&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=W_.bind(null,e,t,n),t.then(e,e))}function rx(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function ax(e,t,n,r,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Tr(-1,1),t.tag=2,wa(n,t,1))),n.lanes|=1),e)}var $_=Gr.ReactCurrentOwner,Bt=!1;function Nt(e,t,n,r){t.child=e===null?g9(t,null,n,r):Ti(t,e.child,n,r)}function ox(e,t,n,r,a){n=n.render;var o=t.ref;return ui(t,a),r=x0(e,t,n,r,o,a),n=w0(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Dr(e,t,a)):(ze&&n&&s0(t),t.flags|=1,Nt(e,t,r,a),t.child)}function ix(e,t,n,r,a){if(e===null){var o=n.type;return typeof o=="function"&&!T0(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,U9(e,t,o,r,a)):(e=Dc(n.type,null,r,t,t.mode,a),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&a)){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:_l,n(i,r)&&e.ref===t.ref)return Dr(e,t,a)}return t.flags|=1,e=Sa(o,r),e.ref=t.ref,e.return=t,t.child=e}function U9(e,t,n,r,a){if(e!==null){var o=e.memoizedProps;if(_l(o,r)&&e.ref===t.ref)if(Bt=!1,t.pendingProps=r=o,(e.lanes&a)!==0)e.flags&131072&&(Bt=!0);else return t.lanes=e.lanes,Dr(e,t,a)}return Lh(e,t,n,r,a)}function W9(e,t,n){var r=t.pendingProps,a=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},$e(ti,Yt),Yt|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,$e(ti,Yt),Yt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,$e(ti,Yt),Yt|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,$e(ti,Yt),Yt|=r;return Nt(e,t,a,n),t.child}function q9(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Lh(e,t,n,r,a){var o=Ut(n)?ho:Tt.current;return o=Ci(t,o),ui(t,a),n=x0(e,t,n,r,o,a),r=w0(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Dr(e,t,a)):(ze&&r&&s0(t),t.flags|=1,Nt(e,t,n,a),t.child)}function sx(e,t,n,r,a){if(Ut(n)){var o=!0;ef(t)}else o=!1;if(ui(t,a),t.stateNode===null)Mc(e,t),B9(t,n,r),Ih(t,n,r,a),r=!0;else if(e===null){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,u=n.contextType;typeof u=="object"&&u!==null?u=xn(u):(u=Ut(n)?ho:Tt.current,u=Ci(t,u));var f=n.getDerivedStateFromProps,c=typeof f=="function"||typeof i.getSnapshotBeforeUpdate=="function";c||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==r||l!==u)&&tx(t,i,r,u),ta=!1;var p=t.memoizedState;i.state=p,of(t,r,i,a),l=t.memoizedState,s!==r||p!==l||Gt.current||ta?(typeof f=="function"&&(Rh(t,n,f,r),l=t.memoizedState),(s=ta||ex(t,n,s,r,p,l,u))?(c||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=u,r=s):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,w9(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:Cn(t.type,s),i.props=u,c=t.pendingProps,p=i.context,l=n.contextType,typeof l=="object"&&l!==null?l=xn(l):(l=Ut(n)?ho:Tt.current,l=Ci(t,l));var d=n.getDerivedStateFromProps;(f=typeof d=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==c||p!==l)&&tx(t,i,r,l),ta=!1,p=t.memoizedState,i.state=p,of(t,r,i,a);var h=t.memoizedState;s!==c||p!==h||Gt.current||ta?(typeof d=="function"&&(Rh(t,n,d,r),h=t.memoizedState),(u=ta||ex(t,n,u,r,p,h,l)||!1)?(f||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,h,l),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,h,l)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=u):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Fh(e,t,n,r,o,a)}function Fh(e,t,n,r,a,o){q9(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return a&&q1(t,n,!1),Dr(e,t,o);r=t.stateNode,$_.current=t;var s=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=Ti(t,e.child,null,o),t.child=Ti(t,null,s,o)):Nt(e,t,s,o),t.memoizedState=r.state,a&&q1(t,n,!0),t.child}function V9(e){var t=e.stateNode;t.pendingContext?W1(e,t.pendingContext,t.pendingContext!==t.context):t.context&&W1(e,t.context,!1),h0(e,t.containerInfo)}function lx(e,t,n,r,a){return Ei(),u0(a),t.flags|=256,Nt(e,t,n,r),t.child}var zh={dehydrated:null,treeContext:null,retryLane:0};function Bh(e){return{baseLanes:e,cachePool:null,transitions:null}}function K9(e,t,n){var r=t.pendingProps,a=He.current,o=!1,i=(t.flags&128)!==0,s;if((s=i)||(s=e!==null&&e.memoizedState===null?!1:(a&2)!==0),s?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(a|=1),$e(He,a&1),e===null)return Nh(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=i):o=Ip(i,r,0,null),e=co(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Bh(n),t.memoizedState=zh,e):S0(t,i));if(a=e.memoizedState,a!==null&&(s=a.dehydrated,s!==null))return N_(e,t,i,r,s,a,n);if(o){o=r.fallback,i=t.mode,a=e.child,s=a.sibling;var l={mode:"hidden",children:r.children};return!(i&1)&&t.child!==a?(r=t.child,r.childLanes=0,r.pendingProps=l,t.deletions=null):(r=Sa(a,l),r.subtreeFlags=a.subtreeFlags&14680064),s!==null?o=Sa(s,o):(o=co(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?Bh(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=zh,r}return o=e.child,e=o.sibling,r=Sa(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function S0(e,t){return t=Ip({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function tc(e,t,n,r){return r!==null&&u0(r),Ti(t,e.child,null,n),e=S0(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function N_(e,t,n,r,a,o,i){if(n)return t.flags&256?(t.flags&=-257,r=hm(Error(U(422))),tc(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,a=t.mode,r=Ip({mode:"visible",children:r.children},a,0,null),o=co(o,a,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&Ti(t,e.child,null,i),t.child.memoizedState=Bh(i),t.memoizedState=zh,o);if(!(t.mode&1))return tc(e,t,i,null);if(a.data==="$!"){if(r=a.nextSibling&&a.nextSibling.dataset,r)var s=r.dgst;return r=s,o=Error(U(419)),r=hm(o,r,void 0),tc(e,t,i,r)}if(s=(i&e.childLanes)!==0,Bt||s){if(r=pt,r!==null){switch(i&-i){case 4:a=2;break;case 16:a=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=a&(r.suspendedLanes|i)?0:a,a!==0&&a!==o.retryLane&&(o.retryLane=a,Ir(e,a),Gn(r,e,a,-1))}return E0(),r=hm(Error(U(421))),tc(e,t,i,r)}return a.data==="$?"?(t.flags|=128,t.child=e.child,t=q_.bind(null,e),a._reactRetry=t,null):(e=o.treeContext,en=xa(a.nextSibling),nn=t,ze=!0,Rn=null,e!==null&&(dn[mn++]=kr,dn[mn++]=_r,dn[mn++]=vo,kr=e.id,_r=e.overflow,vo=t),t=S0(t,r.children),t.flags|=4096,t)}function ux(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),Mh(e.return,t,n)}function vm(e,t,n,r,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function X9(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(Nt(e,t,r.children,n),r=He.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ux(e,n,t);else if(e.tag===19)ux(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if($e(He,r),!(t.mode&1))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;n!==null;)e=n.alternate,e!==null&&sf(e)===null&&(a=n),n=n.sibling;n=a,n===null?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),vm(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;a!==null;){if(e=a.alternate,e!==null&&sf(e)===null){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}vm(t,!0,n,null,o);break;case"together":vm(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Mc(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Dr(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),go|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(U(153));if(t.child!==null){for(e=t.child,n=Sa(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=Sa(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function M_(e,t,n){switch(t.tag){case 3:V9(t),Ei();break;case 5:b9(t);break;case 1:Ut(t.type)&&ef(t);break;case 4:h0(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;$e(rf,r._currentValue),r._currentValue=a;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?($e(He,He.current&1),t.flags|=128,null):n&t.child.childLanes?K9(e,t,n):($e(He,He.current&1),e=Dr(e,t,n),e!==null?e.sibling:null);$e(He,He.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return X9(e,t,n);t.flags|=128}if(a=t.memoizedState,a!==null&&(a.rendering=null,a.tail=null,a.lastEffect=null),$e(He,He.current),r)break;return null;case 22:case 23:return t.lanes=0,W9(e,t,n)}return Dr(e,t,n)}var Y9,Hh,Q9,Z9;Y9=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Hh=function(){};Q9=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Qa(cr.current);var o=null;switch(n){case"input":a=ch(e,a),r=ch(e,r),o=[];break;case"select":a=Ue({},a,{value:void 0}),r=Ue({},r,{value:void 0}),o=[];break;case"textarea":a=dh(e,a),r=dh(e,r),o=[];break;default:typeof a.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Zc)}hh(n,r);var i;n=null;for(u in a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&a[u]!=null)if(u==="style"){var s=a[u];for(i in s)s.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else u!=="dangerouslySetInnerHTML"&&u!=="children"&&u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&u!=="autoFocus"&&(xl.hasOwnProperty(u)?o||(o=[]):(o=o||[]).push(u,null));for(u in r){var l=r[u];if(s=a!=null?a[u]:void 0,r.hasOwnProperty(u)&&l!==s&&(l!=null||s!=null))if(u==="style")if(s){for(i in s)!s.hasOwnProperty(i)||l&&l.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in l)l.hasOwnProperty(i)&&s[i]!==l[i]&&(n||(n={}),n[i]=l[i])}else n||(o||(o=[]),o.push(u,n)),n=l;else u==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,s=s?s.__html:void 0,l!=null&&s!==l&&(o=o||[]).push(u,l)):u==="children"?typeof l!="string"&&typeof l!="number"||(o=o||[]).push(u,""+l):u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&(xl.hasOwnProperty(u)?(l!=null&&u==="onScroll"&&Ie("scroll",e),o||s===l||(o=[])):(o=o||[]).push(u,l))}n&&(o=o||[]).push("style",n);var u=o;(t.updateQueue=u)&&(t.flags|=4)}};Z9=function(e,t,n,r){n!==r&&(t.flags|=4)};function Ds(e,t){if(!ze)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Pt(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags&14680064,r|=a.flags&14680064,a.return=e,a=a.sibling;else for(a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function R_(e,t,n){var r=t.pendingProps;switch(l0(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Pt(t),null;case 1:return Ut(t.type)&&Jc(),Pt(t),null;case 3:return r=t.stateNode,ji(),Fe(Gt),Fe(Tt),y0(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Ju(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Rn!==null&&(Yh(Rn),Rn=null))),Hh(e,t),Pt(t),null;case 5:v0(t);var a=Qa(jl.current);if(n=t.type,e!==null&&t.stateNode!=null)Q9(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(U(166));return Pt(t),null}if(e=Qa(cr.current),Ju(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[nr]=t,r[El]=o,e=(t.mode&1)!==0,n){case"dialog":Ie("cancel",r),Ie("close",r);break;case"iframe":case"object":case"embed":Ie("load",r);break;case"video":case"audio":for(a=0;a<el.length;a++)Ie(el[a],r);break;case"source":Ie("error",r);break;case"img":case"image":case"link":Ie("error",r),Ie("load",r);break;case"details":Ie("toggle",r);break;case"input":g1(r,o),Ie("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!o.multiple},Ie("invalid",r);break;case"textarea":w1(r,o),Ie("invalid",r)}hh(n,o),a=null;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];i==="children"?typeof s=="string"?r.textContent!==s&&(o.suppressHydrationWarning!==!0&&Zu(r.textContent,s,e),a=["children",s]):typeof s=="number"&&r.textContent!==""+s&&(o.suppressHydrationWarning!==!0&&Zu(r.textContent,s,e),a=["children",""+s]):xl.hasOwnProperty(i)&&s!=null&&i==="onScroll"&&Ie("scroll",r)}switch(n){case"input":Uu(r),x1(r,o,!0);break;case"textarea":Uu(r),b1(r);break;case"select":case"option":break;default:typeof o.onClick=="function"&&(r.onclick=Zc)}r=a,t.updateQueue=r,r!==null&&(t.flags|=4)}else{i=a.nodeType===9?a:a.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=_5(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=i.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[nr]=t,e[El]=r,Y9(e,t,!1,!1),t.stateNode=e;e:{switch(i=vh(n,r),n){case"dialog":Ie("cancel",e),Ie("close",e),a=r;break;case"iframe":case"object":case"embed":Ie("load",e),a=r;break;case"video":case"audio":for(a=0;a<el.length;a++)Ie(el[a],e);a=r;break;case"source":Ie("error",e),a=r;break;case"img":case"image":case"link":Ie("error",e),Ie("load",e),a=r;break;case"details":Ie("toggle",e),a=r;break;case"input":g1(e,r),a=ch(e,r),Ie("invalid",e);break;case"option":a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=Ue({},r,{value:void 0}),Ie("invalid",e);break;case"textarea":w1(e,r),a=dh(e,r),Ie("invalid",e);break;default:a=r}hh(n,a),s=a;for(o in s)if(s.hasOwnProperty(o)){var l=s[o];o==="style"?E5(e,l):o==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&A5(e,l)):o==="children"?typeof l=="string"?(n!=="textarea"||l!=="")&&wl(e,l):typeof l=="number"&&wl(e,""+l):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(xl.hasOwnProperty(o)?l!=null&&o==="onScroll"&&Ie("scroll",e):l!=null&&Vy(e,o,l,i))}switch(n){case"input":Uu(e),x1(e,r,!1);break;case"textarea":Uu(e),b1(e);break;case"option":r.value!=null&&e.setAttribute("value",""+ka(r.value));break;case"select":e.multiple=!!r.multiple,o=r.value,o!=null?oi(e,!!r.multiple,o,!1):r.defaultValue!=null&&oi(e,!!r.multiple,r.defaultValue,!0);break;default:typeof a.onClick=="function"&&(e.onclick=Zc)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return Pt(t),null;case 6:if(e&&t.stateNode!=null)Z9(e,t,e.memoizedProps,r);else{if(typeof r!="string"&&t.stateNode===null)throw Error(U(166));if(n=Qa(jl.current),Qa(cr.current),Ju(t)){if(r=t.stateNode,n=t.memoizedProps,r[nr]=t,(o=r.nodeValue!==n)&&(e=nn,e!==null))switch(e.tag){case 3:Zu(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Zu(r.nodeValue,n,(e.mode&1)!==0)}o&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[nr]=t,t.stateNode=r}return Pt(t),null;case 13:if(Fe(He),r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(ze&&en!==null&&t.mode&1&&!(t.flags&128))v9(),Ei(),t.flags|=98560,o=!1;else if(o=Ju(t),r!==null&&r.dehydrated!==null){if(e===null){if(!o)throw Error(U(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(U(317));o[nr]=t}else Ei(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Pt(t),o=!1}else Rn!==null&&(Yh(Rn),Rn=null),o=!0;if(!o)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(r=r!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||He.current&1?ot===0&&(ot=3):E0())),t.updateQueue!==null&&(t.flags|=4),Pt(t),null);case 4:return ji(),Hh(e,t),e===null&&Al(t.stateNode.containerInfo),Pt(t),null;case 10:return p0(t.type._context),Pt(t),null;case 17:return Ut(t.type)&&Jc(),Pt(t),null;case 19:if(Fe(He),o=t.memoizedState,o===null)return Pt(t),null;if(r=(t.flags&128)!==0,i=o.rendering,i===null)if(r)Ds(o,!1);else{if(ot!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=sf(e),i!==null){for(t.flags|=128,Ds(o,!1),r=i.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)o=n,e=r,o.flags&=14680066,i=o.alternate,i===null?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=i.childLanes,o.lanes=i.lanes,o.child=i.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=i.memoizedProps,o.memoizedState=i.memoizedState,o.updateQueue=i.updateQueue,o.type=i.type,e=i.dependencies,o.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return $e(He,He.current&1|2),t.child}e=e.sibling}o.tail!==null&&Ke()>Ni&&(t.flags|=128,r=!0,Ds(o,!1),t.lanes=4194304)}else{if(!r)if(e=sf(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ds(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!ze)return Pt(t),null}else 2*Ke()-o.renderingStartTime>Ni&&n!==1073741824&&(t.flags|=128,r=!0,Ds(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Ke(),t.sibling=null,n=He.current,$e(He,r?n&1|2:n&1),t):(Pt(t),null);case 22:case 23:return C0(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Yt&1073741824&&(Pt(t),t.subtreeFlags&6&&(t.flags|=8192)):Pt(t),null;case 24:return null;case 25:return null}throw Error(U(156,t.tag))}function I_(e,t){switch(l0(t),t.tag){case 1:return Ut(t.type)&&Jc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ji(),Fe(Gt),Fe(Tt),y0(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return v0(t),null;case 13:if(Fe(He),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(U(340));Ei()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Fe(He),null;case 4:return ji(),null;case 10:return p0(t.type._context),null;case 22:case 23:return C0(),null;case 24:return null;default:return null}}var nc=!1,_t=!1,D_=typeof WeakSet=="function"?WeakSet:Set,Y=null;function ei(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){qe(e,t,r)}else n.current=null}function Gh(e,t,n){try{n()}catch(r){qe(e,t,r)}}var cx=!1;function L_(e,t){if(_h=Xc,e=r9(),i0(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,s=-1,l=-1,u=0,f=0,c=e,p=null;t:for(;;){for(var d;c!==n||a!==0&&c.nodeType!==3||(s=i+a),c!==o||r!==0&&c.nodeType!==3||(l=i+r),c.nodeType===3&&(i+=c.nodeValue.length),(d=c.firstChild)!==null;)p=c,c=d;for(;;){if(c===e)break t;if(p===n&&++u===a&&(s=i),p===o&&++f===r&&(l=i),(d=c.nextSibling)!==null)break;c=p,p=c.parentNode}c=d}n=s===-1||l===-1?null:{start:s,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Ah={focusedElem:e,selectionRange:n},Xc=!1,Y=t;Y!==null;)if(t=Y,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Y=e;else for(;Y!==null;){t=Y;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var m=h.memoizedProps,g=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:Cn(t.type,m),g);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var x=t.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(U(163))}}catch(P){qe(t,t.return,P)}if(e=t.sibling,e!==null){e.return=t.return,Y=e;break}Y=t.return}return h=cx,cx=!1,h}function ul(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,o!==void 0&&Gh(t,n,o)}a=a.next}while(a!==r)}}function Mp(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Uh(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function J9(e){var t=e.alternate;t!==null&&(e.alternate=null,J9(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[nr],delete t[El],delete t[Th],delete t[w_],delete t[b_])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function e6(e){return e.tag===5||e.tag===3||e.tag===4}function fx(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||e6(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.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 Wh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Zc));else if(r!==4&&(e=e.child,e!==null))for(Wh(e,t,n),e=e.sibling;e!==null;)Wh(e,t,n),e=e.sibling}function qh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(qh(e,t,n),e=e.sibling;e!==null;)qh(e,t,n),e=e.sibling}var ht=null,$n=!1;function Kr(e,t,n){for(n=n.child;n!==null;)t6(e,t,n),n=n.sibling}function t6(e,t,n){if(ur&&typeof ur.onCommitFiberUnmount=="function")try{ur.onCommitFiberUnmount(_p,n)}catch{}switch(n.tag){case 5:_t||ei(n,t);case 6:var r=ht,a=$n;ht=null,Kr(e,t,n),ht=r,$n=a,ht!==null&&($n?(e=ht,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ht.removeChild(n.stateNode));break;case 18:ht!==null&&($n?(e=ht,n=n.stateNode,e.nodeType===8?um(e.parentNode,n):e.nodeType===1&&um(e,n),Ol(e)):um(ht,n.stateNode));break;case 4:r=ht,a=$n,ht=n.stateNode.containerInfo,$n=!0,Kr(e,t,n),ht=r,$n=a;break;case 0:case 11:case 14:case 15:if(!_t&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Gh(n,t,i),a=a.next}while(a!==r)}Kr(e,t,n);break;case 1:if(!_t&&(ei(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){qe(n,t,s)}Kr(e,t,n);break;case 21:Kr(e,t,n);break;case 22:n.mode&1?(_t=(r=_t)||n.memoizedState!==null,Kr(e,t,n),_t=r):Kr(e,t,n);break;default:Kr(e,t,n)}}function px(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new D_),t.forEach(function(r){var a=V_.bind(null,e,r);n.has(r)||(n.add(r),r.then(a,a))})}}function kn(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var a=n[r];try{var o=e,i=t,s=i;e:for(;s!==null;){switch(s.tag){case 5:ht=s.stateNode,$n=!1;break e;case 3:ht=s.stateNode.containerInfo,$n=!0;break e;case 4:ht=s.stateNode.containerInfo,$n=!0;break e}s=s.return}if(ht===null)throw Error(U(160));t6(o,i,a),ht=null,$n=!1;var l=a.alternate;l!==null&&(l.return=null),a.return=null}catch(u){qe(a,t,u)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)n6(t,e),t=t.sibling}function n6(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(kn(t,e),Yn(e),r&4){try{ul(3,e,e.return),Mp(3,e)}catch(m){qe(e,e.return,m)}try{ul(5,e,e.return)}catch(m){qe(e,e.return,m)}}break;case 1:kn(t,e),Yn(e),r&512&&n!==null&&ei(n,n.return);break;case 5:if(kn(t,e),Yn(e),r&512&&n!==null&&ei(n,n.return),e.flags&32){var a=e.stateNode;try{wl(a,"")}catch(m){qe(e,e.return,m)}}if(r&4&&(a=e.stateNode,a!=null)){var o=e.memoizedProps,i=n!==null?n.memoizedProps:o,s=e.type,l=e.updateQueue;if(e.updateQueue=null,l!==null)try{s==="input"&&o.type==="radio"&&o.name!=null&&O5(a,o),vh(s,i);var u=vh(s,o);for(i=0;i<l.length;i+=2){var f=l[i],c=l[i+1];f==="style"?E5(a,c):f==="dangerouslySetInnerHTML"?A5(a,c):f==="children"?wl(a,c):Vy(a,f,c,u)}switch(s){case"input":fh(a,o);break;case"textarea":k5(a,o);break;case"select":var p=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var d=o.value;d!=null?oi(a,!!o.multiple,d,!1):p!==!!o.multiple&&(o.defaultValue!=null?oi(a,!!o.multiple,o.defaultValue,!0):oi(a,!!o.multiple,o.multiple?[]:"",!1))}a[El]=o}catch(m){qe(e,e.return,m)}}break;case 6:if(kn(t,e),Yn(e),r&4){if(e.stateNode===null)throw Error(U(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(m){qe(e,e.return,m)}}break;case 3:if(kn(t,e),Yn(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{Ol(t.containerInfo)}catch(m){qe(e,e.return,m)}break;case 4:kn(t,e),Yn(e);break;case 13:kn(t,e),Yn(e),a=e.child,a.flags&8192&&(o=a.memoizedState!==null,a.stateNode.isHidden=o,!o||a.alternate!==null&&a.alternate.memoizedState!==null||(_0=Ke())),r&4&&px(e);break;case 22:if(f=n!==null&&n.memoizedState!==null,e.mode&1?(_t=(u=_t)||f,kn(t,e),_t=u):kn(t,e),Yn(e),r&8192){if(u=e.memoizedState!==null,(e.stateNode.isHidden=u)&&!f&&e.mode&1)for(Y=e,f=e.child;f!==null;){for(c=Y=f;Y!==null;){switch(p=Y,d=p.child,p.tag){case 0:case 11:case 14:case 15:ul(4,p,p.return);break;case 1:ei(p,p.return);var h=p.stateNode;if(typeof h.componentWillUnmount=="function"){r=p,n=p.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(m){qe(r,n,m)}}break;case 5:ei(p,p.return);break;case 22:if(p.memoizedState!==null){mx(c);continue}}d!==null?(d.return=p,Y=d):mx(c)}f=f.sibling}e:for(f=null,c=e;;){if(c.tag===5){if(f===null){f=c;try{a=c.stateNode,u?(o=a.style,typeof o.setProperty=="function"?o.setProperty("display","none","important"):o.display="none"):(s=c.stateNode,l=c.memoizedProps.style,i=l!=null&&l.hasOwnProperty("display")?l.display:null,s.style.display=C5("display",i))}catch(m){qe(e,e.return,m)}}}else if(c.tag===6){if(f===null)try{c.stateNode.nodeValue=u?"":c.memoizedProps}catch(m){qe(e,e.return,m)}}else if((c.tag!==22&&c.tag!==23||c.memoizedState===null||c===e)&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break e;for(;c.sibling===null;){if(c.return===null||c.return===e)break e;f===c&&(f=null),c=c.return}f===c&&(f=null),c.sibling.return=c.return,c=c.sibling}}break;case 19:kn(t,e),Yn(e),r&4&&px(e);break;case 21:break;default:kn(t,e),Yn(e)}}function Yn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(e6(n)){var r=n;break e}n=n.return}throw Error(U(160))}switch(r.tag){case 5:var a=r.stateNode;r.flags&32&&(wl(a,""),r.flags&=-33);var o=fx(e);qh(e,o,a);break;case 3:case 4:var i=r.stateNode.containerInfo,s=fx(e);Wh(e,s,i);break;default:throw Error(U(161))}}catch(l){qe(e,e.return,l)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function F_(e,t,n){Y=e,r6(e)}function r6(e,t,n){for(var r=(e.mode&1)!==0;Y!==null;){var a=Y,o=a.child;if(a.tag===22&&r){var i=a.memoizedState!==null||nc;if(!i){var s=a.alternate,l=s!==null&&s.memoizedState!==null||_t;s=nc;var u=_t;if(nc=i,(_t=l)&&!u)for(Y=a;Y!==null;)i=Y,l=i.child,i.tag===22&&i.memoizedState!==null?hx(a):l!==null?(l.return=i,Y=l):hx(a);for(;o!==null;)Y=o,r6(o),o=o.sibling;Y=a,nc=s,_t=u}dx(e)}else a.subtreeFlags&8772&&o!==null?(o.return=a,Y=o):dx(e)}}function dx(e){for(;Y!==null;){var t=Y;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:_t||Mp(5,t);break;case 1:var r=t.stateNode;if(t.flags&4&&!_t)if(n===null)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:Cn(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var o=t.updateQueue;o!==null&&Q1(t,o,r);break;case 3:var i=t.updateQueue;if(i!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}Q1(t,i,n)}break;case 5:var s=t.stateNode;if(n===null&&t.flags&4){n=s;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var u=t.alternate;if(u!==null){var f=u.memoizedState;if(f!==null){var c=f.dehydrated;c!==null&&Ol(c)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(U(163))}_t||t.flags&512&&Uh(t)}catch(p){qe(t,t.return,p)}}if(t===e){Y=null;break}if(n=t.sibling,n!==null){n.return=t.return,Y=n;break}Y=t.return}}function mx(e){for(;Y!==null;){var t=Y;if(t===e){Y=null;break}var n=t.sibling;if(n!==null){n.return=t.return,Y=n;break}Y=t.return}}function hx(e){for(;Y!==null;){var t=Y;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Mp(4,t)}catch(l){qe(t,n,l)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount=="function"){var a=t.return;try{r.componentDidMount()}catch(l){qe(t,a,l)}}var o=t.return;try{Uh(t)}catch(l){qe(t,o,l)}break;case 5:var i=t.return;try{Uh(t)}catch(l){qe(t,i,l)}}}catch(l){qe(t,t.return,l)}if(t===e){Y=null;break}var s=t.sibling;if(s!==null){s.return=t.return,Y=s;break}Y=t.return}}var z_=Math.ceil,cf=Gr.ReactCurrentDispatcher,O0=Gr.ReactCurrentOwner,yn=Gr.ReactCurrentBatchConfig,de=0,pt=null,et=null,gt=0,Yt=0,ti=ja(0),ot=0,Rl=null,go=0,Rp=0,k0=0,cl=null,zt=null,_0=0,Ni=1/0,Pr=null,ff=!1,Vh=null,ba=null,rc=!1,pa=null,pf=0,fl=0,Kh=null,Rc=-1,Ic=0;function Dt(){return de&6?Ke():Rc!==-1?Rc:Rc=Ke()}function Pa(e){return e.mode&1?de&2&&gt!==0?gt&-gt:S_.transition!==null?(Ic===0&&(Ic=B5()),Ic):(e=ke,e!==0||(e=window.event,e=e===void 0?16:K5(e.type)),e):1}function Gn(e,t,n,r){if(50<fl)throw fl=0,Kh=null,Error(U(185));_u(e,n,r),(!(de&2)||e!==pt)&&(e===pt&&(!(de&2)&&(Rp|=n),ot===4&&aa(e,gt)),Wt(e,r),n===1&&de===0&&!(t.mode&1)&&(Ni=Ke()+500,jp&&$a()))}function Wt(e,t){var n=e.callbackNode;Sk(e,t);var r=Kc(e,e===pt?gt:0);if(r===0)n!==null&&O1(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&O1(n),t===1)e.tag===0?P_(vx.bind(null,e)):d9(vx.bind(null,e)),g_(function(){!(de&6)&&$a()}),n=null;else{switch(H5(r)){case 1:n=Zy;break;case 4:n=F5;break;case 16:n=Vc;break;case 536870912:n=z5;break;default:n=Vc}n=f6(n,a6.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function a6(e,t){if(Rc=-1,Ic=0,de&6)throw Error(U(327));var n=e.callbackNode;if(ci()&&e.callbackNode!==n)return null;var r=Kc(e,e===pt?gt:0);if(r===0)return null;if(r&30||r&e.expiredLanes||t)t=df(e,r);else{t=r;var a=de;de|=2;var o=i6();(pt!==e||gt!==t)&&(Pr=null,Ni=Ke()+500,uo(e,t));do try{G_();break}catch(s){o6(e,s)}while(!0);f0(),cf.current=o,de=a,et!==null?t=0:(pt=null,gt=0,t=ot)}if(t!==0){if(t===2&&(a=bh(e),a!==0&&(r=a,t=Xh(e,a))),t===1)throw n=Rl,uo(e,0),aa(e,r),Wt(e,Ke()),n;if(t===6)aa(e,r);else{if(a=e.current.alternate,!(r&30)&&!B_(a)&&(t=df(e,r),t===2&&(o=bh(e),o!==0&&(r=o,t=Xh(e,o))),t===1))throw n=Rl,uo(e,0),aa(e,r),Wt(e,Ke()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(U(345));case 2:Wa(e,zt,Pr);break;case 3:if(aa(e,r),(r&130023424)===r&&(t=_0+500-Ke(),10<t)){if(Kc(e,0)!==0)break;if(a=e.suspendedLanes,(a&r)!==r){Dt(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=Eh(Wa.bind(null,e,zt,Pr),t);break}Wa(e,zt,Pr);break;case 4:if(aa(e,r),(r&4194240)===r)break;for(t=e.eventTimes,a=-1;0<r;){var i=31-Hn(r);o=1<<i,i=t[i],i>a&&(a=i),r&=~o}if(r=a,r=Ke()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*z_(r/1960))-r,10<r){e.timeoutHandle=Eh(Wa.bind(null,e,zt,Pr),r);break}Wa(e,zt,Pr);break;case 5:Wa(e,zt,Pr);break;default:throw Error(U(329))}}}return Wt(e,Ke()),e.callbackNode===n?a6.bind(null,e):null}function Xh(e,t){var n=cl;return e.current.memoizedState.isDehydrated&&(uo(e,t).flags|=256),e=df(e,t),e!==2&&(t=zt,zt=n,t!==null&&Yh(t)),e}function Yh(e){zt===null?zt=e:zt.push.apply(zt,e)}function B_(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!Un(o(),a))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function aa(e,t){for(t&=~k0,t&=~Rp,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Hn(t),r=1<<n;e[n]=-1,t&=~r}}function vx(e){if(de&6)throw Error(U(327));ci();var t=Kc(e,0);if(!(t&1))return Wt(e,Ke()),null;var n=df(e,t);if(e.tag!==0&&n===2){var r=bh(e);r!==0&&(t=r,n=Xh(e,r))}if(n===1)throw n=Rl,uo(e,0),aa(e,t),Wt(e,Ke()),n;if(n===6)throw Error(U(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Wa(e,zt,Pr),Wt(e,Ke()),null}function A0(e,t){var n=de;de|=1;try{return e(t)}finally{de=n,de===0&&(Ni=Ke()+500,jp&&$a())}}function xo(e){pa!==null&&pa.tag===0&&!(de&6)&&ci();var t=de;de|=1;var n=yn.transition,r=ke;try{if(yn.transition=null,ke=1,e)return e()}finally{ke=r,yn.transition=n,de=t,!(de&6)&&$a()}}function C0(){Yt=ti.current,Fe(ti)}function uo(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,y_(n)),et!==null)for(n=et.return;n!==null;){var r=n;switch(l0(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&Jc();break;case 3:ji(),Fe(Gt),Fe(Tt),y0();break;case 5:v0(r);break;case 4:ji();break;case 13:Fe(He);break;case 19:Fe(He);break;case 10:p0(r.type._context);break;case 22:case 23:C0()}n=n.return}if(pt=e,et=e=Sa(e.current,null),gt=Yt=t,ot=0,Rl=null,k0=Rp=go=0,zt=cl=null,Ya!==null){for(t=0;t<Ya.length;t++)if(n=Ya[t],r=n.interleaved,r!==null){n.interleaved=null;var a=r.next,o=n.pending;if(o!==null){var i=o.next;o.next=a,r.next=i}n.pending=r}Ya=null}return e}function o6(e,t){do{var n=et;try{if(f0(),$c.current=uf,lf){for(var r=Ge.memoizedState;r!==null;){var a=r.queue;a!==null&&(a.pending=null),r=r.next}lf=!1}if(yo=0,ct=at=Ge=null,ll=!1,$l=0,O0.current=null,n===null||n.return===null){ot=1,Rl=t,et=null;break}e:{var o=e,i=n.return,s=n,l=t;if(t=gt,s.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){var u=l,f=s,c=f.tag;if(!(f.mode&1)&&(c===0||c===11||c===15)){var p=f.alternate;p?(f.updateQueue=p.updateQueue,f.memoizedState=p.memoizedState,f.lanes=p.lanes):(f.updateQueue=null,f.memoizedState=null)}var d=rx(i);if(d!==null){d.flags&=-257,ax(d,i,s,o,t),d.mode&1&&nx(o,u,t),t=d,l=u;var h=t.updateQueue;if(h===null){var m=new Set;m.add(l),t.updateQueue=m}else h.add(l);break e}else{if(!(t&1)){nx(o,u,t),E0();break e}l=Error(U(426))}}else if(ze&&s.mode&1){var g=rx(i);if(g!==null){!(g.flags&65536)&&(g.flags|=256),ax(g,i,s,o,t),u0($i(l,s));break e}}o=l=$i(l,s),ot!==4&&(ot=2),cl===null?cl=[o]:cl.push(o),o=i;do{switch(o.tag){case 3:o.flags|=65536,t&=-t,o.lanes|=t;var v=H9(o,l,t);Y1(o,v);break e;case 1:s=l;var y=o.type,x=o.stateNode;if(!(o.flags&128)&&(typeof y.getDerivedStateFromError=="function"||x!==null&&typeof x.componentDidCatch=="function"&&(ba===null||!ba.has(x)))){o.flags|=65536,t&=-t,o.lanes|=t;var P=G9(o,s,t);Y1(o,P);break e}}o=o.return}while(o!==null)}l6(n)}catch(w){t=w,et===n&&n!==null&&(et=n=n.return);continue}break}while(!0)}function i6(){var e=cf.current;return cf.current=uf,e===null?uf:e}function E0(){(ot===0||ot===3||ot===2)&&(ot=4),pt===null||!(go&268435455)&&!(Rp&268435455)||aa(pt,gt)}function df(e,t){var n=de;de|=2;var r=i6();(pt!==e||gt!==t)&&(Pr=null,uo(e,t));do try{H_();break}catch(a){o6(e,a)}while(!0);if(f0(),de=n,cf.current=r,et!==null)throw Error(U(261));return pt=null,gt=0,ot}function H_(){for(;et!==null;)s6(et)}function G_(){for(;et!==null&&!mk();)s6(et)}function s6(e){var t=c6(e.alternate,e,Yt);e.memoizedProps=e.pendingProps,t===null?l6(e):et=t,O0.current=null}function l6(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=I_(n,t),n!==null){n.flags&=32767,et=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{ot=6,et=null;return}}else if(n=R_(n,t,Yt),n!==null){et=n;return}if(t=t.sibling,t!==null){et=t;return}et=t=e}while(t!==null);ot===0&&(ot=5)}function Wa(e,t,n){var r=ke,a=yn.transition;try{yn.transition=null,ke=1,U_(e,t,n,r)}finally{yn.transition=a,ke=r}return null}function U_(e,t,n,r){do ci();while(pa!==null);if(de&6)throw Error(U(327));n=e.finishedWork;var a=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(U(177));e.callbackNode=null,e.callbackPriority=0;var o=n.lanes|n.childLanes;if(Ok(e,o),e===pt&&(et=pt=null,gt=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||rc||(rc=!0,f6(Vc,function(){return ci(),null})),o=(n.flags&15990)!==0,n.subtreeFlags&15990||o){o=yn.transition,yn.transition=null;var i=ke;ke=1;var s=de;de|=4,O0.current=null,L_(e,n),n6(n,e),c_(Ah),Xc=!!_h,Ah=_h=null,e.current=n,F_(n),hk(),de=s,ke=i,yn.transition=o}else e.current=n;if(rc&&(rc=!1,pa=e,pf=a),o=e.pendingLanes,o===0&&(ba=null),gk(n.stateNode),Wt(e,Ke()),t!==null)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(ff)throw ff=!1,e=Vh,Vh=null,e;return pf&1&&e.tag!==0&&ci(),o=e.pendingLanes,o&1?e===Kh?fl++:(fl=0,Kh=e):fl=0,$a(),null}function ci(){if(pa!==null){var e=H5(pf),t=yn.transition,n=ke;try{if(yn.transition=null,ke=16>e?16:e,pa===null)var r=!1;else{if(e=pa,pa=null,pf=0,de&6)throw Error(U(331));var a=de;for(de|=4,Y=e.current;Y!==null;){var o=Y,i=o.child;if(Y.flags&16){var s=o.deletions;if(s!==null){for(var l=0;l<s.length;l++){var u=s[l];for(Y=u;Y!==null;){var f=Y;switch(f.tag){case 0:case 11:case 15:ul(8,f,o)}var c=f.child;if(c!==null)c.return=f,Y=c;else for(;Y!==null;){f=Y;var p=f.sibling,d=f.return;if(J9(f),f===u){Y=null;break}if(p!==null){p.return=d,Y=p;break}Y=d}}}var h=o.alternate;if(h!==null){var m=h.child;if(m!==null){h.child=null;do{var g=m.sibling;m.sibling=null,m=g}while(m!==null)}}Y=o}}if(o.subtreeFlags&2064&&i!==null)i.return=o,Y=i;else e:for(;Y!==null;){if(o=Y,o.flags&2048)switch(o.tag){case 0:case 11:case 15:ul(9,o,o.return)}var v=o.sibling;if(v!==null){v.return=o.return,Y=v;break e}Y=o.return}}var y=e.current;for(Y=y;Y!==null;){i=Y;var x=i.child;if(i.subtreeFlags&2064&&x!==null)x.return=i,Y=x;else e:for(i=y;Y!==null;){if(s=Y,s.flags&2048)try{switch(s.tag){case 0:case 11:case 15:Mp(9,s)}}catch(w){qe(s,s.return,w)}if(s===i){Y=null;break e}var P=s.sibling;if(P!==null){P.return=s.return,Y=P;break e}Y=s.return}}if(de=a,$a(),ur&&typeof ur.onPostCommitFiberRoot=="function")try{ur.onPostCommitFiberRoot(_p,e)}catch{}r=!0}return r}finally{ke=n,yn.transition=t}}return!1}function yx(e,t,n){t=$i(n,t),t=H9(e,t,1),e=wa(e,t,1),t=Dt(),e!==null&&(_u(e,1,t),Wt(e,t))}function qe(e,t,n){if(e.tag===3)yx(e,e,n);else for(;t!==null;){if(t.tag===3){yx(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(ba===null||!ba.has(r))){e=$i(n,e),e=G9(t,e,1),t=wa(t,e,1),e=Dt(),t!==null&&(_u(t,1,e),Wt(t,e));break}}t=t.return}}function W_(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=Dt(),e.pingedLanes|=e.suspendedLanes&n,pt===e&&(gt&n)===n&&(ot===4||ot===3&&(gt&130023424)===gt&&500>Ke()-_0?uo(e,0):k0|=n),Wt(e,t)}function u6(e,t){t===0&&(e.mode&1?(t=Vu,Vu<<=1,!(Vu&130023424)&&(Vu=4194304)):t=1);var n=Dt();e=Ir(e,t),e!==null&&(_u(e,t,n),Wt(e,n))}function q_(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),u6(e,n)}function V_(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(U(314))}r!==null&&r.delete(t),u6(e,n)}var c6;c6=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Gt.current)Bt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Bt=!1,M_(e,t,n);Bt=!!(e.flags&131072)}else Bt=!1,ze&&t.flags&1048576&&m9(t,nf,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Mc(e,t),e=t.pendingProps;var a=Ci(t,Tt.current);ui(t,n),a=x0(null,t,r,e,a,n);var o=w0();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ut(r)?(o=!0,ef(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,m0(t),a.updater=Np,t.stateNode=a,a._reactInternals=t,Ih(t,r,e,n),t=Fh(null,t,r,!0,o,n)):(t.tag=0,ze&&o&&s0(t),Nt(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Mc(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=X_(r),e=Cn(r,e),a){case 0:t=Lh(null,t,r,e,n);break e;case 1:t=sx(null,t,r,e,n);break e;case 11:t=ox(null,t,r,e,n);break e;case 14:t=ix(null,t,r,Cn(r.type,e),n);break e}throw Error(U(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),Lh(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),sx(e,t,r,a,n);case 3:e:{if(V9(t),e===null)throw Error(U(387));r=t.pendingProps,o=t.memoizedState,a=o.element,w9(e,t),of(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=$i(Error(U(423)),t),t=lx(e,t,r,n,a);break e}else if(r!==a){a=$i(Error(U(424)),t),t=lx(e,t,r,n,a);break e}else for(en=xa(t.stateNode.containerInfo.firstChild),nn=t,ze=!0,Rn=null,n=g9(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Ei(),r===a){t=Dr(e,t,n);break e}Nt(e,t,r,n)}t=t.child}return t;case 5:return b9(t),e===null&&Nh(t),r=t.type,a=t.pendingProps,o=e!==null?e.memoizedProps:null,i=a.children,Ch(r,a)?i=null:o!==null&&Ch(r,o)&&(t.flags|=32),q9(e,t),Nt(e,t,i,n),t.child;case 6:return e===null&&Nh(t),null;case 13:return K9(e,t,n);case 4:return h0(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ti(t,null,r,n):Nt(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),ox(e,t,r,a,n);case 7:return Nt(e,t,t.pendingProps,n),t.child;case 8:return Nt(e,t,t.pendingProps.children,n),t.child;case 12:return Nt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,i=a.value,$e(rf,r._currentValue),r._currentValue=i,o!==null)if(Un(o.value,i)){if(o.children===a.children&&!Gt.current){t=Dr(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){i=o.child;for(var l=s.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Tr(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var f=u.pending;f===null?l.next=l:(l.next=f.next,f.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),Mh(o.return,n,t),s.lanes|=n;break}l=l.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(U(341));i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),Mh(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}Nt(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,ui(t,n),a=xn(a),r=r(a),t.flags|=1,Nt(e,t,r,n),t.child;case 14:return r=t.type,a=Cn(r,t.pendingProps),a=Cn(r.type,a),ix(e,t,r,a,n);case 15:return U9(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:Cn(r,a),Mc(e,t),t.tag=1,Ut(r)?(e=!0,ef(t)):e=!1,ui(t,n),B9(t,r,a),Ih(t,r,a,n),Fh(null,t,r,!0,e,n);case 19:return X9(e,t,n);case 22:return W9(e,t,n)}throw Error(U(156,t.tag))};function f6(e,t){return L5(e,t)}function K_(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function hn(e,t,n,r){return new K_(e,t,n,r)}function T0(e){return e=e.prototype,!(!e||!e.isReactComponent)}function X_(e){if(typeof e=="function")return T0(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Xy)return 11;if(e===Yy)return 14}return 2}function Sa(e,t){var n=e.alternate;return n===null?(n=hn(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Dc(e,t,n,r,a,o){var i=2;if(r=e,typeof e=="function")T0(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Wo:return co(n.children,a,o,t);case Ky:i=8,a|=8;break;case ih:return e=hn(12,n,t,a|2),e.elementType=ih,e.lanes=o,e;case sh:return e=hn(13,n,t,a),e.elementType=sh,e.lanes=o,e;case lh:return e=hn(19,n,t,a),e.elementType=lh,e.lanes=o,e;case b5:return Ip(n,a,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case x5:i=10;break e;case w5:i=9;break e;case Xy:i=11;break e;case Yy:i=14;break e;case ea:i=16,r=null;break e}throw Error(U(130,e==null?e:typeof e,""))}return t=hn(i,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function co(e,t,n,r){return e=hn(7,e,r,t),e.lanes=n,e}function Ip(e,t,n,r){return e=hn(22,e,r,t),e.elementType=b5,e.lanes=n,e.stateNode={isHidden:!1},e}function ym(e,t,n){return e=hn(6,e,null,t),e.lanes=n,e}function gm(e,t,n){return t=hn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Y_(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Zd(0),this.expirationTimes=Zd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Zd(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function j0(e,t,n,r,a,o,i,s,l){return e=new Y_(e,t,n,s,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=hn(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},m0(o),e}function Q_(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Uo,key:r==null?null:""+r,children:e,containerInfo:t,implementation:n}}function p6(e){if(!e)return _a;e=e._reactInternals;e:{if(To(e)!==e||e.tag!==1)throw Error(U(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ut(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(U(171))}if(e.tag===1){var n=e.type;if(Ut(n))return p9(e,n,t)}return t}function d6(e,t,n,r,a,o,i,s,l){return e=j0(n,r,!0,e,a,o,i,s,l),e.context=p6(null),n=e.current,r=Dt(),a=Pa(n),o=Tr(r,a),o.callback=t??null,wa(n,o,a),e.current.lanes=a,_u(e,a,r),Wt(e,r),e}function Dp(e,t,n,r){var a=t.current,o=Dt(),i=Pa(a);return n=p6(n),t.context===null?t.context=n:t.pendingContext=n,t=Tr(o,i),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),e=wa(a,t,i),e!==null&&(Gn(e,a,i,o),jc(e,a,i)),i}function mf(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function gx(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function $0(e,t){gx(e,t),(e=e.alternate)&&gx(e,t)}function Z_(){return null}var m6=typeof reportError=="function"?reportError:function(e){console.error(e)};function N0(e){this._internalRoot=e}Lp.prototype.render=N0.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(U(409));Dp(e,t,null,null)};Lp.prototype.unmount=N0.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;xo(function(){Dp(null,e,null,null)}),t[Rr]=null}};function Lp(e){this._internalRoot=e}Lp.prototype.unstable_scheduleHydration=function(e){if(e){var t=W5();e={blockedOn:null,target:e,priority:t};for(var n=0;n<ra.length&&t!==0&&t<ra[n].priority;n++);ra.splice(n,0,e),n===0&&V5(e)}};function M0(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function Fp(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function xx(){}function J_(e,t,n,r,a){if(a){if(typeof r=="function"){var o=r;r=function(){var u=mf(i);o.call(u)}}var i=d6(t,r,e,0,null,!1,!1,"",xx);return e._reactRootContainer=i,e[Rr]=i.current,Al(e.nodeType===8?e.parentNode:e),xo(),i}for(;a=e.lastChild;)e.removeChild(a);if(typeof r=="function"){var s=r;r=function(){var u=mf(l);s.call(u)}}var l=j0(e,0,!1,null,null,!1,!1,"",xx);return e._reactRootContainer=l,e[Rr]=l.current,Al(e.nodeType===8?e.parentNode:e),xo(function(){Dp(t,l,n,r)}),l}function zp(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if(typeof a=="function"){var s=a;a=function(){var l=mf(i);s.call(l)}}Dp(t,i,e,a)}else i=J_(n,t,e,a,r);return mf(i)}G5=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Js(t.pendingLanes);n!==0&&(Jy(t,n|1),Wt(t,Ke()),!(de&6)&&(Ni=Ke()+500,$a()))}break;case 13:xo(function(){var r=Ir(e,1);if(r!==null){var a=Dt();Gn(r,e,1,a)}}),$0(e,1)}};e0=function(e){if(e.tag===13){var t=Ir(e,134217728);if(t!==null){var n=Dt();Gn(t,e,134217728,n)}$0(e,134217728)}};U5=function(e){if(e.tag===13){var t=Pa(e),n=Ir(e,t);if(n!==null){var r=Dt();Gn(n,e,t,r)}$0(e,t)}};W5=function(){return ke};q5=function(e,t){var n=ke;try{return ke=e,t()}finally{ke=n}};gh=function(e,t,n){switch(t){case"input":if(fh(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=Tp(r);if(!a)throw Error(U(90));S5(r),fh(r,a)}}}break;case"textarea":k5(e,n);break;case"select":t=n.value,t!=null&&oi(e,!!n.multiple,t,!1)}};$5=A0;N5=xo;var eA={usingClientEntryPoint:!1,Events:[Cu,Xo,Tp,T5,j5,A0]},Ls={findFiberByHostInstance:Xa,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},tA={bundleType:Ls.bundleType,version:Ls.version,rendererPackageName:Ls.rendererPackageName,rendererConfig:Ls.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Gr.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=I5(e),e===null?null:e.stateNode},findFiberByHostInstance:Ls.findFiberByHostInstance||Z_,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var ac=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ac.isDisabled&&ac.supportsFiber)try{_p=ac.inject(tA),ur=ac}catch{}}on.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=eA;on.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!M0(t))throw Error(U(200));return Q_(e,t,null,n)};on.createRoot=function(e,t){if(!M0(e))throw Error(U(299));var n=!1,r="",a=m6;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onRecoverableError!==void 0&&(a=t.onRecoverableError)),t=j0(e,1,!1,null,null,n,!1,r,a),e[Rr]=t.current,Al(e.nodeType===8?e.parentNode:e),new N0(t)};on.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(U(188)):(e=Object.keys(e).join(","),Error(U(268,e)));return e=I5(t),e=e===null?null:e.stateNode,e};on.flushSync=function(e){return xo(e)};on.hydrate=function(e,t,n){if(!Fp(t))throw Error(U(200));return zp(null,e,t,!0,n)};on.hydrateRoot=function(e,t,n){if(!M0(e))throw Error(U(405));var r=n!=null&&n.hydratedSources||null,a=!1,o="",i=m6;if(n!=null&&(n.unstable_strictMode===!0&&(a=!0),n.identifierPrefix!==void 0&&(o=n.identifierPrefix),n.onRecoverableError!==void 0&&(i=n.onRecoverableError)),t=d6(t,null,e,1,n??null,a,!1,o,i),e[Rr]=t.current,Al(e),r)for(e=0;e<r.length;e++)n=r[e],a=n._getVersion,a=a(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Lp(t)};on.render=function(e,t,n){if(!Fp(t))throw Error(U(200));return zp(null,e,t,!1,n)};on.unmountComponentAtNode=function(e){if(!Fp(e))throw Error(U(40));return e._reactRootContainer?(xo(function(){zp(null,null,e,!1,function(){e._reactRootContainer=null,e[Rr]=null})}),!0):!1};on.unstable_batchedUpdates=A0;on.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Fp(n))throw Error(U(200));if(e==null||e._reactInternals===void 0)throw Error(U(38));return zp(e,t,n,!1,r)};on.version="18.3.1-next-f1338f8080-20240426";function h6(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(h6)}catch(e){console.error(e)}}h6(),h5.exports=on;var fs=h5.exports;const nA=Ce(fs);var wx=fs;Gc.createRoot=wx.createRoot,Gc.hydrateRoot=wx.hydrateRoot;function bx(e,[t,n]){return Math.min(n,Math.max(t,e))}function pe(e,t,{checkForDefaultPrevented:n=!0}={}){return function(a){if(e==null||e(a),n===!1||!a.defaultPrevented)return t==null?void 0:t(a)}}function ps(e,t=[]){let n=[];function r(o,i){const s=k.createContext(i),l=n.length;n=[...n,i];const u=c=>{var v;const{scope:p,children:d,...h}=c,m=((v=p==null?void 0:p[e])==null?void 0:v[l])||s,g=k.useMemo(()=>h,Object.values(h));return b.jsx(m.Provider,{value:g,children:d})};u.displayName=o+"Provider";function f(c,p){var m;const d=((m=p==null?void 0:p[e])==null?void 0:m[l])||s,h=k.useContext(d);if(h)return h;if(i!==void 0)return i;throw new Error(`\`${c}\` must be used within \`${o}\``)}return[u,f]}const a=()=>{const o=n.map(i=>k.createContext(i));return function(s){const l=(s==null?void 0:s[e])||o;return k.useMemo(()=>({[`__scope${e}`]:{...s,[e]:l}}),[s,l])}};return a.scopeName=e,[r,rA(a,...t)]}function rA(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(o){const i=r.reduce((s,{useScope:l,scopeName:u})=>{const c=l(o)[`__scope${u}`];return{...s,...c}},{});return k.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}function Px(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function v6(...e){return t=>{let n=!1;const r=e.map(a=>{const o=Px(a,t);return!n&&typeof o=="function"&&(n=!0),o});if(n)return()=>{for(let a=0;a<r.length;a++){const o=r[a];typeof o=="function"?o():Px(e[a],null)}}}}function Ye(...e){return k.useCallback(v6(...e),e)}function Il(e){const t=oA(e),n=k.forwardRef((r,a)=>{const{children:o,...i}=r,s=k.Children.toArray(o),l=s.find(sA);if(l){const u=l.props.children,f=s.map(c=>c===l?k.Children.count(u)>1?k.Children.only(null):k.isValidElement(u)?u.props.children:null:c);return b.jsx(t,{...i,ref:a,children:k.isValidElement(u)?k.cloneElement(u,void 0,f):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}var aA=Il("Slot");function oA(e){const t=k.forwardRef((n,r)=>{const{children:a,...o}=n;if(k.isValidElement(a)){const i=uA(a),s=lA(o,a.props);return a.type!==k.Fragment&&(s.ref=r?v6(r,i):i),k.cloneElement(a,s)}return k.Children.count(a)>1?k.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var y6=Symbol("radix.slottable");function iA(e){const t=({children:n})=>b.jsx(b.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=y6,t}function sA(e){return k.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===y6}function lA(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const l=o(...s);return a(...s),l}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function uA(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function g6(e){const t=e+"CollectionProvider",[n,r]=ps(t),[a,o]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=m=>{const{scope:g,children:v}=m,y=C.useRef(null),x=C.useRef(new Map).current;return b.jsx(a,{scope:g,itemMap:x,collectionRef:y,children:v})};i.displayName=t;const s=e+"CollectionSlot",l=Il(s),u=C.forwardRef((m,g)=>{const{scope:v,children:y}=m,x=o(s,v),P=Ye(g,x.collectionRef);return b.jsx(l,{ref:P,children:y})});u.displayName=s;const f=e+"CollectionItemSlot",c="data-radix-collection-item",p=Il(f),d=C.forwardRef((m,g)=>{const{scope:v,children:y,...x}=m,P=C.useRef(null),w=Ye(g,P),S=o(f,v);return C.useEffect(()=>(S.itemMap.set(P,{ref:P,...x}),()=>void S.itemMap.delete(P))),b.jsx(p,{[c]:"",ref:w,children:y})});d.displayName=f;function h(m){const g=o(e+"CollectionConsumer",m);return C.useCallback(()=>{const y=g.collectionRef.current;if(!y)return[];const x=Array.from(y.querySelectorAll(`[${c}]`));return Array.from(g.itemMap.values()).sort((S,O)=>x.indexOf(S.ref.current)-x.indexOf(O.ref.current))},[g.collectionRef,g.itemMap])}return[{Provider:i,Slot:u,ItemSlot:d},h,r]}var cA=k.createContext(void 0);function R0(e){const t=k.useContext(cA);return e||t||"ltr"}var fA=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ee=fA.reduce((e,t)=>{const n=Il(`Primitive.${t}`),r=k.forwardRef((a,o)=>{const{asChild:i,...s}=a,l=i?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...s,ref:o})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function pA(e,t){e&&fs.flushSync(()=>e.dispatchEvent(t))}function Aa(e){const t=k.useRef(e);return k.useEffect(()=>{t.current=e}),k.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function dA(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e);k.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var mA="DismissableLayer",Qh="dismissableLayer.update",hA="dismissableLayer.pointerDownOutside",vA="dismissableLayer.focusOutside",Sx,x6=k.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),I0=k.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:i,onDismiss:s,...l}=e,u=k.useContext(x6),[f,c]=k.useState(null),p=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,d]=k.useState({}),h=Ye(t,O=>c(O)),m=Array.from(u.layers),[g]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),v=m.indexOf(g),y=f?m.indexOf(f):-1,x=u.layersWithOutsidePointerEventsDisabled.size>0,P=y>=v,w=xA(O=>{const _=O.target,A=[...u.branches].some(j=>j.contains(_));!P||A||(a==null||a(O),i==null||i(O),O.defaultPrevented||s==null||s())},p),S=wA(O=>{const _=O.target;[...u.branches].some(j=>j.contains(_))||(o==null||o(O),i==null||i(O),O.defaultPrevented||s==null||s())},p);return dA(O=>{y===u.layers.size-1&&(r==null||r(O),!O.defaultPrevented&&s&&(O.preventDefault(),s()))},p),k.useEffect(()=>{if(f)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(Sx=p.body.style.pointerEvents,p.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(f)),u.layers.add(f),Ox(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(p.body.style.pointerEvents=Sx)}},[f,p,n,u]),k.useEffect(()=>()=>{f&&(u.layers.delete(f),u.layersWithOutsidePointerEventsDisabled.delete(f),Ox())},[f,u]),k.useEffect(()=>{const O=()=>d({});return document.addEventListener(Qh,O),()=>document.removeEventListener(Qh,O)},[]),b.jsx(Ee.div,{...l,ref:h,style:{pointerEvents:x?P?"auto":"none":void 0,...e.style},onFocusCapture:pe(e.onFocusCapture,S.onFocusCapture),onBlurCapture:pe(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:pe(e.onPointerDownCapture,w.onPointerDownCapture)})});I0.displayName=mA;var yA="DismissableLayerBranch",gA=k.forwardRef((e,t)=>{const n=k.useContext(x6),r=k.useRef(null),a=Ye(t,r);return k.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),b.jsx(Ee.div,{...e,ref:a})});gA.displayName=yA;function xA(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e),r=k.useRef(!1),a=k.useRef(()=>{});return k.useEffect(()=>{const o=s=>{if(s.target&&!r.current){let l=function(){w6(hA,n,u,{discrete:!0})};const u={originalEvent:s};s.pointerType==="touch"?(t.removeEventListener("click",a.current),a.current=l,t.addEventListener("click",a.current,{once:!0})):l()}else t.removeEventListener("click",a.current);r.current=!1},i=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(i),t.removeEventListener("pointerdown",o),t.removeEventListener("click",a.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function wA(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e),r=k.useRef(!1);return k.useEffect(()=>{const a=o=>{o.target&&!r.current&&w6(vA,n,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",a),()=>t.removeEventListener("focusin",a)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Ox(){const e=new CustomEvent(Qh);document.dispatchEvent(e)}function w6(e,t,n,{discrete:r}){const a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),r?pA(a,o):a.dispatchEvent(o)}var xm=0;function bA(){k.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??kx()),document.body.insertAdjacentElement("beforeend",e[1]??kx()),xm++,()=>{xm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),xm--}},[])}function kx(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var wm="focusScope.autoFocusOnMount",bm="focusScope.autoFocusOnUnmount",_x={bubbles:!1,cancelable:!0},PA="FocusScope",b6=k.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:o,...i}=e,[s,l]=k.useState(null),u=Aa(a),f=Aa(o),c=k.useRef(null),p=Ye(t,m=>l(m)),d=k.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;k.useEffect(()=>{if(r){let m=function(x){if(d.paused||!s)return;const P=x.target;s.contains(P)?c.current=P:Qr(c.current,{select:!0})},g=function(x){if(d.paused||!s)return;const P=x.relatedTarget;P!==null&&(s.contains(P)||Qr(c.current,{select:!0}))},v=function(x){if(document.activeElement===document.body)for(const w of x)w.removedNodes.length>0&&Qr(s)};document.addEventListener("focusin",m),document.addEventListener("focusout",g);const y=new MutationObserver(v);return s&&y.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",g),y.disconnect()}}},[r,s,d.paused]),k.useEffect(()=>{if(s){Cx.add(d);const m=document.activeElement;if(!s.contains(m)){const v=new CustomEvent(wm,_x);s.addEventListener(wm,u),s.dispatchEvent(v),v.defaultPrevented||(SA(CA(P6(s)),{select:!0}),document.activeElement===m&&Qr(s))}return()=>{s.removeEventListener(wm,u),setTimeout(()=>{const v=new CustomEvent(bm,_x);s.addEventListener(bm,f),s.dispatchEvent(v),v.defaultPrevented||Qr(m??document.body,{select:!0}),s.removeEventListener(bm,f),Cx.remove(d)},0)}}},[s,u,f,d]);const h=k.useCallback(m=>{if(!n&&!r||d.paused)return;const g=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,v=document.activeElement;if(g&&v){const y=m.currentTarget,[x,P]=OA(y);x&&P?!m.shiftKey&&v===P?(m.preventDefault(),n&&Qr(x,{select:!0})):m.shiftKey&&v===x&&(m.preventDefault(),n&&Qr(P,{select:!0})):v===y&&m.preventDefault()}},[n,r,d.paused]);return b.jsx(Ee.div,{tabIndex:-1,...i,ref:p,onKeyDown:h})});b6.displayName=PA;function SA(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Qr(r,{select:t}),document.activeElement!==n)return}function OA(e){const t=P6(e),n=Ax(t,e),r=Ax(t.reverse(),e);return[n,r]}function P6(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Ax(e,t){for(const n of e)if(!kA(n,{upTo:t}))return n}function kA(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function _A(e){return e instanceof HTMLInputElement&&"select"in e}function Qr(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&_A(e)&&t&&e.select()}}var Cx=AA();function AA(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=Ex(e,t),e.unshift(t)},remove(t){var n;e=Ex(e,t),(n=e[0])==null||n.resume()}}}function Ex(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function CA(e){return e.filter(t=>t.tagName!=="A")}var jt=globalThis!=null&&globalThis.document?k.useLayoutEffect:()=>{},EA=d5[" useId ".trim().toString()]||(()=>{}),TA=0;function Tu(e){const[t,n]=k.useState(EA());return jt(()=>{n(r=>r??String(TA++))},[e]),t?`radix-${t}`:""}const jA=["top","right","bottom","left"],Ca=Math.min,Zt=Math.max,hf=Math.round,oc=Math.floor,fr=e=>({x:e,y:e}),$A={left:"right",right:"left",bottom:"top",top:"bottom"},NA={start:"end",end:"start"};function Zh(e,t,n){return Zt(e,Ca(t,n))}function Lr(e,t){return typeof e=="function"?e(t):e}function Fr(e){return e.split("-")[0]}function ds(e){return e.split("-")[1]}function D0(e){return e==="x"?"y":"x"}function L0(e){return e==="y"?"height":"width"}function ar(e){return["top","bottom"].includes(Fr(e))?"y":"x"}function F0(e){return D0(ar(e))}function MA(e,t,n){n===void 0&&(n=!1);const r=ds(e),a=F0(e),o=L0(a);let i=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=vf(i)),[i,vf(i)]}function RA(e){const t=vf(e);return[Jh(e),t,Jh(t)]}function Jh(e){return e.replace(/start|end/g,t=>NA[t])}function IA(e,t,n){const r=["left","right"],a=["right","left"],o=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?a:r:t?r:a;case"left":case"right":return t?o:i;default:return[]}}function DA(e,t,n,r){const a=ds(e);let o=IA(Fr(e),n==="start",r);return a&&(o=o.map(i=>i+"-"+a),t&&(o=o.concat(o.map(Jh)))),o}function vf(e){return e.replace(/left|right|bottom|top/g,t=>$A[t])}function LA(e){return{top:0,right:0,bottom:0,left:0,...e}}function S6(e){return typeof e!="number"?LA(e):{top:e,right:e,bottom:e,left:e}}function yf(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function Tx(e,t,n){let{reference:r,floating:a}=e;const o=ar(t),i=F0(t),s=L0(i),l=Fr(t),u=o==="y",f=r.x+r.width/2-a.width/2,c=r.y+r.height/2-a.height/2,p=r[s]/2-a[s]/2;let d;switch(l){case"top":d={x:f,y:r.y-a.height};break;case"bottom":d={x:f,y:r.y+r.height};break;case"right":d={x:r.x+r.width,y:c};break;case"left":d={x:r.x-a.width,y:c};break;default:d={x:r.x,y:r.y}}switch(ds(t)){case"start":d[i]-=p*(n&&u?-1:1);break;case"end":d[i]+=p*(n&&u?-1:1);break}return d}const FA=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:o=[],platform:i}=n,s=o.filter(Boolean),l=await(i.isRTL==null?void 0:i.isRTL(t));let u=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:f,y:c}=Tx(u,r,l),p=r,d={},h=0;for(let m=0;m<s.length;m++){const{name:g,fn:v}=s[m],{x:y,y:x,data:P,reset:w}=await v({x:f,y:c,initialPlacement:r,placement:p,strategy:a,middlewareData:d,rects:u,platform:i,elements:{reference:e,floating:t}});f=y??f,c=x??c,d={...d,[g]:{...d[g],...P}},w&&h<=50&&(h++,typeof w=="object"&&(w.placement&&(p=w.placement),w.rects&&(u=w.rects===!0?await i.getElementRects({reference:e,floating:t,strategy:a}):w.rects),{x:f,y:c}=Tx(u,p,l)),m=-1)}return{x:f,y:c,placement:p,strategy:a,middlewareData:d}};async function Dl(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:o,rects:i,elements:s,strategy:l}=e,{boundary:u="clippingAncestors",rootBoundary:f="viewport",elementContext:c="floating",altBoundary:p=!1,padding:d=0}=Lr(t,e),h=S6(d),g=s[p?c==="floating"?"reference":"floating":c],v=yf(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(g)))==null||n?g:g.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:u,rootBoundary:f,strategy:l})),y=c==="floating"?{x:r,y:a,width:i.floating.width,height:i.floating.height}:i.reference,x=await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),P=await(o.isElement==null?void 0:o.isElement(x))?await(o.getScale==null?void 0:o.getScale(x))||{x:1,y:1}:{x:1,y:1},w=yf(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:y,offsetParent:x,strategy:l}):y);return{top:(v.top-w.top+h.top)/P.y,bottom:(w.bottom-v.bottom+h.bottom)/P.y,left:(v.left-w.left+h.left)/P.x,right:(w.right-v.right+h.right)/P.x}}const zA=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:o,platform:i,elements:s,middlewareData:l}=t,{element:u,padding:f=0}=Lr(e,t)||{};if(u==null)return{};const c=S6(f),p={x:n,y:r},d=F0(a),h=L0(d),m=await i.getDimensions(u),g=d==="y",v=g?"top":"left",y=g?"bottom":"right",x=g?"clientHeight":"clientWidth",P=o.reference[h]+o.reference[d]-p[d]-o.floating[h],w=p[d]-o.reference[d],S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(u));let O=S?S[x]:0;(!O||!await(i.isElement==null?void 0:i.isElement(S)))&&(O=s.floating[x]||o.floating[h]);const _=P/2-w/2,A=O/2-m[h]/2-1,j=Ca(c[v],A),E=Ca(c[y],A),T=j,N=O-m[h]-E,M=O/2-m[h]/2+_,I=Zh(T,M,N),R=!l.arrow&&ds(a)!=null&&M!==I&&o.reference[h]/2-(M<T?j:E)-m[h]/2<0,L=R?M<T?M-T:M-N:0;return{[d]:p[d]+L,data:{[d]:I,centerOffset:M-I-L,...R&&{alignmentOffset:L}},reset:R}}}),BA=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:a,middlewareData:o,rects:i,initialPlacement:s,platform:l,elements:u}=t,{mainAxis:f=!0,crossAxis:c=!0,fallbackPlacements:p,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:m=!0,...g}=Lr(e,t);if((n=o.arrow)!=null&&n.alignmentOffset)return{};const v=Fr(a),y=ar(s),x=Fr(s)===s,P=await(l.isRTL==null?void 0:l.isRTL(u.floating)),w=p||(x||!m?[vf(s)]:RA(s)),S=h!=="none";!p&&S&&w.push(...DA(s,m,h,P));const O=[s,...w],_=await Dl(t,g),A=[];let j=((r=o.flip)==null?void 0:r.overflows)||[];if(f&&A.push(_[v]),c){const M=MA(a,i,P);A.push(_[M[0]],_[M[1]])}if(j=[...j,{placement:a,overflows:A}],!A.every(M=>M<=0)){var E,T;const M=(((E=o.flip)==null?void 0:E.index)||0)+1,I=O[M];if(I&&(!(c==="alignment"?y!==ar(I):!1)||j.every($=>$.overflows[0]>0&&ar($.placement)===y)))return{data:{index:M,overflows:j},reset:{placement:I}};let R=(T=j.filter(L=>L.overflows[0]<=0).sort((L,$)=>L.overflows[1]-$.overflows[1])[0])==null?void 0:T.placement;if(!R)switch(d){case"bestFit":{var N;const L=(N=j.filter($=>{if(S){const D=ar($.placement);return D===y||D==="y"}return!0}).map($=>[$.placement,$.overflows.filter(D=>D>0).reduce((D,H)=>D+H,0)]).sort(($,D)=>$[1]-D[1])[0])==null?void 0:N[0];L&&(R=L);break}case"initialPlacement":R=s;break}if(a!==R)return{reset:{placement:R}}}return{}}}};function jx(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function $x(e){return jA.some(t=>e[t]>=0)}const HA=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...a}=Lr(e,t);switch(r){case"referenceHidden":{const o=await Dl(t,{...a,elementContext:"reference"}),i=jx(o,n.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:$x(i)}}}case"escaped":{const o=await Dl(t,{...a,altBoundary:!0}),i=jx(o,n.floating);return{data:{escapedOffsets:i,escaped:$x(i)}}}default:return{}}}}};async function GA(e,t){const{placement:n,platform:r,elements:a}=e,o=await(r.isRTL==null?void 0:r.isRTL(a.floating)),i=Fr(n),s=ds(n),l=ar(n)==="y",u=["left","top"].includes(i)?-1:1,f=o&&l?-1:1,c=Lr(t,e);let{mainAxis:p,crossAxis:d,alignmentAxis:h}=typeof c=="number"?{mainAxis:c,crossAxis:0,alignmentAxis:null}:{mainAxis:c.mainAxis||0,crossAxis:c.crossAxis||0,alignmentAxis:c.alignmentAxis};return s&&typeof h=="number"&&(d=s==="end"?h*-1:h),l?{x:d*f,y:p*u}:{x:p*u,y:d*f}}const UA=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:o,placement:i,middlewareData:s}=t,l=await GA(t,e);return i===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:a+l.x,y:o+l.y,data:{...l,placement:i}}}}},WA=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a}=t,{mainAxis:o=!0,crossAxis:i=!1,limiter:s={fn:g=>{let{x:v,y}=g;return{x:v,y}}},...l}=Lr(e,t),u={x:n,y:r},f=await Dl(t,l),c=ar(Fr(a)),p=D0(c);let d=u[p],h=u[c];if(o){const g=p==="y"?"top":"left",v=p==="y"?"bottom":"right",y=d+f[g],x=d-f[v];d=Zh(y,d,x)}if(i){const g=c==="y"?"top":"left",v=c==="y"?"bottom":"right",y=h+f[g],x=h-f[v];h=Zh(y,h,x)}const m=s.fn({...t,[p]:d,[c]:h});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[p]:o,[c]:i}}}}}},qA=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:a,rects:o,middlewareData:i}=t,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=Lr(e,t),f={x:n,y:r},c=ar(a),p=D0(c);let d=f[p],h=f[c];const m=Lr(s,t),g=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const x=p==="y"?"height":"width",P=o.reference[p]-o.floating[x]+g.mainAxis,w=o.reference[p]+o.reference[x]-g.mainAxis;d<P?d=P:d>w&&(d=w)}if(u){var v,y;const x=p==="y"?"width":"height",P=["top","left"].includes(Fr(a)),w=o.reference[c]-o.floating[x]+(P&&((v=i.offset)==null?void 0:v[c])||0)+(P?0:g.crossAxis),S=o.reference[c]+o.reference[x]+(P?0:((y=i.offset)==null?void 0:y[c])||0)-(P?g.crossAxis:0);h<w?h=w:h>S&&(h=S)}return{[p]:d,[c]:h}}}},VA=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:a,rects:o,platform:i,elements:s}=t,{apply:l=()=>{},...u}=Lr(e,t),f=await Dl(t,u),c=Fr(a),p=ds(a),d=ar(a)==="y",{width:h,height:m}=o.floating;let g,v;c==="top"||c==="bottom"?(g=c,v=p===(await(i.isRTL==null?void 0:i.isRTL(s.floating))?"start":"end")?"left":"right"):(v=c,g=p==="end"?"top":"bottom");const y=m-f.top-f.bottom,x=h-f.left-f.right,P=Ca(m-f[g],y),w=Ca(h-f[v],x),S=!t.middlewareData.shift;let O=P,_=w;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(_=x),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(O=y),S&&!p){const j=Zt(f.left,0),E=Zt(f.right,0),T=Zt(f.top,0),N=Zt(f.bottom,0);d?_=h-2*(j!==0||E!==0?j+E:Zt(f.left,f.right)):O=m-2*(T!==0||N!==0?T+N:Zt(f.top,f.bottom))}await l({...t,availableWidth:_,availableHeight:O});const A=await i.getDimensions(s.floating);return h!==A.width||m!==A.height?{reset:{rects:!0}}:{}}}};function Bp(){return typeof window<"u"}function ms(e){return O6(e)?(e.nodeName||"").toLowerCase():"#document"}function rn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function yr(e){var t;return(t=(O6(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function O6(e){return Bp()?e instanceof Node||e instanceof rn(e).Node:!1}function Wn(e){return Bp()?e instanceof Element||e instanceof rn(e).Element:!1}function hr(e){return Bp()?e instanceof HTMLElement||e instanceof rn(e).HTMLElement:!1}function Nx(e){return!Bp()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof rn(e).ShadowRoot}function ju(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=qn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(a)}function KA(e){return["table","td","th"].includes(ms(e))}function Hp(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function z0(e){const t=B0(),n=Wn(e)?qn(e):e;return["transform","translate","scale","rotate","perspective"].some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","translate","scale","rotate","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function XA(e){let t=Ea(e);for(;hr(t)&&!Mi(t);){if(z0(t))return t;if(Hp(t))return null;t=Ea(t)}return null}function B0(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Mi(e){return["html","body","#document"].includes(ms(e))}function qn(e){return rn(e).getComputedStyle(e)}function Gp(e){return Wn(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ea(e){if(ms(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Nx(e)&&e.host||yr(e);return Nx(t)?t.host:t}function k6(e){const t=Ea(e);return Mi(t)?e.ownerDocument?e.ownerDocument.body:e.body:hr(t)&&ju(t)?t:k6(t)}function Ll(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=k6(e),o=a===((r=e.ownerDocument)==null?void 0:r.body),i=rn(a);if(o){const s=ev(i);return t.concat(i,i.visualViewport||[],ju(a)?a:[],s&&n?Ll(s):[])}return t.concat(a,Ll(a,[],n))}function ev(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function _6(e){const t=qn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=hr(e),o=a?e.offsetWidth:n,i=a?e.offsetHeight:r,s=hf(n)!==o||hf(r)!==i;return s&&(n=o,r=i),{width:n,height:r,$:s}}function H0(e){return Wn(e)?e:e.contextElement}function fi(e){const t=H0(e);if(!hr(t))return fr(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:o}=_6(t);let i=(o?hf(n.width):n.width)/r,s=(o?hf(n.height):n.height)/a;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const YA=fr(0);function A6(e){const t=rn(e);return!B0()||!t.visualViewport?YA:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function QA(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==rn(e)?!1:t}function wo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),o=H0(e);let i=fr(1);t&&(r?Wn(r)&&(i=fi(r)):i=fi(e));const s=QA(o,n,r)?A6(o):fr(0);let l=(a.left+s.x)/i.x,u=(a.top+s.y)/i.y,f=a.width/i.x,c=a.height/i.y;if(o){const p=rn(o),d=r&&Wn(r)?rn(r):r;let h=p,m=ev(h);for(;m&&r&&d!==h;){const g=fi(m),v=m.getBoundingClientRect(),y=qn(m),x=v.left+(m.clientLeft+parseFloat(y.paddingLeft))*g.x,P=v.top+(m.clientTop+parseFloat(y.paddingTop))*g.y;l*=g.x,u*=g.y,f*=g.x,c*=g.y,l+=x,u+=P,h=rn(m),m=ev(h)}}return yf({width:f,height:c,x:l,y:u})}function G0(e,t){const n=Gp(e).scrollLeft;return t?t.left+n:wo(yr(e)).left+n}function C6(e,t,n){n===void 0&&(n=!1);const r=e.getBoundingClientRect(),a=r.left+t.scrollLeft-(n?0:G0(e,r)),o=r.top+t.scrollTop;return{x:a,y:o}}function ZA(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const o=a==="fixed",i=yr(r),s=t?Hp(t.floating):!1;if(r===i||s&&o)return n;let l={scrollLeft:0,scrollTop:0},u=fr(1);const f=fr(0),c=hr(r);if((c||!c&&!o)&&((ms(r)!=="body"||ju(i))&&(l=Gp(r)),hr(r))){const d=wo(r);u=fi(r),f.x=d.x+r.clientLeft,f.y=d.y+r.clientTop}const p=i&&!c&&!o?C6(i,l,!0):fr(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+f.x+p.x,y:n.y*u.y-l.scrollTop*u.y+f.y+p.y}}function JA(e){return Array.from(e.getClientRects())}function eC(e){const t=yr(e),n=Gp(e),r=e.ownerDocument.body,a=Zt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=Zt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+G0(e);const s=-n.scrollTop;return qn(r).direction==="rtl"&&(i+=Zt(t.clientWidth,r.clientWidth)-a),{width:a,height:o,x:i,y:s}}function tC(e,t){const n=rn(e),r=yr(e),a=n.visualViewport;let o=r.clientWidth,i=r.clientHeight,s=0,l=0;if(a){o=a.width,i=a.height;const u=B0();(!u||u&&t==="fixed")&&(s=a.offsetLeft,l=a.offsetTop)}return{width:o,height:i,x:s,y:l}}function nC(e,t){const n=wo(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=hr(e)?fi(e):fr(1),i=e.clientWidth*o.x,s=e.clientHeight*o.y,l=a*o.x,u=r*o.y;return{width:i,height:s,x:l,y:u}}function Mx(e,t,n){let r;if(t==="viewport")r=tC(e,n);else if(t==="document")r=eC(yr(e));else if(Wn(t))r=nC(t,n);else{const a=A6(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return yf(r)}function E6(e,t){const n=Ea(e);return n===t||!Wn(n)||Mi(n)?!1:qn(n).position==="fixed"||E6(n,t)}function rC(e,t){const n=t.get(e);if(n)return n;let r=Ll(e,[],!1).filter(s=>Wn(s)&&ms(s)!=="body"),a=null;const o=qn(e).position==="fixed";let i=o?Ea(e):e;for(;Wn(i)&&!Mi(i);){const s=qn(i),l=z0(i);!l&&s.position==="fixed"&&(a=null),(o?!l&&!a:!l&&s.position==="static"&&!!a&&["absolute","fixed"].includes(a.position)||ju(i)&&!l&&E6(e,i))?r=r.filter(f=>f!==i):a=s,i=Ea(i)}return t.set(e,r),r}function aC(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const i=[...n==="clippingAncestors"?Hp(t)?[]:rC(t,this._c):[].concat(n),r],s=i[0],l=i.reduce((u,f)=>{const c=Mx(t,f,a);return u.top=Zt(c.top,u.top),u.right=Ca(c.right,u.right),u.bottom=Ca(c.bottom,u.bottom),u.left=Zt(c.left,u.left),u},Mx(t,s,a));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function oC(e){const{width:t,height:n}=_6(e);return{width:t,height:n}}function iC(e,t,n){const r=hr(t),a=yr(t),o=n==="fixed",i=wo(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const l=fr(0);function u(){l.x=G0(a)}if(r||!r&&!o)if((ms(t)!=="body"||ju(a))&&(s=Gp(t)),r){const d=wo(t,!0,o,t);l.x=d.x+t.clientLeft,l.y=d.y+t.clientTop}else a&&u();o&&!r&&a&&u();const f=a&&!r&&!o?C6(a,s):fr(0),c=i.left+s.scrollLeft-l.x-f.x,p=i.top+s.scrollTop-l.y-f.y;return{x:c,y:p,width:i.width,height:i.height}}function Pm(e){return qn(e).position==="static"}function Rx(e,t){if(!hr(e)||qn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return yr(e)===n&&(n=n.ownerDocument.body),n}function T6(e,t){const n=rn(e);if(Hp(e))return n;if(!hr(e)){let a=Ea(e);for(;a&&!Mi(a);){if(Wn(a)&&!Pm(a))return a;a=Ea(a)}return n}let r=Rx(e,t);for(;r&&KA(r)&&Pm(r);)r=Rx(r,t);return r&&Mi(r)&&Pm(r)&&!z0(r)?n:r||XA(e)||n}const sC=async function(e){const t=this.getOffsetParent||T6,n=this.getDimensions,r=await n(e.floating);return{reference:iC(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function lC(e){return qn(e).direction==="rtl"}const uC={convertOffsetParentRelativeRectToViewportRelativeRect:ZA,getDocumentElement:yr,getClippingRect:aC,getOffsetParent:T6,getElementRects:sC,getClientRects:JA,getDimensions:oC,getScale:fi,isElement:Wn,isRTL:lC};function j6(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function cC(e,t){let n=null,r;const a=yr(e);function o(){var s;clearTimeout(r),(s=n)==null||s.disconnect(),n=null}function i(s,l){s===void 0&&(s=!1),l===void 0&&(l=1),o();const u=e.getBoundingClientRect(),{left:f,top:c,width:p,height:d}=u;if(s||t(),!p||!d)return;const h=oc(c),m=oc(a.clientWidth-(f+p)),g=oc(a.clientHeight-(c+d)),v=oc(f),x={rootMargin:-h+"px "+-m+"px "+-g+"px "+-v+"px",threshold:Zt(0,Ca(1,l))||1};let P=!0;function w(S){const O=S[0].intersectionRatio;if(O!==l){if(!P)return i();O?i(!1,O):r=setTimeout(()=>{i(!1,1e-7)},1e3)}O===1&&!j6(u,e.getBoundingClientRect())&&i(),P=!1}try{n=new IntersectionObserver(w,{...x,root:a.ownerDocument})}catch{n=new IntersectionObserver(w,x)}n.observe(e)}return i(!0),o}function fC(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=H0(e),f=a||o?[...u?Ll(u):[],...Ll(t)]:[];f.forEach(v=>{a&&v.addEventListener("scroll",n,{passive:!0}),o&&v.addEventListener("resize",n)});const c=u&&s?cC(u,n):null;let p=-1,d=null;i&&(d=new ResizeObserver(v=>{let[y]=v;y&&y.target===u&&d&&(d.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var x;(x=d)==null||x.observe(t)})),n()}),u&&!l&&d.observe(u),d.observe(t));let h,m=l?wo(e):null;l&&g();function g(){const v=wo(e);m&&!j6(m,v)&&n(),m=v,h=requestAnimationFrame(g)}return n(),()=>{var v;f.forEach(y=>{a&&y.removeEventListener("scroll",n),o&&y.removeEventListener("resize",n)}),c==null||c(),(v=d)==null||v.disconnect(),d=null,l&&cancelAnimationFrame(h)}}const pC=UA,dC=WA,mC=BA,hC=VA,vC=HA,Ix=zA,yC=qA,gC=(e,t,n)=>{const r=new Map,a={platform:uC,...n},o={...a.platform,_c:r};return FA(e,t,{...a,platform:o})};var xC=typeof document<"u",wC=function(){},Lc=xC?k.useLayoutEffect:wC;function gf(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!gf(e[r],t[r]))return!1;return!0}if(a=Object.keys(e),n=a.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,a[r]))return!1;for(r=n;r--!==0;){const o=a[r];if(!(o==="_owner"&&e.$$typeof)&&!gf(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function $6(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Dx(e,t){const n=$6(e);return Math.round(t*n)/n}function Sm(e){const t=k.useRef(e);return Lc(()=>{t.current=e}),t}function bC(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:l,open:u}=e,[f,c]=k.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,d]=k.useState(r);gf(p,r)||d(r);const[h,m]=k.useState(null),[g,v]=k.useState(null),y=k.useCallback($=>{$!==S.current&&(S.current=$,m($))},[]),x=k.useCallback($=>{$!==O.current&&(O.current=$,v($))},[]),P=o||h,w=i||g,S=k.useRef(null),O=k.useRef(null),_=k.useRef(f),A=l!=null,j=Sm(l),E=Sm(a),T=Sm(u),N=k.useCallback(()=>{if(!S.current||!O.current)return;const $={placement:t,strategy:n,middleware:p};E.current&&($.platform=E.current),gC(S.current,O.current,$).then(D=>{const H={...D,isPositioned:T.current!==!1};M.current&&!gf(_.current,H)&&(_.current=H,fs.flushSync(()=>{c(H)}))})},[p,t,n,E,T]);Lc(()=>{u===!1&&_.current.isPositioned&&(_.current.isPositioned=!1,c($=>({...$,isPositioned:!1})))},[u]);const M=k.useRef(!1);Lc(()=>(M.current=!0,()=>{M.current=!1}),[]),Lc(()=>{if(P&&(S.current=P),w&&(O.current=w),P&&w){if(j.current)return j.current(P,w,N);N()}},[P,w,N,j,A]);const I=k.useMemo(()=>({reference:S,floating:O,setReference:y,setFloating:x}),[y,x]),R=k.useMemo(()=>({reference:P,floating:w}),[P,w]),L=k.useMemo(()=>{const $={position:n,left:0,top:0};if(!R.floating)return $;const D=Dx(R.floating,f.x),H=Dx(R.floating,f.y);return s?{...$,transform:"translate("+D+"px, "+H+"px)",...$6(R.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:H}},[n,s,R.floating,f.x,f.y]);return k.useMemo(()=>({...f,update:N,refs:I,elements:R,floatingStyles:L}),[f,N,I,R,L])}const PC=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:a}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Ix({element:r.current,padding:a}).fn(n):{}:r?Ix({element:r,padding:a}).fn(n):{}}}},SC=(e,t)=>({...pC(e),options:[e,t]}),OC=(e,t)=>({...dC(e),options:[e,t]}),kC=(e,t)=>({...yC(e),options:[e,t]}),_C=(e,t)=>({...mC(e),options:[e,t]}),AC=(e,t)=>({...hC(e),options:[e,t]}),CC=(e,t)=>({...vC(e),options:[e,t]}),EC=(e,t)=>({...PC(e),options:[e,t]});var TC="Arrow",N6=k.forwardRef((e,t)=>{const{children:n,width:r=10,height:a=5,...o}=e;return b.jsx(Ee.svg,{...o,ref:t,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:b.jsx("polygon",{points:"0,0 30,0 15,10"})})});N6.displayName=TC;var jC=N6;function $C(e){const[t,n]=k.useState(void 0);return jt(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const o=a[0];let i,s;if("borderBoxSize"in o){const l=o.borderBoxSize,u=Array.isArray(l)?l[0]:l;i=u.inlineSize,s=u.blockSize}else i=e.offsetWidth,s=e.offsetHeight;n({width:i,height:s})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var U0="Popper",[M6,Up]=ps(U0),[NC,R6]=M6(U0),I6=e=>{const{__scopePopper:t,children:n}=e,[r,a]=k.useState(null);return b.jsx(NC,{scope:t,anchor:r,onAnchorChange:a,children:n})};I6.displayName=U0;var D6="PopperAnchor",L6=k.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...a}=e,o=R6(D6,n),i=k.useRef(null),s=Ye(t,i);return k.useEffect(()=>{o.onAnchorChange((r==null?void 0:r.current)||i.current)}),r?null:b.jsx(Ee.div,{...a,ref:s})});L6.displayName=D6;var W0="PopperContent",[MC,RC]=M6(W0),F6=k.forwardRef((e,t)=>{var J,le,q,K,X,F;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:o="center",alignOffset:i=0,arrowPadding:s=0,avoidCollisions:l=!0,collisionBoundary:u=[],collisionPadding:f=0,sticky:c="partial",hideWhenDetached:p=!1,updatePositionStrategy:d="optimized",onPlaced:h,...m}=e,g=R6(W0,n),[v,y]=k.useState(null),x=Ye(t,fe=>y(fe)),[P,w]=k.useState(null),S=$C(P),O=(S==null?void 0:S.width)??0,_=(S==null?void 0:S.height)??0,A=r+(o!=="center"?"-"+o:""),j=typeof f=="number"?f:{top:0,right:0,bottom:0,left:0,...f},E=Array.isArray(u)?u:[u],T=E.length>0,N={padding:j,boundary:E.filter(DC),altBoundary:T},{refs:M,floatingStyles:I,placement:R,isPositioned:L,middlewareData:$}=bC({strategy:"fixed",placement:A,whileElementsMounted:(...fe)=>fC(...fe,{animationFrame:d==="always"}),elements:{reference:g.anchor},middleware:[SC({mainAxis:a+_,alignmentAxis:i}),l&&OC({mainAxis:!0,crossAxis:!1,limiter:c==="partial"?kC():void 0,...N}),l&&_C({...N}),AC({...N,apply:({elements:fe,rects:ne,availableWidth:Ne,availableHeight:Me})=>{const{width:Ze,height:Xn}=ne.reference,On=fe.floating.style;On.setProperty("--radix-popper-available-width",`${Ne}px`),On.setProperty("--radix-popper-available-height",`${Me}px`),On.setProperty("--radix-popper-anchor-width",`${Ze}px`),On.setProperty("--radix-popper-anchor-height",`${Xn}px`)}}),P&&EC({element:P,padding:s}),LC({arrowWidth:O,arrowHeight:_}),p&&CC({strategy:"referenceHidden",...N})]}),[D,H]=H6(R),W=Aa(h);jt(()=>{L&&(W==null||W())},[L,W]);const G=(J=$.arrow)==null?void 0:J.x,Z=(le=$.arrow)==null?void 0:le.y,ie=((q=$.arrow)==null?void 0:q.centerOffset)!==0,[ve,Pe]=k.useState();return jt(()=>{v&&Pe(window.getComputedStyle(v).zIndex)},[v]),b.jsx("div",{ref:M.setFloating,"data-radix-popper-content-wrapper":"",style:{...I,transform:L?I.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ve,"--radix-popper-transform-origin":[(K=$.transformOrigin)==null?void 0:K.x,(X=$.transformOrigin)==null?void 0:X.y].join(" "),...((F=$.hide)==null?void 0:F.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:b.jsx(MC,{scope:n,placedSide:D,onArrowChange:w,arrowX:G,arrowY:Z,shouldHideArrow:ie,children:b.jsx(Ee.div,{"data-side":D,"data-align":H,...m,ref:x,style:{...m.style,animation:L?void 0:"none"}})})})});F6.displayName=W0;var z6="PopperArrow",IC={top:"bottom",right:"left",bottom:"top",left:"right"},B6=k.forwardRef(function(t,n){const{__scopePopper:r,...a}=t,o=RC(z6,r),i=IC[o.placedSide];return b.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:b.jsx(jC,{...a,ref:n,style:{...a.style,display:"block"}})})});B6.displayName=z6;function DC(e){return e!==null}var LC=e=>({name:"transformOrigin",options:e,fn(t){var g,v,y;const{placement:n,rects:r,middlewareData:a}=t,i=((g=a.arrow)==null?void 0:g.centerOffset)!==0,s=i?0:e.arrowWidth,l=i?0:e.arrowHeight,[u,f]=H6(n),c={start:"0%",center:"50%",end:"100%"}[f],p=(((v=a.arrow)==null?void 0:v.x)??0)+s/2,d=(((y=a.arrow)==null?void 0:y.y)??0)+l/2;let h="",m="";return u==="bottom"?(h=i?c:`${p}px`,m=`${-l}px`):u==="top"?(h=i?c:`${p}px`,m=`${r.floating.height+l}px`):u==="right"?(h=`${-l}px`,m=i?c:`${d}px`):u==="left"&&(h=`${r.floating.width+l}px`,m=i?c:`${d}px`),{data:{x:h,y:m}}}});function H6(e){const[t,n="center"]=e.split("-");return[t,n]}var FC=I6,G6=L6,U6=F6,W6=B6,zC="Portal",q6=k.forwardRef((e,t)=>{var s;const{container:n,...r}=e,[a,o]=k.useState(!1);jt(()=>o(!0),[]);const i=n||a&&((s=globalThis==null?void 0:globalThis.document)==null?void 0:s.body);return i?nA.createPortal(b.jsx(Ee.div,{...r,ref:t}),i):null});q6.displayName=zC;var BC=d5[" useInsertionEffect ".trim().toString()]||jt;function xf({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[a,o,i]=HC({defaultProp:t,onChange:n}),s=e!==void 0,l=s?e:a;{const f=k.useRef(e!==void 0);k.useEffect(()=>{const c=f.current;c!==s&&console.warn(`${r} is changing from ${c?"controlled":"uncontrolled"} to ${s?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=s},[s,r])}const u=k.useCallback(f=>{var c;if(s){const p=GC(f)?f(e):f;p!==e&&((c=i.current)==null||c.call(i,p))}else o(f)},[s,e,o,i]);return[l,u]}function HC({defaultProp:e,onChange:t}){const[n,r]=k.useState(e),a=k.useRef(n),o=k.useRef(t);return BC(()=>{o.current=t},[t]),k.useEffect(()=>{var i;a.current!==n&&((i=o.current)==null||i.call(o,n),a.current=n)},[n,a]),[n,r,o]}function GC(e){return typeof e=="function"}function UC(e){const t=k.useRef({value:e,previous:e});return k.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var V6=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),WC="VisuallyHidden",K6=k.forwardRef((e,t)=>b.jsx(Ee.span,{...e,ref:t,style:{...V6,...e.style}}));K6.displayName=WC;var qC=K6,VC=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Do=new WeakMap,ic=new WeakMap,sc={},Om=0,X6=function(e){return e&&(e.host||X6(e.parentNode))},KC=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=X6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},XC=function(e,t,n,r){var a=KC(t,Array.isArray(e)?e:[e]);sc[n]||(sc[n]=new WeakMap);var o=sc[n],i=[],s=new Set,l=new Set(a),u=function(c){!c||s.has(c)||(s.add(c),u(c.parentNode))};a.forEach(u);var f=function(c){!c||l.has(c)||Array.prototype.forEach.call(c.children,function(p){if(s.has(p))f(p);else try{var d=p.getAttribute(r),h=d!==null&&d!=="false",m=(Do.get(p)||0)+1,g=(o.get(p)||0)+1;Do.set(p,m),o.set(p,g),i.push(p),m===1&&h&&ic.set(p,!0),g===1&&p.setAttribute(n,"true"),h||p.setAttribute(r,"true")}catch(v){console.error("aria-hidden: cannot operate on ",p,v)}})};return f(t),s.clear(),Om++,function(){i.forEach(function(c){var p=Do.get(c)-1,d=o.get(c)-1;Do.set(c,p),o.set(c,d),p||(ic.has(c)||c.removeAttribute(r),ic.delete(c)),d||c.removeAttribute(n)}),Om--,Om||(Do=new WeakMap,Do=new WeakMap,ic=new WeakMap,sc={})}},YC=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),a=VC(e);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),XC(r,a,n,"aria-hidden")):function(){return null}},rr=function(){return rr=Object.assign||function(t){for(var n,r=1,a=arguments.length;r<a;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},rr.apply(this,arguments)};function Y6(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function QC(e,t,n){if(n||arguments.length===2)for(var r=0,a=t.length,o;r<a;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}var Fc="right-scroll-bar-position",zc="width-before-scroll-bar",ZC="with-scroll-bars-hidden",JC="--removed-body-scroll-bar-size";function km(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function eE(e,t){var n=k.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var a=n.value;a!==r&&(n.value=r,n.callback(r,a))}}}})[0];return n.callback=t,n.facade}var tE=typeof window<"u"?k.useLayoutEffect:k.useEffect,Lx=new WeakMap;function nE(e,t){var n=eE(null,function(r){return e.forEach(function(a){return km(a,r)})});return tE(function(){var r=Lx.get(n);if(r){var a=new Set(r),o=new Set(e),i=n.current;a.forEach(function(s){o.has(s)||km(s,null)}),o.forEach(function(s){a.has(s)||km(s,i)})}Lx.set(n,e)},[e]),n}function rE(e){return e}function aE(e,t){t===void 0&&(t=rE);var n=[],r=!1,a={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(o){var i=t(o,r);return n.push(i),function(){n=n.filter(function(s){return s!==i})}},assignSyncMedium:function(o){for(r=!0;n.length;){var i=n;n=[],i.forEach(o)}n={push:function(s){return o(s)},filter:function(){return n}}},assignMedium:function(o){r=!0;var i=[];if(n.length){var s=n;n=[],s.forEach(o),i=n}var l=function(){var f=i;i=[],f.forEach(o)},u=function(){return Promise.resolve().then(l)};u(),n={push:function(f){i.push(f),u()},filter:function(f){return i=i.filter(f),n}}}};return a}function oE(e){e===void 0&&(e={});var t=aE(null);return t.options=rr({async:!0,ssr:!1},e),t}var Q6=function(e){var t=e.sideCar,n=Y6(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return k.createElement(r,rr({},n))};Q6.isSideCarExport=!0;function iE(e,t){return e.useMedium(t),Q6}var Z6=oE(),_m=function(){},Wp=k.forwardRef(function(e,t){var n=k.useRef(null),r=k.useState({onScrollCapture:_m,onWheelCapture:_m,onTouchMoveCapture:_m}),a=r[0],o=r[1],i=e.forwardProps,s=e.children,l=e.className,u=e.removeScrollBar,f=e.enabled,c=e.shards,p=e.sideCar,d=e.noRelative,h=e.noIsolation,m=e.inert,g=e.allowPinchZoom,v=e.as,y=v===void 0?"div":v,x=e.gapMode,P=Y6(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),w=p,S=nE([n,t]),O=rr(rr({},P),a);return k.createElement(k.Fragment,null,f&&k.createElement(w,{sideCar:Z6,removeScrollBar:u,shards:c,noRelative:d,noIsolation:h,inert:m,setCallbacks:o,allowPinchZoom:!!g,lockRef:n,gapMode:x}),i?k.cloneElement(k.Children.only(s),rr(rr({},O),{ref:S})):k.createElement(y,rr({},O,{className:l,ref:S}),s))});Wp.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};Wp.classNames={fullWidth:zc,zeroRight:Fc};var sE=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function lE(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=sE();return t&&e.setAttribute("nonce",t),e}function uE(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function cE(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var fE=function(){var e=0,t=null;return{add:function(n){e==0&&(t=lE())&&(uE(t,n),cE(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},pE=function(){var e=fE();return function(t,n){k.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},J6=function(){var e=pE(),t=function(n){var r=n.styles,a=n.dynamic;return e(r,a),null};return t},dE={left:0,top:0,right:0,gap:0},Am=function(e){return parseInt(e||"",10)||0},mE=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],a=t[e==="padding"?"paddingRight":"marginRight"];return[Am(n),Am(r),Am(a)]},hE=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return dE;var t=mE(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},vE=J6(),pi="data-scroll-locked",yE=function(e,t,n,r){var a=e.left,o=e.top,i=e.right,s=e.gap;return n===void 0&&(n="margin"),`
+  .`.concat(ZC,` {
+   overflow: hidden `).concat(r,`;
+   padding-right: `).concat(s,"px ").concat(r,`;
+  }
+  body[`).concat(pi,`] {
+    overflow: hidden `).concat(r,`;
+    overscroll-behavior: contain;
+    `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&`
+    padding-left: `.concat(a,`px;
+    padding-top: `).concat(o,`px;
+    padding-right: `).concat(i,`px;
+    margin-left:0;
+    margin-top:0;
+    margin-right: `).concat(s,"px ").concat(r,`;
+    `),n==="padding"&&"padding-right: ".concat(s,"px ").concat(r,";")].filter(Boolean).join(""),`
+  }
+  
+  .`).concat(Fc,` {
+    right: `).concat(s,"px ").concat(r,`;
+  }
+  
+  .`).concat(zc,` {
+    margin-right: `).concat(s,"px ").concat(r,`;
+  }
+  
+  .`).concat(Fc," .").concat(Fc,` {
+    right: 0 `).concat(r,`;
+  }
+  
+  .`).concat(zc," .").concat(zc,` {
+    margin-right: 0 `).concat(r,`;
+  }
+  
+  body[`).concat(pi,`] {
+    `).concat(JC,": ").concat(s,`px;
+  }
+`)},Fx=function(){var e=parseInt(document.body.getAttribute(pi)||"0",10);return isFinite(e)?e:0},gE=function(){k.useEffect(function(){return document.body.setAttribute(pi,(Fx()+1).toString()),function(){var e=Fx()-1;e<=0?document.body.removeAttribute(pi):document.body.setAttribute(pi,e.toString())}},[])},xE=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,a=r===void 0?"margin":r;gE();var o=k.useMemo(function(){return hE(a)},[a]);return k.createElement(vE,{styles:yE(o,!t,a,n?"":"!important")})},tv=!1;if(typeof window<"u")try{var lc=Object.defineProperty({},"passive",{get:function(){return tv=!0,!0}});window.addEventListener("test",lc,lc),window.removeEventListener("test",lc,lc)}catch{tv=!1}var Lo=tv?{passive:!1}:!1,wE=function(e){return e.tagName==="TEXTAREA"},e4=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!wE(e)&&n[t]==="visible")},bE=function(e){return e4(e,"overflowY")},PE=function(e){return e4(e,"overflowX")},zx=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=t4(e,r);if(a){var o=n4(e,r),i=o[1],s=o[2];if(i>s)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},SE=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},OE=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},t4=function(e,t){return e==="v"?bE(t):PE(t)},n4=function(e,t){return e==="v"?SE(t):OE(t)},kE=function(e,t){return e==="h"&&t==="rtl"?-1:1},_E=function(e,t,n,r,a){var o=kE(e,window.getComputedStyle(t).direction),i=o*r,s=n.target,l=t.contains(s),u=!1,f=i>0,c=0,p=0;do{if(!s)break;var d=n4(e,s),h=d[0],m=d[1],g=d[2],v=m-g-o*h;(h||v)&&t4(e,s)&&(c+=v,p+=h);var y=s.parentNode;s=y&&y.nodeType===Node.DOCUMENT_FRAGMENT_NODE?y.host:y}while(!l&&s!==document.body||l&&(t.contains(s)||t===s));return(f&&Math.abs(c)<1||!f&&Math.abs(p)<1)&&(u=!0),u},uc=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Bx=function(e){return[e.deltaX,e.deltaY]},Hx=function(e){return e&&"current"in e?e.current:e},AE=function(e,t){return e[0]===t[0]&&e[1]===t[1]},CE=function(e){return`
+  .block-interactivity-`.concat(e,` {pointer-events: none;}
+  .allow-interactivity-`).concat(e,` {pointer-events: all;}
+`)},EE=0,Fo=[];function TE(e){var t=k.useRef([]),n=k.useRef([0,0]),r=k.useRef(),a=k.useState(EE++)[0],o=k.useState(J6)[0],i=k.useRef(e);k.useEffect(function(){i.current=e},[e]),k.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var m=QC([e.lockRef.current],(e.shards||[]).map(Hx),!0).filter(Boolean);return m.forEach(function(g){return g.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),m.forEach(function(g){return g.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var s=k.useCallback(function(m,g){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!i.current.allowPinchZoom;var v=uc(m),y=n.current,x="deltaX"in m?m.deltaX:y[0]-v[0],P="deltaY"in m?m.deltaY:y[1]-v[1],w,S=m.target,O=Math.abs(x)>Math.abs(P)?"h":"v";if("touches"in m&&O==="h"&&S.type==="range")return!1;var _=zx(O,S);if(!_)return!0;if(_?w=O:(w=O==="v"?"h":"v",_=zx(O,S)),!_)return!1;if(!r.current&&"changedTouches"in m&&(x||P)&&(r.current=w),!w)return!0;var A=r.current||w;return _E(A,g,m,A==="h"?x:P)},[]),l=k.useCallback(function(m){var g=m;if(!(!Fo.length||Fo[Fo.length-1]!==o)){var v="deltaY"in g?Bx(g):uc(g),y=t.current.filter(function(w){return w.name===g.type&&(w.target===g.target||g.target===w.shadowParent)&&AE(w.delta,v)})[0];if(y&&y.should){g.cancelable&&g.preventDefault();return}if(!y){var x=(i.current.shards||[]).map(Hx).filter(Boolean).filter(function(w){return w.contains(g.target)}),P=x.length>0?s(g,x[0]):!i.current.noIsolation;P&&g.cancelable&&g.preventDefault()}}},[]),u=k.useCallback(function(m,g,v,y){var x={name:m,delta:g,target:v,should:y,shadowParent:jE(v)};t.current.push(x),setTimeout(function(){t.current=t.current.filter(function(P){return P!==x})},1)},[]),f=k.useCallback(function(m){n.current=uc(m),r.current=void 0},[]),c=k.useCallback(function(m){u(m.type,Bx(m),m.target,s(m,e.lockRef.current))},[]),p=k.useCallback(function(m){u(m.type,uc(m),m.target,s(m,e.lockRef.current))},[]);k.useEffect(function(){return Fo.push(o),e.setCallbacks({onScrollCapture:c,onWheelCapture:c,onTouchMoveCapture:p}),document.addEventListener("wheel",l,Lo),document.addEventListener("touchmove",l,Lo),document.addEventListener("touchstart",f,Lo),function(){Fo=Fo.filter(function(m){return m!==o}),document.removeEventListener("wheel",l,Lo),document.removeEventListener("touchmove",l,Lo),document.removeEventListener("touchstart",f,Lo)}},[]);var d=e.removeScrollBar,h=e.inert;return k.createElement(k.Fragment,null,h?k.createElement(o,{styles:CE(a)}):null,d?k.createElement(xE,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function jE(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const $E=iE(Z6,TE);var r4=k.forwardRef(function(e,t){return k.createElement(Wp,rr({},e,{ref:t,sideCar:$E}))});r4.classNames=Wp.classNames;var NE=[" ","Enter","ArrowUp","ArrowDown"],ME=[" ","Enter"],bo="Select",[qp,Vp,RE]=g6(bo),[hs,pse]=ps(bo,[RE,Up]),Kp=Up(),[IE,Na]=hs(bo),[DE,LE]=hs(bo),a4=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:o,value:i,defaultValue:s,onValueChange:l,dir:u,name:f,autoComplete:c,disabled:p,required:d,form:h}=e,m=Kp(t),[g,v]=k.useState(null),[y,x]=k.useState(null),[P,w]=k.useState(!1),S=R0(u),[O,_]=xf({prop:r,defaultProp:a??!1,onChange:o,caller:bo}),[A,j]=xf({prop:i,defaultProp:s,onChange:l,caller:bo}),E=k.useRef(null),T=g?h||!!g.closest("form"):!0,[N,M]=k.useState(new Set),I=Array.from(N).map(R=>R.props.value).join(";");return b.jsx(FC,{...m,children:b.jsxs(IE,{required:d,scope:t,trigger:g,onTriggerChange:v,valueNode:y,onValueNodeChange:x,valueNodeHasChildren:P,onValueNodeHasChildrenChange:w,contentId:Tu(),value:A,onValueChange:j,open:O,onOpenChange:_,dir:S,triggerPointerDownPosRef:E,disabled:p,children:[b.jsx(qp.Provider,{scope:t,children:b.jsx(DE,{scope:e.__scopeSelect,onNativeOptionAdd:k.useCallback(R=>{M(L=>new Set(L).add(R))},[]),onNativeOptionRemove:k.useCallback(R=>{M(L=>{const $=new Set(L);return $.delete(R),$})},[]),children:n})}),T?b.jsxs(C4,{"aria-hidden":!0,required:d,tabIndex:-1,name:f,autoComplete:c,value:A,onChange:R=>j(R.target.value),disabled:p,form:h,children:[A===void 0?b.jsx("option",{value:""}):null,Array.from(N)]},I):null]})})};a4.displayName=bo;var o4="SelectTrigger",i4=k.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...a}=e,o=Kp(n),i=Na(o4,n),s=i.disabled||r,l=Ye(t,i.onTriggerChange),u=Vp(n),f=k.useRef("touch"),[c,p,d]=T4(m=>{const g=u().filter(x=>!x.disabled),v=g.find(x=>x.value===i.value),y=j4(g,m,v);y!==void 0&&i.onValueChange(y.value)}),h=m=>{s||(i.onOpenChange(!0),d()),m&&(i.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return b.jsx(G6,{asChild:!0,...o,children:b.jsx(Ee.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":E4(i.value)?"":void 0,...a,ref:l,onClick:pe(a.onClick,m=>{m.currentTarget.focus(),f.current!=="mouse"&&h(m)}),onPointerDown:pe(a.onPointerDown,m=>{f.current=m.pointerType;const g=m.target;g.hasPointerCapture(m.pointerId)&&g.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(h(m),m.preventDefault())}),onKeyDown:pe(a.onKeyDown,m=>{const g=c.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&p(m.key),!(g&&m.key===" ")&&NE.includes(m.key)&&(h(),m.preventDefault())})})})});i4.displayName=o4;var s4="SelectValue",l4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,children:o,placeholder:i="",...s}=e,l=Na(s4,n),{onValueNodeHasChildrenChange:u}=l,f=o!==void 0,c=Ye(t,l.onValueNodeChange);return jt(()=>{u(f)},[u,f]),b.jsx(Ee.span,{...s,ref:c,style:{pointerEvents:"none"},children:E4(l.value)?b.jsx(b.Fragment,{children:i}):o})});l4.displayName=s4;var FE="SelectIcon",u4=k.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...a}=e;return b.jsx(Ee.span,{"aria-hidden":!0,...a,ref:t,children:r||"▼"})});u4.displayName=FE;var zE="SelectPortal",c4=e=>b.jsx(q6,{asChild:!0,...e});c4.displayName=zE;var Po="SelectContent",f4=k.forwardRef((e,t)=>{const n=Na(Po,e.__scopeSelect),[r,a]=k.useState();if(jt(()=>{a(new DocumentFragment)},[]),!n.open){const o=r;return o?fs.createPortal(b.jsx(p4,{scope:e.__scopeSelect,children:b.jsx(qp.Slot,{scope:e.__scopeSelect,children:b.jsx("div",{children:e.children})})}),o):null}return b.jsx(d4,{...e,ref:t})});f4.displayName=Po;var An=10,[p4,Ma]=hs(Po),BE="SelectContentImpl",HE=Il("SelectContent.RemoveScroll"),d4=k.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:o,onPointerDownOutside:i,side:s,sideOffset:l,align:u,alignOffset:f,arrowPadding:c,collisionBoundary:p,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g,...v}=e,y=Na(Po,n),[x,P]=k.useState(null),[w,S]=k.useState(null),O=Ye(t,J=>P(J)),[_,A]=k.useState(null),[j,E]=k.useState(null),T=Vp(n),[N,M]=k.useState(!1),I=k.useRef(!1);k.useEffect(()=>{if(x)return YC(x)},[x]),bA();const R=k.useCallback(J=>{const[le,...q]=T().map(F=>F.ref.current),[K]=q.slice(-1),X=document.activeElement;for(const F of J)if(F===X||(F==null||F.scrollIntoView({block:"nearest"}),F===le&&w&&(w.scrollTop=0),F===K&&w&&(w.scrollTop=w.scrollHeight),F==null||F.focus(),document.activeElement!==X))return},[T,w]),L=k.useCallback(()=>R([_,x]),[R,_,x]);k.useEffect(()=>{N&&L()},[N,L]);const{onOpenChange:$,triggerPointerDownPosRef:D}=y;k.useEffect(()=>{if(x){let J={x:0,y:0};const le=K=>{var X,F;J={x:Math.abs(Math.round(K.pageX)-(((X=D.current)==null?void 0:X.x)??0)),y:Math.abs(Math.round(K.pageY)-(((F=D.current)==null?void 0:F.y)??0))}},q=K=>{J.x<=10&&J.y<=10?K.preventDefault():x.contains(K.target)||$(!1),document.removeEventListener("pointermove",le),D.current=null};return D.current!==null&&(document.addEventListener("pointermove",le),document.addEventListener("pointerup",q,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",le),document.removeEventListener("pointerup",q,{capture:!0})}}},[x,$,D]),k.useEffect(()=>{const J=()=>$(!1);return window.addEventListener("blur",J),window.addEventListener("resize",J),()=>{window.removeEventListener("blur",J),window.removeEventListener("resize",J)}},[$]);const[H,W]=T4(J=>{const le=T().filter(X=>!X.disabled),q=le.find(X=>X.ref.current===document.activeElement),K=j4(le,J,q);K&&setTimeout(()=>K.ref.current.focus())}),G=k.useCallback((J,le,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===le||K)&&(A(J),K&&(I.current=!0))},[y.value]),Z=k.useCallback(()=>x==null?void 0:x.focus(),[x]),ie=k.useCallback((J,le,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===le||K)&&E(J)},[y.value]),ve=r==="popper"?nv:m4,Pe=ve===nv?{side:s,sideOffset:l,align:u,alignOffset:f,arrowPadding:c,collisionBoundary:p,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g}:{};return b.jsx(p4,{scope:n,content:x,viewport:w,onViewportChange:S,itemRefCallback:G,selectedItem:_,onItemLeave:Z,itemTextRefCallback:ie,focusSelectedItem:L,selectedItemText:j,position:r,isPositioned:N,searchRef:H,children:b.jsx(r4,{as:HE,allowPinchZoom:!0,children:b.jsx(b6,{asChild:!0,trapped:y.open,onMountAutoFocus:J=>{J.preventDefault()},onUnmountAutoFocus:pe(a,J=>{var le;(le=y.trigger)==null||le.focus({preventScroll:!0}),J.preventDefault()}),children:b.jsx(I0,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:J=>J.preventDefault(),onDismiss:()=>y.onOpenChange(!1),children:b.jsx(ve,{role:"listbox",id:y.contentId,"data-state":y.open?"open":"closed",dir:y.dir,onContextMenu:J=>J.preventDefault(),...v,...Pe,onPlaced:()=>M(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:pe(v.onKeyDown,J=>{const le=J.ctrlKey||J.altKey||J.metaKey;if(J.key==="Tab"&&J.preventDefault(),!le&&J.key.length===1&&W(J.key),["ArrowUp","ArrowDown","Home","End"].includes(J.key)){let K=T().filter(X=>!X.disabled).map(X=>X.ref.current);if(["ArrowUp","End"].includes(J.key)&&(K=K.slice().reverse()),["ArrowUp","ArrowDown"].includes(J.key)){const X=J.target,F=K.indexOf(X);K=K.slice(F+1)}setTimeout(()=>R(K)),J.preventDefault()}})})})})})})});d4.displayName=BE;var GE="SelectItemAlignedPosition",m4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...a}=e,o=Na(Po,n),i=Ma(Po,n),[s,l]=k.useState(null),[u,f]=k.useState(null),c=Ye(t,O=>f(O)),p=Vp(n),d=k.useRef(!1),h=k.useRef(!0),{viewport:m,selectedItem:g,selectedItemText:v,focusSelectedItem:y}=i,x=k.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&u&&m&&g&&v){const O=o.trigger.getBoundingClientRect(),_=u.getBoundingClientRect(),A=o.valueNode.getBoundingClientRect(),j=v.getBoundingClientRect();if(o.dir!=="rtl"){const X=j.left-_.left,F=A.left-X,fe=O.left-F,ne=O.width+fe,Ne=Math.max(ne,_.width),Me=window.innerWidth-An,Ze=bx(F,[An,Math.max(An,Me-Ne)]);s.style.minWidth=ne+"px",s.style.left=Ze+"px"}else{const X=_.right-j.right,F=window.innerWidth-A.right-X,fe=window.innerWidth-O.right-F,ne=O.width+fe,Ne=Math.max(ne,_.width),Me=window.innerWidth-An,Ze=bx(F,[An,Math.max(An,Me-Ne)]);s.style.minWidth=ne+"px",s.style.right=Ze+"px"}const E=p(),T=window.innerHeight-An*2,N=m.scrollHeight,M=window.getComputedStyle(u),I=parseInt(M.borderTopWidth,10),R=parseInt(M.paddingTop,10),L=parseInt(M.borderBottomWidth,10),$=parseInt(M.paddingBottom,10),D=I+R+N+$+L,H=Math.min(g.offsetHeight*5,D),W=window.getComputedStyle(m),G=parseInt(W.paddingTop,10),Z=parseInt(W.paddingBottom,10),ie=O.top+O.height/2-An,ve=T-ie,Pe=g.offsetHeight/2,J=g.offsetTop+Pe,le=I+R+J,q=D-le;if(le<=ie){const X=E.length>0&&g===E[E.length-1].ref.current;s.style.bottom="0px";const F=u.clientHeight-m.offsetTop-m.offsetHeight,fe=Math.max(ve,Pe+(X?Z:0)+F+L),ne=le+fe;s.style.height=ne+"px"}else{const X=E.length>0&&g===E[0].ref.current;s.style.top="0px";const fe=Math.max(ie,I+m.offsetTop+(X?G:0)+Pe)+q;s.style.height=fe+"px",m.scrollTop=le-ie+m.offsetTop}s.style.margin=`${An}px 0`,s.style.minHeight=H+"px",s.style.maxHeight=T+"px",r==null||r(),requestAnimationFrame(()=>d.current=!0)}},[p,o.trigger,o.valueNode,s,u,m,g,v,o.dir,r]);jt(()=>x(),[x]);const[P,w]=k.useState();jt(()=>{u&&w(window.getComputedStyle(u).zIndex)},[u]);const S=k.useCallback(O=>{O&&h.current===!0&&(x(),y==null||y(),h.current=!1)},[x,y]);return b.jsx(WE,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:d,onScrollButtonChange:S,children:b.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:P},children:b.jsx(Ee.div,{...a,ref:c,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});m4.displayName=GE;var UE="SelectPopperPosition",nv=k.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=An,...o}=e,i=Kp(n);return b.jsx(U6,{...i,...o,ref:t,align:r,collisionPadding:a,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});nv.displayName=UE;var[WE,q0]=hs(Po,{}),rv="SelectViewport",h4=k.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...a}=e,o=Ma(rv,n),i=q0(rv,n),s=Ye(t,o.onViewportChange),l=k.useRef(0);return b.jsxs(b.Fragment,{children:[b.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),b.jsx(qp.Slot,{scope:n,children:b.jsx(Ee.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:pe(a.onScroll,u=>{const f=u.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:p}=i;if(p!=null&&p.current&&c){const d=Math.abs(l.current-f.scrollTop);if(d>0){const h=window.innerHeight-An*2,m=parseFloat(c.style.minHeight),g=parseFloat(c.style.height),v=Math.max(m,g);if(v<h){const y=v+d,x=Math.min(h,y),P=y-x;c.style.height=x+"px",c.style.bottom==="0px"&&(f.scrollTop=P>0?P:0,c.style.justifyContent="flex-end")}}}l.current=f.scrollTop})})})]})});h4.displayName=rv;var v4="SelectGroup",[qE,VE]=hs(v4),KE=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Tu();return b.jsx(qE,{scope:n,id:a,children:b.jsx(Ee.div,{role:"group","aria-labelledby":a,...r,ref:t})})});KE.displayName=v4;var y4="SelectLabel",g4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=VE(y4,n);return b.jsx(Ee.div,{id:a.id,...r,ref:t})});g4.displayName=y4;var wf="SelectItem",[XE,x4]=hs(wf),w4=k.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:o,...i}=e,s=Na(wf,n),l=Ma(wf,n),u=s.value===r,[f,c]=k.useState(o??""),[p,d]=k.useState(!1),h=Ye(t,y=>{var x;return(x=l.itemRefCallback)==null?void 0:x.call(l,y,r,a)}),m=Tu(),g=k.useRef("touch"),v=()=>{a||(s.onValueChange(r),s.onOpenChange(!1))};if(r==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return b.jsx(XE,{scope:n,value:r,disabled:a,textId:m,isSelected:u,onItemTextChange:k.useCallback(y=>{c(x=>x||((y==null?void 0:y.textContent)??"").trim())},[]),children:b.jsx(qp.ItemSlot,{scope:n,value:r,disabled:a,textValue:f,children:b.jsx(Ee.div,{role:"option","aria-labelledby":m,"data-highlighted":p?"":void 0,"aria-selected":u&&p,"data-state":u?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...i,ref:h,onFocus:pe(i.onFocus,()=>d(!0)),onBlur:pe(i.onBlur,()=>d(!1)),onClick:pe(i.onClick,()=>{g.current!=="mouse"&&v()}),onPointerUp:pe(i.onPointerUp,()=>{g.current==="mouse"&&v()}),onPointerDown:pe(i.onPointerDown,y=>{g.current=y.pointerType}),onPointerMove:pe(i.onPointerMove,y=>{var x;g.current=y.pointerType,a?(x=l.onItemLeave)==null||x.call(l):g.current==="mouse"&&y.currentTarget.focus({preventScroll:!0})}),onPointerLeave:pe(i.onPointerLeave,y=>{var x;y.currentTarget===document.activeElement&&((x=l.onItemLeave)==null||x.call(l))}),onKeyDown:pe(i.onKeyDown,y=>{var P;((P=l.searchRef)==null?void 0:P.current)!==""&&y.key===" "||(ME.includes(y.key)&&v(),y.key===" "&&y.preventDefault())})})})})});w4.displayName=wf;var tl="SelectItemText",b4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,...o}=e,i=Na(tl,n),s=Ma(tl,n),l=x4(tl,n),u=LE(tl,n),[f,c]=k.useState(null),p=Ye(t,v=>c(v),l.onItemTextChange,v=>{var y;return(y=s.itemTextRefCallback)==null?void 0:y.call(s,v,l.value,l.disabled)}),d=f==null?void 0:f.textContent,h=k.useMemo(()=>b.jsx("option",{value:l.value,disabled:l.disabled,children:d},l.value),[l.disabled,l.value,d]),{onNativeOptionAdd:m,onNativeOptionRemove:g}=u;return jt(()=>(m(h),()=>g(h)),[m,g,h]),b.jsxs(b.Fragment,{children:[b.jsx(Ee.span,{id:l.textId,...o,ref:p}),l.isSelected&&i.valueNode&&!i.valueNodeHasChildren?fs.createPortal(o.children,i.valueNode):null]})});b4.displayName=tl;var P4="SelectItemIndicator",S4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return x4(P4,n).isSelected?b.jsx(Ee.span,{"aria-hidden":!0,...r,ref:t}):null});S4.displayName=P4;var av="SelectScrollUpButton",O4=k.forwardRef((e,t)=>{const n=Ma(av,e.__scopeSelect),r=q0(av,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollTop>0;o(u)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(_4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop-l.offsetHeight)}}):null});O4.displayName=av;var ov="SelectScrollDownButton",k4=k.forwardRef((e,t)=>{const n=Ma(ov,e.__scopeSelect),r=q0(ov,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollHeight-l.clientHeight,f=Math.ceil(l.scrollTop)<u;o(f)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(_4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop+l.offsetHeight)}}):null});k4.displayName=ov;var _4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=e,o=Ma("SelectScrollButton",n),i=k.useRef(null),s=Vp(n),l=k.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return k.useEffect(()=>()=>l(),[l]),jt(()=>{var f;const u=s().find(c=>c.ref.current===document.activeElement);(f=u==null?void 0:u.ref.current)==null||f.scrollIntoView({block:"nearest"})},[s]),b.jsx(Ee.div,{"aria-hidden":!0,...a,ref:t,style:{flexShrink:0,...a.style},onPointerDown:pe(a.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(r,50))}),onPointerMove:pe(a.onPointerMove,()=>{var u;(u=o.onItemLeave)==null||u.call(o),i.current===null&&(i.current=window.setInterval(r,50))}),onPointerLeave:pe(a.onPointerLeave,()=>{l()})})}),YE="SelectSeparator",A4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return b.jsx(Ee.div,{"aria-hidden":!0,...r,ref:t})});A4.displayName=YE;var iv="SelectArrow",QE=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Kp(n),o=Na(iv,n),i=Ma(iv,n);return o.open&&i.position==="popper"?b.jsx(W6,{...a,...r,ref:t}):null});QE.displayName=iv;var ZE="SelectBubbleInput",C4=k.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const a=k.useRef(null),o=Ye(r,a),i=UC(t);return k.useEffect(()=>{const s=a.current;if(!s)return;const l=window.HTMLSelectElement.prototype,f=Object.getOwnPropertyDescriptor(l,"value").set;if(i!==t&&f){const c=new Event("change",{bubbles:!0});f.call(s,t),s.dispatchEvent(c)}},[i,t]),b.jsx(Ee.select,{...n,style:{...V6,...n.style},ref:o,defaultValue:t})});C4.displayName=ZE;function E4(e){return e===""||e===void 0}function T4(e){const t=Aa(e),n=k.useRef(""),r=k.useRef(0),a=k.useCallback(i=>{const s=n.current+i;t(s),function l(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(s)},[t]),o=k.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return k.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,o]}function j4(e,t,n){const a=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=n?e.indexOf(n):-1;let i=JE(e,Math.max(o,0));a.length===1&&(i=i.filter(u=>u!==n));const l=i.find(u=>u.textValue.toLowerCase().startsWith(a.toLowerCase()));return l!==n?l:void 0}function JE(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var eT=a4,$4=i4,tT=l4,nT=u4,rT=c4,N4=f4,aT=h4,M4=g4,R4=w4,oT=b4,iT=S4,I4=O4,D4=k4,L4=A4;/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const sT=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),F4=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */var lT={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.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const uT=k.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:a="",children:o,iconNode:i,...s},l)=>k.createElement("svg",{ref:l,...lT,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:F4("lucide",a),...s},[...i.map(([u,f])=>k.createElement(u,f)),...Array.isArray(o)?o:[o]]));/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Qe=(e,t)=>{const n=k.forwardRef(({className:r,...a},o)=>k.createElement(uT,{ref:o,iconNode:t,className:F4(`lucide-${sT(e)}`,r),...a}));return n.displayName=`${e}`,n};/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const z4=Qe("Activity",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const cT=Qe("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const B4=Qe("ChartColumn",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const fT=Qe("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const H4=Qe("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const pT=Qe("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const dT=Qe("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const G4=Qe("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const U4=Qe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const W4=Qe("Database",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const mT=Qe("ExternalLink",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const hT=Qe("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const q4=Qe("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const vT=Qe("MemoryStick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const V4=Qe("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const K4=Qe("Server",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const yT=Qe("Shield",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const gT=Qe("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const X4=Qe("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const xT=Qe("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/**
+ * @license lucide-react v0.462.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=Qe("Zap",[["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"}]]);function Y4(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=Y4(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function ue(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=Y4(e))&&(r&&(r+=" "),r+=t);return r}const V0="-",bT=e=>{const t=ST(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:i=>{const s=i.split(V0);return s[0]===""&&s.length!==1&&s.shift(),Q4(s,t)||PT(i)},getConflictingClassGroupIds:(i,s)=>{const l=n[i]||[];return s&&r[i]?[...l,...r[i]]:l}}},Q4=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?Q4(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const o=e.join(V0);return(i=t.validators.find(({validator:s})=>s(o)))==null?void 0:i.classGroupId},Gx=/^\[(.+)\]$/,PT=e=>{if(Gx.test(e)){const t=Gx.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},ST=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return kT(Object.entries(e.classGroups),n).forEach(([o,i])=>{sv(i,r,o,t)}),r},sv=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?t:Ux(t,a);o.classGroupId=n;return}if(typeof a=="function"){if(OT(a)){sv(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([o,i])=>{sv(i,Ux(t,o),n,r)})})},Ux=(e,t)=>{let n=e;return t.split(V0).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},OT=e=>e.isThemeGetter,kT=(e,t)=>t?e.map(([n,r])=>{const a=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[t+i,s])):o);return[n,a]}):e,_T=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(o,i)=>{n.set(o,i),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let i=n.get(o);if(i!==void 0)return i;if((i=r.get(o))!==void 0)return a(o,i),i},set(o,i){n.has(o)?n.set(o,i):a(o,i)}}},Z4="!",AT=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,a=t[0],o=t.length,i=s=>{const l=[];let u=0,f=0,c;for(let g=0;g<s.length;g++){let v=s[g];if(u===0){if(v===a&&(r||s.slice(g,g+o)===t)){l.push(s.slice(f,g)),f=g+o;continue}if(v==="/"){c=g;continue}}v==="["?u++:v==="]"&&u--}const p=l.length===0?s:s.substring(f),d=p.startsWith(Z4),h=d?p.substring(1):p,m=c&&c>f?c-f:void 0;return{modifiers:l,hasImportantModifier:d,baseClassName:h,maybePostfixModifierPosition:m}};return n?s=>n({className:s,parseClassName:i}):i},CT=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},ET=e=>({cache:_T(e.cacheSize),parseClassName:AT(e),...bT(e)}),TT=/\s+/,jT=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a}=t,o=[],i=e.trim().split(TT);let s="";for(let l=i.length-1;l>=0;l-=1){const u=i[l],{modifiers:f,hasImportantModifier:c,baseClassName:p,maybePostfixModifierPosition:d}=n(u);let h=!!d,m=r(h?p.substring(0,d):p);if(!m){if(!h){s=u+(s.length>0?" "+s:s);continue}if(m=r(p),!m){s=u+(s.length>0?" "+s:s);continue}h=!1}const g=CT(f).join(":"),v=c?g+Z4:g,y=v+m;if(o.includes(y))continue;o.push(y);const x=a(m,h);for(let P=0;P<x.length;++P){const w=x[P];o.push(v+w)}s=u+(s.length>0?" "+s:s)}return s};function $T(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=J4(t))&&(r&&(r+=" "),r+=n);return r}const J4=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=J4(e[r]))&&(n&&(n+=" "),n+=t);return n};function NT(e,...t){let n,r,a,o=i;function i(l){const u=t.reduce((f,c)=>c(f),e());return n=ET(u),r=n.cache.get,a=n.cache.set,o=s,s(l)}function s(l){const u=r(l);if(u)return u;const f=jT(l,n);return a(l,f),f}return function(){return o($T.apply(null,arguments))}}const Re=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},e8=/^\[(?:([a-z-]+):)?(.+)\]$/i,MT=/^\d+\/\d+$/,RT=new Set(["px","full","screen"]),IT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,DT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,LT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,FT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,zT=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,xr=e=>di(e)||RT.has(e)||MT.test(e),Xr=e=>vs(e,"length",KT),di=e=>!!e&&!Number.isNaN(Number(e)),Cm=e=>vs(e,"number",di),Fs=e=>!!e&&Number.isInteger(Number(e)),BT=e=>e.endsWith("%")&&di(e.slice(0,-1)),se=e=>e8.test(e),Yr=e=>IT.test(e),HT=new Set(["length","size","percentage"]),GT=e=>vs(e,HT,t8),UT=e=>vs(e,"position",t8),WT=new Set(["image","url"]),qT=e=>vs(e,WT,YT),VT=e=>vs(e,"",XT),zs=()=>!0,vs=(e,t,n)=>{const r=e8.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},KT=e=>DT.test(e)&&!LT.test(e),t8=()=>!1,XT=e=>FT.test(e),YT=e=>zT.test(e),QT=()=>{const e=Re("colors"),t=Re("spacing"),n=Re("blur"),r=Re("brightness"),a=Re("borderColor"),o=Re("borderRadius"),i=Re("borderSpacing"),s=Re("borderWidth"),l=Re("contrast"),u=Re("grayscale"),f=Re("hueRotate"),c=Re("invert"),p=Re("gap"),d=Re("gradientColorStops"),h=Re("gradientColorStopPositions"),m=Re("inset"),g=Re("margin"),v=Re("opacity"),y=Re("padding"),x=Re("saturate"),P=Re("scale"),w=Re("sepia"),S=Re("skew"),O=Re("space"),_=Re("translate"),A=()=>["auto","contain","none"],j=()=>["auto","hidden","clip","visible","scroll"],E=()=>["auto",se,t],T=()=>[se,t],N=()=>["",xr,Xr],M=()=>["auto",di,se],I=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],R=()=>["solid","dashed","dotted","double","none"],L=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>["start","end","center","between","around","evenly","stretch"],D=()=>["","0",se],H=()=>["auto","avoid","all","avoid-page","page","left","right","column"],W=()=>[di,se];return{cacheSize:500,separator:":",theme:{colors:[zs],spacing:[xr,Xr],blur:["none","",Yr,se],brightness:W(),borderColor:[e],borderRadius:["none","","full",Yr,se],borderSpacing:T(),borderWidth:N(),contrast:W(),grayscale:D(),hueRotate:W(),invert:D(),gap:T(),gradientColorStops:[e],gradientColorStopPositions:[BT,Xr],inset:E(),margin:E(),opacity:W(),padding:T(),saturate:W(),scale:W(),sepia:D(),skew:W(),space:T(),translate:T()},classGroups:{aspect:[{aspect:["auto","square","video",se]}],container:["container"],columns:[{columns:[Yr]}],"break-after":[{"break-after":H()}],"break-before":[{"break-before":H()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...I(),se]}],overflow:[{overflow:j()}],"overflow-x":[{"overflow-x":j()}],"overflow-y":[{"overflow-y":j()}],overscroll:[{overscroll:A()}],"overscroll-x":[{"overscroll-x":A()}],"overscroll-y":[{"overscroll-y":A()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Fs,se]}],basis:[{basis:E()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",se]}],grow:[{grow:D()}],shrink:[{shrink:D()}],order:[{order:["first","last","none",Fs,se]}],"grid-cols":[{"grid-cols":[zs]}],"col-start-end":[{col:["auto",{span:["full",Fs,se]},se]}],"col-start":[{"col-start":M()}],"col-end":[{"col-end":M()}],"grid-rows":[{"grid-rows":[zs]}],"row-start-end":[{row:["auto",{span:[Fs,se]},se]}],"row-start":[{"row-start":M()}],"row-end":[{"row-end":M()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",se]}],gap:[{gap:[p]}],"gap-x":[{"gap-x":[p]}],"gap-y":[{"gap-y":[p]}],"justify-content":[{justify:["normal",...$()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...$(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...$(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[g]}],mx:[{mx:[g]}],my:[{my:[g]}],ms:[{ms:[g]}],me:[{me:[g]}],mt:[{mt:[g]}],mr:[{mr:[g]}],mb:[{mb:[g]}],ml:[{ml:[g]}],"space-x":[{"space-x":[O]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[O]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",se,t]}],"min-w":[{"min-w":[se,t,"min","max","fit"]}],"max-w":[{"max-w":[se,t,"none","full","min","max","fit","prose",{screen:[Yr]},Yr]}],h:[{h:[se,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[se,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Yr,Xr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Cm]}],"font-family":[{font:[zs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",se]}],"line-clamp":[{"line-clamp":["none",di,Cm]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",xr,se]}],"list-image":[{"list-image":["none",se]}],"list-style-type":[{list:["none","disc","decimal",se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...R(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",xr,Xr]}],"underline-offset":[{"underline-offset":["auto",xr,se]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:T()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",se]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...I(),UT]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",GT]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},qT]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[h]}],"gradient-via-pos":[{via:[h]}],"gradient-to-pos":[{to:[h]}],"gradient-from":[{from:[d]}],"gradient-via":[{via:[d]}],"gradient-to":[{to:[d]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[...R(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:R()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...R()]}],"outline-offset":[{"outline-offset":[xr,se]}],"outline-w":[{outline:[xr,Xr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:N()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[xr,Xr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Yr,VT]}],"shadow-color":[{shadow:[zs]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...L(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":L()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Yr,se]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[f]}],invert:[{invert:[c]}],saturate:[{saturate:[x]}],sepia:[{sepia:[w]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[f]}],"backdrop-invert":[{"backdrop-invert":[c]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[x]}],"backdrop-sepia":[{"backdrop-sepia":[w]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",se]}],duration:[{duration:W()}],ease:[{ease:["linear","in","out","in-out",se]}],delay:[{delay:W()}],animate:[{animate:["none","spin","ping","pulse","bounce",se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[P]}],"scale-x":[{"scale-x":[P]}],"scale-y":[{"scale-y":[P]}],rotate:[{rotate:[Fs,se]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[S]}],"skew-y":[{"skew-y":[S]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",se]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",se]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":T()}],"scroll-mx":[{"scroll-mx":T()}],"scroll-my":[{"scroll-my":T()}],"scroll-ms":[{"scroll-ms":T()}],"scroll-me":[{"scroll-me":T()}],"scroll-mt":[{"scroll-mt":T()}],"scroll-mr":[{"scroll-mr":T()}],"scroll-mb":[{"scroll-mb":T()}],"scroll-ml":[{"scroll-ml":T()}],"scroll-p":[{"scroll-p":T()}],"scroll-px":[{"scroll-px":T()}],"scroll-py":[{"scroll-py":T()}],"scroll-ps":[{"scroll-ps":T()}],"scroll-pe":[{"scroll-pe":T()}],"scroll-pt":[{"scroll-pt":T()}],"scroll-pr":[{"scroll-pr":T()}],"scroll-pb":[{"scroll-pb":T()}],"scroll-pl":[{"scroll-pl":T()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",se]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[xr,Xr,Cm]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},ZT=NT(QT);function Oe(...e){return ZT(ue(e))}const JT=eT,ej=tT,n8=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs($4,{ref:r,className:Oe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,b.jsx(nT,{asChild:!0,children:b.jsx(H4,{className:"h-4 w-4 opacity-50"})})]}));n8.displayName=$4.displayName;const r8=k.forwardRef(({className:e,...t},n)=>b.jsx(I4,{ref:n,className:Oe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(pT,{className:"h-4 w-4"})}));r8.displayName=I4.displayName;const a8=k.forwardRef(({className:e,...t},n)=>b.jsx(D4,{ref:n,className:Oe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(H4,{className:"h-4 w-4"})}));a8.displayName=D4.displayName;const o8=k.forwardRef(({className:e,children:t,position:n="popper",...r},a)=>(k.useEffect(()=>{const o=()=>{document.querySelectorAll("[data-radix-popper-content-wrapper]").forEach(l=>{const u=l;u.style.setProperty("--popover","0 0% 100%"),u.style.setProperty("--popover-foreground","222.2 84% 4.9%"),u.style.setProperty("--border","214.3 31.8% 91.4%"),u.style.setProperty("--background","0 0% 100%"),u.style.setProperty("--foreground","222.2 84% 4.9%"),(document.documentElement.classList.contains("dark")||document.body.classList.contains("dark"))&&(u.style.setProperty("--popover","222.2 84% 4.9%"),u.style.setProperty("--popover-foreground","210 40% 98%"),u.style.setProperty("--border","217.2 32.6% 17.5%"),u.style.setProperty("--background","222.2 84% 4.9%"),u.style.setProperty("--foreground","210 40% 98%"))})};o();const i=setTimeout(o,100);return()=>clearTimeout(i)}),b.jsx(rT,{children:b.jsxs(N4,{ref:a,className:Oe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[b.jsx(r8,{}),b.jsx(aT,{className:Oe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),b.jsx(a8,{})]})})));o8.displayName=N4.displayName;const tj=k.forwardRef(({className:e,...t},n)=>b.jsx(M4,{ref:n,className:Oe("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));tj.displayName=M4.displayName;const i8=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(R4,{ref:r,className:Oe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(iT,{children:b.jsx(fT,{className:"h-4 w-4"})})}),b.jsx(oT,{children:t})]}));i8.displayName=R4.displayName;const nj=k.forwardRef(({className:e,...t},n)=>b.jsx(L4,{ref:n,className:Oe("-mx-1 my-1 h-px bg-muted",e),...t}));nj.displayName=L4.displayName;const Wx=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,qx=ue,s8=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return qx(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:o}=t,i=Object.keys(a).map(u=>{const f=n==null?void 0:n[u],c=o==null?void 0:o[u];if(f===null)return null;const p=Wx(f)||Wx(c);return a[u][p]}),s=n&&Object.entries(n).reduce((u,f)=>{let[c,p]=f;return p===void 0||(u[c]=p),u},{}),l=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((u,f)=>{let{class:c,className:p,...d}=f;return Object.entries(d).every(h=>{let[m,g]=h;return Array.isArray(g)?g.includes({...o,...s}[m]):{...o,...s}[m]===g})?[...u,c,p]:u},[]);return qx(e,i,l,n==null?void 0:n.class,n==null?void 0:n.className)},rj=s8("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function aj({className:e,variant:t,...n}){return b.jsx("div",{className:Oe(rj({variant:t}),e),...n})}const oj=s8("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),bf=k.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},o)=>{const i=r?aA:"button";return b.jsx(i,{className:Oe(oj({variant:t,size:n,className:e})),ref:o,...a})});bf.displayName="Button";const ij=({selectedVersion:e,availableVersions:t,onVersionChange:n,metadata:r,onDownloadReport:a})=>{const o=f=>{try{return new Date(f).toLocaleDateString()}catch{return f}},i=f=>`https://github.com/envoyproxy/gateway/releases/tag/v${f}`,s=f=>`https://github.com/envoyproxy/gateway/releases/download/v${f}/benchmark_report.zip`,l=()=>{const f=i(e);window.open(f,"_blank","noopener,noreferrer")},u=()=>{const f=s(e);window.open(f,"_blank","noopener,noreferrer")};return b.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("label",{className:"text-sm font-medium text-gray-700",children:"Version:"}),b.jsxs(JT,{value:e,onValueChange:n,children:[b.jsx(n8,{className:"w-32",children:b.jsx(ej,{})}),b.jsx(o8,{children:t.map(f=>b.jsxs(i8,{value:f,children:["v",f]},f))})]})]}),r&&b.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-600",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(cT,{className:"h-3 w-3"}),b.jsx("span",{children:o(r.date)})]}),r.environment&&b.jsx(aj,{variant:"secondary",className:"text-xs",children:r.environment}),r.gitCommit&&b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(q4,{className:"h-3 w-3"}),b.jsx("span",{className:"font-mono",children:r.gitCommit.substring(0,7)})]}),r.description&&b.jsx("span",{className:"hidden sm:inline max-w-xs truncate",title:r.description,children:r.description})]}),b.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[b.jsxs(bf,{variant:"outline",size:"sm",onClick:l,className:"flex items-center gap-1 text-xs",children:[b.jsx(mT,{className:"h-3 w-3"}),"View Release"]}),b.jsxs(bf,{variant:"outline",size:"sm",onClick:u,className:"flex items-center gap-1 text-xs",children:[b.jsx(B4,{className:"h-3 w-3"}),"Download Benchmark"]})]})]})},xe=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));xe.displayName="Card";const Se=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("flex flex-col space-y-1.5 p-6",e),...t}));Se.displayName="CardHeader";const we=k.forwardRef(({className:e,...t},n)=>b.jsx("h3",{ref:n,className:Oe("text-2xl font-semibold leading-none tracking-tight",e),...t}));we.displayName="CardTitle";const tn=k.forwardRef(({className:e,...t},n)=>b.jsx("p",{ref:n,className:Oe("text-sm text-muted-foreground",e),...t}));tn.displayName="CardDescription";const be=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("p-6 pt-0",e),...t}));be.displayName="CardContent";const sj=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Oe("flex items-center p-6 pt-0",e),...t}));sj.displayName="CardFooter";const lj=({performanceSummary:e,benchmarkResults:t})=>{const n=Math.round(Math.max(...t.map(i=>i.throughput))),r=Math.round(e.avgLatency/1e3),a=Math.round(Math.max(...t.map(i=>i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean))),o=e.maxRoutes;return b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-8",children:[b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(z4,{className:"h-4 w-4 mr-2"}),"Max Throughput in Test"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[n.toLocaleString()," RPS"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"Requests per second"})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(U4,{className:"h-4 w-4 mr-2"}),"Mean Response Time"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[r,"ms"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"End-to-end via Nighthawk"})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center",children:[b.jsx(vT,{className:"h-4 w-4 mr-2"}),"Memory Usage"]})}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[a,"MB"]}),b.jsxs("p",{className:"text-purple-100 text-sm",children:["Peak at ",o," routes"]})]})]}),b.jsxs(xe,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(we,{className:"text-sm font-medium flex items-center text",children:[b.jsx(K4,{className:"h-4 w-4 mr-2"}),"Max Routes in Test"]})}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:o.toLocaleString()}),b.jsx("p",{className:"text-purple-100 text-sm",children:"HTTPRoutes tested"})]})]})]})};var uj=Array.isArray,Vt=uj,cj=typeof Bu=="object"&&Bu&&Bu.Object===Object&&Bu,l8=cj,fj=l8,pj=typeof self=="object"&&self&&self.Object===Object&&self,dj=fj||pj||Function("return this")(),gr=dj,mj=gr,hj=mj.Symbol,$u=hj,Vx=$u,u8=Object.prototype,vj=u8.hasOwnProperty,yj=u8.toString,Bs=Vx?Vx.toStringTag:void 0;function gj(e){var t=vj.call(e,Bs),n=e[Bs];try{e[Bs]=void 0;var r=!0}catch{}var a=yj.call(e);return r&&(t?e[Bs]=n:delete e[Bs]),a}var xj=gj,wj=Object.prototype,bj=wj.toString;function Pj(e){return bj.call(e)}var Sj=Pj,Kx=$u,Oj=xj,kj=Sj,_j="[object Null]",Aj="[object Undefined]",Xx=Kx?Kx.toStringTag:void 0;function Cj(e){return e==null?e===void 0?Aj:_j:Xx&&Xx in Object(e)?Oj(e):kj(e)}var Ur=Cj;function Ej(e){return e!=null&&typeof e=="object"}var Wr=Ej,Tj=Ur,jj=Wr,$j="[object Symbol]";function Nj(e){return typeof e=="symbol"||jj(e)&&Tj(e)==$j}var ys=Nj,Mj=Vt,Rj=ys,Ij=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Dj=/^\w*$/;function Lj(e,t){if(Mj(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||Rj(e)?!0:Dj.test(e)||!Ij.test(e)||t!=null&&e in Object(t)}var K0=Lj;function Fj(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var Ra=Fj;const gs=Ce(Ra);var zj=Ur,Bj=Ra,Hj="[object AsyncFunction]",Gj="[object Function]",Uj="[object GeneratorFunction]",Wj="[object Proxy]";function qj(e){if(!Bj(e))return!1;var t=zj(e);return t==Gj||t==Uj||t==Hj||t==Wj}var X0=qj;const oe=Ce(X0);var Vj=gr,Kj=Vj["__core-js_shared__"],Xj=Kj,Em=Xj,Yx=function(){var e=/[^.]+$/.exec(Em&&Em.keys&&Em.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Yj(e){return!!Yx&&Yx in e}var Qj=Yj,Zj=Function.prototype,Jj=Zj.toString;function e$(e){if(e!=null){try{return Jj.call(e)}catch{}try{return e+""}catch{}}return""}var c8=e$,t$=X0,n$=Qj,r$=Ra,a$=c8,o$=/[\\^$.*+?()[\]{}|]/g,i$=/^\[object .+?Constructor\]$/,s$=Function.prototype,l$=Object.prototype,u$=s$.toString,c$=l$.hasOwnProperty,f$=RegExp("^"+u$.call(c$).replace(o$,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function p$(e){if(!r$(e)||n$(e))return!1;var t=t$(e)?f$:i$;return t.test(a$(e))}var d$=p$;function m$(e,t){return e==null?void 0:e[t]}var h$=m$,v$=d$,y$=h$;function g$(e,t){var n=y$(e,t);return v$(n)?n:void 0}var jo=g$,x$=jo,w$=x$(Object,"create"),Xp=w$,Qx=Xp;function b$(){this.__data__=Qx?Qx(null):{},this.size=0}var P$=b$;function S$(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var O$=S$,k$=Xp,_$="__lodash_hash_undefined__",A$=Object.prototype,C$=A$.hasOwnProperty;function E$(e){var t=this.__data__;if(k$){var n=t[e];return n===_$?void 0:n}return C$.call(t,e)?t[e]:void 0}var T$=E$,j$=Xp,$$=Object.prototype,N$=$$.hasOwnProperty;function M$(e){var t=this.__data__;return j$?t[e]!==void 0:N$.call(t,e)}var R$=M$,I$=Xp,D$="__lodash_hash_undefined__";function L$(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=I$&&t===void 0?D$:t,this}var F$=L$,z$=P$,B$=O$,H$=T$,G$=R$,U$=F$;function xs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}xs.prototype.clear=z$;xs.prototype.delete=B$;xs.prototype.get=H$;xs.prototype.has=G$;xs.prototype.set=U$;var W$=xs;function q$(){this.__data__=[],this.size=0}var V$=q$;function K$(e,t){return e===t||e!==e&&t!==t}var Y0=K$,X$=Y0;function Y$(e,t){for(var n=e.length;n--;)if(X$(e[n][0],t))return n;return-1}var Yp=Y$,Q$=Yp,Z$=Array.prototype,J$=Z$.splice;function eN(e){var t=this.__data__,n=Q$(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():J$.call(t,n,1),--this.size,!0}var tN=eN,nN=Yp;function rN(e){var t=this.__data__,n=nN(t,e);return n<0?void 0:t[n][1]}var aN=rN,oN=Yp;function iN(e){return oN(this.__data__,e)>-1}var sN=iN,lN=Yp;function uN(e,t){var n=this.__data__,r=lN(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var cN=uN,fN=V$,pN=tN,dN=aN,mN=sN,hN=cN;function ws(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}ws.prototype.clear=fN;ws.prototype.delete=pN;ws.prototype.get=dN;ws.prototype.has=mN;ws.prototype.set=hN;var Qp=ws,vN=jo,yN=gr,gN=vN(yN,"Map"),Q0=gN,Zx=W$,xN=Qp,wN=Q0;function bN(){this.size=0,this.__data__={hash:new Zx,map:new(wN||xN),string:new Zx}}var PN=bN;function SN(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var ON=SN,kN=ON;function _N(e,t){var n=e.__data__;return kN(t)?n[typeof t=="string"?"string":"hash"]:n.map}var Zp=_N,AN=Zp;function CN(e){var t=AN(this,e).delete(e);return this.size-=t?1:0,t}var EN=CN,TN=Zp;function jN(e){return TN(this,e).get(e)}var $N=jN,NN=Zp;function MN(e){return NN(this,e).has(e)}var RN=MN,IN=Zp;function DN(e,t){var n=IN(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var LN=DN,FN=PN,zN=EN,BN=$N,HN=RN,GN=LN;function bs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}bs.prototype.clear=FN;bs.prototype.delete=zN;bs.prototype.get=BN;bs.prototype.has=HN;bs.prototype.set=GN;var Z0=bs,f8=Z0,UN="Expected a function";function J0(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(UN);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i)||o,i};return n.cache=new(J0.Cache||f8),n}J0.Cache=f8;var p8=J0;const WN=Ce(p8);var qN=p8,VN=500;function KN(e){var t=qN(e,function(r){return n.size===VN&&n.clear(),r}),n=t.cache;return t}var XN=KN,YN=XN,QN=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ZN=/\\(\\)?/g,JN=YN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace(QN,function(n,r,a,o){t.push(a?o.replace(ZN,"$1"):r||n)}),t}),eM=JN;function tM(e,t){for(var n=-1,r=e==null?0:e.length,a=Array(r);++n<r;)a[n]=t(e[n],n,e);return a}var eg=tM,Jx=$u,nM=eg,rM=Vt,aM=ys,ew=Jx?Jx.prototype:void 0,tw=ew?ew.toString:void 0;function d8(e){if(typeof e=="string")return e;if(rM(e))return nM(e,d8)+"";if(aM(e))return tw?tw.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var oM=d8,iM=oM;function sM(e){return e==null?"":iM(e)}var m8=sM,lM=Vt,uM=K0,cM=eM,fM=m8;function pM(e,t){return lM(e)?e:uM(e,t)?[e]:cM(fM(e))}var h8=pM,dM=ys;function mM(e){if(typeof e=="string"||dM(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var Jp=mM,hM=h8,vM=Jp;function yM(e,t){t=hM(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[vM(t[n++])];return n&&n==r?e:void 0}var tg=yM,gM=tg;function xM(e,t,n){var r=e==null?void 0:gM(e,t);return r===void 0?n:r}var v8=xM;const gn=Ce(v8);function wM(e){return e==null}var bM=wM;const te=Ce(bM);var PM=Ur,SM=Vt,OM=Wr,kM="[object String]";function _M(e){return typeof e=="string"||!SM(e)&&OM(e)&&PM(e)==kM}var AM=_M;const So=Ce(AM);var y8={exports:{}},_e={};/**
+ * @license React
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var ng=Symbol.for("react.element"),rg=Symbol.for("react.portal"),ed=Symbol.for("react.fragment"),td=Symbol.for("react.strict_mode"),nd=Symbol.for("react.profiler"),rd=Symbol.for("react.provider"),ad=Symbol.for("react.context"),CM=Symbol.for("react.server_context"),od=Symbol.for("react.forward_ref"),id=Symbol.for("react.suspense"),sd=Symbol.for("react.suspense_list"),ld=Symbol.for("react.memo"),ud=Symbol.for("react.lazy"),EM=Symbol.for("react.offscreen"),g8;g8=Symbol.for("react.module.reference");function Pn(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case ng:switch(e=e.type,e){case ed:case nd:case td:case id:case sd:return e;default:switch(e=e&&e.$$typeof,e){case CM:case ad:case od:case ud:case ld:case rd:return e;default:return t}}case rg:return t}}}_e.ContextConsumer=ad;_e.ContextProvider=rd;_e.Element=ng;_e.ForwardRef=od;_e.Fragment=ed;_e.Lazy=ud;_e.Memo=ld;_e.Portal=rg;_e.Profiler=nd;_e.StrictMode=td;_e.Suspense=id;_e.SuspenseList=sd;_e.isAsyncMode=function(){return!1};_e.isConcurrentMode=function(){return!1};_e.isContextConsumer=function(e){return Pn(e)===ad};_e.isContextProvider=function(e){return Pn(e)===rd};_e.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===ng};_e.isForwardRef=function(e){return Pn(e)===od};_e.isFragment=function(e){return Pn(e)===ed};_e.isLazy=function(e){return Pn(e)===ud};_e.isMemo=function(e){return Pn(e)===ld};_e.isPortal=function(e){return Pn(e)===rg};_e.isProfiler=function(e){return Pn(e)===nd};_e.isStrictMode=function(e){return Pn(e)===td};_e.isSuspense=function(e){return Pn(e)===id};_e.isSuspenseList=function(e){return Pn(e)===sd};_e.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===ed||e===nd||e===td||e===id||e===sd||e===EM||typeof e=="object"&&e!==null&&(e.$$typeof===ud||e.$$typeof===ld||e.$$typeof===rd||e.$$typeof===ad||e.$$typeof===od||e.$$typeof===g8||e.getModuleId!==void 0)};_e.typeOf=Pn;y8.exports=_e;var TM=y8.exports,jM=Ur,$M=Wr,NM="[object Number]";function MM(e){return typeof e=="number"||$M(e)&&jM(e)==NM}var x8=MM;const RM=Ce(x8);var IM=x8;function DM(e){return IM(e)&&e!=+e}var LM=DM;const Ps=Ce(LM);var Dn=function(t){return t===0?0:t>0?1:-1},Za=function(t){return So(t)&&t.indexOf("%")===t.length-1},V=function(t){return RM(t)&&!Ps(t)},FM=function(t){return te(t)},it=function(t){return V(t)||So(t)},zM=0,$o=function(t){var n=++zM;return"".concat(t||"").concat(n)},Oo=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!V(t)&&!So(t))return r;var o;if(Za(t)){var i=t.indexOf("%");o=n*parseFloat(t.slice(0,i))/100}else o=+t;return Ps(o)&&(o=r),a&&o>n&&(o=n),o},oa=function(t){if(!t)return null;var n=Object.keys(t);return n&&n.length?t[n[0]]:null},BM=function(t){if(!Array.isArray(t))return!1;for(var n=t.length,r={},a=0;a<n;a++)if(!r[t[a]])r[t[a]]=!0;else return!0;return!1},Xe=function(t,n){return V(t)&&V(n)?function(r){return t+r*(n-t)}:function(){return n}};function Pf(e,t,n){return!e||!e.length?null:e.find(function(r){return r&&(typeof t=="function"?t(r):gn(r,t))===n})}var HM=function(t){if(!t||!t.length)return null;for(var n=t.length,r=0,a=0,o=0,i=0,s=1/0,l=-1/0,u=0,f=0,c=0;c<n;c++)u=t[c].cx||0,f=t[c].cy||0,r+=u,a+=f,o+=u*f,i+=u*u,s=Math.min(s,u),l=Math.max(l,u);var p=n*i!==r*r?(n*o-r*a)/(n*i-r*r):0;return{xmin:s,xmax:l,a:p,b:(a-p*r)/n}},GM=function(t,n){return V(t)&&V(n)?t-n:So(t)&&So(n)?t.localeCompare(n):t instanceof Date&&n instanceof Date?t.getTime()-n.getTime():String(t).localeCompare(String(n))};function mi(e,t){for(var n in e)if({}.hasOwnProperty.call(e,n)&&(!{}.hasOwnProperty.call(t,n)||e[n]!==t[n]))return!1;for(var r in t)if({}.hasOwnProperty.call(t,r)&&!{}.hasOwnProperty.call(e,r))return!1;return!0}function lv(e){"@babel/helpers - typeof";return lv=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lv(e)}var UM=["viewBox","children"],WM=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],nw=["points","pathLength"],Tm={svg:UM,polygon:nw,polyline:nw},ag=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],Sf=function(t,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var r=t;if(k.isValidElement(t)&&(r=t.props),!gs(r))return null;var a={};return Object.keys(r).forEach(function(o){ag.includes(o)&&(a[o]=n||function(i){return r[o](r,i)})}),a},qM=function(t,n,r){return function(a){return t(n,r,a),null}},Fl=function(t,n,r){if(!gs(t)||lv(t)!=="object")return null;var a=null;return Object.keys(t).forEach(function(o){var i=t[o];ag.includes(o)&&typeof i=="function"&&(a||(a={}),a[o]=qM(i,n,r))}),a},VM=["children"],KM=["children"];function rw(e,t){if(e==null)return{};var n=XM(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function uv(e){"@babel/helpers - typeof";return uv=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uv(e)}var aw={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},jr=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},ow=null,jm=null,og=function e(t){if(t===ow&&Array.isArray(jm))return jm;var n=[];return k.Children.forEach(t,function(r){te(r)||(TM.isFragment(r)?n=n.concat(e(r.props.children)):n.push(r))}),jm=n,ow=t,n};function qt(e,t){var n=[],r=[];return Array.isArray(t)?r=t.map(function(a){return jr(a)}):r=[jr(t)],og(e).forEach(function(a){var o=gn(a,"type.displayName")||gn(a,"type.name");r.indexOf(o)!==-1&&n.push(a)}),n}function Qt(e,t){var n=qt(e,t);return n&&n[0]}var iw=function(t){if(!t||!t.props)return!1;var n=t.props,r=n.width,a=n.height;return!(!V(r)||r<=0||!V(a)||a<=0)},YM=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],QM=function(t){return t&&t.type&&So(t.type)&&YM.indexOf(t.type)>=0},w8=function(t){return t&&uv(t)==="object"&&"clipDot"in t},ZM=function(t,n,r,a){var o,i=(o=Tm==null?void 0:Tm[a])!==null&&o!==void 0?o:[];return n.startsWith("data-")||!oe(t)&&(a&&i.includes(n)||WM.includes(n))||r&&ag.includes(n)},re=function(t,n,r){if(!t||typeof t=="function"||typeof t=="boolean")return null;var a=t;if(k.isValidElement(t)&&(a=t.props),!gs(a))return null;var o={};return Object.keys(a).forEach(function(i){var s;ZM((s=a)===null||s===void 0?void 0:s[i],i,n,r)&&(o[i]=a[i])}),o},cv=function e(t,n){if(t===n)return!0;var r=k.Children.count(t);if(r!==k.Children.count(n))return!1;if(r===0)return!0;if(r===1)return sw(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var a=0;a<r;a++){var o=t[a],i=n[a];if(Array.isArray(o)||Array.isArray(i)){if(!e(o,i))return!1}else if(!sw(o,i))return!1}return!0},sw=function(t,n){if(te(t)&&te(n))return!0;if(!te(t)&&!te(n)){var r=t.props||{},a=r.children,o=rw(r,VM),i=n.props||{},s=i.children,l=rw(i,KM);return a&&s?mi(o,l)&&cv(a,s):!a&&!s?mi(o,l):!1}return!1},lw=function(t,n){var r=[],a={};return og(t).forEach(function(o,i){if(QM(o))r.push(o);else if(o){var s=jr(o.type),l=n[s]||{},u=l.handler,f=l.once;if(u&&(!f||!a[s])){var c=u(o,s,i);r.push(c),a[s]=!0}}}),r},JM=function(t){var n=t&&t.type;return n&&aw[n]?aw[n]:null},eR=function(t,n){return og(n).indexOf(t)},tR=["children","width","height","viewBox","className","style","title","desc"];function fv(){return fv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fv.apply(this,arguments)}function nR(e,t){if(e==null)return{};var n=rR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function pv(e){var t=e.children,n=e.width,r=e.height,a=e.viewBox,o=e.className,i=e.style,s=e.title,l=e.desc,u=nR(e,tR),f=a||{width:n,height:r,x:0,y:0},c=ue("recharts-surface",o);return C.createElement("svg",fv({},re(u,!0,"svg"),{className:c,width:n,height:r,style:i,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height)}),C.createElement("title",null,s),C.createElement("desc",null,l),t)}var aR=["children","className"];function dv(){return dv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},dv.apply(this,arguments)}function oR(e,t){if(e==null)return{};var n=iR(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iR(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var ye=C.forwardRef(function(e,t){var n=e.children,r=e.className,a=oR(e,aR),o=ue("recharts-layer",r);return C.createElement("g",dv({className:o},re(a,!0),{ref:t}),n)}),$r=function(t,n){for(var r=arguments.length,a=new Array(r>2?r-2:0),o=2;o<r;o++)a[o-2]=arguments[o]};function sR(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(a);++r<a;)o[r]=e[r+t];return o}var lR=sR,uR=lR;function cR(e,t,n){var r=e.length;return n=n===void 0?r:n,!t&&n>=r?e:uR(e,t,n)}var fR=cR,pR="\\ud800-\\udfff",dR="\\u0300-\\u036f",mR="\\ufe20-\\ufe2f",hR="\\u20d0-\\u20ff",vR=dR+mR+hR,yR="\\ufe0e\\ufe0f",gR="\\u200d",xR=RegExp("["+gR+pR+vR+yR+"]");function wR(e){return xR.test(e)}var b8=wR;function bR(e){return e.split("")}var PR=bR,P8="\\ud800-\\udfff",SR="\\u0300-\\u036f",OR="\\ufe20-\\ufe2f",kR="\\u20d0-\\u20ff",_R=SR+OR+kR,AR="\\ufe0e\\ufe0f",CR="["+P8+"]",mv="["+_R+"]",hv="\\ud83c[\\udffb-\\udfff]",ER="(?:"+mv+"|"+hv+")",S8="[^"+P8+"]",O8="(?:\\ud83c[\\udde6-\\uddff]){2}",k8="[\\ud800-\\udbff][\\udc00-\\udfff]",TR="\\u200d",_8=ER+"?",A8="["+AR+"]?",jR="(?:"+TR+"(?:"+[S8,O8,k8].join("|")+")"+A8+_8+")*",$R=A8+_8+jR,NR="(?:"+[S8+mv+"?",mv,O8,k8,CR].join("|")+")",MR=RegExp(hv+"(?="+hv+")|"+NR+$R,"g");function RR(e){return e.match(MR)||[]}var IR=RR,DR=PR,LR=b8,FR=IR;function zR(e){return LR(e)?FR(e):DR(e)}var BR=zR,HR=fR,GR=b8,UR=BR,WR=m8;function qR(e){return function(t){t=WR(t);var n=GR(t)?UR(t):void 0,r=n?n[0]:t.charAt(0),a=n?HR(n,1).join(""):t.slice(1);return r[e]()+a}}var VR=qR,KR=VR,XR=KR("toUpperCase"),YR=XR;const cd=Ce(YR);function je(e){return function(){return e}}const C8=Math.cos,Of=Math.sin,Kn=Math.sqrt,kf=Math.PI,fd=2*kf,vv=Math.PI,yv=2*vv,qa=1e-6,QR=yv-qa;function E8(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=arguments[t]+e[t]}function ZR(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return E8;const n=10**t;return function(r){this._+=r[0];for(let a=1,o=r.length;a<o;++a)this._+=Math.round(arguments[a]*n)/n+r[a]}}class JR{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?E8:ZR(t)}moveTo(t,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,n){this._append`L${this._x1=+t},${this._y1=+n}`}quadraticCurveTo(t,n,r,a){this._append`Q${+t},${+n},${this._x1=+r},${this._y1=+a}`}bezierCurveTo(t,n,r,a,o,i){this._append`C${+t},${+n},${+r},${+a},${this._x1=+o},${this._y1=+i}`}arcTo(t,n,r,a,o){if(t=+t,n=+n,r=+r,a=+a,o=+o,o<0)throw new Error(`negative radius: ${o}`);let i=this._x1,s=this._y1,l=r-t,u=a-n,f=i-t,c=s-n,p=f*f+c*c;if(this._x1===null)this._append`M${this._x1=t},${this._y1=n}`;else if(p>qa)if(!(Math.abs(c*l-u*f)>qa)||!o)this._append`L${this._x1=t},${this._y1=n}`;else{let d=r-i,h=a-s,m=l*l+u*u,g=d*d+h*h,v=Math.sqrt(m),y=Math.sqrt(p),x=o*Math.tan((vv-Math.acos((m+p-g)/(2*v*y)))/2),P=x/y,w=x/v;Math.abs(P-1)>qa&&this._append`L${t+P*f},${n+P*c}`,this._append`A${o},${o},0,0,${+(c*d>f*h)},${this._x1=t+w*l},${this._y1=n+w*u}`}}arc(t,n,r,a,o,i){if(t=+t,n=+n,r=+r,i=!!i,r<0)throw new Error(`negative radius: ${r}`);let s=r*Math.cos(a),l=r*Math.sin(a),u=t+s,f=n+l,c=1^i,p=i?a-o:o-a;this._x1===null?this._append`M${u},${f}`:(Math.abs(this._x1-u)>qa||Math.abs(this._y1-f)>qa)&&this._append`L${u},${f}`,r&&(p<0&&(p=p%yv+yv),p>QR?this._append`A${r},${r},0,1,${c},${t-s},${n-l}A${r},${r},0,1,${c},${this._x1=u},${this._y1=f}`:p>qa&&this._append`A${r},${r},0,${+(p>=vv)},${c},${this._x1=t+r*Math.cos(o)},${this._y1=n+r*Math.sin(o)}`)}rect(t,n,r,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+a}h${-r}Z`}toString(){return this._}}function ig(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new JR(t)}function sg(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function T8(e){this._context=e}T8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function pd(e){return new T8(e)}function j8(e){return e[0]}function $8(e){return e[1]}function N8(e,t){var n=je(!0),r=null,a=pd,o=null,i=ig(s);e=typeof e=="function"?e:e===void 0?j8:je(e),t=typeof t=="function"?t:t===void 0?$8:je(t);function s(l){var u,f=(l=sg(l)).length,c,p=!1,d;for(r==null&&(o=a(d=i())),u=0;u<=f;++u)!(u<f&&n(c=l[u],u,l))===p&&((p=!p)?o.lineStart():o.lineEnd()),p&&o.point(+e(c,u,l),+t(c,u,l));if(d)return o=null,d+""||null}return s.x=function(l){return arguments.length?(e=typeof l=="function"?l:je(+l),s):e},s.y=function(l){return arguments.length?(t=typeof l=="function"?l:je(+l),s):t},s.defined=function(l){return arguments.length?(n=typeof l=="function"?l:je(!!l),s):n},s.curve=function(l){return arguments.length?(a=l,r!=null&&(o=a(r)),s):a},s.context=function(l){return arguments.length?(l==null?r=o=null:o=a(r=l),s):r},s}function cc(e,t,n){var r=null,a=je(!0),o=null,i=pd,s=null,l=ig(u);e=typeof e=="function"?e:e===void 0?j8:je(+e),t=typeof t=="function"?t:je(t===void 0?0:+t),n=typeof n=="function"?n:n===void 0?$8:je(+n);function u(c){var p,d,h,m=(c=sg(c)).length,g,v=!1,y,x=new Array(m),P=new Array(m);for(o==null&&(s=i(y=l())),p=0;p<=m;++p){if(!(p<m&&a(g=c[p],p,c))===v)if(v=!v)d=p,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),h=p-1;h>=d;--h)s.point(x[h],P[h]);s.lineEnd(),s.areaEnd()}v&&(x[p]=+e(g,p,c),P[p]=+t(g,p,c),s.point(r?+r(g,p,c):x[p],n?+n(g,p,c):P[p]))}if(y)return s=null,y+""||null}function f(){return N8().defined(a).curve(i).context(o)}return u.x=function(c){return arguments.length?(e=typeof c=="function"?c:je(+c),r=null,u):e},u.x0=function(c){return arguments.length?(e=typeof c=="function"?c:je(+c),u):e},u.x1=function(c){return arguments.length?(r=c==null?null:typeof c=="function"?c:je(+c),u):r},u.y=function(c){return arguments.length?(t=typeof c=="function"?c:je(+c),n=null,u):t},u.y0=function(c){return arguments.length?(t=typeof c=="function"?c:je(+c),u):t},u.y1=function(c){return arguments.length?(n=c==null?null:typeof c=="function"?c:je(+c),u):n},u.lineX0=u.lineY0=function(){return f().x(e).y(t)},u.lineY1=function(){return f().x(e).y(n)},u.lineX1=function(){return f().x(r).y(t)},u.defined=function(c){return arguments.length?(a=typeof c=="function"?c:je(!!c),u):a},u.curve=function(c){return arguments.length?(i=c,o!=null&&(s=i(o)),u):i},u.context=function(c){return arguments.length?(c==null?o=s=null:s=i(o=c),u):o},u}class M8{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n);break}}this._x0=t,this._y0=n}}function eI(e){return new M8(e,!0)}function tI(e){return new M8(e,!1)}const lg={draw(e,t){const n=Kn(t/kf);e.moveTo(n,0),e.arc(0,0,n,0,fd)}},nI={draw(e,t){const n=Kn(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},R8=Kn(1/3),rI=R8*2,aI={draw(e,t){const n=Kn(t/rI),r=n*R8;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},oI={draw(e,t){const n=Kn(t),r=-n/2;e.rect(r,r,n,n)}},iI=.8908130915292852,I8=Of(kf/10)/Of(7*kf/10),sI=Of(fd/10)*I8,lI=-C8(fd/10)*I8,uI={draw(e,t){const n=Kn(t*iI),r=sI*n,a=lI*n;e.moveTo(0,-n),e.lineTo(r,a);for(let o=1;o<5;++o){const i=fd*o/5,s=C8(i),l=Of(i);e.lineTo(l*n,-s*n),e.lineTo(s*r-l*a,l*r+s*a)}e.closePath()}},$m=Kn(3),cI={draw(e,t){const n=-Kn(t/($m*3));e.moveTo(0,n*2),e.lineTo(-$m*n,-n),e.lineTo($m*n,-n),e.closePath()}},ln=-.5,un=Kn(3)/2,gv=1/Kn(12),fI=(gv/2+1)*3,pI={draw(e,t){const n=Kn(t/fI),r=n/2,a=n*gv,o=r,i=n*gv+n,s=-o,l=i;e.moveTo(r,a),e.lineTo(o,i),e.lineTo(s,l),e.lineTo(ln*r-un*a,un*r+ln*a),e.lineTo(ln*o-un*i,un*o+ln*i),e.lineTo(ln*s-un*l,un*s+ln*l),e.lineTo(ln*r+un*a,ln*a-un*r),e.lineTo(ln*o+un*i,ln*i-un*o),e.lineTo(ln*s+un*l,ln*l-un*s),e.closePath()}};function dI(e,t){let n=null,r=ig(a);e=typeof e=="function"?e:je(e||lg),t=typeof t=="function"?t:je(t===void 0?64:+t);function a(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return a.type=function(o){return arguments.length?(e=typeof o=="function"?o:je(o),a):e},a.size=function(o){return arguments.length?(t=typeof o=="function"?o:je(+o),a):t},a.context=function(o){return arguments.length?(n=o??null,a):n},a}function _f(){}function Af(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function D8(e){this._context=e}D8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Af(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Af(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function mI(e){return new D8(e)}function L8(e){this._context=e}L8.prototype={areaStart:_f,areaEnd:_f,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Af(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function hI(e){return new L8(e)}function F8(e){this._context=e}F8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Af(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function vI(e){return new F8(e)}function z8(e){this._context=e}z8.prototype={areaStart:_f,areaEnd:_f,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function yI(e){return new z8(e)}function uw(e){return e<0?-1:1}function cw(e,t,n){var r=e._x1-e._x0,a=t-e._x1,o=(e._y1-e._y0)/(r||a<0&&-0),i=(n-e._y1)/(a||r<0&&-0),s=(o*a+i*r)/(r+a);return(uw(o)+uw(i))*Math.min(Math.abs(o),Math.abs(i),.5*Math.abs(s))||0}function fw(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function Nm(e,t,n){var r=e._x0,a=e._y0,o=e._x1,i=e._y1,s=(o-r)/3;e._context.bezierCurveTo(r+s,a+s*t,o-s,i-s*n,o,i)}function Cf(e){this._context=e}Cf.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Nm(this,this._t0,fw(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Nm(this,fw(this,n=cw(this,e,t)),n);break;default:Nm(this,this._t0,n=cw(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function B8(e){this._context=new H8(e)}(B8.prototype=Object.create(Cf.prototype)).point=function(e,t){Cf.prototype.point.call(this,t,e)};function H8(e){this._context=e}H8.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,o){this._context.bezierCurveTo(t,e,r,n,o,a)}};function gI(e){return new Cf(e)}function xI(e){return new B8(e)}function G8(e){this._context=e}G8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=pw(e),a=pw(t),o=0,i=1;i<n;++o,++i)this._context.bezierCurveTo(r[0][o],a[0][o],r[1][o],a[1][o],e[i],t[i]);(this._line||this._line!==0&&n===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}};function pw(e){var t,n=e.length-1,r,a=new Array(n),o=new Array(n),i=new Array(n);for(a[0]=0,o[0]=2,i[0]=e[0]+2*e[1],t=1;t<n-1;++t)a[t]=1,o[t]=4,i[t]=4*e[t]+2*e[t+1];for(a[n-1]=2,o[n-1]=7,i[n-1]=8*e[n-1]+e[n],t=1;t<n;++t)r=a[t]/o[t-1],o[t]-=r,i[t]-=r*i[t-1];for(a[n-1]=i[n-1]/o[n-1],t=n-2;t>=0;--t)a[t]=(i[t]-a[t+1])/o[t];for(o[n-1]=(e[n]+a[n-1])/2,t=0;t<n-1;++t)o[t]=2*e[t+1]-a[t+1];return[a,o]}function wI(e){return new G8(e)}function dd(e,t){this._context=e,this._t=t}dd.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}}this._x=e,this._y=t}};function bI(e){return new dd(e,.5)}function PI(e){return new dd(e,0)}function SI(e){return new dd(e,1)}function Ri(e,t){if((i=e.length)>1)for(var n=1,r,a,o=e[t[0]],i,s=o.length;n<i;++n)for(a=o,o=e[t[n]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(a[r][1])?a[r][0]:a[r][1]}function xv(e){for(var t=e.length,n=new Array(t);--t>=0;)n[t]=t;return n}function OI(e,t){return e[t]}function kI(e){const t=[];return t.key=e,t}function _I(){var e=je([]),t=xv,n=Ri,r=OI;function a(o){var i=Array.from(e.apply(this,arguments),kI),s,l=i.length,u=-1,f;for(const c of o)for(s=0,++u;s<l;++s)(i[s][u]=[0,+r(c,i[s].key,u,o)]).data=c;for(s=0,f=sg(t(i));s<l;++s)i[f[s]].index=s;return n(i,f),i}return a.keys=function(o){return arguments.length?(e=typeof o=="function"?o:je(Array.from(o)),a):e},a.value=function(o){return arguments.length?(r=typeof o=="function"?o:je(+o),a):r},a.order=function(o){return arguments.length?(t=o==null?xv:typeof o=="function"?o:je(Array.from(o)),a):t},a.offset=function(o){return arguments.length?(n=o??Ri,a):n},a}function AI(e,t){if((r=e.length)>0){for(var n,r,a=0,o=e[0].length,i;a<o;++a){for(i=n=0;n<r;++n)i+=e[n][a][1]||0;if(i)for(n=0;n<r;++n)e[n][a][1]/=i}Ri(e,t)}}function CI(e,t){if((a=e.length)>0){for(var n=0,r=e[t[0]],a,o=r.length;n<o;++n){for(var i=0,s=0;i<a;++i)s+=e[i][n][1]||0;r[n][1]+=r[n][0]=-s/2}Ri(e,t)}}function EI(e,t){if(!(!((i=e.length)>0)||!((o=(a=e[t[0]]).length)>0))){for(var n=0,r=1,a,o,i;r<o;++r){for(var s=0,l=0,u=0;s<i;++s){for(var f=e[t[s]],c=f[r][1]||0,p=f[r-1][1]||0,d=(c-p)/2,h=0;h<s;++h){var m=e[t[h]],g=m[r][1]||0,v=m[r-1][1]||0;d+=g-v}l+=c,u+=d*c}a[r-1][1]+=a[r-1][0]=n,l&&(n-=u/l)}a[r-1][1]+=a[r-1][0]=n,Ri(e,t)}}function zl(e){"@babel/helpers - typeof";return zl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zl(e)}var TI=["type","size","sizeType"];function wv(){return wv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},wv.apply(this,arguments)}function dw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?dw(Object(n),!0).forEach(function(r){jI(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):dw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function jI(e,t,n){return t=$I(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $I(e){var t=NI(e,"string");return zl(t)=="symbol"?t:t+""}function NI(e,t){if(zl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(zl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function MI(e,t){if(e==null)return{};var n=RI(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var U8={symbolCircle:lg,symbolCross:nI,symbolDiamond:aI,symbolSquare:oI,symbolStar:uI,symbolTriangle:cI,symbolWye:pI},II=Math.PI/180,DI=function(t){var n="symbol".concat(cd(t));return U8[n]||lg},LI=function(t,n,r){if(n==="area")return t;switch(r){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var a=18*II;return 1.25*t*t*(Math.tan(a)-Math.tan(a*2)*Math.pow(Math.tan(a),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},FI=function(t,n){U8["symbol".concat(cd(t))]=n},md=function(t){var n=t.type,r=n===void 0?"circle":n,a=t.size,o=a===void 0?64:a,i=t.sizeType,s=i===void 0?"area":i,l=MI(t,TI),u=mw(mw({},l),{},{type:r,size:o,sizeType:s}),f=function(){var g=DI(r),v=dI().type(g).size(LI(o,s,r));return v()},c=u.className,p=u.cx,d=u.cy,h=re(u,!0);return p===+p&&d===+d&&o===+o?C.createElement("path",wv({},h,{className:ue("recharts-symbols",c),transform:"translate(".concat(p,", ").concat(d,")"),d:f()})):null};md.registerSymbol=FI;function Ii(e){"@babel/helpers - typeof";return Ii=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ii(e)}function bv(){return bv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},bv.apply(this,arguments)}function hw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function zI(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?hw(Object(n),!0).forEach(function(r){Bl(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):hw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function BI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function HI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,q8(r.key),r)}}function GI(e,t,n){return t&&HI(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function UI(e,t,n){return t=Ef(t),WI(e,W8()?Reflect.construct(t,n||[],Ef(e).constructor):t.apply(e,n))}function WI(e,t){if(t&&(Ii(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return qI(e)}function qI(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function W8(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(W8=function(){return!!e})()}function Ef(e){return Ef=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Ef(e)}function VI(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Pv(e,t)}function Pv(e,t){return Pv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Pv(e,t)}function Bl(e,t,n){return t=q8(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function q8(e){var t=KI(e,"string");return Ii(t)=="symbol"?t:t+""}function KI(e,t){if(Ii(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ii(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var cn=32,ug=function(e){function t(){return BI(this,t),UI(this,t,arguments)}return VI(t,e),GI(t,[{key:"renderIcon",value:function(r){var a=this.props.inactiveColor,o=cn/2,i=cn/6,s=cn/3,l=r.inactive?a:r.color;if(r.type==="plainline")return C.createElement("line",{strokeWidth:4,fill:"none",stroke:l,strokeDasharray:r.payload.strokeDasharray,x1:0,y1:o,x2:cn,y2:o,className:"recharts-legend-icon"});if(r.type==="line")return C.createElement("path",{strokeWidth:4,fill:"none",stroke:l,d:"M0,".concat(o,"h").concat(s,`
+            A`).concat(i,",").concat(i,",0,1,1,").concat(2*s,",").concat(o,`
+            H`).concat(cn,"M").concat(2*s,",").concat(o,`
+            A`).concat(i,",").concat(i,",0,1,1,").concat(s,",").concat(o),className:"recharts-legend-icon"});if(r.type==="rect")return C.createElement("path",{stroke:"none",fill:l,d:"M0,".concat(cn/8,"h").concat(cn,"v").concat(cn*3/4,"h").concat(-cn,"z"),className:"recharts-legend-icon"});if(C.isValidElement(r.legendIcon)){var u=zI({},r);return delete u.legendIcon,C.cloneElement(r.legendIcon,u)}return C.createElement(md,{fill:l,cx:o,cy:o,size:cn,sizeType:"diameter",type:r.type})}},{key:"renderItems",value:function(){var r=this,a=this.props,o=a.payload,i=a.iconSize,s=a.layout,l=a.formatter,u=a.inactiveColor,f={x:0,y:0,width:cn,height:cn},c={display:s==="horizontal"?"inline-block":"block",marginRight:10},p={display:"inline-block",verticalAlign:"middle",marginRight:4};return o.map(function(d,h){var m=d.formatter||l,g=ue(Bl(Bl({"recharts-legend-item":!0},"legend-item-".concat(h),!0),"inactive",d.inactive));if(d.type==="none")return null;var v=oe(d.value)?null:d.value;$r(!oe(d.value),`The name property is also required when using a function for the dataKey of a chart's cartesian components. Ex: <Bar name="Name of my Data"/>`);var y=d.inactive?u:d.color;return C.createElement("li",bv({className:g,style:c,key:"legend-item-".concat(h)},Fl(r.props,d,h)),C.createElement(pv,{width:i,height:i,viewBox:f,style:p},r.renderIcon(d)),C.createElement("span",{className:"recharts-legend-item-text",style:{color:y}},m?m(v,d,h):v))})}},{key:"render",value:function(){var r=this.props,a=r.payload,o=r.layout,i=r.align;if(!a||!a.length)return null;var s={padding:0,margin:0,textAlign:o==="horizontal"?i:"left"};return C.createElement("ul",{className:"recharts-default-legend",style:s},this.renderItems())}}])}(k.PureComponent);Bl(ug,"displayName","Legend");Bl(ug,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var XI=Qp;function YI(){this.__data__=new XI,this.size=0}var QI=YI;function ZI(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var JI=ZI;function eD(e){return this.__data__.get(e)}var tD=eD;function nD(e){return this.__data__.has(e)}var rD=nD,aD=Qp,oD=Q0,iD=Z0,sD=200;function lD(e,t){var n=this.__data__;if(n instanceof aD){var r=n.__data__;if(!oD||r.length<sD-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new iD(r)}return n.set(e,t),this.size=n.size,this}var uD=lD,cD=Qp,fD=QI,pD=JI,dD=tD,mD=rD,hD=uD;function Ss(e){var t=this.__data__=new cD(e);this.size=t.size}Ss.prototype.clear=fD;Ss.prototype.delete=pD;Ss.prototype.get=dD;Ss.prototype.has=mD;Ss.prototype.set=hD;var V8=Ss,vD="__lodash_hash_undefined__";function yD(e){return this.__data__.set(e,vD),this}var gD=yD;function xD(e){return this.__data__.has(e)}var wD=xD,bD=Z0,PD=gD,SD=wD;function Tf(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new bD;++t<n;)this.add(e[t])}Tf.prototype.add=Tf.prototype.push=PD;Tf.prototype.has=SD;var K8=Tf;function OD(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var X8=OD;function kD(e,t){return e.has(t)}var Y8=kD,_D=K8,AD=X8,CD=Y8,ED=1,TD=2;function jD(e,t,n,r,a,o){var i=n&ED,s=e.length,l=t.length;if(s!=l&&!(i&&l>s))return!1;var u=o.get(e),f=o.get(t);if(u&&f)return u==t&&f==e;var c=-1,p=!0,d=n&TD?new _D:void 0;for(o.set(e,t),o.set(t,e);++c<s;){var h=e[c],m=t[c];if(r)var g=i?r(m,h,c,t,e,o):r(h,m,c,e,t,o);if(g!==void 0){if(g)continue;p=!1;break}if(d){if(!AD(t,function(v,y){if(!CD(d,y)&&(h===v||a(h,v,n,r,o)))return d.push(y)})){p=!1;break}}else if(!(h===m||a(h,m,n,r,o))){p=!1;break}}return o.delete(e),o.delete(t),p}var Q8=jD,$D=gr,ND=$D.Uint8Array,MD=ND;function RD(e){var t=-1,n=Array(e.size);return e.forEach(function(r,a){n[++t]=[a,r]}),n}var ID=RD;function DD(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var cg=DD,vw=$u,yw=MD,LD=Y0,FD=Q8,zD=ID,BD=cg,HD=1,GD=2,UD="[object Boolean]",WD="[object Date]",qD="[object Error]",VD="[object Map]",KD="[object Number]",XD="[object RegExp]",YD="[object Set]",QD="[object String]",ZD="[object Symbol]",JD="[object ArrayBuffer]",eL="[object DataView]",gw=vw?vw.prototype:void 0,Mm=gw?gw.valueOf:void 0;function tL(e,t,n,r,a,o,i){switch(n){case eL:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case JD:return!(e.byteLength!=t.byteLength||!o(new yw(e),new yw(t)));case UD:case WD:case KD:return LD(+e,+t);case qD:return e.name==t.name&&e.message==t.message;case XD:case QD:return e==t+"";case VD:var s=zD;case YD:var l=r&HD;if(s||(s=BD),e.size!=t.size&&!l)return!1;var u=i.get(e);if(u)return u==t;r|=GD,i.set(e,t);var f=FD(s(e),s(t),r,a,o,i);return i.delete(e),f;case ZD:if(Mm)return Mm.call(e)==Mm.call(t)}return!1}var nL=tL;function rL(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}var Z8=rL,aL=Z8,oL=Vt;function iL(e,t,n){var r=t(e);return oL(e)?r:aL(r,n(e))}var sL=iL;function lL(e,t){for(var n=-1,r=e==null?0:e.length,a=0,o=[];++n<r;){var i=e[n];t(i,n,e)&&(o[a++]=i)}return o}var uL=lL;function cL(){return[]}var fL=cL,pL=uL,dL=fL,mL=Object.prototype,hL=mL.propertyIsEnumerable,xw=Object.getOwnPropertySymbols,vL=xw?function(e){return e==null?[]:(e=Object(e),pL(xw(e),function(t){return hL.call(e,t)}))}:dL,yL=vL;function gL(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var xL=gL,wL=Ur,bL=Wr,PL="[object Arguments]";function SL(e){return bL(e)&&wL(e)==PL}var OL=SL,ww=OL,kL=Wr,J8=Object.prototype,_L=J8.hasOwnProperty,AL=J8.propertyIsEnumerable,CL=ww(function(){return arguments}())?ww:function(e){return kL(e)&&_L.call(e,"callee")&&!AL.call(e,"callee")},fg=CL,jf={exports:{}};function EL(){return!1}var TL=EL;jf.exports;(function(e,t){var n=gr,r=TL,a=t&&!t.nodeType&&t,o=a&&!0&&e&&!e.nodeType&&e,i=o&&o.exports===a,s=i?n.Buffer:void 0,l=s?s.isBuffer:void 0,u=l||r;e.exports=u})(jf,jf.exports);var e7=jf.exports,jL=9007199254740991,$L=/^(?:0|[1-9]\d*)$/;function NL(e,t){var n=typeof e;return t=t??jL,!!t&&(n=="number"||n!="symbol"&&$L.test(e))&&e>-1&&e%1==0&&e<t}var pg=NL,ML=9007199254740991;function RL(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=ML}var dg=RL,IL=Ur,DL=dg,LL=Wr,FL="[object Arguments]",zL="[object Array]",BL="[object Boolean]",HL="[object Date]",GL="[object Error]",UL="[object Function]",WL="[object Map]",qL="[object Number]",VL="[object Object]",KL="[object RegExp]",XL="[object Set]",YL="[object String]",QL="[object WeakMap]",ZL="[object ArrayBuffer]",JL="[object DataView]",eF="[object Float32Array]",tF="[object Float64Array]",nF="[object Int8Array]",rF="[object Int16Array]",aF="[object Int32Array]",oF="[object Uint8Array]",iF="[object Uint8ClampedArray]",sF="[object Uint16Array]",lF="[object Uint32Array]",De={};De[eF]=De[tF]=De[nF]=De[rF]=De[aF]=De[oF]=De[iF]=De[sF]=De[lF]=!0;De[FL]=De[zL]=De[ZL]=De[BL]=De[JL]=De[HL]=De[GL]=De[UL]=De[WL]=De[qL]=De[VL]=De[KL]=De[XL]=De[YL]=De[QL]=!1;function uF(e){return LL(e)&&DL(e.length)&&!!De[IL(e)]}var cF=uF;function fF(e){return function(t){return e(t)}}var t7=fF,$f={exports:{}};$f.exports;(function(e,t){var n=l8,r=t&&!t.nodeType&&t,a=r&&!0&&e&&!e.nodeType&&e,o=a&&a.exports===r,i=o&&n.process,s=function(){try{var l=a&&a.require&&a.require("util").types;return l||i&&i.binding&&i.binding("util")}catch{}}();e.exports=s})($f,$f.exports);var pF=$f.exports,dF=cF,mF=t7,bw=pF,Pw=bw&&bw.isTypedArray,hF=Pw?mF(Pw):dF,n7=hF,vF=xL,yF=fg,gF=Vt,xF=e7,wF=pg,bF=n7,PF=Object.prototype,SF=PF.hasOwnProperty;function OF(e,t){var n=gF(e),r=!n&&yF(e),a=!n&&!r&&xF(e),o=!n&&!r&&!a&&bF(e),i=n||r||a||o,s=i?vF(e.length,String):[],l=s.length;for(var u in e)(t||SF.call(e,u))&&!(i&&(u=="length"||a&&(u=="offset"||u=="parent")||o&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||wF(u,l)))&&s.push(u);return s}var kF=OF,_F=Object.prototype;function AF(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||_F;return e===n}var CF=AF;function EF(e,t){return function(n){return e(t(n))}}var r7=EF,TF=r7,jF=TF(Object.keys,Object),$F=jF,NF=CF,MF=$F,RF=Object.prototype,IF=RF.hasOwnProperty;function DF(e){if(!NF(e))return MF(e);var t=[];for(var n in Object(e))IF.call(e,n)&&n!="constructor"&&t.push(n);return t}var LF=DF,FF=X0,zF=dg;function BF(e){return e!=null&&zF(e.length)&&!FF(e)}var Nu=BF,HF=kF,GF=LF,UF=Nu;function WF(e){return UF(e)?HF(e):GF(e)}var hd=WF,qF=sL,VF=yL,KF=hd;function XF(e){return qF(e,KF,VF)}var YF=XF,Sw=YF,QF=1,ZF=Object.prototype,JF=ZF.hasOwnProperty;function ez(e,t,n,r,a,o){var i=n&QF,s=Sw(e),l=s.length,u=Sw(t),f=u.length;if(l!=f&&!i)return!1;for(var c=l;c--;){var p=s[c];if(!(i?p in t:JF.call(t,p)))return!1}var d=o.get(e),h=o.get(t);if(d&&h)return d==t&&h==e;var m=!0;o.set(e,t),o.set(t,e);for(var g=i;++c<l;){p=s[c];var v=e[p],y=t[p];if(r)var x=i?r(y,v,p,t,e,o):r(v,y,p,e,t,o);if(!(x===void 0?v===y||a(v,y,n,r,o):x)){m=!1;break}g||(g=p=="constructor")}if(m&&!g){var P=e.constructor,w=t.constructor;P!=w&&"constructor"in e&&"constructor"in t&&!(typeof P=="function"&&P instanceof P&&typeof w=="function"&&w instanceof w)&&(m=!1)}return o.delete(e),o.delete(t),m}var tz=ez,nz=jo,rz=gr,az=nz(rz,"DataView"),oz=az,iz=jo,sz=gr,lz=iz(sz,"Promise"),uz=lz,cz=jo,fz=gr,pz=cz(fz,"Set"),a7=pz,dz=jo,mz=gr,hz=dz(mz,"WeakMap"),vz=hz,Sv=oz,Ov=Q0,kv=uz,_v=a7,Av=vz,o7=Ur,Os=c8,Ow="[object Map]",yz="[object Object]",kw="[object Promise]",_w="[object Set]",Aw="[object WeakMap]",Cw="[object DataView]",gz=Os(Sv),xz=Os(Ov),wz=Os(kv),bz=Os(_v),Pz=Os(Av),Va=o7;(Sv&&Va(new Sv(new ArrayBuffer(1)))!=Cw||Ov&&Va(new Ov)!=Ow||kv&&Va(kv.resolve())!=kw||_v&&Va(new _v)!=_w||Av&&Va(new Av)!=Aw)&&(Va=function(e){var t=o7(e),n=t==yz?e.constructor:void 0,r=n?Os(n):"";if(r)switch(r){case gz:return Cw;case xz:return Ow;case wz:return kw;case bz:return _w;case Pz:return Aw}return t});var Sz=Va,Rm=V8,Oz=Q8,kz=nL,_z=tz,Ew=Sz,Tw=Vt,jw=e7,Az=n7,Cz=1,$w="[object Arguments]",Nw="[object Array]",fc="[object Object]",Ez=Object.prototype,Mw=Ez.hasOwnProperty;function Tz(e,t,n,r,a,o){var i=Tw(e),s=Tw(t),l=i?Nw:Ew(e),u=s?Nw:Ew(t);l=l==$w?fc:l,u=u==$w?fc:u;var f=l==fc,c=u==fc,p=l==u;if(p&&jw(e)){if(!jw(t))return!1;i=!0,f=!1}if(p&&!f)return o||(o=new Rm),i||Az(e)?Oz(e,t,n,r,a,o):kz(e,t,l,n,r,a,o);if(!(n&Cz)){var d=f&&Mw.call(e,"__wrapped__"),h=c&&Mw.call(t,"__wrapped__");if(d||h){var m=d?e.value():e,g=h?t.value():t;return o||(o=new Rm),a(m,g,n,r,o)}}return p?(o||(o=new Rm),_z(e,t,n,r,a,o)):!1}var jz=Tz,$z=jz,Rw=Wr;function i7(e,t,n,r,a){return e===t?!0:e==null||t==null||!Rw(e)&&!Rw(t)?e!==e&&t!==t:$z(e,t,n,r,i7,a)}var mg=i7,Nz=V8,Mz=mg,Rz=1,Iz=2;function Dz(e,t,n,r){var a=n.length,o=a,i=!r;if(e==null)return!o;for(e=Object(e);a--;){var s=n[a];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<o;){s=n[a];var l=s[0],u=e[l],f=s[1];if(i&&s[2]){if(u===void 0&&!(l in e))return!1}else{var c=new Nz;if(r)var p=r(u,f,l,e,t,c);if(!(p===void 0?Mz(f,u,Rz|Iz,r,c):p))return!1}}return!0}var Lz=Dz,Fz=Ra;function zz(e){return e===e&&!Fz(e)}var s7=zz,Bz=s7,Hz=hd;function Gz(e){for(var t=Hz(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,Bz(a)]}return t}var Uz=Gz;function Wz(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}var l7=Wz,qz=Lz,Vz=Uz,Kz=l7;function Xz(e){var t=Vz(e);return t.length==1&&t[0][2]?Kz(t[0][0],t[0][1]):function(n){return n===e||qz(n,e,t)}}var Yz=Xz;function Qz(e,t){return e!=null&&t in Object(e)}var Zz=Qz,Jz=h8,eB=fg,tB=Vt,nB=pg,rB=dg,aB=Jp;function oB(e,t,n){t=Jz(t,e);for(var r=-1,a=t.length,o=!1;++r<a;){var i=aB(t[r]);if(!(o=e!=null&&n(e,i)))break;e=e[i]}return o||++r!=a?o:(a=e==null?0:e.length,!!a&&rB(a)&&nB(i,a)&&(tB(e)||eB(e)))}var iB=oB,sB=Zz,lB=iB;function uB(e,t){return e!=null&&lB(e,t,sB)}var cB=uB,fB=mg,pB=v8,dB=cB,mB=K0,hB=s7,vB=l7,yB=Jp,gB=1,xB=2;function wB(e,t){return mB(e)&&hB(t)?vB(yB(e),t):function(n){var r=pB(n,e);return r===void 0&&r===t?dB(n,e):fB(t,r,gB|xB)}}var bB=wB;function PB(e){return e}var ks=PB;function SB(e){return function(t){return t==null?void 0:t[e]}}var OB=SB,kB=tg;function _B(e){return function(t){return kB(t,e)}}var AB=_B,CB=OB,EB=AB,TB=K0,jB=Jp;function $B(e){return TB(e)?CB(jB(e)):EB(e)}var NB=$B,MB=Yz,RB=bB,IB=ks,DB=Vt,LB=NB;function FB(e){return typeof e=="function"?e:e==null?IB:typeof e=="object"?DB(e)?RB(e[0],e[1]):MB(e):LB(e)}var Ia=FB;function zB(e,t,n,r){for(var a=e.length,o=n+(r?1:-1);r?o--:++o<a;)if(t(e[o],o,e))return o;return-1}var u7=zB;function BB(e){return e!==e}var HB=BB;function GB(e,t,n){for(var r=n-1,a=e.length;++r<a;)if(e[r]===t)return r;return-1}var UB=GB,WB=u7,qB=HB,VB=UB;function KB(e,t,n){return t===t?VB(e,t,n):WB(e,qB,n)}var XB=KB,YB=XB;function QB(e,t){var n=e==null?0:e.length;return!!n&&YB(e,t,0)>-1}var ZB=QB;function JB(e,t,n){for(var r=-1,a=e==null?0:e.length;++r<a;)if(n(t,e[r]))return!0;return!1}var eH=JB;function tH(){}var nH=tH,Im=a7,rH=nH,aH=cg,oH=1/0,iH=Im&&1/aH(new Im([,-0]))[1]==oH?function(e){return new Im(e)}:rH,sH=iH,lH=K8,uH=ZB,cH=eH,fH=Y8,pH=sH,dH=cg,mH=200;function hH(e,t,n){var r=-1,a=uH,o=e.length,i=!0,s=[],l=s;if(n)i=!1,a=cH;else if(o>=mH){var u=t?null:pH(e);if(u)return dH(u);i=!1,a=fH,l=new lH}else l=t?[]:s;e:for(;++r<o;){var f=e[r],c=t?t(f):f;if(f=n||f!==0?f:0,i&&c===c){for(var p=l.length;p--;)if(l[p]===c)continue e;t&&l.push(c),s.push(f)}else a(l,c,n)||(l!==s&&l.push(c),s.push(f))}return s}var vH=hH,yH=Ia,gH=vH;function xH(e,t){return e&&e.length?gH(e,yH(t)):[]}var wH=xH;const Iw=Ce(wH);function c7(e,t,n){return t===!0?Iw(e,n):oe(t)?Iw(e,t):e}function Di(e){"@babel/helpers - typeof";return Di=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Di(e)}var bH=["ref"];function Dw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function wr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Dw(Object(n),!0).forEach(function(r){vd(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Dw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function PH(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,p7(r.key),r)}}function SH(e,t,n){return t&&Lw(e.prototype,t),n&&Lw(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function OH(e,t,n){return t=Nf(t),kH(e,f7()?Reflect.construct(t,n||[],Nf(e).constructor):t.apply(e,n))}function kH(e,t){if(t&&(Di(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return _H(e)}function _H(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function f7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(f7=function(){return!!e})()}function Nf(e){return Nf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Nf(e)}function AH(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Cv(e,t)}function Cv(e,t){return Cv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Cv(e,t)}function vd(e,t,n){return t=p7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function p7(e){var t=CH(e,"string");return Di(t)=="symbol"?t:t+""}function CH(e,t){if(Di(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Di(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function EH(e,t){if(e==null)return{};var n=TH(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TH(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function jH(e){return e.value}function $H(e,t){if(C.isValidElement(e))return C.cloneElement(e,t);if(typeof e=="function")return C.createElement(e,t);t.ref;var n=EH(t,bH);return C.createElement(ug,n)}var Fw=1,hi=function(e){function t(){var n;PH(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=OH(this,t,[].concat(a)),vd(n,"lastBoundingBox",{width:-1,height:-1}),n}return AH(t,e),SH(t,[{key:"componentDidMount",value:function(){this.updateBBox()}},{key:"componentDidUpdate",value:function(){this.updateBBox()}},{key:"getBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();return r.height=this.wrapperNode.offsetHeight,r.width=this.wrapperNode.offsetWidth,r}return null}},{key:"updateBBox",value:function(){var r=this.props.onBBoxUpdate,a=this.getBBox();a?(Math.abs(a.width-this.lastBoundingBox.width)>Fw||Math.abs(a.height-this.lastBoundingBox.height)>Fw)&&(this.lastBoundingBox.width=a.width,this.lastBoundingBox.height=a.height,r&&r(a)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?wr({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var a=this.props,o=a.layout,i=a.align,s=a.verticalAlign,l=a.margin,u=a.chartWidth,f=a.chartHeight,c,p;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(i==="center"&&o==="vertical"){var d=this.getBBoxSnapshot();c={left:((u||0)-d.width)/2}}else c=i==="right"?{right:l&&l.right||0}:{left:l&&l.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(s==="middle"){var h=this.getBBoxSnapshot();p={top:((f||0)-h.height)/2}}else p=s==="bottom"?{bottom:l&&l.bottom||0}:{top:l&&l.top||0};return wr(wr({},c),p)}},{key:"render",value:function(){var r=this,a=this.props,o=a.content,i=a.width,s=a.height,l=a.wrapperStyle,u=a.payloadUniqBy,f=a.payload,c=wr(wr({position:"absolute",width:i||"auto",height:s||"auto"},this.getDefaultPosition(l)),l);return C.createElement("div",{className:"recharts-legend-wrapper",style:c,ref:function(d){r.wrapperNode=d}},$H(o,wr(wr({},this.props),{},{payload:c7(f,u,jH)})))}}],[{key:"getWithHeight",value:function(r,a){var o=wr(wr({},this.defaultProps),r.props),i=o.layout;return i==="vertical"&&V(r.props.height)?{height:r.props.height}:i==="horizontal"?{width:r.props.width||a}:null}}])}(k.PureComponent);vd(hi,"displayName","Legend");vd(hi,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var zw=$u,NH=fg,MH=Vt,Bw=zw?zw.isConcatSpreadable:void 0;function RH(e){return MH(e)||NH(e)||!!(Bw&&e&&e[Bw])}var IH=RH,DH=Z8,LH=IH;function d7(e,t,n,r,a){var o=-1,i=e.length;for(n||(n=LH),a||(a=[]);++o<i;){var s=e[o];t>0&&n(s)?t>1?d7(s,t-1,n,r,a):DH(a,s):r||(a[a.length]=s)}return a}var m7=d7;function FH(e){return function(t,n,r){for(var a=-1,o=Object(t),i=r(t),s=i.length;s--;){var l=i[e?s:++a];if(n(o[l],l,o)===!1)break}return t}}var zH=FH,BH=zH,HH=BH(),GH=HH,UH=GH,WH=hd;function qH(e,t){return e&&UH(e,t,WH)}var h7=qH,VH=Nu;function KH(e,t){return function(n,r){if(n==null)return n;if(!VH(n))return e(n,r);for(var a=n.length,o=t?a:-1,i=Object(n);(t?o--:++o<a)&&r(i[o],o,i)!==!1;);return n}}var XH=KH,YH=h7,QH=XH,ZH=QH(YH),hg=ZH,JH=hg,eG=Nu;function tG(e,t){var n=-1,r=eG(e)?Array(e.length):[];return JH(e,function(a,o,i){r[++n]=t(a,o,i)}),r}var v7=tG;function nG(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}var rG=nG,Hw=ys;function aG(e,t){if(e!==t){var n=e!==void 0,r=e===null,a=e===e,o=Hw(e),i=t!==void 0,s=t===null,l=t===t,u=Hw(t);if(!s&&!u&&!o&&e>t||o&&i&&l&&!s&&!u||r&&i&&l||!n&&l||!a)return 1;if(!r&&!o&&!u&&e<t||u&&n&&a&&!r&&!o||s&&n&&a||!i&&a||!l)return-1}return 0}var oG=aG,iG=oG;function sG(e,t,n){for(var r=-1,a=e.criteria,o=t.criteria,i=a.length,s=n.length;++r<i;){var l=iG(a[r],o[r]);if(l){if(r>=s)return l;var u=n[r];return l*(u=="desc"?-1:1)}}return e.index-t.index}var lG=sG,Dm=eg,uG=tg,cG=Ia,fG=v7,pG=rG,dG=t7,mG=lG,hG=ks,vG=Vt;function yG(e,t,n){t.length?t=Dm(t,function(o){return vG(o)?function(i){return uG(i,o.length===1?o[0]:o)}:o}):t=[hG];var r=-1;t=Dm(t,dG(cG));var a=fG(e,function(o,i,s){var l=Dm(t,function(u){return u(o)});return{criteria:l,index:++r,value:o}});return pG(a,function(o,i){return mG(o,i,n)})}var gG=yG;function xG(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var wG=xG,bG=wG,Gw=Math.max;function PG(e,t,n){return t=Gw(t===void 0?e.length-1:t,0),function(){for(var r=arguments,a=-1,o=Gw(r.length-t,0),i=Array(o);++a<o;)i[a]=r[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=r[a];return s[t]=n(i),bG(e,this,s)}}var SG=PG;function OG(e){return function(){return e}}var kG=OG,_G=jo,AG=function(){try{var e=_G(Object,"defineProperty");return e({},"",{}),e}catch{}}(),y7=AG,CG=kG,Uw=y7,EG=ks,TG=Uw?function(e,t){return Uw(e,"toString",{configurable:!0,enumerable:!1,value:CG(t),writable:!0})}:EG,jG=TG,$G=800,NG=16,MG=Date.now;function RG(e){var t=0,n=0;return function(){var r=MG(),a=NG-(r-n);if(n=r,a>0){if(++t>=$G)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var IG=RG,DG=jG,LG=IG,FG=LG(DG),zG=FG,BG=ks,HG=SG,GG=zG;function UG(e,t){return GG(HG(e,t,BG),e+"")}var WG=UG,qG=Y0,VG=Nu,KG=pg,XG=Ra;function YG(e,t,n){if(!XG(n))return!1;var r=typeof t;return(r=="number"?VG(n)&&KG(t,n.length):r=="string"&&t in n)?qG(n[t],e):!1}var yd=YG,QG=m7,ZG=gG,JG=WG,Ww=yd,eU=JG(function(e,t){if(e==null)return[];var n=t.length;return n>1&&Ww(e,t[0],t[1])?t=[]:n>2&&Ww(t[0],t[1],t[2])&&(t=[t[0]]),ZG(e,QG(t,1),[])}),tU=eU;const vg=Ce(tU);function Hl(e){"@babel/helpers - typeof";return Hl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hl(e)}function Ev(){return Ev=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ev.apply(this,arguments)}function nU(e,t){return iU(e)||oU(e,t)||aU(e,t)||rU()}function rU(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function aU(e,t){if(e){if(typeof e=="string")return qw(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qw(e,t)}}function qw(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function oU(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function iU(e){if(Array.isArray(e))return e}function Vw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Lm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Vw(Object(n),!0).forEach(function(r){sU(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function sU(e,t,n){return t=lU(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lU(e){var t=uU(e,"string");return Hl(t)=="symbol"?t:t+""}function uU(e,t){if(Hl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Hl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function cU(e){return Array.isArray(e)&&it(e[0])&&it(e[1])?e.join(" ~ "):e}var fU=function(t){var n=t.separator,r=n===void 0?" : ":n,a=t.contentStyle,o=a===void 0?{}:a,i=t.itemStyle,s=i===void 0?{}:i,l=t.labelStyle,u=l===void 0?{}:l,f=t.payload,c=t.formatter,p=t.itemSorter,d=t.wrapperClassName,h=t.labelClassName,m=t.label,g=t.labelFormatter,v=t.accessibilityLayer,y=v===void 0?!1:v,x=function(){if(f&&f.length){var T={padding:0,margin:0},N=(p?vg(f,p):f).map(function(M,I){if(M.type==="none")return null;var R=Lm({display:"block",paddingTop:4,paddingBottom:4,color:M.color||"#000"},s),L=M.formatter||c||cU,$=M.value,D=M.name,H=$,W=D;if(L&&H!=null&&W!=null){var G=L($,D,M,I,f);if(Array.isArray(G)){var Z=nU(G,2);H=Z[0],W=Z[1]}else H=G}return C.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(I),style:R},it(W)?C.createElement("span",{className:"recharts-tooltip-item-name"},W):null,it(W)?C.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,C.createElement("span",{className:"recharts-tooltip-item-value"},H),C.createElement("span",{className:"recharts-tooltip-item-unit"},M.unit||""))});return C.createElement("ul",{className:"recharts-tooltip-item-list",style:T},N)}return null},P=Lm({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},o),w=Lm({margin:0},u),S=!te(m),O=S?m:"",_=ue("recharts-default-tooltip",d),A=ue("recharts-tooltip-label",h);S&&g&&f!==void 0&&f!==null&&(O=g(m,f));var j=y?{role:"status","aria-live":"assertive"}:{};return C.createElement("div",Ev({className:_,style:P},j),C.createElement("p",{className:A,style:w},C.isValidElement(O)?O:"".concat(O)),x())};function Gl(e){"@babel/helpers - typeof";return Gl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gl(e)}function pc(e,t,n){return t=pU(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pU(e){var t=dU(e,"string");return Gl(t)=="symbol"?t:t+""}function dU(e,t){if(Gl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Gl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Hs="recharts-tooltip-wrapper",mU={visibility:"hidden"};function hU(e){var t=e.coordinate,n=e.translateX,r=e.translateY;return ue(Hs,pc(pc(pc(pc({},"".concat(Hs,"-right"),V(n)&&t&&V(t.x)&&n>=t.x),"".concat(Hs,"-left"),V(n)&&t&&V(t.x)&&n<t.x),"".concat(Hs,"-bottom"),V(r)&&t&&V(t.y)&&r>=t.y),"".concat(Hs,"-top"),V(r)&&t&&V(t.y)&&r<t.y))}function Kw(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.key,a=e.offsetTopLeft,o=e.position,i=e.reverseDirection,s=e.tooltipDimension,l=e.viewBox,u=e.viewBoxDimension;if(o&&V(o[r]))return o[r];var f=n[r]-s-a,c=n[r]+a;if(t[r])return i[r]?f:c;if(i[r]){var p=f,d=l[r];return p<d?Math.max(c,l[r]):Math.max(f,l[r])}var h=c+s,m=l[r]+u;return h>m?Math.max(f,l[r]):Math.max(c,l[r])}function vU(e){var t=e.translateX,n=e.translateY,r=e.useTranslate3d;return{transform:r?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}function yU(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTopLeft,a=e.position,o=e.reverseDirection,i=e.tooltipBox,s=e.useTranslate3d,l=e.viewBox,u,f,c;return i.height>0&&i.width>0&&n?(f=Kw({allowEscapeViewBox:t,coordinate:n,key:"x",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.width,viewBox:l,viewBoxDimension:l.width}),c=Kw({allowEscapeViewBox:t,coordinate:n,key:"y",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.height,viewBox:l,viewBoxDimension:l.height}),u=vU({translateX:f,translateY:c,useTranslate3d:s})):u=mU,{cssProperties:u,cssClasses:hU({translateX:f,translateY:c,coordinate:n})}}function Li(e){"@babel/helpers - typeof";return Li=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Li(e)}function Xw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Yw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xw(Object(n),!0).forEach(function(r){jv(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function gU(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function xU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,x7(r.key),r)}}function wU(e,t,n){return t&&xU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function bU(e,t,n){return t=Mf(t),PU(e,g7()?Reflect.construct(t,n||[],Mf(e).constructor):t.apply(e,n))}function PU(e,t){if(t&&(Li(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return SU(e)}function SU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function g7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(g7=function(){return!!e})()}function Mf(e){return Mf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Mf(e)}function OU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Tv(e,t)}function Tv(e,t){return Tv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Tv(e,t)}function jv(e,t,n){return t=x7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x7(e){var t=kU(e,"string");return Li(t)=="symbol"?t:t+""}function kU(e,t){if(Li(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Li(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Qw=1,_U=function(e){function t(){var n;gU(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=bU(this,t,[].concat(a)),jv(n,"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0},lastBoundingBox:{width:-1,height:-1}}),jv(n,"handleKeyDown",function(i){if(i.key==="Escape"){var s,l,u,f;n.setState({dismissed:!0,dismissedAtCoordinate:{x:(s=(l=n.props.coordinate)===null||l===void 0?void 0:l.x)!==null&&s!==void 0?s:0,y:(u=(f=n.props.coordinate)===null||f===void 0?void 0:f.y)!==null&&u!==void 0?u:0}})}}),n}return OU(t,e),wU(t,[{key:"updateBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();(Math.abs(r.width-this.state.lastBoundingBox.width)>Qw||Math.abs(r.height-this.state.lastBoundingBox.height)>Qw)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,a;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.children,f=a.coordinate,c=a.hasPayload,p=a.isAnimationActive,d=a.offset,h=a.position,m=a.reverseDirection,g=a.useTranslate3d,v=a.viewBox,y=a.wrapperStyle,x=yU({allowEscapeViewBox:i,coordinate:f,offsetTopLeft:d,position:h,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:g,viewBox:v}),P=x.cssClasses,w=x.cssProperties,S=Yw(Yw({transition:p&&o?"transform ".concat(s,"ms ").concat(l):void 0},w),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&c?"visible":"hidden",position:"absolute",top:0,left:0},y);return C.createElement("div",{tabIndex:-1,className:P,style:S,ref:function(_){r.wrapperNode=_}},u)}}])}(k.PureComponent),AU=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Da={isSsr:AU()};function Fi(e){"@babel/helpers - typeof";return Fi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Fi(e)}function Zw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Jw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Zw(Object(n),!0).forEach(function(r){yg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function CU(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function EU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,b7(r.key),r)}}function TU(e,t,n){return t&&EU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function jU(e,t,n){return t=Rf(t),$U(e,w7()?Reflect.construct(t,n||[],Rf(e).constructor):t.apply(e,n))}function $U(e,t){if(t&&(Fi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return NU(e)}function NU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function w7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(w7=function(){return!!e})()}function Rf(e){return Rf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Rf(e)}function MU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&$v(e,t)}function $v(e,t){return $v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},$v(e,t)}function yg(e,t,n){return t=b7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b7(e){var t=RU(e,"string");return Fi(t)=="symbol"?t:t+""}function RU(e,t){if(Fi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Fi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function IU(e){return e.dataKey}function DU(e,t){return C.isValidElement(e)?C.cloneElement(e,t):typeof e=="function"?C.createElement(e,t):C.createElement(fU,t)}var Zn=function(e){function t(){return CU(this,t),jU(this,t,arguments)}return MU(t,e),TU(t,[{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.content,f=a.coordinate,c=a.filterNull,p=a.isAnimationActive,d=a.offset,h=a.payload,m=a.payloadUniqBy,g=a.position,v=a.reverseDirection,y=a.useTranslate3d,x=a.viewBox,P=a.wrapperStyle,w=h??[];c&&w.length&&(w=c7(h.filter(function(O){return O.value!=null&&(O.hide!==!0||r.props.includeHidden)}),m,IU));var S=w.length>0;return C.createElement(_U,{allowEscapeViewBox:i,animationDuration:s,animationEasing:l,isAnimationActive:p,active:o,coordinate:f,hasPayload:S,offset:d,position:g,reverseDirection:v,useTranslate3d:y,viewBox:x,wrapperStyle:P},DU(u,Jw(Jw({},this.props),{},{payload:w})))}}])}(k.PureComponent);yg(Zn,"displayName","Tooltip");yg(Zn,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Da.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var LU=gr,FU=function(){return LU.Date.now()},zU=FU,BU=/\s/;function HU(e){for(var t=e.length;t--&&BU.test(e.charAt(t)););return t}var GU=HU,UU=GU,WU=/^\s+/;function qU(e){return e&&e.slice(0,UU(e)+1).replace(WU,"")}var VU=qU,KU=VU,e3=Ra,XU=ys,t3=NaN,YU=/^[-+]0x[0-9a-f]+$/i,QU=/^0b[01]+$/i,ZU=/^0o[0-7]+$/i,JU=parseInt;function eW(e){if(typeof e=="number")return e;if(XU(e))return t3;if(e3(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=e3(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=KU(e);var n=QU.test(e);return n||ZU.test(e)?JU(e.slice(2),n?2:8):YU.test(e)?t3:+e}var P7=eW,tW=Ra,Fm=zU,n3=P7,nW="Expected a function",rW=Math.max,aW=Math.min;function oW(e,t,n){var r,a,o,i,s,l,u=0,f=!1,c=!1,p=!0;if(typeof e!="function")throw new TypeError(nW);t=n3(t)||0,tW(n)&&(f=!!n.leading,c="maxWait"in n,o=c?rW(n3(n.maxWait)||0,t):o,p="trailing"in n?!!n.trailing:p);function d(S){var O=r,_=a;return r=a=void 0,u=S,i=e.apply(_,O),i}function h(S){return u=S,s=setTimeout(v,t),f?d(S):i}function m(S){var O=S-l,_=S-u,A=t-O;return c?aW(A,o-_):A}function g(S){var O=S-l,_=S-u;return l===void 0||O>=t||O<0||c&&_>=o}function v(){var S=Fm();if(g(S))return y(S);s=setTimeout(v,m(S))}function y(S){return s=void 0,p&&r?d(S):(r=a=void 0,i)}function x(){s!==void 0&&clearTimeout(s),u=0,r=l=a=s=void 0}function P(){return s===void 0?i:y(Fm())}function w(){var S=Fm(),O=g(S);if(r=arguments,a=this,l=S,O){if(s===void 0)return h(l);if(c)return clearTimeout(s),s=setTimeout(v,t),d(l)}return s===void 0&&(s=setTimeout(v,t)),i}return w.cancel=x,w.flush=P,w}var iW=oW,sW=iW,lW=Ra,uW="Expected a function";function cW(e,t,n){var r=!0,a=!0;if(typeof e!="function")throw new TypeError(uW);return lW(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),sW(e,t,{leading:r,maxWait:t,trailing:a})}var fW=cW;const S7=Ce(fW);function Ul(e){"@babel/helpers - typeof";return Ul=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ul(e)}function r3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function dc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?r3(Object(n),!0).forEach(function(r){pW(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function pW(e,t,n){return t=dW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dW(e){var t=mW(e,"string");return Ul(t)=="symbol"?t:t+""}function mW(e,t){if(Ul(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ul(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function hW(e,t){return xW(e)||gW(e,t)||yW(e,t)||vW()}function vW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function yW(e,t){if(e){if(typeof e=="string")return a3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return a3(e,t)}}function a3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function gW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function xW(e){if(Array.isArray(e))return e}var wW=k.forwardRef(function(e,t){var n=e.aspect,r=e.initialDimension,a=r===void 0?{width:-1,height:-1}:r,o=e.width,i=o===void 0?"100%":o,s=e.height,l=s===void 0?"100%":s,u=e.minWidth,f=u===void 0?0:u,c=e.minHeight,p=e.maxHeight,d=e.children,h=e.debounce,m=h===void 0?0:h,g=e.id,v=e.className,y=e.onResize,x=e.style,P=x===void 0?{}:x,w=k.useRef(null),S=k.useRef();S.current=y,k.useImperativeHandle(t,function(){return Object.defineProperty(w.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),w.current},configurable:!0})});var O=k.useState({containerWidth:a.width,containerHeight:a.height}),_=hW(O,2),A=_[0],j=_[1],E=k.useCallback(function(N,M){j(function(I){var R=Math.round(N),L=Math.round(M);return I.containerWidth===R&&I.containerHeight===L?I:{containerWidth:R,containerHeight:L}})},[]);k.useEffect(function(){var N=function(D){var H,W=D[0].contentRect,G=W.width,Z=W.height;E(G,Z),(H=S.current)===null||H===void 0||H.call(S,G,Z)};m>0&&(N=S7(N,m,{trailing:!0,leading:!1}));var M=new ResizeObserver(N),I=w.current.getBoundingClientRect(),R=I.width,L=I.height;return E(R,L),M.observe(w.current),function(){M.disconnect()}},[E,m]);var T=k.useMemo(function(){var N=A.containerWidth,M=A.containerHeight;if(N<0||M<0)return null;$r(Za(i)||Za(l),`The width(%s) and height(%s) are both fixed numbers,
+       maybe you don't need to use a ResponsiveContainer.`,i,l),$r(!n||n>0,"The aspect(%s) must be greater than zero.",n);var I=Za(i)?N:i,R=Za(l)?M:l;n&&n>0&&(I?R=I/n:R&&(I=R*n),p&&R>p&&(R=p)),$r(I>0||R>0,`The width(%s) and height(%s) of chart should be greater than 0,
+       please check the style of container, or the props width(%s) and height(%s),
+       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
+       height and width.`,I,R,i,l,f,c,n);var L=!Array.isArray(d)&&jr(d.type).endsWith("Chart");return C.Children.map(d,function($){return C.isValidElement($)?k.cloneElement($,dc({width:I,height:R},L?{style:dc({height:"100%",width:"100%",maxHeight:R,maxWidth:I},$.props.style)}:{})):$})},[n,d,l,p,c,f,A,i]);return C.createElement("div",{id:g?"".concat(g):void 0,className:ue("recharts-responsive-container",v),style:dc(dc({},P),{},{width:i,height:l,minWidth:f,minHeight:c,maxHeight:p}),ref:w},T)}),gg=function(t){return null};gg.displayName="Cell";function Wl(e){"@babel/helpers - typeof";return Wl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wl(e)}function o3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Nv(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?o3(Object(n),!0).forEach(function(r){bW(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function bW(e,t,n){return t=PW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PW(e){var t=SW(e,"string");return Wl(t)=="symbol"?t:t+""}function SW(e,t){if(Wl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var zo={widthCache:{},cacheCount:0},OW=2e3,kW={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},i3="recharts_measurement_span";function _W(e){var t=Nv({},e);return Object.keys(t).forEach(function(n){t[n]||delete t[n]}),t}var pl=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Da.isSsr)return{width:0,height:0};var r=_W(n),a=JSON.stringify({text:t,copyStyle:r});if(zo.widthCache[a])return zo.widthCache[a];try{var o=document.getElementById(i3);o||(o=document.createElement("span"),o.setAttribute("id",i3),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var i=Nv(Nv({},kW),r);Object.assign(o.style,i),o.textContent="".concat(t);var s=o.getBoundingClientRect(),l={width:s.width,height:s.height};return zo.widthCache[a]=l,++zo.cacheCount>OW&&(zo.cacheCount=0,zo.widthCache={}),l}catch{return{width:0,height:0}}},AW=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function ql(e){"@babel/helpers - typeof";return ql=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ql(e)}function If(e,t){return jW(e)||TW(e,t)||EW(e,t)||CW()}function CW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function EW(e,t){if(e){if(typeof e=="string")return s3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s3(e,t)}}function s3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function TW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function jW(e){if(Array.isArray(e))return e}function $W(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l3(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,MW(r.key),r)}}function NW(e,t,n){return t&&l3(e.prototype,t),n&&l3(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function MW(e){var t=RW(e,"string");return ql(t)=="symbol"?t:t+""}function RW(e,t){if(ql(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ql(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var u3=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,c3=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,IW=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,DW=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,O7={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},LW=Object.keys(O7),ni="NaN";function FW(e,t){return e*O7[t]}var mc=function(){function e(t,n){$W(this,e),this.num=t,this.unit=n,this.num=t,this.unit=n,Number.isNaN(t)&&(this.unit=""),n!==""&&!IW.test(n)&&(this.num=NaN,this.unit=""),LW.includes(n)&&(this.num=FW(t,n),this.unit="px")}return NW(e,[{key:"add",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num+n.num,this.unit)}},{key:"subtract",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num-n.num,this.unit)}},{key:"multiply",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num*n.num,this.unit||n.unit)}},{key:"divide",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num/n.num,this.unit||n.unit)}},{key:"toString",value:function(){return"".concat(this.num).concat(this.unit)}},{key:"isNaN",value:function(){return Number.isNaN(this.num)}}],[{key:"parse",value:function(n){var r,a=(r=DW.exec(n))!==null&&r!==void 0?r:[],o=If(a,3),i=o[1],s=o[2];return new e(parseFloat(i),s??"")}}])}();function k7(e){if(e.includes(ni))return ni;for(var t=e;t.includes("*")||t.includes("/");){var n,r=(n=u3.exec(t))!==null&&n!==void 0?n:[],a=If(r,4),o=a[1],i=a[2],s=a[3],l=mc.parse(o??""),u=mc.parse(s??""),f=i==="*"?l.multiply(u):l.divide(u);if(f.isNaN())return ni;t=t.replace(u3,f.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,p=(c=c3.exec(t))!==null&&c!==void 0?c:[],d=If(p,4),h=d[1],m=d[2],g=d[3],v=mc.parse(h??""),y=mc.parse(g??""),x=m==="+"?v.add(y):v.subtract(y);if(x.isNaN())return ni;t=t.replace(c3,x.toString())}return t}var f3=/\(([^()]*)\)/;function zW(e){for(var t=e;t.includes("(");){var n=f3.exec(t),r=If(n,2),a=r[1];t=t.replace(f3,k7(a))}return t}function BW(e){var t=e.replace(/\s+/g,"");return t=zW(t),t=k7(t),t}function HW(e){try{return BW(e)}catch{return ni}}function zm(e){var t=HW(e.slice(5,-1));return t===ni?"":t}var GW=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],UW=["dx","dy","angle","className","breakAll"];function Mv(){return Mv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Mv.apply(this,arguments)}function p3(e,t){if(e==null)return{};var n=WW(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WW(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function d3(e,t){return XW(e)||KW(e,t)||VW(e,t)||qW()}function qW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VW(e,t){if(e){if(typeof e=="string")return m3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return m3(e,t)}}function m3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function KW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function XW(e){if(Array.isArray(e))return e}var _7=/[ \f\n\r\t\v\u2028\u2029]+/,A7=function(t){var n=t.children,r=t.breakAll,a=t.style;try{var o=[];te(n)||(r?o=n.toString().split(""):o=n.toString().split(_7));var i=o.map(function(l){return{word:l,width:pl(l,a).width}}),s=r?0:pl(" ",a).width;return{wordsWithComputedWidth:i,spaceWidth:s}}catch{return null}},YW=function(t,n,r,a,o){var i=t.maxLines,s=t.children,l=t.style,u=t.breakAll,f=V(i),c=s,p=function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return I.reduce(function(R,L){var $=L.word,D=L.width,H=R[R.length-1];if(H&&(a==null||o||H.width+D+r<Number(a)))H.words.push($),H.width+=D+r;else{var W={words:[$],width:D};R.push(W)}return R},[])},d=p(n),h=function(I){return I.reduce(function(R,L){return R.width>L.width?R:L})};if(!f)return d;for(var m="…",g=function(I){var R=c.slice(0,I),L=A7({breakAll:u,style:l,children:R+m}).wordsWithComputedWidth,$=p(L),D=$.length>i||h($).width>Number(a);return[D,$]},v=0,y=c.length-1,x=0,P;v<=y&&x<=c.length-1;){var w=Math.floor((v+y)/2),S=w-1,O=g(S),_=d3(O,2),A=_[0],j=_[1],E=g(w),T=d3(E,1),N=T[0];if(!A&&!N&&(v=w+1),A&&N&&(y=w-1),!A&&N){P=j;break}x++}return P||d},h3=function(t){var n=te(t)?[]:t.toString().split(_7);return[{words:n}]},QW=function(t){var n=t.width,r=t.scaleToFit,a=t.children,o=t.style,i=t.breakAll,s=t.maxLines;if((n||r)&&!Da.isSsr){var l,u,f=A7({breakAll:i,children:a,style:o});if(f){var c=f.wordsWithComputedWidth,p=f.spaceWidth;l=c,u=p}else return h3(a);return YW({breakAll:i,children:a,maxLines:s,style:o},l,u,n,r)}return h3(a)},v3="#808080",Df=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.lineHeight,s=i===void 0?"1em":i,l=t.capHeight,u=l===void 0?"0.71em":l,f=t.scaleToFit,c=f===void 0?!1:f,p=t.textAnchor,d=p===void 0?"start":p,h=t.verticalAnchor,m=h===void 0?"end":h,g=t.fill,v=g===void 0?v3:g,y=p3(t,GW),x=k.useMemo(function(){return QW({breakAll:y.breakAll,children:y.children,maxLines:y.maxLines,scaleToFit:c,style:y.style,width:y.width})},[y.breakAll,y.children,y.maxLines,c,y.style,y.width]),P=y.dx,w=y.dy,S=y.angle,O=y.className,_=y.breakAll,A=p3(y,UW);if(!it(r)||!it(o))return null;var j=r+(V(P)?P:0),E=o+(V(w)?w:0),T;switch(m){case"start":T=zm("calc(".concat(u,")"));break;case"middle":T=zm("calc(".concat((x.length-1)/2," * -").concat(s," + (").concat(u," / 2))"));break;default:T=zm("calc(".concat(x.length-1," * -").concat(s,")"));break}var N=[];if(c){var M=x[0].width,I=y.width;N.push("scale(".concat((V(I)?I/M:1)/M,")"))}return S&&N.push("rotate(".concat(S,", ").concat(j,", ").concat(E,")")),N.length&&(A.transform=N.join(" ")),C.createElement("text",Mv({},re(A,!0),{x:j,y:E,className:ue("recharts-text",O),textAnchor:d,fill:v.includes("url")?v3:v}),x.map(function(R,L){var $=R.words.join(_?"":" ");return C.createElement("tspan",{x:j,dy:L===0?T:s,key:"".concat($,"-").concat(L)},$)}))};function Oa(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function ZW(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function xg(e){let t,n,r;e.length!==2?(t=Oa,n=(s,l)=>Oa(e(s),l),r=(s,l)=>e(s)-l):(t=e===Oa||e===ZW?e:JW,n=e,r=e);function a(s,l,u=0,f=s.length){if(u<f){if(t(l,l)!==0)return f;do{const c=u+f>>>1;n(s[c],l)<0?u=c+1:f=c}while(u<f)}return u}function o(s,l,u=0,f=s.length){if(u<f){if(t(l,l)!==0)return f;do{const c=u+f>>>1;n(s[c],l)<=0?u=c+1:f=c}while(u<f)}return u}function i(s,l,u=0,f=s.length){const c=a(s,l,u,f-1);return c>u&&r(s[c-1],l)>-r(s[c],l)?c-1:c}return{left:a,center:i,right:o}}function JW(){return 0}function C7(e){return e===null?NaN:+e}function*eq(e,t){for(let n of e)n!=null&&(n=+n)>=n&&(yield n)}const tq=xg(Oa),Mu=tq.right;xg(C7).center;class y3 extends Map{constructor(t,n=aq){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,a]of t)this.set(r,a)}get(t){return super.get(g3(this,t))}has(t){return super.has(g3(this,t))}set(t,n){return super.set(nq(this,t),n)}delete(t){return super.delete(rq(this,t))}}function g3({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function nq({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function rq({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function aq(e){return e!==null&&typeof e=="object"?e.valueOf():e}function oq(e=Oa){if(e===Oa)return E7;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function E7(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(e<t?-1:e>t?1:0)}const iq=Math.sqrt(50),sq=Math.sqrt(10),lq=Math.sqrt(2);function Lf(e,t,n){const r=(t-e)/Math.max(0,n),a=Math.floor(Math.log10(r)),o=r/Math.pow(10,a),i=o>=iq?10:o>=sq?5:o>=lq?2:1;let s,l,u;return a<0?(u=Math.pow(10,-a)/i,s=Math.round(e*u),l=Math.round(t*u),s/u<e&&++s,l/u>t&&--l,u=-u):(u=Math.pow(10,a)*i,s=Math.round(e/u),l=Math.round(t/u),s*u<e&&++s,l*u>t&&--l),l<s&&.5<=n&&n<2?Lf(e,t,n*2):[s,l,u]}function Rv(e,t,n){if(t=+t,e=+e,n=+n,!(n>0))return[];if(e===t)return[e];const r=t<e,[a,o,i]=r?Lf(t,e,n):Lf(e,t,n);if(!(o>=a))return[];const s=o-a+1,l=new Array(s);if(r)if(i<0)for(let u=0;u<s;++u)l[u]=(o-u)/-i;else for(let u=0;u<s;++u)l[u]=(o-u)*i;else if(i<0)for(let u=0;u<s;++u)l[u]=(a+u)/-i;else for(let u=0;u<s;++u)l[u]=(a+u)*i;return l}function Iv(e,t,n){return t=+t,e=+e,n=+n,Lf(e,t,n)[2]}function Dv(e,t,n){t=+t,e=+e,n=+n;const r=t<e,a=r?Iv(t,e,n):Iv(e,t,n);return(r?-1:1)*(a<0?1/-a:a)}function x3(e,t){let n;for(const r of e)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);return n}function w3(e,t){let n;for(const r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function T7(e,t,n=0,r=1/0,a){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(a=a===void 0?E7:oq(a);r>n;){if(r-n>600){const l=r-n+1,u=t-n+1,f=Math.log(l),c=.5*Math.exp(2*f/3),p=.5*Math.sqrt(f*c*(l-c)/l)*(u-l/2<0?-1:1),d=Math.max(n,Math.floor(t-u*c/l+p)),h=Math.min(r,Math.floor(t+(l-u)*c/l+p));T7(e,t,d,h,a)}const o=e[t];let i=n,s=r;for(Gs(e,n,t),a(e[r],o)>0&&Gs(e,n,r);i<s;){for(Gs(e,i,s),++i,--s;a(e[i],o)<0;)++i;for(;a(e[s],o)>0;)--s}a(e[n],o)===0?Gs(e,n,s):(++s,Gs(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Gs(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function uq(e,t,n){if(e=Float64Array.from(eq(e)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return w3(e);if(t>=1)return x3(e);var r,a=(r-1)*t,o=Math.floor(a),i=x3(T7(e,o).subarray(0,o+1)),s=w3(e.subarray(o+1));return i+(s-i)*(a-o)}}function cq(e,t,n=C7){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,o=Math.floor(a),i=+n(e[o],o,e),s=+n(e[o+1],o+1,e);return i+(s-i)*(a-o)}}function fq(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,o=new Array(a);++r<a;)o[r]=e+r*n;return o}function Sn(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function qr(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const Lv=Symbol("implicit");function wg(){var e=new y3,t=[],n=[],r=Lv;function a(o){let i=e.get(o);if(i===void 0){if(r!==Lv)return r;e.set(o,i=t.push(o)-1)}return n[i%n.length]}return a.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new y3;for(const i of o)e.has(i)||e.set(i,t.push(i)-1);return a},a.range=function(o){return arguments.length?(n=Array.from(o),a):n.slice()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return wg(t,n).unknown(r)},Sn.apply(a,arguments),a}function Vl(){var e=wg().unknown(void 0),t=e.domain,n=e.range,r=0,a=1,o,i,s=!1,l=0,u=0,f=.5;delete e.unknown;function c(){var p=t().length,d=a<r,h=d?a:r,m=d?r:a;o=(m-h)/Math.max(1,p-l+u*2),s&&(o=Math.floor(o)),h+=(m-h-o*(p-l))*f,i=o*(1-l),s&&(h=Math.round(h),i=Math.round(i));var g=fq(p).map(function(v){return h+o*v});return n(d?g.reverse():g)}return e.domain=function(p){return arguments.length?(t(p),c()):t()},e.range=function(p){return arguments.length?([r,a]=p,r=+r,a=+a,c()):[r,a]},e.rangeRound=function(p){return[r,a]=p,r=+r,a=+a,s=!0,c()},e.bandwidth=function(){return i},e.step=function(){return o},e.round=function(p){return arguments.length?(s=!!p,c()):s},e.padding=function(p){return arguments.length?(l=Math.min(1,u=+p),c()):l},e.paddingInner=function(p){return arguments.length?(l=Math.min(1,p),c()):l},e.paddingOuter=function(p){return arguments.length?(u=+p,c()):u},e.align=function(p){return arguments.length?(f=Math.max(0,Math.min(1,p)),c()):f},e.copy=function(){return Vl(t(),[r,a]).round(s).paddingInner(l).paddingOuter(u).align(f)},Sn.apply(c(),arguments)}function j7(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return j7(t())},e}function dl(){return j7(Vl.apply(null,arguments).paddingInner(1))}function bg(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function $7(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function Ru(){}var Kl=.7,Ff=1/Kl,vi="\\s*([+-]?\\d+)\\s*",Xl="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",pr="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",pq=/^#([0-9a-f]{3,8})$/,dq=new RegExp(`^rgb\\(${vi},${vi},${vi}\\)$`),mq=new RegExp(`^rgb\\(${pr},${pr},${pr}\\)$`),hq=new RegExp(`^rgba\\(${vi},${vi},${vi},${Xl}\\)$`),vq=new RegExp(`^rgba\\(${pr},${pr},${pr},${Xl}\\)$`),yq=new RegExp(`^hsl\\(${Xl},${pr},${pr}\\)$`),gq=new RegExp(`^hsla\\(${Xl},${pr},${pr},${Xl}\\)$`),b3={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};bg(Ru,Yl,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:P3,formatHex:P3,formatHex8:xq,formatHsl:wq,formatRgb:S3,toString:S3});function P3(){return this.rgb().formatHex()}function xq(){return this.rgb().formatHex8()}function wq(){return N7(this).formatHsl()}function S3(){return this.rgb().formatRgb()}function Yl(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=pq.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?O3(t):n===3?new Ht(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?hc(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?hc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=dq.exec(e))?new Ht(t[1],t[2],t[3],1):(t=mq.exec(e))?new Ht(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=hq.exec(e))?hc(t[1],t[2],t[3],t[4]):(t=vq.exec(e))?hc(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=yq.exec(e))?A3(t[1],t[2]/100,t[3]/100,1):(t=gq.exec(e))?A3(t[1],t[2]/100,t[3]/100,t[4]):b3.hasOwnProperty(e)?O3(b3[e]):e==="transparent"?new Ht(NaN,NaN,NaN,0):null}function O3(e){return new Ht(e>>16&255,e>>8&255,e&255,1)}function hc(e,t,n,r){return r<=0&&(e=t=n=NaN),new Ht(e,t,n,r)}function bq(e){return e instanceof Ru||(e=Yl(e)),e?(e=e.rgb(),new Ht(e.r,e.g,e.b,e.opacity)):new Ht}function Fv(e,t,n,r){return arguments.length===1?bq(e):new Ht(e,t,n,r??1)}function Ht(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}bg(Ht,Fv,$7(Ru,{brighter(e){return e=e==null?Ff:Math.pow(Ff,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Kl:Math.pow(Kl,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ht(fo(this.r),fo(this.g),fo(this.b),zf(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k3,formatHex:k3,formatHex8:Pq,formatRgb:_3,toString:_3}));function k3(){return`#${Ja(this.r)}${Ja(this.g)}${Ja(this.b)}`}function Pq(){return`#${Ja(this.r)}${Ja(this.g)}${Ja(this.b)}${Ja((isNaN(this.opacity)?1:this.opacity)*255)}`}function _3(){const e=zf(this.opacity);return`${e===1?"rgb(":"rgba("}${fo(this.r)}, ${fo(this.g)}, ${fo(this.b)}${e===1?")":`, ${e})`}`}function zf(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function fo(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Ja(e){return e=fo(e),(e<16?"0":"")+e.toString(16)}function A3(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new In(e,t,n,r)}function N7(e){if(e instanceof In)return new In(e.h,e.s,e.l,e.opacity);if(e instanceof Ru||(e=Yl(e)),!e)return new In;if(e instanceof In)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,s=o-a,l=(o+a)/2;return s?(t===o?i=(n-r)/s+(n<r)*6:n===o?i=(r-t)/s+2:i=(t-n)/s+4,s/=l<.5?o+a:2-o-a,i*=60):s=l>0&&l<1?0:i,new In(i,s,l,e.opacity)}function Sq(e,t,n,r){return arguments.length===1?N7(e):new In(e,t,n,r??1)}function In(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}bg(In,Sq,$7(Ru,{brighter(e){return e=e==null?Ff:Math.pow(Ff,e),new In(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Kl:Math.pow(Kl,e),new In(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new Ht(Bm(e>=240?e-240:e+120,a,r),Bm(e,a,r),Bm(e<120?e+240:e-120,a,r),this.opacity)},clamp(){return new In(C3(this.h),vc(this.s),vc(this.l),zf(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=zf(this.opacity);return`${e===1?"hsl(":"hsla("}${C3(this.h)}, ${vc(this.s)*100}%, ${vc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function C3(e){return e=(e||0)%360,e<0?e+360:e}function vc(e){return Math.max(0,Math.min(1,e||0))}function Bm(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const Pg=e=>()=>e;function Oq(e,t){return function(n){return e+n*t}}function kq(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function _q(e){return(e=+e)==1?M7:function(t,n){return n-t?kq(t,n,e):Pg(isNaN(t)?n:t)}}function M7(e,t){var n=t-e;return n?Oq(e,n):Pg(isNaN(e)?t:e)}const E3=function e(t){var n=_q(t);function r(a,o){var i=n((a=Fv(a)).r,(o=Fv(o)).r),s=n(a.g,o.g),l=n(a.b,o.b),u=M7(a.opacity,o.opacity);return function(f){return a.r=i(f),a.g=s(f),a.b=l(f),a.opacity=u(f),a+""}}return r.gamma=e,r}(1);function Aq(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),a;return function(o){for(a=0;a<n;++a)r[a]=e[a]*(1-o)+t[a]*o;return r}}function Cq(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Eq(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,a=new Array(r),o=new Array(n),i;for(i=0;i<r;++i)a[i]=_s(e[i],t[i]);for(;i<n;++i)o[i]=t[i];return function(s){for(i=0;i<r;++i)o[i]=a[i](s);return o}}function Tq(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Bf(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function jq(e,t){var n={},r={},a;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(a in t)a in e?n[a]=_s(e[a],t[a]):r[a]=t[a];return function(o){for(a in n)r[a]=n[a](o);return r}}var zv=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Hm=new RegExp(zv.source,"g");function $q(e){return function(){return e}}function Nq(e){return function(t){return e(t)+""}}function Mq(e,t){var n=zv.lastIndex=Hm.lastIndex=0,r,a,o,i=-1,s=[],l=[];for(e=e+"",t=t+"";(r=zv.exec(e))&&(a=Hm.exec(t));)(o=a.index)>n&&(o=t.slice(n,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(a=a[0])?s[i]?s[i]+=a:s[++i]=a:(s[++i]=null,l.push({i,x:Bf(r,a)})),n=Hm.lastIndex;return n<t.length&&(o=t.slice(n),s[i]?s[i]+=o:s[++i]=o),s.length<2?l[0]?Nq(l[0].x):$q(t):(t=l.length,function(u){for(var f=0,c;f<t;++f)s[(c=l[f]).i]=c.x(u);return s.join("")})}function _s(e,t){var n=typeof t,r;return t==null||n==="boolean"?Pg(t):(n==="number"?Bf:n==="string"?(r=Yl(t))?(t=r,E3):Mq:t instanceof Yl?E3:t instanceof Date?Tq:Cq(t)?Aq:Array.isArray(t)?Eq:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?jq:Bf)(e,t)}function Sg(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}function Rq(e,t){t===void 0&&(t=e,e=_s);for(var n=0,r=t.length-1,a=t[0],o=new Array(r<0?0:r);n<r;)o[n]=e(a,a=t[++n]);return function(i){var s=Math.max(0,Math.min(r-1,Math.floor(i*=r)));return o[s](i-s)}}function Iq(e){return function(){return e}}function Hf(e){return+e}var T3=[0,1];function It(e){return e}function Bv(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:Iq(isNaN(t)?NaN:.5)}function Dq(e,t){var n;return e>t&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function Lq(e,t,n){var r=e[0],a=e[1],o=t[0],i=t[1];return a<r?(r=Bv(a,r),o=n(i,o)):(r=Bv(r,a),o=n(o,i)),function(s){return o(r(s))}}function Fq(e,t,n){var r=Math.min(e.length,t.length)-1,a=new Array(r),o=new Array(r),i=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++i<r;)a[i]=Bv(e[i],e[i+1]),o[i]=n(t[i],t[i+1]);return function(s){var l=Mu(e,s,1,r)-1;return o[l](a[l](s))}}function Iu(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function gd(){var e=T3,t=T3,n=_s,r,a,o,i=It,s,l,u;function f(){var p=Math.min(e.length,t.length);return i!==It&&(i=Dq(e[0],e[p-1])),s=p>2?Fq:Lq,l=u=null,c}function c(p){return p==null||isNaN(p=+p)?o:(l||(l=s(e.map(r),t,n)))(r(i(p)))}return c.invert=function(p){return i(a((u||(u=s(t,e.map(r),Bf)))(p)))},c.domain=function(p){return arguments.length?(e=Array.from(p,Hf),f()):e.slice()},c.range=function(p){return arguments.length?(t=Array.from(p),f()):t.slice()},c.rangeRound=function(p){return t=Array.from(p),n=Sg,f()},c.clamp=function(p){return arguments.length?(i=p?!0:It,f()):i!==It},c.interpolate=function(p){return arguments.length?(n=p,f()):n},c.unknown=function(p){return arguments.length?(o=p,c):o},function(p,d){return r=p,a=d,f()}}function Og(){return gd()(It,It)}function zq(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Gf(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function zi(e){return e=Gf(Math.abs(e)),e?e[1]:NaN}function Bq(e,t){return function(n,r){for(var a=n.length,o=[],i=0,s=e[0],l=0;a>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(n.substring(a-=s,a+s)),!((l+=s+1)>r));)s=e[i=(i+1)%e.length];return o.reverse().join(t)}}function Hq(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var Gq=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Ql(e){if(!(t=Gq.exec(e)))throw new Error("invalid format: "+e);var t;return new kg({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Ql.prototype=kg.prototype;function kg(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}kg.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Uq(e){e:for(var t=e.length,n=1,r=-1,a;n<t;++n)switch(e[n]){case".":r=a=n;break;case"0":r===0&&(r=n),a=n;break;default:if(!+e[n])break e;r>0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(a+1):e}var R7;function Wq(e,t){var n=Gf(e,t);if(!n)return e+"";var r=n[0],a=n[1],o=a-(R7=Math.max(-8,Math.min(8,Math.floor(a/3)))*3)+1,i=r.length;return o===i?r:o>i?r+new Array(o-i+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Gf(e,Math.max(0,t+o-1))[0]}function j3(e,t){var n=Gf(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}const $3={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:zq,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>j3(e*100,t),r:j3,s:Wq,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function N3(e){return e}var M3=Array.prototype.map,R3=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function qq(e){var t=e.grouping===void 0||e.thousands===void 0?N3:Bq(M3.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",a=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?N3:Hq(M3.call(e.numerals,String)),i=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function u(c){c=Ql(c);var p=c.fill,d=c.align,h=c.sign,m=c.symbol,g=c.zero,v=c.width,y=c.comma,x=c.precision,P=c.trim,w=c.type;w==="n"?(y=!0,w="g"):$3[w]||(x===void 0&&(x=12),P=!0,w="g"),(g||p==="0"&&d==="=")&&(g=!0,p="0",d="=");var S=m==="$"?n:m==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",O=m==="$"?r:/[%p]/.test(w)?i:"",_=$3[w],A=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function j(E){var T=S,N=O,M,I,R;if(w==="c")N=_(E)+N,E="";else{E=+E;var L=E<0||1/E<0;if(E=isNaN(E)?l:_(Math.abs(E),x),P&&(E=Uq(E)),L&&+E==0&&h!=="+"&&(L=!1),T=(L?h==="("?h:s:h==="-"||h==="("?"":h)+T,N=(w==="s"?R3[8+R7/3]:"")+N+(L&&h==="("?")":""),A){for(M=-1,I=E.length;++M<I;)if(R=E.charCodeAt(M),48>R||R>57){N=(R===46?a+E.slice(M+1):E.slice(M))+N,E=E.slice(0,M);break}}}y&&!g&&(E=t(E,1/0));var $=T.length+E.length+N.length,D=$<v?new Array(v-$+1).join(p):"";switch(y&&g&&(E=t(D+E,D.length?v-N.length:1/0),D=""),d){case"<":E=T+E+N+D;break;case"=":E=T+D+E+N;break;case"^":E=D.slice(0,$=D.length>>1)+T+E+N+D.slice($);break;default:E=D+T+E+N;break}return o(E)}return j.toString=function(){return c+""},j}function f(c,p){var d=u((c=Ql(c),c.type="f",c)),h=Math.max(-8,Math.min(8,Math.floor(zi(p)/3)))*3,m=Math.pow(10,-h),g=R3[8+h/3];return function(v){return d(m*v)+g}}return{format:u,formatPrefix:f}}var yc,_g,I7;Vq({thousands:",",grouping:[3],currency:["$",""]});function Vq(e){return yc=qq(e),_g=yc.format,I7=yc.formatPrefix,yc}function Kq(e){return Math.max(0,-zi(Math.abs(e)))}function Xq(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(zi(t)/3)))*3-zi(Math.abs(e)))}function Yq(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,zi(t)-zi(e))+1}function D7(e,t,n,r){var a=Dv(e,t,n),o;switch(r=Ql(r??",f"),r.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(o=Xq(a,i))&&(r.precision=o),I7(r,i)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=Yq(a,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=Kq(a))&&(r.precision=o-(r.type==="%")*2);break}}return _g(r)}function La(e){var t=e.domain;return e.ticks=function(n){var r=t();return Rv(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var a=t();return D7(a[0],a[a.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),a=0,o=r.length-1,i=r[a],s=r[o],l,u,f=10;for(s<i&&(u=i,i=s,s=u,u=a,a=o,o=u);f-- >0;){if(u=Iv(i,s,n),u===l)return r[a]=i,r[o]=s,t(r);if(u>0)i=Math.floor(i/u)*u,s=Math.ceil(s/u)*u;else if(u<0)i=Math.ceil(i*u)/u,s=Math.floor(s*u)/u;else break;l=u}return e},e}function Uf(){var e=Og();return e.copy=function(){return Iu(e,Uf())},Sn.apply(e,arguments),La(e)}function L7(e){var t;function n(r){return r==null||isNaN(r=+r)?t:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(e=Array.from(r,Hf),n):e.slice()},n.unknown=function(r){return arguments.length?(t=r,n):t},n.copy=function(){return L7(e).unknown(t)},e=arguments.length?Array.from(e,Hf):[0,1],La(n)}function F7(e,t){e=e.slice();var n=0,r=e.length-1,a=e[n],o=e[r],i;return o<a&&(i=n,n=r,r=i,i=a,a=o,o=i),e[n]=t.floor(a),e[r]=t.ceil(o),e}function I3(e){return Math.log(e)}function D3(e){return Math.exp(e)}function Qq(e){return-Math.log(-e)}function Zq(e){return-Math.exp(-e)}function Jq(e){return isFinite(e)?+("1e"+e):e<0?0:e}function eV(e){return e===10?Jq:e===Math.E?Math.exp:t=>Math.pow(e,t)}function tV(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function L3(e){return(t,n)=>-e(-t,n)}function Ag(e){const t=e(I3,D3),n=t.domain;let r=10,a,o;function i(){return a=tV(r),o=eV(r),n()[0]<0?(a=L3(a),o=L3(o),e(Qq,Zq)):e(I3,D3),t}return t.base=function(s){return arguments.length?(r=+s,i()):r},t.domain=function(s){return arguments.length?(n(s),i()):n()},t.ticks=s=>{const l=n();let u=l[0],f=l[l.length-1];const c=f<u;c&&([u,f]=[f,u]);let p=a(u),d=a(f),h,m;const g=s==null?10:+s;let v=[];if(!(r%1)&&d-p<g){if(p=Math.floor(p),d=Math.ceil(d),u>0){for(;p<=d;++p)for(h=1;h<r;++h)if(m=p<0?h/o(-p):h*o(p),!(m<u)){if(m>f)break;v.push(m)}}else for(;p<=d;++p)for(h=r-1;h>=1;--h)if(m=p>0?h/o(-p):h*o(p),!(m<u)){if(m>f)break;v.push(m)}v.length*2<g&&(v=Rv(u,f,g))}else v=Rv(p,d,Math.min(d-p,g)).map(o);return c?v.reverse():v},t.tickFormat=(s,l)=>{if(s==null&&(s=10),l==null&&(l=r===10?"s":","),typeof l!="function"&&(!(r%1)&&(l=Ql(l)).precision==null&&(l.trim=!0),l=_g(l)),s===1/0)return l;const u=Math.max(1,r*s/t.ticks().length);return f=>{let c=f/o(Math.round(a(f)));return c*r<r-.5&&(c*=r),c<=u?l(f):""}},t.nice=()=>n(F7(n(),{floor:s=>o(Math.floor(a(s))),ceil:s=>o(Math.ceil(a(s)))})),t}function z7(){const e=Ag(gd()).domain([1,10]);return e.copy=()=>Iu(e,z7()).base(e.base()),Sn.apply(e,arguments),e}function F3(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function z3(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Cg(e){var t=1,n=e(F3(t),z3(t));return n.constant=function(r){return arguments.length?e(F3(t=+r),z3(t)):t},La(n)}function B7(){var e=Cg(gd());return e.copy=function(){return Iu(e,B7()).constant(e.constant())},Sn.apply(e,arguments)}function B3(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function nV(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function rV(e){return e<0?-e*e:e*e}function Eg(e){var t=e(It,It),n=1;function r(){return n===1?e(It,It):n===.5?e(nV,rV):e(B3(n),B3(1/n))}return t.exponent=function(a){return arguments.length?(n=+a,r()):n},La(t)}function Tg(){var e=Eg(gd());return e.copy=function(){return Iu(e,Tg()).exponent(e.exponent())},Sn.apply(e,arguments),e}function aV(){return Tg.apply(null,arguments).exponent(.5)}function H3(e){return Math.sign(e)*e*e}function oV(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function H7(){var e=Og(),t=[0,1],n=!1,r;function a(o){var i=oV(e(o));return isNaN(i)?r:n?Math.round(i):i}return a.invert=function(o){return e.invert(H3(o))},a.domain=function(o){return arguments.length?(e.domain(o),a):e.domain()},a.range=function(o){return arguments.length?(e.range((t=Array.from(o,Hf)).map(H3)),a):t.slice()},a.rangeRound=function(o){return a.range(o).round(!0)},a.round=function(o){return arguments.length?(n=!!o,a):n},a.clamp=function(o){return arguments.length?(e.clamp(o),a):e.clamp()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return H7(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Sn.apply(a,arguments),La(a)}function G7(){var e=[],t=[],n=[],r;function a(){var i=0,s=Math.max(1,t.length);for(n=new Array(s-1);++i<s;)n[i-1]=cq(e,i/s);return o}function o(i){return i==null||isNaN(i=+i)?r:t[Mu(n,i)]}return o.invertExtent=function(i){var s=t.indexOf(i);return s<0?[NaN,NaN]:[s>0?n[s-1]:e[0],s<n.length?n[s]:e[e.length-1]]},o.domain=function(i){if(!arguments.length)return e.slice();e=[];for(let s of i)s!=null&&!isNaN(s=+s)&&e.push(s);return e.sort(Oa),a()},o.range=function(i){return arguments.length?(t=Array.from(i),a()):t.slice()},o.unknown=function(i){return arguments.length?(r=i,o):r},o.quantiles=function(){return n.slice()},o.copy=function(){return G7().domain(e).range(t).unknown(r)},Sn.apply(o,arguments)}function U7(){var e=0,t=1,n=1,r=[.5],a=[0,1],o;function i(l){return l!=null&&l<=l?a[Mu(r,l,0,n)]:o}function s(){var l=-1;for(r=new Array(n);++l<n;)r[l]=((l+1)*t-(l-n)*e)/(n+1);return i}return i.domain=function(l){return arguments.length?([e,t]=l,e=+e,t=+t,s()):[e,t]},i.range=function(l){return arguments.length?(n=(a=Array.from(l)).length-1,s()):a.slice()},i.invertExtent=function(l){var u=a.indexOf(l);return u<0?[NaN,NaN]:u<1?[e,r[0]]:u>=n?[r[n-1],t]:[r[u-1],r[u]]},i.unknown=function(l){return arguments.length&&(o=l),i},i.thresholds=function(){return r.slice()},i.copy=function(){return U7().domain([e,t]).range(a).unknown(o)},Sn.apply(La(i),arguments)}function W7(){var e=[.5],t=[0,1],n,r=1;function a(o){return o!=null&&o<=o?t[Mu(e,o,0,r)]:n}return a.domain=function(o){return arguments.length?(e=Array.from(o),r=Math.min(e.length,t.length-1),a):e.slice()},a.range=function(o){return arguments.length?(t=Array.from(o),r=Math.min(e.length,t.length-1),a):t.slice()},a.invertExtent=function(o){var i=t.indexOf(o);return[e[i-1],e[i]]},a.unknown=function(o){return arguments.length?(n=o,a):n},a.copy=function(){return W7().domain(e).range(t).unknown(n)},Sn.apply(a,arguments)}const Gm=new Date,Um=new Date;function lt(e,t,n,r){function a(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return a.floor=o=>(e(o=new Date(+o)),o),a.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),a.round=o=>{const i=a(o),s=a.ceil(o);return o-i<s-o?i:s},a.offset=(o,i)=>(t(o=new Date(+o),i==null?1:Math.floor(i)),o),a.range=(o,i,s)=>{const l=[];if(o=a.ceil(o),s=s==null?1:Math.floor(s),!(o<i)||!(s>0))return l;let u;do l.push(u=new Date(+o)),t(o,s),e(o);while(u<o&&o<i);return l},a.filter=o=>lt(i=>{if(i>=i)for(;e(i),!o(i);)i.setTime(i-1)},(i,s)=>{if(i>=i)if(s<0)for(;++s<=0;)for(;t(i,-1),!o(i););else for(;--s>=0;)for(;t(i,1),!o(i););}),n&&(a.count=(o,i)=>(Gm.setTime(+o),Um.setTime(+i),e(Gm),e(Um),Math.floor(n(Gm,Um))),a.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?a.filter(r?i=>r(i)%o===0:i=>a.count(0,i)%o===0):a)),a}const Wf=lt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Wf.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?lt(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Wf);Wf.range;const Ar=1e3,vn=Ar*60,Cr=vn*60,zr=Cr*24,jg=zr*7,G3=zr*30,Wm=zr*365,eo=lt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Ar)},(e,t)=>(t-e)/Ar,e=>e.getUTCSeconds());eo.range;const $g=lt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Ar)},(e,t)=>{e.setTime(+e+t*vn)},(e,t)=>(t-e)/vn,e=>e.getMinutes());$g.range;const Ng=lt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*vn)},(e,t)=>(t-e)/vn,e=>e.getUTCMinutes());Ng.range;const Mg=lt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Ar-e.getMinutes()*vn)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getHours());Mg.range;const Rg=lt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getUTCHours());Rg.range;const Du=lt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*vn)/zr,e=>e.getDate()-1);Du.range;const xd=lt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/zr,e=>e.getUTCDate()-1);xd.range;const q7=lt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/zr,e=>Math.floor(e/zr));q7.range;function No(e){return lt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*vn)/jg)}const wd=No(0),qf=No(1),iV=No(2),sV=No(3),Bi=No(4),lV=No(5),uV=No(6);wd.range;qf.range;iV.range;sV.range;Bi.range;lV.range;uV.range;function Mo(e){return lt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/jg)}const bd=Mo(0),Vf=Mo(1),cV=Mo(2),fV=Mo(3),Hi=Mo(4),pV=Mo(5),dV=Mo(6);bd.range;Vf.range;cV.range;fV.range;Hi.range;pV.range;dV.range;const Ig=lt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Ig.range;const Dg=lt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Dg.range;const Br=lt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Br.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});Br.range;const Hr=lt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Hr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:lt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});Hr.range;function V7(e,t,n,r,a,o){const i=[[eo,1,Ar],[eo,5,5*Ar],[eo,15,15*Ar],[eo,30,30*Ar],[o,1,vn],[o,5,5*vn],[o,15,15*vn],[o,30,30*vn],[a,1,Cr],[a,3,3*Cr],[a,6,6*Cr],[a,12,12*Cr],[r,1,zr],[r,2,2*zr],[n,1,jg],[t,1,G3],[t,3,3*G3],[e,1,Wm]];function s(u,f,c){const p=f<u;p&&([u,f]=[f,u]);const d=c&&typeof c.range=="function"?c:l(u,f,c),h=d?d.range(u,+f+1):[];return p?h.reverse():h}function l(u,f,c){const p=Math.abs(f-u)/c,d=xg(([,,g])=>g).right(i,p);if(d===i.length)return e.every(Dv(u/Wm,f/Wm,c));if(d===0)return Wf.every(Math.max(Dv(u,f,c),1));const[h,m]=i[p/i[d-1][2]<i[d][2]/p?d-1:d];return h.every(m)}return[s,l]}const[mV,hV]=V7(Hr,Dg,bd,q7,Rg,Ng),[vV,yV]=V7(Br,Ig,wd,Du,Mg,$g);function qm(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function Vm(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function Us(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function gV(e){var t=e.dateTime,n=e.date,r=e.time,a=e.periods,o=e.days,i=e.shortDays,s=e.months,l=e.shortMonths,u=Ws(a),f=qs(a),c=Ws(o),p=qs(o),d=Ws(i),h=qs(i),m=Ws(s),g=qs(s),v=Ws(l),y=qs(l),x={a:L,A:$,b:D,B:H,c:null,d:X3,e:X3,f:BV,g:QV,G:JV,H:LV,I:FV,j:zV,L:K7,m:HV,M:GV,p:W,q:G,Q:Z3,s:J3,S:UV,u:WV,U:qV,V:VV,w:KV,W:XV,x:null,X:null,y:YV,Y:ZV,Z:eK,"%":Q3},P={a:Z,A:ie,b:ve,B:Pe,c:null,d:Y3,e:Y3,f:aK,g:mK,G:vK,H:tK,I:nK,j:rK,L:Y7,m:oK,M:iK,p:J,q:le,Q:Z3,s:J3,S:sK,u:lK,U:uK,V:cK,w:fK,W:pK,x:null,X:null,y:dK,Y:hK,Z:yK,"%":Q3},w={a:j,A:E,b:T,B:N,c:M,d:V3,e:V3,f:MV,g:q3,G:W3,H:K3,I:K3,j:TV,L:NV,m:EV,M:jV,p:A,q:CV,Q:IV,s:DV,S:$V,u:SV,U:OV,V:kV,w:PV,W:_V,x:I,X:R,y:q3,Y:W3,Z:AV,"%":RV};x.x=S(n,x),x.X=S(r,x),x.c=S(t,x),P.x=S(n,P),P.X=S(r,P),P.c=S(t,P);function S(q,K){return function(X){var F=[],fe=-1,ne=0,Ne=q.length,Me,Ze,Xn;for(X instanceof Date||(X=new Date(+X));++fe<Ne;)q.charCodeAt(fe)===37&&(F.push(q.slice(ne,fe)),(Ze=U3[Me=q.charAt(++fe)])!=null?Me=q.charAt(++fe):Ze=Me==="e"?" ":"0",(Xn=K[Me])&&(Me=Xn(X,Ze)),F.push(Me),ne=fe+1);return F.push(q.slice(ne,fe)),F.join("")}}function O(q,K){return function(X){var F=Us(1900,void 0,1),fe=_(F,q,X+="",0),ne,Ne;if(fe!=X.length)return null;if("Q"in F)return new Date(F.Q);if("s"in F)return new Date(F.s*1e3+("L"in F?F.L:0));if(K&&!("Z"in F)&&(F.Z=0),"p"in F&&(F.H=F.H%12+F.p*12),F.m===void 0&&(F.m="q"in F?F.q:0),"V"in F){if(F.V<1||F.V>53)return null;"w"in F||(F.w=1),"Z"in F?(ne=Vm(Us(F.y,0,1)),Ne=ne.getUTCDay(),ne=Ne>4||Ne===0?Vf.ceil(ne):Vf(ne),ne=xd.offset(ne,(F.V-1)*7),F.y=ne.getUTCFullYear(),F.m=ne.getUTCMonth(),F.d=ne.getUTCDate()+(F.w+6)%7):(ne=qm(Us(F.y,0,1)),Ne=ne.getDay(),ne=Ne>4||Ne===0?qf.ceil(ne):qf(ne),ne=Du.offset(ne,(F.V-1)*7),F.y=ne.getFullYear(),F.m=ne.getMonth(),F.d=ne.getDate()+(F.w+6)%7)}else("W"in F||"U"in F)&&("w"in F||(F.w="u"in F?F.u%7:"W"in F?1:0),Ne="Z"in F?Vm(Us(F.y,0,1)).getUTCDay():qm(Us(F.y,0,1)).getDay(),F.m=0,F.d="W"in F?(F.w+6)%7+F.W*7-(Ne+5)%7:F.w+F.U*7-(Ne+6)%7);return"Z"in F?(F.H+=F.Z/100|0,F.M+=F.Z%100,Vm(F)):qm(F)}}function _(q,K,X,F){for(var fe=0,ne=K.length,Ne=X.length,Me,Ze;fe<ne;){if(F>=Ne)return-1;if(Me=K.charCodeAt(fe++),Me===37){if(Me=K.charAt(fe++),Ze=w[Me in U3?K.charAt(fe++):Me],!Ze||(F=Ze(q,X,F))<0)return-1}else if(Me!=X.charCodeAt(F++))return-1}return F}function A(q,K,X){var F=u.exec(K.slice(X));return F?(q.p=f.get(F[0].toLowerCase()),X+F[0].length):-1}function j(q,K,X){var F=d.exec(K.slice(X));return F?(q.w=h.get(F[0].toLowerCase()),X+F[0].length):-1}function E(q,K,X){var F=c.exec(K.slice(X));return F?(q.w=p.get(F[0].toLowerCase()),X+F[0].length):-1}function T(q,K,X){var F=v.exec(K.slice(X));return F?(q.m=y.get(F[0].toLowerCase()),X+F[0].length):-1}function N(q,K,X){var F=m.exec(K.slice(X));return F?(q.m=g.get(F[0].toLowerCase()),X+F[0].length):-1}function M(q,K,X){return _(q,t,K,X)}function I(q,K,X){return _(q,n,K,X)}function R(q,K,X){return _(q,r,K,X)}function L(q){return i[q.getDay()]}function $(q){return o[q.getDay()]}function D(q){return l[q.getMonth()]}function H(q){return s[q.getMonth()]}function W(q){return a[+(q.getHours()>=12)]}function G(q){return 1+~~(q.getMonth()/3)}function Z(q){return i[q.getUTCDay()]}function ie(q){return o[q.getUTCDay()]}function ve(q){return l[q.getUTCMonth()]}function Pe(q){return s[q.getUTCMonth()]}function J(q){return a[+(q.getUTCHours()>=12)]}function le(q){return 1+~~(q.getUTCMonth()/3)}return{format:function(q){var K=S(q+="",x);return K.toString=function(){return q},K},parse:function(q){var K=O(q+="",!1);return K.toString=function(){return q},K},utcFormat:function(q){var K=S(q+="",P);return K.toString=function(){return q},K},utcParse:function(q){var K=O(q+="",!0);return K.toString=function(){return q},K}}}var U3={"-":"",_:" ",0:"0"},dt=/^\s*\d+/,xV=/^%/,wV=/[\\^$*+?|[\]().{}]/g;function he(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",o=a.length;return r+(o<n?new Array(n-o+1).join(t)+a:a)}function bV(e){return e.replace(wV,"\\$&")}function Ws(e){return new RegExp("^(?:"+e.map(bV).join("|")+")","i")}function qs(e){return new Map(e.map((t,n)=>[t.toLowerCase(),n]))}function PV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function SV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function OV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function kV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function _V(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function W3(e,t,n){var r=dt.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function q3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function AV(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function CV(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function EV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function V3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function TV(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function K3(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function jV(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function $V(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function NV(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function MV(e,t,n){var r=dt.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function RV(e,t,n){var r=xV.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function IV(e,t,n){var r=dt.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function DV(e,t,n){var r=dt.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function X3(e,t){return he(e.getDate(),t,2)}function LV(e,t){return he(e.getHours(),t,2)}function FV(e,t){return he(e.getHours()%12||12,t,2)}function zV(e,t){return he(1+Du.count(Br(e),e),t,3)}function K7(e,t){return he(e.getMilliseconds(),t,3)}function BV(e,t){return K7(e,t)+"000"}function HV(e,t){return he(e.getMonth()+1,t,2)}function GV(e,t){return he(e.getMinutes(),t,2)}function UV(e,t){return he(e.getSeconds(),t,2)}function WV(e){var t=e.getDay();return t===0?7:t}function qV(e,t){return he(wd.count(Br(e)-1,e),t,2)}function X7(e){var t=e.getDay();return t>=4||t===0?Bi(e):Bi.ceil(e)}function VV(e,t){return e=X7(e),he(Bi.count(Br(e),e)+(Br(e).getDay()===4),t,2)}function KV(e){return e.getDay()}function XV(e,t){return he(qf.count(Br(e)-1,e),t,2)}function YV(e,t){return he(e.getFullYear()%100,t,2)}function QV(e,t){return e=X7(e),he(e.getFullYear()%100,t,2)}function ZV(e,t){return he(e.getFullYear()%1e4,t,4)}function JV(e,t){var n=e.getDay();return e=n>=4||n===0?Bi(e):Bi.ceil(e),he(e.getFullYear()%1e4,t,4)}function eK(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+he(t/60|0,"0",2)+he(t%60,"0",2)}function Y3(e,t){return he(e.getUTCDate(),t,2)}function tK(e,t){return he(e.getUTCHours(),t,2)}function nK(e,t){return he(e.getUTCHours()%12||12,t,2)}function rK(e,t){return he(1+xd.count(Hr(e),e),t,3)}function Y7(e,t){return he(e.getUTCMilliseconds(),t,3)}function aK(e,t){return Y7(e,t)+"000"}function oK(e,t){return he(e.getUTCMonth()+1,t,2)}function iK(e,t){return he(e.getUTCMinutes(),t,2)}function sK(e,t){return he(e.getUTCSeconds(),t,2)}function lK(e){var t=e.getUTCDay();return t===0?7:t}function uK(e,t){return he(bd.count(Hr(e)-1,e),t,2)}function Q7(e){var t=e.getUTCDay();return t>=4||t===0?Hi(e):Hi.ceil(e)}function cK(e,t){return e=Q7(e),he(Hi.count(Hr(e),e)+(Hr(e).getUTCDay()===4),t,2)}function fK(e){return e.getUTCDay()}function pK(e,t){return he(Vf.count(Hr(e)-1,e),t,2)}function dK(e,t){return he(e.getUTCFullYear()%100,t,2)}function mK(e,t){return e=Q7(e),he(e.getUTCFullYear()%100,t,2)}function hK(e,t){return he(e.getUTCFullYear()%1e4,t,4)}function vK(e,t){var n=e.getUTCDay();return e=n>=4||n===0?Hi(e):Hi.ceil(e),he(e.getUTCFullYear()%1e4,t,4)}function yK(){return"+0000"}function Q3(){return"%"}function Z3(e){return+e}function J3(e){return Math.floor(+e/1e3)}var Bo,Z7,J7;gK({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function gK(e){return Bo=gV(e),Z7=Bo.format,Bo.parse,J7=Bo.utcFormat,Bo.utcParse,Bo}function xK(e){return new Date(e)}function wK(e){return e instanceof Date?+e:+new Date(+e)}function Lg(e,t,n,r,a,o,i,s,l,u){var f=Og(),c=f.invert,p=f.domain,d=u(".%L"),h=u(":%S"),m=u("%I:%M"),g=u("%I %p"),v=u("%a %d"),y=u("%b %d"),x=u("%B"),P=u("%Y");function w(S){return(l(S)<S?d:s(S)<S?h:i(S)<S?m:o(S)<S?g:r(S)<S?a(S)<S?v:y:n(S)<S?x:P)(S)}return f.invert=function(S){return new Date(c(S))},f.domain=function(S){return arguments.length?p(Array.from(S,wK)):p().map(xK)},f.ticks=function(S){var O=p();return e(O[0],O[O.length-1],S??10)},f.tickFormat=function(S,O){return O==null?w:u(O)},f.nice=function(S){var O=p();return(!S||typeof S.range!="function")&&(S=t(O[0],O[O.length-1],S??10)),S?p(F7(O,S)):f},f.copy=function(){return Iu(f,Lg(e,t,n,r,a,o,i,s,l,u))},f}function bK(){return Sn.apply(Lg(vV,yV,Br,Ig,wd,Du,Mg,$g,eo,Z7).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function PK(){return Sn.apply(Lg(mV,hV,Hr,Dg,bd,xd,Rg,Ng,eo,J7).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Pd(){var e=0,t=1,n,r,a,o,i=It,s=!1,l;function u(c){return c==null||isNaN(c=+c)?l:i(a===0?.5:(c=(o(c)-n)*a,s?Math.max(0,Math.min(1,c)):c))}u.domain=function(c){return arguments.length?([e,t]=c,n=o(e=+e),r=o(t=+t),a=n===r?0:1/(r-n),u):[e,t]},u.clamp=function(c){return arguments.length?(s=!!c,u):s},u.interpolator=function(c){return arguments.length?(i=c,u):i};function f(c){return function(p){var d,h;return arguments.length?([d,h]=p,i=c(d,h),u):[i(0),i(1)]}}return u.range=f(_s),u.rangeRound=f(Sg),u.unknown=function(c){return arguments.length?(l=c,u):l},function(c){return o=c,n=c(e),r=c(t),a=n===r?0:1/(r-n),u}}function Fa(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function eP(){var e=La(Pd()(It));return e.copy=function(){return Fa(e,eP())},qr.apply(e,arguments)}function tP(){var e=Ag(Pd()).domain([1,10]);return e.copy=function(){return Fa(e,tP()).base(e.base())},qr.apply(e,arguments)}function nP(){var e=Cg(Pd());return e.copy=function(){return Fa(e,nP()).constant(e.constant())},qr.apply(e,arguments)}function Fg(){var e=Eg(Pd());return e.copy=function(){return Fa(e,Fg()).exponent(e.exponent())},qr.apply(e,arguments)}function SK(){return Fg.apply(null,arguments).exponent(.5)}function rP(){var e=[],t=It;function n(r){if(r!=null&&!isNaN(r=+r))return t((Mu(e,r,1)-1)/(e.length-1))}return n.domain=function(r){if(!arguments.length)return e.slice();e=[];for(let a of r)a!=null&&!isNaN(a=+a)&&e.push(a);return e.sort(Oa),n},n.interpolator=function(r){return arguments.length?(t=r,n):t},n.range=function(){return e.map((r,a)=>t(a/(e.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(a,o)=>uq(e,o/r))},n.copy=function(){return rP(t).domain(e)},qr.apply(n,arguments)}function Sd(){var e=0,t=.5,n=1,r=1,a,o,i,s,l,u=It,f,c=!1,p;function d(m){return isNaN(m=+m)?p:(m=.5+((m=+f(m))-o)*(r*m<r*o?s:l),u(c?Math.max(0,Math.min(1,m)):m))}d.domain=function(m){return arguments.length?([e,t,n]=m,a=f(e=+e),o=f(t=+t),i=f(n=+n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d):[e,t,n]},d.clamp=function(m){return arguments.length?(c=!!m,d):c},d.interpolator=function(m){return arguments.length?(u=m,d):u};function h(m){return function(g){var v,y,x;return arguments.length?([v,y,x]=g,u=Rq(m,[v,y,x]),d):[u(0),u(.5),u(1)]}}return d.range=h(_s),d.rangeRound=h(Sg),d.unknown=function(m){return arguments.length?(p=m,d):p},function(m){return f=m,a=m(e),o=m(t),i=m(n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d}}function aP(){var e=La(Sd()(It));return e.copy=function(){return Fa(e,aP())},qr.apply(e,arguments)}function oP(){var e=Ag(Sd()).domain([.1,1,10]);return e.copy=function(){return Fa(e,oP()).base(e.base())},qr.apply(e,arguments)}function iP(){var e=Cg(Sd());return e.copy=function(){return Fa(e,iP()).constant(e.constant())},qr.apply(e,arguments)}function zg(){var e=Eg(Sd());return e.copy=function(){return Fa(e,zg()).exponent(e.exponent())},qr.apply(e,arguments)}function OK(){return zg.apply(null,arguments).exponent(.5)}const eb=Object.freeze(Object.defineProperty({__proto__:null,scaleBand:Vl,scaleDiverging:aP,scaleDivergingLog:oP,scaleDivergingPow:zg,scaleDivergingSqrt:OK,scaleDivergingSymlog:iP,scaleIdentity:L7,scaleImplicit:Lv,scaleLinear:Uf,scaleLog:z7,scaleOrdinal:wg,scalePoint:dl,scalePow:Tg,scaleQuantile:G7,scaleQuantize:U7,scaleRadial:H7,scaleSequential:eP,scaleSequentialLog:tP,scaleSequentialPow:Fg,scaleSequentialQuantile:rP,scaleSequentialSqrt:SK,scaleSequentialSymlog:nP,scaleSqrt:aV,scaleSymlog:B7,scaleThreshold:W7,scaleTime:bK,scaleUtc:PK,tickFormat:D7},Symbol.toStringTag,{value:"Module"}));var kK=ys;function _K(e,t,n){for(var r=-1,a=e.length;++r<a;){var o=e[r],i=t(o);if(i!=null&&(s===void 0?i===i&&!kK(i):n(i,s)))var s=i,l=o}return l}var sP=_K;function AK(e,t){return e>t}var CK=AK,EK=sP,TK=CK,jK=ks;function $K(e){return e&&e.length?EK(e,jK,TK):void 0}var NK=$K;const da=Ce(NK);function MK(e,t){return e<t}var RK=MK,IK=sP,DK=RK,LK=ks;function FK(e){return e&&e.length?IK(e,LK,DK):void 0}var zK=FK;const Od=Ce(zK);var BK=eg,HK=Ia,GK=v7,UK=Vt;function WK(e,t){var n=UK(e)?BK:GK;return n(e,HK(t))}var qK=WK,VK=m7,KK=qK;function XK(e,t){return VK(KK(e,t),1)}var YK=XK;const QK=Ce(YK);var ZK=mg;function JK(e,t){return ZK(e,t)}var eX=JK;const ko=Ce(eX);var As=1e9,tX={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Hg,Be=!0,bn="[DecimalError] ",po=bn+"Invalid argument: ",Bg=bn+"Exponent out of range: ",Cs=Math.floor,Ka=Math.pow,nX=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Jt,ut=1e7,Le=7,lP=9007199254740991,Kf=Cs(lP/Le),Q={};Q.absoluteValue=Q.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};Q.comparedTo=Q.cmp=function(e){var t,n,r,a,o=this;if(e=new o.constructor(e),o.s!==e.s)return o.s||-e.s;if(o.e!==e.e)return o.e>e.e^o.s<0?1:-1;for(r=o.d.length,a=e.d.length,t=0,n=r<a?r:a;t<n;++t)if(o.d[t]!==e.d[t])return o.d[t]>e.d[t]^o.s<0?1:-1;return r===a?0:r>a^o.s<0?1:-1};Q.decimalPlaces=Q.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*Le;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n};Q.dividedBy=Q.div=function(e){return Nr(this,new this.constructor(e))};Q.dividedToIntegerBy=Q.idiv=function(e){var t=this,n=t.constructor;return Te(Nr(t,new n(e),0,1),n.precision)};Q.equals=Q.eq=function(e){return!this.cmp(e)};Q.exponent=function(){return tt(this)};Q.greaterThan=Q.gt=function(e){return this.cmp(e)>0};Q.greaterThanOrEqualTo=Q.gte=function(e){return this.cmp(e)>=0};Q.isInteger=Q.isint=function(){return this.e>this.d.length-2};Q.isNegative=Q.isneg=function(){return this.s<0};Q.isPositive=Q.ispos=function(){return this.s>0};Q.isZero=function(){return this.s===0};Q.lessThan=Q.lt=function(e){return this.cmp(e)<0};Q.lessThanOrEqualTo=Q.lte=function(e){return this.cmp(e)<1};Q.logarithm=Q.log=function(e){var t,n=this,r=n.constructor,a=r.precision,o=a+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(Jt))throw Error(bn+"NaN");if(n.s<1)throw Error(bn+(n.s?"NaN":"-Infinity"));return n.eq(Jt)?new r(0):(Be=!1,t=Nr(Zl(n,o),Zl(e,o),o),Be=!0,Te(t,a))};Q.minus=Q.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?fP(t,e):uP(t,(e.s=-e.s,e))};Q.modulo=Q.mod=function(e){var t,n=this,r=n.constructor,a=r.precision;if(e=new r(e),!e.s)throw Error(bn+"NaN");return n.s?(Be=!1,t=Nr(n,e,0,1).times(e),Be=!0,n.minus(t)):Te(new r(n),a)};Q.naturalExponential=Q.exp=function(){return cP(this)};Q.naturalLogarithm=Q.ln=function(){return Zl(this)};Q.negated=Q.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};Q.plus=Q.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?uP(t,e):fP(t,(e.s=-e.s,e))};Q.precision=Q.sd=function(e){var t,n,r,a=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(po+e);if(t=tt(a)+1,r=a.d.length-1,n=r*Le+1,r=a.d[r],r){for(;r%10==0;r/=10)n--;for(r=a.d[0];r>=10;r/=10)n++}return e&&t>n?t:n};Q.squareRoot=Q.sqrt=function(){var e,t,n,r,a,o,i,s=this,l=s.constructor;if(s.s<1){if(!s.s)return new l(0);throw Error(bn+"NaN")}for(e=tt(s),Be=!1,a=Math.sqrt(+s),a==0||a==1/0?(t=or(s.d),(t.length+e)%2==0&&(t+="0"),a=Math.sqrt(t),e=Cs((e+1)/2)-(e<0||e%2),a==1/0?t="5e"+e:(t=a.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),r=new l(t)):r=new l(a.toString()),n=l.precision,a=i=n+3;;)if(o=r,r=o.plus(Nr(s,o,i+2)).times(.5),or(o.d).slice(0,i)===(t=or(r.d)).slice(0,i)){if(t=t.slice(i-3,i+1),a==i&&t=="4999"){if(Te(o,n+1,0),o.times(o).eq(s)){r=o;break}}else if(t!="9999")break;i+=4}return Be=!0,Te(r,n)};Q.times=Q.mul=function(e){var t,n,r,a,o,i,s,l,u,f=this,c=f.constructor,p=f.d,d=(e=new c(e)).d;if(!f.s||!e.s)return new c(0);for(e.s*=f.s,n=f.e+e.e,l=p.length,u=d.length,l<u&&(o=p,p=d,d=o,i=l,l=u,u=i),o=[],i=l+u,r=i;r--;)o.push(0);for(r=u;--r>=0;){for(t=0,a=l+r;a>r;)s=o[a]+d[r]*p[a-r-1]+t,o[a--]=s%ut|0,t=s/ut|0;o[a]=(o[a]+t)%ut|0}for(;!o[--i];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,Be?Te(e,c.precision):e};Q.toDecimalPlaces=Q.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(vr(e,0,As),t===void 0?t=r.rounding:vr(t,0,8),Te(n,e+tt(n)+1,t))};Q.toExponential=function(e,t){var n,r=this,a=r.constructor;return e===void 0?n=_o(r,!0):(vr(e,0,As),t===void 0?t=a.rounding:vr(t,0,8),r=Te(new a(r),e+1,t),n=_o(r,!0,e+1)),n};Q.toFixed=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?_o(a):(vr(e,0,As),t===void 0?t=o.rounding:vr(t,0,8),r=Te(new o(a),e+tt(a)+1,t),n=_o(r.abs(),!1,e+tt(r)+1),a.isneg()&&!a.isZero()?"-"+n:n)};Q.toInteger=Q.toint=function(){var e=this,t=e.constructor;return Te(new t(e),tt(e)+1,t.rounding)};Q.toNumber=function(){return+this};Q.toPower=Q.pow=function(e){var t,n,r,a,o,i,s=this,l=s.constructor,u=12,f=+(e=new l(e));if(!e.s)return new l(Jt);if(s=new l(s),!s.s){if(e.s<1)throw Error(bn+"Infinity");return s}if(s.eq(Jt))return s;if(r=l.precision,e.eq(Jt))return Te(s,r);if(t=e.e,n=e.d.length-1,i=t>=n,o=s.s,i){if((n=f<0?-f:f)<=lP){for(a=new l(Jt),t=Math.ceil(r/Le+4),Be=!1;n%2&&(a=a.times(s),nb(a.d,t)),n=Cs(n/2),n!==0;)s=s.times(s),nb(s.d,t);return Be=!0,e.s<0?new l(Jt).div(a):Te(a,r)}}else if(o<0)throw Error(bn+"NaN");return o=o<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,Be=!1,a=e.times(Zl(s,r+u)),Be=!0,a=cP(a),a.s=o,a};Q.toPrecision=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?(n=tt(a),r=_o(a,n<=o.toExpNeg||n>=o.toExpPos)):(vr(e,1,As),t===void 0?t=o.rounding:vr(t,0,8),a=Te(new o(a),e,t),n=tt(a),r=_o(a,e<=n||n<=o.toExpNeg,e)),r};Q.toSignificantDigits=Q.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(vr(e,1,As),t===void 0?t=r.rounding:vr(t,0,8)),Te(new r(n),e,t)};Q.toString=Q.valueOf=Q.val=Q.toJSON=Q[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=tt(e),n=e.constructor;return _o(e,t<=n.toExpNeg||t>=n.toExpPos)};function uP(e,t){var n,r,a,o,i,s,l,u,f=e.constructor,c=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),Be?Te(t,c):t;if(l=e.d,u=t.d,i=e.e,a=t.e,l=l.slice(),o=i-a,o){for(o<0?(r=l,o=-o,s=u.length):(r=u,a=i,s=l.length),i=Math.ceil(c/Le),s=i>s?i+1:s+1,o>s&&(o=s,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(s=l.length,o=u.length,s-o<0&&(o=s,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/ut|0,l[o]%=ut;for(n&&(l.unshift(n),++a),s=l.length;l[--s]==0;)l.pop();return t.d=l,t.e=a,Be?Te(t,c):t}function vr(e,t,n){if(e!==~~e||e<t||e>n)throw Error(po+e)}function or(e){var t,n,r,a=e.length-1,o="",i=e[0];if(a>0){for(o+=i,t=1;t<a;t++)r=e[t]+"",n=Le-r.length,n&&(o+=na(n)),o+=r;i=e[t],r=i+"",n=Le-r.length,n&&(o+=na(n))}else if(i===0)return"0";for(;i%10===0;)i/=10;return o+i}var Nr=function(){function e(r,a){var o,i=0,s=r.length;for(r=r.slice();s--;)o=r[s]*a+i,r[s]=o%ut|0,i=o/ut|0;return i&&r.unshift(i),r}function t(r,a,o,i){var s,l;if(o!=i)l=o>i?1:-1;else for(s=l=0;s<o;s++)if(r[s]!=a[s]){l=r[s]>a[s]?1:-1;break}return l}function n(r,a,o){for(var i=0;o--;)r[o]-=i,i=r[o]<a[o]?1:0,r[o]=i*ut+r[o]-a[o];for(;!r[0]&&r.length>1;)r.shift()}return function(r,a,o,i){var s,l,u,f,c,p,d,h,m,g,v,y,x,P,w,S,O,_,A=r.constructor,j=r.s==a.s?1:-1,E=r.d,T=a.d;if(!r.s)return new A(r);if(!a.s)throw Error(bn+"Division by zero");for(l=r.e-a.e,O=T.length,w=E.length,d=new A(j),h=d.d=[],u=0;T[u]==(E[u]||0);)++u;if(T[u]>(E[u]||0)&&--l,o==null?y=o=A.precision:i?y=o+(tt(r)-tt(a))+1:y=o,y<0)return new A(0);if(y=y/Le+2|0,u=0,O==1)for(f=0,T=T[0],y++;(u<w||f)&&y--;u++)x=f*ut+(E[u]||0),h[u]=x/T|0,f=x%T|0;else{for(f=ut/(T[0]+1)|0,f>1&&(T=e(T,f),E=e(E,f),O=T.length,w=E.length),P=O,m=E.slice(0,O),g=m.length;g<O;)m[g++]=0;_=T.slice(),_.unshift(0),S=T[0],T[1]>=ut/2&&++S;do f=0,s=t(T,m,O,g),s<0?(v=m[0],O!=g&&(v=v*ut+(m[1]||0)),f=v/S|0,f>1?(f>=ut&&(f=ut-1),c=e(T,f),p=c.length,g=m.length,s=t(c,m,p,g),s==1&&(f--,n(c,O<p?_:T,p))):(f==0&&(s=f=1),c=T.slice()),p=c.length,p<g&&c.unshift(0),n(m,c,g),s==-1&&(g=m.length,s=t(T,m,O,g),s<1&&(f++,n(m,O<g?_:T,g))),g=m.length):s===0&&(f++,m=[0]),h[u++]=f,s&&m[0]?m[g++]=E[P]||0:(m=[E[P]],g=1);while((P++<w||m[0]!==void 0)&&y--)}return h[0]||h.shift(),d.e=l,Te(d,i?o+tt(d)+1:o)}}();function cP(e,t){var n,r,a,o,i,s,l=0,u=0,f=e.constructor,c=f.precision;if(tt(e)>16)throw Error(Bg+tt(e));if(!e.s)return new f(Jt);for(Be=!1,s=c,i=new f(.03125);e.abs().gte(.1);)e=e.times(i),u+=5;for(r=Math.log(Ka(2,u))/Math.LN10*2+5|0,s+=r,n=a=o=new f(Jt),f.precision=s;;){if(a=Te(a.times(e),s),n=n.times(++l),i=o.plus(Nr(a,n,s)),or(i.d).slice(0,s)===or(o.d).slice(0,s)){for(;u--;)o=Te(o.times(o),s);return f.precision=c,t==null?(Be=!0,Te(o,c)):o}o=i}}function tt(e){for(var t=e.e*Le,n=e.d[0];n>=10;n/=10)t++;return t}function Km(e,t,n){if(t>e.LN10.sd())throw Be=!0,n&&(e.precision=n),Error(bn+"LN10 precision limit exceeded");return Te(new e(e.LN10),t)}function na(e){for(var t="";e--;)t+="0";return t}function Zl(e,t){var n,r,a,o,i,s,l,u,f,c=1,p=10,d=e,h=d.d,m=d.constructor,g=m.precision;if(d.s<1)throw Error(bn+(d.s?"NaN":"-Infinity"));if(d.eq(Jt))return new m(0);if(t==null?(Be=!1,u=g):u=t,d.eq(10))return t==null&&(Be=!0),Km(m,u);if(u+=p,m.precision=u,n=or(h),r=n.charAt(0),o=tt(d),Math.abs(o)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)d=d.times(e),n=or(d.d),r=n.charAt(0),c++;o=tt(d),r>1?(d=new m("0."+n),o++):d=new m(r+"."+n.slice(1))}else return l=Km(m,u+2,g).times(o+""),d=Zl(new m(r+"."+n.slice(1)),u-p).plus(l),m.precision=g,t==null?(Be=!0,Te(d,g)):d;for(s=i=d=Nr(d.minus(Jt),d.plus(Jt),u),f=Te(d.times(d),u),a=3;;){if(i=Te(i.times(f),u),l=s.plus(Nr(i,new m(a),u)),or(l.d).slice(0,u)===or(s.d).slice(0,u))return s=s.times(2),o!==0&&(s=s.plus(Km(m,u+2,g).times(o+""))),s=Nr(s,new m(c),u),m.precision=g,t==null?(Be=!0,Te(s,g)):s;s=l,a+=2}}function tb(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=Cs(n/Le),e.d=[],r=(n+1)%Le,n<0&&(r+=Le),r<a){for(r&&e.d.push(+t.slice(0,r)),a-=Le;r<a;)e.d.push(+t.slice(r,r+=Le));t=t.slice(r),r=Le-t.length}else r-=a;for(;r--;)t+="0";if(e.d.push(+t),Be&&(e.e>Kf||e.e<-Kf))throw Error(Bg+n)}else e.s=0,e.e=0,e.d=[0];return e}function Te(e,t,n){var r,a,o,i,s,l,u,f,c=e.d;for(i=1,o=c[0];o>=10;o/=10)i++;if(r=t-i,r<0)r+=Le,a=t,u=c[f=0];else{if(f=Math.ceil((r+1)/Le),o=c.length,f>=o)return e;for(u=o=c[f],i=1;o>=10;o/=10)i++;r%=Le,a=r-Le+i}if(n!==void 0&&(o=Ka(10,i-a-1),s=u/o%10|0,l=t<0||c[f+1]!==void 0||u%o,l=n<4?(s||l)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||l||n==6&&(r>0?a>0?u/Ka(10,i-a):0:c[f-1])%10&1||n==(e.s<0?8:7))),t<1||!c[0])return l?(o=tt(e),c.length=1,t=t-o-1,c[0]=Ka(10,(Le-t%Le)%Le),e.e=Cs(-t/Le)||0):(c.length=1,c[0]=e.e=e.s=0),e;if(r==0?(c.length=f,o=1,f--):(c.length=f+1,o=Ka(10,Le-r),c[f]=a>0?(u/Ka(10,i-a)%Ka(10,a)|0)*o:0),l)for(;;)if(f==0){(c[0]+=o)==ut&&(c[0]=1,++e.e);break}else{if(c[f]+=o,c[f]!=ut)break;c[f--]=0,o=1}for(r=c.length;c[--r]===0;)c.pop();if(Be&&(e.e>Kf||e.e<-Kf))throw Error(Bg+tt(e));return e}function fP(e,t){var n,r,a,o,i,s,l,u,f,c,p=e.constructor,d=p.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new p(e),Be?Te(t,d):t;if(l=e.d,c=t.d,r=t.e,u=e.e,l=l.slice(),i=u-r,i){for(f=i<0,f?(n=l,i=-i,s=c.length):(n=c,r=u,s=l.length),a=Math.max(Math.ceil(d/Le),s)+2,i>a&&(i=a,n.length=1),n.reverse(),a=i;a--;)n.push(0);n.reverse()}else{for(a=l.length,s=c.length,f=a<s,f&&(s=a),a=0;a<s;a++)if(l[a]!=c[a]){f=l[a]<c[a];break}i=0}for(f&&(n=l,l=c,c=n,t.s=-t.s),s=l.length,a=c.length-s;a>0;--a)l[s++]=0;for(a=c.length;a>i;){if(l[--a]<c[a]){for(o=a;o&&l[--o]===0;)l[o]=ut-1;--l[o],l[a]+=ut}l[a]-=c[a]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--r;return l[0]?(t.d=l,t.e=r,Be?Te(t,d):t):new p(0)}function _o(e,t,n){var r,a=tt(e),o=or(e.d),i=o.length;return t?(n&&(r=n-i)>0?o=o.charAt(0)+"."+o.slice(1)+na(r):i>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(a<0?"e":"e+")+a):a<0?(o="0."+na(-a-1)+o,n&&(r=n-i)>0&&(o+=na(r))):a>=i?(o+=na(a+1-i),n&&(r=n-a-1)>0&&(o=o+"."+na(r))):((r=a+1)<i&&(o=o.slice(0,r)+"."+o.slice(r)),n&&(r=n-i)>0&&(a+1===i&&(o+="."),o+=na(r))),e.s<0?"-"+o:o}function nb(e,t){if(e.length>t)return e.length=t,!0}function pP(e){var t,n,r;function a(o){var i=this;if(!(i instanceof a))return new a(o);if(i.constructor=a,o instanceof a){i.s=o.s,i.e=o.e,i.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(po+o);if(o>0)i.s=1;else if(o<0)o=-o,i.s=-1;else{i.s=0,i.e=0,i.d=[0];return}if(o===~~o&&o<1e7){i.e=0,i.d=[o];return}return tb(i,o.toString())}else if(typeof o!="string")throw Error(po+o);if(o.charCodeAt(0)===45?(o=o.slice(1),i.s=-1):i.s=1,nX.test(o))tb(i,o);else throw Error(po+o)}if(a.prototype=Q,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=pP,a.config=a.set=rX,e===void 0&&(e={}),e)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<r.length;)e.hasOwnProperty(n=r[t++])||(e[n]=this[n]);return a.config(e),a}function rX(e){if(!e||typeof e!="object")throw Error(bn+"Object expected");var t,n,r,a=["precision",1,As,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<a.length;t+=3)if((r=e[n=a[t]])!==void 0)if(Cs(r)===r&&r>=a[t+1]&&r<=a[t+2])this[n]=r;else throw Error(po+n+": "+r);if((r=e[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(po+n+": "+r);return this}var Hg=pP(tX);Jt=new Hg(1);const Ae=Hg;function aX(e){return lX(e)||sX(e)||iX(e)||oX()}function oX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iX(e,t){if(e){if(typeof e=="string")return Hv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Hv(e,t)}}function sX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function lX(e){if(Array.isArray(e))return Hv(e)}function Hv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var uX=function(t){return t},dP={},mP=function(t){return t===dP},rb=function(t){return function n(){return arguments.length===0||arguments.length===1&&mP(arguments.length<=0?void 0:arguments[0])?n:t.apply(void 0,arguments)}},cX=function e(t,n){return t===1?n:rb(function(){for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];var i=a.filter(function(s){return s!==dP}).length;return i>=t?n.apply(void 0,a):e(t-i,rb(function(){for(var s=arguments.length,l=new Array(s),u=0;u<s;u++)l[u]=arguments[u];var f=a.map(function(c){return mP(c)?l.shift():c});return n.apply(void 0,aX(f).concat(l))}))})},kd=function(t){return cX(t.length,t)},Gv=function(t,n){for(var r=[],a=t;a<n;++a)r[a-t]=a;return r},fX=kd(function(e,t){return Array.isArray(t)?t.map(e):Object.keys(t).map(function(n){return t[n]}).map(e)}),pX=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return uX;var a=n.reverse(),o=a[0],i=a.slice(1);return function(){return i.reduce(function(s,l){return l(s)},o.apply(void 0,arguments))}},Uv=function(t){return Array.isArray(t)?t.reverse():t.split("").reverse.join("")},hP=function(t){var n=null,r=null;return function(){for(var a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return n&&o.every(function(s,l){return s===n[l]})||(n=o,r=t.apply(void 0,o)),r}};function dX(e){var t;return e===0?t=1:t=Math.floor(new Ae(e).abs().log(10).toNumber())+1,t}function mX(e,t,n){for(var r=new Ae(e),a=0,o=[];r.lt(t)&&a<1e5;)o.push(r.toNumber()),r=r.add(n),a++;return o}var hX=kd(function(e,t,n){var r=+e,a=+t;return r+n*(a-r)}),vX=kd(function(e,t,n){var r=t-+e;return r=r||1/0,(n-e)/r}),yX=kd(function(e,t,n){var r=t-+e;return r=r||1/0,Math.max(0,Math.min(1,(n-e)/r))});const _d={rangeStep:mX,getDigitCount:dX,interpolateNumber:hX,uninterpolateNumber:vX,uninterpolateTruncation:yX};function Wv(e){return wX(e)||xX(e)||vP(e)||gX()}function gX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function wX(e){if(Array.isArray(e))return qv(e)}function Jl(e,t){return SX(e)||PX(e,t)||vP(e,t)||bX()}function bX(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function vP(e,t){if(e){if(typeof e=="string")return qv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qv(e,t)}}function qv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function PX(e,t){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(e)))){var n=[],r=!0,a=!1,o=void 0;try{for(var i=e[Symbol.iterator](),s;!(r=(s=i.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(l){a=!0,o=l}finally{try{!r&&i.return!=null&&i.return()}finally{if(a)throw o}}return n}}function SX(e){if(Array.isArray(e))return e}function yP(e){var t=Jl(e,2),n=t[0],r=t[1],a=n,o=r;return n>r&&(a=r,o=n),[a,o]}function gP(e,t,n){if(e.lte(0))return new Ae(0);var r=_d.getDigitCount(e.toNumber()),a=new Ae(10).pow(r),o=e.div(a),i=r!==1?.05:.1,s=new Ae(Math.ceil(o.div(i).toNumber())).add(n).mul(i),l=s.mul(a);return t?l:new Ae(Math.ceil(l))}function OX(e,t,n){var r=1,a=new Ae(e);if(!a.isint()&&n){var o=Math.abs(e);o<1?(r=new Ae(10).pow(_d.getDigitCount(e)-1),a=new Ae(Math.floor(a.div(r).toNumber())).mul(r)):o>1&&(a=new Ae(Math.floor(e)))}else e===0?a=new Ae(Math.floor((t-1)/2)):n||(a=new Ae(Math.floor(e)));var i=Math.floor((t-1)/2),s=pX(fX(function(l){return a.add(new Ae(l-i).mul(r)).toNumber()}),Gv);return s(0,t)}function xP(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new Ae(0),tickMin:new Ae(0),tickMax:new Ae(0)};var o=gP(new Ae(t).sub(e).div(n-1),r,a),i;e<=0&&t>=0?i=new Ae(0):(i=new Ae(e).add(t).div(2),i=i.sub(new Ae(i).mod(o)));var s=Math.ceil(i.sub(e).div(o).toNumber()),l=Math.ceil(new Ae(t).sub(i).div(o).toNumber()),u=s+l+1;return u>n?xP(e,t,n,r,a+1):(u<n&&(l=t>0?l+(n-u):l,s=t>0?s:s+(n-u)),{step:o,tickMin:i.sub(new Ae(s).mul(o)),tickMax:i.add(new Ae(l).mul(o))})}function kX(e){var t=Jl(e,2),n=t[0],r=t[1],a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=Math.max(a,2),s=yP([n,r]),l=Jl(s,2),u=l[0],f=l[1];if(u===-1/0||f===1/0){var c=f===1/0?[u].concat(Wv(Gv(0,a-1).map(function(){return 1/0}))):[].concat(Wv(Gv(0,a-1).map(function(){return-1/0})),[f]);return n>r?Uv(c):c}if(u===f)return OX(u,a,o);var p=xP(u,f,i,o),d=p.step,h=p.tickMin,m=p.tickMax,g=_d.rangeStep(h,m.add(new Ae(.1).mul(d)),d);return n>r?Uv(g):g}function _X(e,t){var n=Jl(e,2),r=n[0],a=n[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=yP([r,a]),s=Jl(i,2),l=s[0],u=s[1];if(l===-1/0||u===1/0)return[r,a];if(l===u)return[l];var f=Math.max(t,2),c=gP(new Ae(u).sub(l).div(f-1),o,0),p=[].concat(Wv(_d.rangeStep(new Ae(l),new Ae(u).sub(new Ae(.99).mul(c)),c)),[u]);return r>a?Uv(p):p}var AX=hP(kX),CX=hP(_X),EX="Invariant failed";function Ao(e,t){throw new Error(EX)}var TX=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function Gi(e){"@babel/helpers - typeof";return Gi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gi(e)}function Xf(){return Xf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Xf.apply(this,arguments)}function jX(e,t){return RX(e)||MX(e,t)||NX(e,t)||$X()}function $X(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function NX(e,t){if(e){if(typeof e=="string")return ab(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ab(e,t)}}function ab(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function MX(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function RX(e){if(Array.isArray(e))return e}function IX(e,t){if(e==null)return{};var n=DX(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DX(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function LX(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function FX(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,PP(r.key),r)}}function zX(e,t,n){return t&&FX(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function BX(e,t,n){return t=Yf(t),HX(e,wP()?Reflect.construct(t,n||[],Yf(e).constructor):t.apply(e,n))}function HX(e,t){if(t&&(Gi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return GX(e)}function GX(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function wP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(wP=function(){return!!e})()}function Yf(e){return Yf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Yf(e)}function UX(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Vv(e,t)}function Vv(e,t){return Vv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Vv(e,t)}function bP(e,t,n){return t=PP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function PP(e){var t=WX(e,"string");return Gi(t)=="symbol"?t:t+""}function WX(e,t){if(Gi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Gi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Es=function(e){function t(){return LX(this,t),BX(this,t,arguments)}return UX(t,e),zX(t,[{key:"render",value:function(){var r=this.props,a=r.offset,o=r.layout,i=r.width,s=r.dataKey,l=r.data,u=r.dataPointFormatter,f=r.xAxis,c=r.yAxis,p=IX(r,TX),d=re(p,!1);this.props.direction==="x"&&f.type!=="number"&&Ao();var h=l.map(function(m){var g=u(m,s),v=g.x,y=g.y,x=g.value,P=g.errorVal;if(!P)return null;var w=[],S,O;if(Array.isArray(P)){var _=jX(P,2);S=_[0],O=_[1]}else S=O=P;if(o==="vertical"){var A=f.scale,j=y+a,E=j+i,T=j-i,N=A(x-S),M=A(x+O);w.push({x1:M,y1:E,x2:M,y2:T}),w.push({x1:N,y1:j,x2:M,y2:j}),w.push({x1:N,y1:E,x2:N,y2:T})}else if(o==="horizontal"){var I=c.scale,R=v+a,L=R-i,$=R+i,D=I(x-S),H=I(x+O);w.push({x1:L,y1:H,x2:$,y2:H}),w.push({x1:R,y1:D,x2:R,y2:H}),w.push({x1:L,y1:D,x2:$,y2:D})}return C.createElement(ye,Xf({className:"recharts-errorBar",key:"bar-".concat(w.map(function(W){return"".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))},d),w.map(function(W){return C.createElement("line",Xf({},W,{key:"line-".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))}))});return C.createElement(ye,{className:"recharts-errorBars"},h)}}])}(C.Component);bP(Es,"defaultProps",{stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"});bP(Es,"displayName","ErrorBar");function eu(e){"@babel/helpers - typeof";return eu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},eu(e)}function ob(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ga(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?ob(Object(n),!0).forEach(function(r){qX(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ob(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function qX(e,t,n){return t=VX(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function VX(e){var t=KX(e,"string");return eu(t)=="symbol"?t:t+""}function KX(e,t){if(eu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(eu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var SP=function(t){var n=t.children,r=t.formattedGraphicalItems,a=t.legendWidth,o=t.legendContent,i=Qt(n,hi);if(!i)return null;var s=hi.defaultProps,l=s!==void 0?Ga(Ga({},s),i.props):{},u;return i.props&&i.props.payload?u=i.props&&i.props.payload:o==="children"?u=(r||[]).reduce(function(f,c){var p=c.item,d=c.props,h=d.sectors||d.data||[];return f.concat(h.map(function(m){return{type:i.props.iconType||p.props.legendType,value:m.name,color:m.fill,payload:m}}))},[]):u=(r||[]).map(function(f){var c=f.item,p=c.type.defaultProps,d=p!==void 0?Ga(Ga({},p),c.props):{},h=d.dataKey,m=d.name,g=d.legendType,v=d.hide;return{inactive:v,dataKey:h,type:l.iconType||g||"square",color:Gg(c),value:m||h,payload:d}}),Ga(Ga(Ga({},l),hi.getWithHeight(i,a)),{},{payload:u,item:i})};function tu(e){"@babel/helpers - typeof";return tu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tu(e)}function ib(e){return ZX(e)||QX(e)||YX(e)||XX()}function XX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function YX(e,t){if(e){if(typeof e=="string")return Kv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kv(e,t)}}function QX(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function ZX(e){if(Array.isArray(e))return Kv(e)}function Kv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function sb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?sb(Object(n),!0).forEach(function(r){yi(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):sb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function yi(e,t,n){return t=JX(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function JX(e){var t=eY(e,"string");return tu(t)=="symbol"?t:t+""}function eY(e,t){if(tu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(tu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function st(e,t,n){return te(e)||te(t)?n:it(t)?gn(e,t,n):oe(t)?t(e):n}function ml(e,t,n,r){var a=QK(e,function(s){return st(s,t)});if(n==="number"){var o=a.filter(function(s){return V(s)||parseFloat(s)});return o.length?[Od(o),da(o)]:[1/0,-1/0]}var i=r?a.filter(function(s){return!te(s)}):a;return i.map(function(s){return it(s)||s instanceof Date?s:""})}var tY=function(t){var n,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,s=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(s<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var l=o.range,u=0;u<s;u++){var f=u>0?a[u-1].coordinate:a[s-1].coordinate,c=a[u].coordinate,p=u>=s-1?a[0].coordinate:a[u+1].coordinate,d=void 0;if(Dn(c-f)!==Dn(p-c)){var h=[];if(Dn(p-c)===Dn(l[1]-l[0])){d=p;var m=c+l[1]-l[0];h[0]=Math.min(m,(m+f)/2),h[1]=Math.max(m,(m+f)/2)}else{d=f;var g=p+l[1]-l[0];h[0]=Math.min(c,(g+c)/2),h[1]=Math.max(c,(g+c)/2)}var v=[Math.min(c,(d+c)/2),Math.max(c,(d+c)/2)];if(t>v[0]&&t<=v[1]||t>=h[0]&&t<=h[1]){i=a[u].index;break}}else{var y=Math.min(f,p),x=Math.max(f,p);if(t>(y+c)/2&&t<=(x+c)/2){i=a[u].index;break}}}else for(var P=0;P<s;P++)if(P===0&&t<=(r[P].coordinate+r[P+1].coordinate)/2||P>0&&P<s-1&&t>(r[P].coordinate+r[P-1].coordinate)/2&&t<=(r[P].coordinate+r[P+1].coordinate)/2||P===s-1&&t>(r[P].coordinate+r[P-1].coordinate)/2){i=r[P].index;break}return i},Gg=function(t){var n,r=t,a=r.type.displayName,o=(n=t.type)!==null&&n!==void 0&&n.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,i=o.stroke,s=o.fill,l;switch(a){case"Line":l=i;break;case"Area":case"Radar":l=i&&i!=="none"?i:s;break;default:l=s;break}return l},nY=function(t){var n=t.barSize,r=t.totalSize,a=t.stackGroups,o=a===void 0?{}:a;if(!o)return{};for(var i={},s=Object.keys(o),l=0,u=s.length;l<u;l++)for(var f=o[s[l]].stackGroups,c=Object.keys(f),p=0,d=c.length;p<d;p++){var h=f[c[p]],m=h.items,g=h.cateAxisId,v=m.filter(function(O){return jr(O.type).indexOf("Bar")>=0});if(v&&v.length){var y=v[0].type.defaultProps,x=y!==void 0?Ve(Ve({},y),v[0].props):v[0].props,P=x.barSize,w=x[g];i[w]||(i[w]=[]);var S=te(P)?n:P;i[w].push({item:v[0],stackList:v.slice(1),barSize:te(S)?void 0:Oo(S,r,0)})}}return i},rY=function(t){var n=t.barGap,r=t.barCategoryGap,a=t.bandSize,o=t.sizeList,i=o===void 0?[]:o,s=t.maxBarSize,l=i.length;if(l<1)return null;var u=Oo(n,a,0,!0),f,c=[];if(i[0].barSize===+i[0].barSize){var p=!1,d=a/l,h=i.reduce(function(P,w){return P+w.barSize||0},0);h+=(l-1)*u,h>=a&&(h-=(l-1)*u,u=0),h>=a&&d>0&&(p=!0,d*=.9,h=l*d);var m=(a-h)/2>>0,g={offset:m-u,size:0};f=i.reduce(function(P,w){var S={item:w.item,position:{offset:g.offset+g.size+u,size:p?d:w.barSize}},O=[].concat(ib(P),[S]);return g=O[O.length-1].position,w.stackList&&w.stackList.length&&w.stackList.forEach(function(_){O.push({item:_,position:g})}),O},c)}else{var v=Oo(r,a,0,!0);a-2*v-(l-1)*u<=0&&(u=0);var y=(a-2*v-(l-1)*u)/l;y>1&&(y>>=0);var x=s===+s?Math.min(y,s):y;f=i.reduce(function(P,w,S){var O=[].concat(ib(P),[{item:w.item,position:{offset:v+(y+u)*S+(y-x)/2,size:x}}]);return w.stackList&&w.stackList.length&&w.stackList.forEach(function(_){O.push({item:_,position:O[O.length-1].position})}),O},c)}return f},aY=function(t,n,r,a){var o=r.children,i=r.width,s=r.margin,l=i-(s.left||0)-(s.right||0),u=SP({children:o,legendWidth:l});if(u){var f=a||{},c=f.width,p=f.height,d=u.align,h=u.verticalAlign,m=u.layout;if((m==="vertical"||m==="horizontal"&&h==="middle")&&d!=="center"&&V(t[d]))return Ve(Ve({},t),{},yi({},d,t[d]+(c||0)));if((m==="horizontal"||m==="vertical"&&d==="center")&&h!=="middle"&&V(t[h]))return Ve(Ve({},t),{},yi({},h,t[h]+(p||0)))}return t},oY=function(t,n,r){return te(n)?!0:t==="horizontal"?n==="yAxis":t==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},OP=function(t,n,r,a,o){var i=n.props.children,s=qt(i,Es).filter(function(u){return oY(a,o,u.props.direction)});if(s&&s.length){var l=s.map(function(u){return u.props.dataKey});return t.reduce(function(u,f){var c=st(f,r);if(te(c))return u;var p=Array.isArray(c)?[Od(c),da(c)]:[c,c],d=l.reduce(function(h,m){var g=st(f,m,0),v=p[0]-Math.abs(Array.isArray(g)?g[0]:g),y=p[1]+Math.abs(Array.isArray(g)?g[1]:g);return[Math.min(v,h[0]),Math.max(y,h[1])]},[1/0,-1/0]);return[Math.min(d[0],u[0]),Math.max(d[1],u[1])]},[1/0,-1/0])}return null},iY=function(t,n,r,a,o){var i=n.map(function(s){return OP(t,s,r,o,a)}).filter(function(s){return!te(s)});return i&&i.length?i.reduce(function(s,l){return[Math.min(s[0],l[0]),Math.max(s[1],l[1])]},[1/0,-1/0]):null},kP=function(t,n,r,a,o){var i=n.map(function(l){var u=l.props.dataKey;return r==="number"&&u&&OP(t,l,u,a)||ml(t,u,r,o)});if(r==="number")return i.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]);var s={};return i.reduce(function(l,u){for(var f=0,c=u.length;f<c;f++)s[u[f]]||(s[u[f]]=!0,l.push(u[f]));return l},[])},_P=function(t,n){return t==="horizontal"&&n==="xAxis"||t==="vertical"&&n==="yAxis"||t==="centric"&&n==="angleAxis"||t==="radial"&&n==="radiusAxis"},AP=function(t,n,r,a){if(a)return t.map(function(l){return l.coordinate});var o,i,s=t.map(function(l){return l.coordinate===n&&(o=!0),l.coordinate===r&&(i=!0),l.coordinate});return o||s.push(n),i||s.push(r),s},Er=function(t,n,r){if(!t)return null;var a=t.scale,o=t.duplicateDomain,i=t.type,s=t.range,l=t.realScaleType==="scaleBand"?a.bandwidth()/2:2,u=(n||r)&&i==="category"&&a.bandwidth?a.bandwidth()/l:0;if(u=t.axisType==="angleAxis"&&(s==null?void 0:s.length)>=2?Dn(s[0]-s[1])*2*u:u,n&&(t.ticks||t.niceTicks)){var f=(t.ticks||t.niceTicks).map(function(c){var p=o?o.indexOf(c):c;return{coordinate:a(p)+u,value:c,offset:u}});return f.filter(function(c){return!Ps(c.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(c,p){return{coordinate:a(c)+u,value:c,index:p,offset:u}}):a.ticks&&!r?a.ticks(t.tickCount).map(function(c){return{coordinate:a(c)+u,value:c,offset:u}}):a.domain().map(function(c,p){return{coordinate:a(c)+u,value:o?o[c]:c,index:p,offset:u}})},Xm=new WeakMap,gc=function(t,n){if(typeof n!="function")return t;Xm.has(t)||Xm.set(t,new WeakMap);var r=Xm.get(t);if(r.has(n))return r.get(n);var a=function(){t.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,a),a},sY=function(t,n,r){var a=t.scale,o=t.type,i=t.layout,s=t.axisType;if(a==="auto")return i==="radial"&&s==="radiusAxis"?{scale:Vl(),realScaleType:"band"}:i==="radial"&&s==="angleAxis"?{scale:Uf(),realScaleType:"linear"}:o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:dl(),realScaleType:"point"}:o==="category"?{scale:Vl(),realScaleType:"band"}:{scale:Uf(),realScaleType:"linear"};if(So(a)){var l="scale".concat(cd(a));return{scale:(eb[l]||dl)(),realScaleType:eb[l]?l:"point"}}return oe(a)?{scale:a}:{scale:dl(),realScaleType:"point"}},lb=1e-4,lY=function(t){var n=t.domain();if(!(!n||n.length<=2)){var r=n.length,a=t.range(),o=Math.min(a[0],a[1])-lb,i=Math.max(a[0],a[1])+lb,s=t(n[0]),l=t(n[r-1]);(s<o||s>i||l<o||l>i)&&t.domain([n[0],n[r-1]])}},uY=function(t,n){if(!t)return null;for(var r=0,a=t.length;r<a;r++)if(t[r].item===n)return t[r].position;return null},cY=function(t,n){if(!n||n.length!==2||!V(n[0])||!V(n[1]))return t;var r=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]),o=[t[0],t[1]];return(!V(t[0])||t[0]<r)&&(o[0]=r),(!V(t[1])||t[1]>a)&&(o[1]=a),o[0]>a&&(o[0]=a),o[1]<r&&(o[1]=r),o},fY=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0,s=0;s<n;++s){var l=Ps(t[s][r][1])?t[s][r][0]:t[s][r][1];l>=0?(t[s][r][0]=o,t[s][r][1]=o+l,o=t[s][r][1]):(t[s][r][0]=i,t[s][r][1]=i+l,i=t[s][r][1])}},pY=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0;i<n;++i){var s=Ps(t[i][r][1])?t[i][r][0]:t[i][r][1];s>=0?(t[i][r][0]=o,t[i][r][1]=o+s,o=t[i][r][1]):(t[i][r][0]=0,t[i][r][1]=0)}},dY={sign:fY,expand:AI,none:Ri,silhouette:CI,wiggle:EI,positive:pY},mY=function(t,n,r){var a=n.map(function(s){return s.props.dataKey}),o=dY[r],i=_I().keys(a).value(function(s,l){return+st(s,l,0)}).order(xv).offset(o);return i(t)},hY=function(t,n,r,a,o,i){if(!t)return null;var s=i?n.reverse():n,l={},u=s.reduce(function(c,p){var d,h=(d=p.type)!==null&&d!==void 0&&d.defaultProps?Ve(Ve({},p.type.defaultProps),p.props):p.props,m=h.stackId,g=h.hide;if(g)return c;var v=h[r],y=c[v]||{hasStack:!1,stackGroups:{}};if(it(m)){var x=y.stackGroups[m]||{numericAxisId:r,cateAxisId:a,items:[]};x.items.push(p),y.hasStack=!0,y.stackGroups[m]=x}else y.stackGroups[$o("_stackId_")]={numericAxisId:r,cateAxisId:a,items:[p]};return Ve(Ve({},c),{},yi({},v,y))},l),f={};return Object.keys(u).reduce(function(c,p){var d=u[p];if(d.hasStack){var h={};d.stackGroups=Object.keys(d.stackGroups).reduce(function(m,g){var v=d.stackGroups[g];return Ve(Ve({},m),{},yi({},g,{numericAxisId:r,cateAxisId:a,items:v.items,stackedData:mY(t,v.items,o)}))},h)}return Ve(Ve({},c),{},yi({},p,d))},f)},vY=function(t,n){var r=n.realScaleType,a=n.type,o=n.tickCount,i=n.originalDomain,s=n.allowDecimals,l=r||n.scale;if(l!=="auto"&&l!=="linear")return null;if(o&&a==="number"&&i&&(i[0]==="auto"||i[1]==="auto")){var u=t.domain();if(!u.length)return null;var f=AX(u,o,s);return t.domain([Od(f),da(f)]),{niceTicks:f}}if(o&&a==="number"){var c=t.domain(),p=CX(c,o,s);return{niceTicks:p}}return null};function Ui(e){var t=e.axis,n=e.ticks,r=e.bandSize,a=e.entry,o=e.index,i=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!te(a[t.dataKey])){var s=Pf(n,"value",a[t.dataKey]);if(s)return s.coordinate+r/2}return n[o]?n[o].coordinate+r/2:null}var l=st(a,te(i)?t.dataKey:i);return te(l)?null:t.scale(l)}var ub=function(t){var n=t.axis,r=t.ticks,a=t.offset,o=t.bandSize,i=t.entry,s=t.index;if(n.type==="category")return r[s]?r[s].coordinate+a:null;var l=st(i,n.dataKey,n.domain[s]);return te(l)?null:n.scale(l)-o/2+a},yY=function(t){var n=t.numericAxis,r=n.scale.domain();if(n.type==="number"){var a=Math.min(r[0],r[1]),o=Math.max(r[0],r[1]);return a<=0&&o>=0?0:o<0?o:a}return r[0]},gY=function(t,n){var r,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,o=a.stackId;if(it(o)){var i=n[o];if(i){var s=i.items.indexOf(t);return s>=0?i.stackedData[s]:null}}return null},xY=function(t){return t.reduce(function(n,r){return[Od(r.concat([n[0]]).filter(V)),da(r.concat([n[1]]).filter(V))]},[1/0,-1/0])},CP=function(t,n,r){return Object.keys(t).reduce(function(a,o){var i=t[o],s=i.stackedData,l=s.reduce(function(u,f){var c=xY(f.slice(n,r+1));return[Math.min(u[0],c[0]),Math.max(u[1],c[1])]},[1/0,-1/0]);return[Math.min(l[0],a[0]),Math.max(l[1],a[1])]},[1/0,-1/0]).map(function(a){return a===1/0||a===-1/0?0:a})},cb=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,fb=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Xv=function(t,n,r){if(oe(t))return t(n,r);if(!Array.isArray(t))return n;var a=[];if(V(t[0]))a[0]=r?t[0]:Math.min(t[0],n[0]);else if(cb.test(t[0])){var o=+cb.exec(t[0])[1];a[0]=n[0]-o}else oe(t[0])?a[0]=t[0](n[0]):a[0]=n[0];if(V(t[1]))a[1]=r?t[1]:Math.max(t[1],n[1]);else if(fb.test(t[1])){var i=+fb.exec(t[1])[1];a[1]=n[1]+i}else oe(t[1])?a[1]=t[1](n[1]):a[1]=n[1];return a},Qf=function(t,n,r){if(t&&t.scale&&t.scale.bandwidth){var a=t.scale.bandwidth();if(!r||a>0)return a}if(t&&n&&n.length>=2){for(var o=vg(n,function(c){return c.coordinate}),i=1/0,s=1,l=o.length;s<l;s++){var u=o[s],f=o[s-1];i=Math.min((u.coordinate||0)-(f.coordinate||0),i)}return i===1/0?0:i}return r?void 0:0},pb=function(t,n,r){return!t||!t.length||ko(t,gn(r,"type.defaultProps.domain"))?n:t},EP=function(t,n){var r=t.type.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,a=r.dataKey,o=r.name,i=r.unit,s=r.formatter,l=r.tooltipType,u=r.chartType,f=r.hide;return Ve(Ve({},re(t,!1)),{},{dataKey:a,unit:i,formatter:s,name:o||a,color:Gg(t),value:st(n,a),type:l,payload:n,chartType:u,hide:f})};function nu(e){"@babel/helpers - typeof";return nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nu(e)}function db(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?db(Object(n),!0).forEach(function(r){wY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):db(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function wY(e,t,n){return t=bY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function bY(e){var t=PY(e,"string");return nu(t)=="symbol"?t:t+""}function PY(e,t){if(nu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(nu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Zf=Math.PI/180,SY=function(t){return t*180/Math.PI},vt=function(t,n,r,a){return{x:t+Math.cos(-Zf*a)*r,y:n+Math.sin(-Zf*a)*r}},OY=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return Math.sqrt(Math.pow(r-o,2)+Math.pow(a-i,2))},kY=function(t,n){var r=t.x,a=t.y,o=n.cx,i=n.cy,s=OY({x:r,y:a},{x:o,y:i});if(s<=0)return{radius:s};var l=(r-o)/s,u=Math.acos(l);return a>i&&(u=2*Math.PI-u),{radius:s,angle:SY(u),angleInRadian:u}},_Y=function(t){var n=t.startAngle,r=t.endAngle,a=Math.floor(n/360),o=Math.floor(r/360),i=Math.min(a,o);return{startAngle:n-i*360,endAngle:r-i*360}},AY=function(t,n){var r=n.startAngle,a=n.endAngle,o=Math.floor(r/360),i=Math.floor(a/360),s=Math.min(o,i);return t+s*360},hb=function(t,n){var r=t.x,a=t.y,o=kY({x:r,y:a},n),i=o.radius,s=o.angle,l=n.innerRadius,u=n.outerRadius;if(i<l||i>u)return!1;if(i===0)return!0;var f=_Y(n),c=f.startAngle,p=f.endAngle,d=s,h;if(c<=p){for(;d>p;)d-=360;for(;d<c;)d+=360;h=d>=c&&d<=p}else{for(;d>c;)d-=360;for(;d<p;)d+=360;h=d>=p&&d<=c}return h?mb(mb({},n),{},{radius:i,angle:AY(d,n)}):null};function ru(e){"@babel/helpers - typeof";return ru=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ru(e)}var CY=["offset"];function EY(e){return NY(e)||$Y(e)||jY(e)||TY()}function TY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jY(e,t){if(e){if(typeof e=="string")return Yv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Yv(e,t)}}function $Y(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function NY(e){if(Array.isArray(e))return Yv(e)}function Yv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function MY(e,t){if(e==null)return{};var n=RY(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function rt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?vb(Object(n),!0).forEach(function(r){IY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):vb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function IY(e,t,n){return t=DY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function DY(e){var t=LY(e,"string");return ru(t)=="symbol"?t:t+""}function LY(e,t){if(ru(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ru(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function au(){return au=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},au.apply(this,arguments)}var FY=function(t){var n=t.value,r=t.formatter,a=te(t.children)?n:t.children;return oe(r)?r(a):a},zY=function(t,n){var r=Dn(n-t),a=Math.min(Math.abs(n-t),360);return r*a},BY=function(t,n,r){var a=t.position,o=t.viewBox,i=t.offset,s=t.className,l=o,u=l.cx,f=l.cy,c=l.innerRadius,p=l.outerRadius,d=l.startAngle,h=l.endAngle,m=l.clockWise,g=(c+p)/2,v=zY(d,h),y=v>=0?1:-1,x,P;a==="insideStart"?(x=d+y*i,P=m):a==="insideEnd"?(x=h-y*i,P=!m):a==="end"&&(x=h+y*i,P=m),P=v<=0?P:!P;var w=vt(u,f,g,x),S=vt(u,f,g,x+(P?1:-1)*359),O="M".concat(w.x,",").concat(w.y,`
+    A`).concat(g,",").concat(g,",0,1,").concat(P?0:1,`,
+    `).concat(S.x,",").concat(S.y),_=te(t.id)?$o("recharts-radial-line-"):t.id;return C.createElement("text",au({},r,{dominantBaseline:"central",className:ue("recharts-radial-bar-label",s)}),C.createElement("defs",null,C.createElement("path",{id:_,d:O})),C.createElement("textPath",{xlinkHref:"#".concat(_)},n))},HY=function(t){var n=t.viewBox,r=t.offset,a=t.position,o=n,i=o.cx,s=o.cy,l=o.innerRadius,u=o.outerRadius,f=o.startAngle,c=o.endAngle,p=(f+c)/2;if(a==="outside"){var d=vt(i,s,u+r,p),h=d.x,m=d.y;return{x:h,y:m,textAnchor:h>=i?"start":"end",verticalAnchor:"middle"}}if(a==="center")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"middle"};if(a==="centerTop")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"start"};if(a==="centerBottom")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"end"};var g=(l+u)/2,v=vt(i,s,g,p),y=v.x,x=v.y;return{x:y,y:x,textAnchor:"middle",verticalAnchor:"middle"}},GY=function(t){var n=t.viewBox,r=t.parentViewBox,a=t.offset,o=t.position,i=n,s=i.x,l=i.y,u=i.width,f=i.height,c=f>=0?1:-1,p=c*a,d=c>0?"end":"start",h=c>0?"start":"end",m=u>=0?1:-1,g=m*a,v=m>0?"end":"start",y=m>0?"start":"end";if(o==="top"){var x={x:s+u/2,y:l-c*a,textAnchor:"middle",verticalAnchor:d};return rt(rt({},x),r?{height:Math.max(l-r.y,0),width:u}:{})}if(o==="bottom"){var P={x:s+u/2,y:l+f+p,textAnchor:"middle",verticalAnchor:h};return rt(rt({},P),r?{height:Math.max(r.y+r.height-(l+f),0),width:u}:{})}if(o==="left"){var w={x:s-g,y:l+f/2,textAnchor:v,verticalAnchor:"middle"};return rt(rt({},w),r?{width:Math.max(w.x-r.x,0),height:f}:{})}if(o==="right"){var S={x:s+u+g,y:l+f/2,textAnchor:y,verticalAnchor:"middle"};return rt(rt({},S),r?{width:Math.max(r.x+r.width-S.x,0),height:f}:{})}var O=r?{width:u,height:f}:{};return o==="insideLeft"?rt({x:s+g,y:l+f/2,textAnchor:y,verticalAnchor:"middle"},O):o==="insideRight"?rt({x:s+u-g,y:l+f/2,textAnchor:v,verticalAnchor:"middle"},O):o==="insideTop"?rt({x:s+u/2,y:l+p,textAnchor:"middle",verticalAnchor:h},O):o==="insideBottom"?rt({x:s+u/2,y:l+f-p,textAnchor:"middle",verticalAnchor:d},O):o==="insideTopLeft"?rt({x:s+g,y:l+p,textAnchor:y,verticalAnchor:h},O):o==="insideTopRight"?rt({x:s+u-g,y:l+p,textAnchor:v,verticalAnchor:h},O):o==="insideBottomLeft"?rt({x:s+g,y:l+f-p,textAnchor:y,verticalAnchor:d},O):o==="insideBottomRight"?rt({x:s+u-g,y:l+f-p,textAnchor:v,verticalAnchor:d},O):gs(o)&&(V(o.x)||Za(o.x))&&(V(o.y)||Za(o.y))?rt({x:s+Oo(o.x,u),y:l+Oo(o.y,f),textAnchor:"end",verticalAnchor:"end"},O):rt({x:s+u/2,y:l+f/2,textAnchor:"middle",verticalAnchor:"middle"},O)},UY=function(t){return"cx"in t&&V(t.cx)};function At(e){var t=e.offset,n=t===void 0?5:t,r=MY(e,CY),a=rt({offset:n},r),o=a.viewBox,i=a.position,s=a.value,l=a.children,u=a.content,f=a.className,c=f===void 0?"":f,p=a.textBreakAll;if(!o||te(s)&&te(l)&&!k.isValidElement(u)&&!oe(u))return null;if(k.isValidElement(u))return k.cloneElement(u,a);var d;if(oe(u)){if(d=k.createElement(u,a),k.isValidElement(d))return d}else d=FY(a);var h=UY(o),m=re(a,!0);if(h&&(i==="insideStart"||i==="insideEnd"||i==="end"))return BY(a,d,m);var g=h?HY(a):GY(a);return C.createElement(Df,au({className:ue("recharts-label",c)},m,g,{breakAll:p}),d)}At.displayName="Label";var TP=function(t){var n=t.cx,r=t.cy,a=t.angle,o=t.startAngle,i=t.endAngle,s=t.r,l=t.radius,u=t.innerRadius,f=t.outerRadius,c=t.x,p=t.y,d=t.top,h=t.left,m=t.width,g=t.height,v=t.clockWise,y=t.labelViewBox;if(y)return y;if(V(m)&&V(g)){if(V(c)&&V(p))return{x:c,y:p,width:m,height:g};if(V(d)&&V(h))return{x:d,y:h,width:m,height:g}}return V(c)&&V(p)?{x:c,y:p,width:0,height:0}:V(n)&&V(r)?{cx:n,cy:r,startAngle:o||a||0,endAngle:i||a||0,innerRadius:u||0,outerRadius:f||l||s||0,clockWise:v}:t.viewBox?t.viewBox:{}},WY=function(t,n){return t?t===!0?C.createElement(At,{key:"label-implicit",viewBox:n}):it(t)?C.createElement(At,{key:"label-implicit",viewBox:n,value:t}):k.isValidElement(t)?t.type===At?k.cloneElement(t,{key:"label-implicit",viewBox:n}):C.createElement(At,{key:"label-implicit",content:t,viewBox:n}):oe(t)?C.createElement(At,{key:"label-implicit",content:t,viewBox:n}):gs(t)?C.createElement(At,au({viewBox:n},t,{key:"label-implicit"})):null:null},qY=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&r&&!t.label)return null;var a=t.children,o=TP(t),i=qt(a,At).map(function(l,u){return k.cloneElement(l,{viewBox:n||o,key:"label-".concat(u)})});if(!r)return i;var s=WY(t.label,n||o);return[s].concat(EY(i))};At.parseViewBox=TP;At.renderCallByParent=qY;function VY(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var KY=VY;const XY=Ce(KY);function ou(e){"@babel/helpers - typeof";return ou=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ou(e)}var YY=["valueAccessor"],QY=["data","dataKey","clockWise","id","textBreakAll"];function ZY(e){return nQ(e)||tQ(e)||eQ(e)||JY()}function JY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function eQ(e,t){if(e){if(typeof e=="string")return Qv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qv(e,t)}}function tQ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function nQ(e){if(Array.isArray(e))return Qv(e)}function Qv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Jf(){return Jf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jf.apply(this,arguments)}function yb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function gb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?yb(Object(n),!0).forEach(function(r){rQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):yb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function rQ(e,t,n){return t=aQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function aQ(e){var t=oQ(e,"string");return ou(t)=="symbol"?t:t+""}function oQ(e,t){if(ou(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ou(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function xb(e,t){if(e==null)return{};var n=iQ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function iQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var sQ=function(t){return Array.isArray(t.value)?XY(t.value):t.value};function dr(e){var t=e.valueAccessor,n=t===void 0?sQ:t,r=xb(e,YY),a=r.data,o=r.dataKey,i=r.clockWise,s=r.id,l=r.textBreakAll,u=xb(r,QY);return!a||!a.length?null:C.createElement(ye,{className:"recharts-label-list"},a.map(function(f,c){var p=te(o)?n(f,c):st(f&&f.payload,o),d=te(s)?{}:{id:"".concat(s,"-").concat(c)};return C.createElement(At,Jf({},re(f,!0),u,d,{parentViewBox:f.parentViewBox,value:p,textBreakAll:l,viewBox:At.parseViewBox(te(i)?f:gb(gb({},f),{},{clockWise:i})),key:"label-".concat(c),index:c}))}))}dr.displayName="LabelList";function lQ(e,t){return e?e===!0?C.createElement(dr,{key:"labelList-implicit",data:t}):C.isValidElement(e)||oe(e)?C.createElement(dr,{key:"labelList-implicit",data:t,content:e}):gs(e)?C.createElement(dr,Jf({data:t},e,{key:"labelList-implicit"})):null:null}function uQ(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&n&&!e.label)return null;var r=e.children,a=qt(r,dr).map(function(i,s){return k.cloneElement(i,{data:t,key:"labelList-".concat(s)})});if(!n)return a;var o=lQ(e.label,t);return[o].concat(ZY(a))}dr.renderCallByParent=uQ;function iu(e){"@babel/helpers - typeof";return iu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},iu(e)}function Zv(){return Zv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zv.apply(this,arguments)}function wb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function bb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?wb(Object(n),!0).forEach(function(r){cQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function cQ(e,t,n){return t=fQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fQ(e){var t=pQ(e,"string");return iu(t)=="symbol"?t:t+""}function pQ(e,t){if(iu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(iu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var dQ=function(t,n){var r=Dn(n-t),a=Math.min(Math.abs(n-t),359.999);return r*a},xc=function(t){var n=t.cx,r=t.cy,a=t.radius,o=t.angle,i=t.sign,s=t.isExternal,l=t.cornerRadius,u=t.cornerIsExternal,f=l*(s?1:-1)+a,c=Math.asin(l/f)/Zf,p=u?o:o+i*c,d=vt(n,r,f,p),h=vt(n,r,a,p),m=u?o-i*c:o,g=vt(n,r,f*Math.cos(c*Zf),m);return{center:d,circleTangency:h,lineTangency:g,theta:c}},jP=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.startAngle,s=t.endAngle,l=dQ(i,s),u=i+l,f=vt(n,r,o,i),c=vt(n,r,o,u),p="M ".concat(f.x,",").concat(f.y,`
+    A `).concat(o,",").concat(o,`,0,
+    `).concat(+(Math.abs(l)>180),",").concat(+(i>u),`,
+    `).concat(c.x,",").concat(c.y,`
+  `);if(a>0){var d=vt(n,r,a,i),h=vt(n,r,a,u);p+="L ".concat(h.x,",").concat(h.y,`
+            A `).concat(a,",").concat(a,`,0,
+            `).concat(+(Math.abs(l)>180),",").concat(+(i<=u),`,
+            `).concat(d.x,",").concat(d.y," Z")}else p+="L ".concat(n,",").concat(r," Z");return p},mQ=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.cornerRadius,s=t.forceCornerRadius,l=t.cornerIsExternal,u=t.startAngle,f=t.endAngle,c=Dn(f-u),p=xc({cx:n,cy:r,radius:o,angle:u,sign:c,cornerRadius:i,cornerIsExternal:l}),d=p.circleTangency,h=p.lineTangency,m=p.theta,g=xc({cx:n,cy:r,radius:o,angle:f,sign:-c,cornerRadius:i,cornerIsExternal:l}),v=g.circleTangency,y=g.lineTangency,x=g.theta,P=l?Math.abs(u-f):Math.abs(u-f)-m-x;if(P<0)return s?"M ".concat(h.x,",").concat(h.y,`
+        a`).concat(i,",").concat(i,",0,0,1,").concat(i*2,`,0
+        a`).concat(i,",").concat(i,",0,0,1,").concat(-i*2,`,0
+      `):jP({cx:n,cy:r,innerRadius:a,outerRadius:o,startAngle:u,endAngle:f});var w="M ".concat(h.x,",").concat(h.y,`
+    A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(d.x,",").concat(d.y,`
+    A`).concat(o,",").concat(o,",0,").concat(+(P>180),",").concat(+(c<0),",").concat(v.x,",").concat(v.y,`
+    A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(y.x,",").concat(y.y,`
+  `);if(a>0){var S=xc({cx:n,cy:r,radius:a,angle:u,sign:c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),O=S.circleTangency,_=S.lineTangency,A=S.theta,j=xc({cx:n,cy:r,radius:a,angle:f,sign:-c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),E=j.circleTangency,T=j.lineTangency,N=j.theta,M=l?Math.abs(u-f):Math.abs(u-f)-A-N;if(M<0&&i===0)return"".concat(w,"L").concat(n,",").concat(r,"Z");w+="L".concat(T.x,",").concat(T.y,`
+      A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(E.x,",").concat(E.y,`
+      A`).concat(a,",").concat(a,",0,").concat(+(M>180),",").concat(+(c>0),",").concat(O.x,",").concat(O.y,`
+      A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(_.x,",").concat(_.y,"Z")}else w+="L".concat(n,",").concat(r,"Z");return w},hQ={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},$P=function(t){var n=bb(bb({},hQ),t),r=n.cx,a=n.cy,o=n.innerRadius,i=n.outerRadius,s=n.cornerRadius,l=n.forceCornerRadius,u=n.cornerIsExternal,f=n.startAngle,c=n.endAngle,p=n.className;if(i<o||f===c)return null;var d=ue("recharts-sector",p),h=i-o,m=Oo(s,h,0,!0),g;return m>0&&Math.abs(f-c)<360?g=mQ({cx:r,cy:a,innerRadius:o,outerRadius:i,cornerRadius:Math.min(m,h/2),forceCornerRadius:l,cornerIsExternal:u,startAngle:f,endAngle:c}):g=jP({cx:r,cy:a,innerRadius:o,outerRadius:i,startAngle:f,endAngle:c}),C.createElement("path",Zv({},re(n,!0),{className:d,d:g,role:"img"}))};function su(e){"@babel/helpers - typeof";return su=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},su(e)}function Jv(){return Jv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jv.apply(this,arguments)}function Pb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Sb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Pb(Object(n),!0).forEach(function(r){vQ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vQ(e,t,n){return t=yQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yQ(e){var t=gQ(e,"string");return su(t)=="symbol"?t:t+""}function gQ(e,t){if(su(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(su(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Ob={curveBasisClosed:hI,curveBasisOpen:vI,curveBasis:mI,curveBumpX:eI,curveBumpY:tI,curveLinearClosed:yI,curveLinear:pd,curveMonotoneX:gI,curveMonotoneY:xI,curveNatural:wI,curveStep:bI,curveStepAfter:SI,curveStepBefore:PI},wc=function(t){return t.x===+t.x&&t.y===+t.y},Vs=function(t){return t.x},Ks=function(t){return t.y},xQ=function(t,n){if(oe(t))return t;var r="curve".concat(cd(t));return(r==="curveMonotone"||r==="curveBump")&&n?Ob["".concat(r).concat(n==="vertical"?"Y":"X")]:Ob[r]||pd},wQ=function(t){var n=t.type,r=n===void 0?"linear":n,a=t.points,o=a===void 0?[]:a,i=t.baseLine,s=t.layout,l=t.connectNulls,u=l===void 0?!1:l,f=xQ(r,s),c=u?o.filter(function(m){return wc(m)}):o,p;if(Array.isArray(i)){var d=u?i.filter(function(m){return wc(m)}):i,h=c.map(function(m,g){return Sb(Sb({},m),{},{base:d[g]})});return s==="vertical"?p=cc().y(Ks).x1(Vs).x0(function(m){return m.base.x}):p=cc().x(Vs).y1(Ks).y0(function(m){return m.base.y}),p.defined(wc).curve(f),p(h)}return s==="vertical"&&V(i)?p=cc().y(Ks).x1(Vs).x0(i):V(i)?p=cc().x(Vs).y1(Ks).y0(i):p=N8().x(Vs).y(Ks),p.defined(wc).curve(f),p(c)},mo=function(t){var n=t.className,r=t.points,a=t.path,o=t.pathRef;if((!r||!r.length)&&!a)return null;var i=r&&r.length?wQ(t):a;return k.createElement("path",Jv({},re(t,!1),Sf(t),{className:ue("recharts-curve",n),d:i,ref:o}))},NP={exports:{}},bQ="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",PQ=bQ,SQ=PQ;function MP(){}function RP(){}RP.resetWarningCache=MP;var OQ=function(){function e(r,a,o,i,s,l){if(l!==SQ){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:RP,resetWarningCache:MP};return n.PropTypes=n,n};NP.exports=OQ();var kQ=NP.exports;const ge=Ce(kQ);var _Q=Object.getOwnPropertyNames,AQ=Object.getOwnPropertySymbols,CQ=Object.prototype.hasOwnProperty;function kb(e,t){return function(r,a,o){return e(r,a,o)&&t(r,a,o)}}function bc(e){return function(n,r,a){if(!n||!r||typeof n!="object"||typeof r!="object")return e(n,r,a);var o=a.cache,i=o.get(n),s=o.get(r);if(i&&s)return i===r&&s===n;o.set(n,r),o.set(r,n);var l=e(n,r,a);return o.delete(n),o.delete(r),l}}function _b(e){return _Q(e).concat(AQ(e))}var EQ=Object.hasOwn||function(e,t){return CQ.call(e,t)};function Ro(e,t){return e===t||!e&&!t&&e!==e&&t!==t}var TQ="__v",jQ="__o",$Q="_owner",Ab=Object.getOwnPropertyDescriptor,Cb=Object.keys;function NQ(e,t,n){var r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function MQ(e,t){return Ro(e.getTime(),t.getTime())}function RQ(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function IQ(e,t){return e===t}function Eb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.entries(),i,s,l=0;(i=o.next())&&!i.done;){for(var u=t.entries(),f=!1,c=0;(s=u.next())&&!s.done;){if(a[c]){c++;continue}var p=i.value,d=s.value;if(n.equals(p[0],d[0],l,c,e,t,n)&&n.equals(p[1],d[1],p[0],d[0],e,t,n)){f=a[c]=!0;break}c++}if(!f)return!1;l++}return!0}var DQ=Ro;function LQ(e,t,n){var r=Cb(e),a=r.length;if(Cb(t).length!==a)return!1;for(;a-- >0;)if(!IP(e,t,n,r[a]))return!1;return!0}function Xs(e,t,n){var r=_b(e),a=r.length;if(_b(t).length!==a)return!1;for(var o,i,s;a-- >0;)if(o=r[a],!IP(e,t,n,o)||(i=Ab(e,o),s=Ab(t,o),(i||s)&&(!i||!s||i.configurable!==s.configurable||i.enumerable!==s.enumerable||i.writable!==s.writable)))return!1;return!0}function FQ(e,t){return Ro(e.valueOf(),t.valueOf())}function zQ(e,t){return e.source===t.source&&e.flags===t.flags}function Tb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.values(),i,s;(i=o.next())&&!i.done;){for(var l=t.values(),u=!1,f=0;(s=l.next())&&!s.done;){if(!a[f]&&n.equals(i.value,s.value,i.value,s.value,e,t,n)){u=a[f]=!0;break}f++}if(!u)return!1}return!0}function BQ(e,t){var n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function HQ(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function IP(e,t,n,r){return(r===$Q||r===jQ||r===TQ)&&(e.$$typeof||t.$$typeof)?!0:EQ(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}var GQ="[object Arguments]",UQ="[object Boolean]",WQ="[object Date]",qQ="[object Error]",VQ="[object Map]",KQ="[object Number]",XQ="[object Object]",YQ="[object RegExp]",QQ="[object Set]",ZQ="[object String]",JQ="[object URL]",eZ=Array.isArray,jb=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,$b=Object.assign,tZ=Object.prototype.toString.call.bind(Object.prototype.toString);function nZ(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areErrorsEqual,a=e.areFunctionsEqual,o=e.areMapsEqual,i=e.areNumbersEqual,s=e.areObjectsEqual,l=e.arePrimitiveWrappersEqual,u=e.areRegExpsEqual,f=e.areSetsEqual,c=e.areTypedArraysEqual,p=e.areUrlsEqual;return function(h,m,g){if(h===m)return!0;if(h==null||m==null)return!1;var v=typeof h;if(v!==typeof m)return!1;if(v!=="object")return v==="number"?i(h,m,g):v==="function"?a(h,m,g):!1;var y=h.constructor;if(y!==m.constructor)return!1;if(y===Object)return s(h,m,g);if(eZ(h))return t(h,m,g);if(jb!=null&&jb(h))return c(h,m,g);if(y===Date)return n(h,m,g);if(y===RegExp)return u(h,m,g);if(y===Map)return o(h,m,g);if(y===Set)return f(h,m,g);var x=tZ(h);return x===WQ?n(h,m,g):x===YQ?u(h,m,g):x===VQ?o(h,m,g):x===QQ?f(h,m,g):x===XQ?typeof h.then!="function"&&typeof m.then!="function"&&s(h,m,g):x===JQ?p(h,m,g):x===qQ?r(h,m,g):x===GQ?s(h,m,g):x===UQ||x===KQ||x===ZQ?l(h,m,g):!1}}function rZ(e){var t=e.circular,n=e.createCustomConfig,r=e.strict,a={areArraysEqual:r?Xs:NQ,areDatesEqual:MQ,areErrorsEqual:RQ,areFunctionsEqual:IQ,areMapsEqual:r?kb(Eb,Xs):Eb,areNumbersEqual:DQ,areObjectsEqual:r?Xs:LQ,arePrimitiveWrappersEqual:FQ,areRegExpsEqual:zQ,areSetsEqual:r?kb(Tb,Xs):Tb,areTypedArraysEqual:r?Xs:BQ,areUrlsEqual:HQ};if(n&&(a=$b({},a,n(a))),t){var o=bc(a.areArraysEqual),i=bc(a.areMapsEqual),s=bc(a.areObjectsEqual),l=bc(a.areSetsEqual);a=$b({},a,{areArraysEqual:o,areMapsEqual:i,areObjectsEqual:s,areSetsEqual:l})}return a}function aZ(e){return function(t,n,r,a,o,i,s){return e(t,n,s)}}function oZ(e){var t=e.circular,n=e.comparator,r=e.createState,a=e.equals,o=e.strict;if(r)return function(l,u){var f=r(),c=f.cache,p=c===void 0?t?new WeakMap:void 0:c,d=f.meta;return n(l,u,{cache:p,equals:a,meta:d,strict:o})};if(t)return function(l,u){return n(l,u,{cache:new WeakMap,equals:a,meta:void 0,strict:o})};var i={cache:void 0,equals:a,meta:void 0,strict:o};return function(l,u){return n(l,u,i)}}var iZ=za();za({strict:!0});za({circular:!0});za({circular:!0,strict:!0});za({createInternalComparator:function(){return Ro}});za({strict:!0,createInternalComparator:function(){return Ro}});za({circular:!0,createInternalComparator:function(){return Ro}});za({circular:!0,createInternalComparator:function(){return Ro},strict:!0});function za(e){e===void 0&&(e={});var t=e.circular,n=t===void 0?!1:t,r=e.createInternalComparator,a=e.createState,o=e.strict,i=o===void 0?!1:o,s=rZ(e),l=nZ(s),u=r?r(l):aZ(l);return oZ({circular:n,comparator:l,createState:a,equals:u,strict:i})}function sZ(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function Nb(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function a(o){n<0&&(n=o),o-n>t?(e(o),n=-1):sZ(a)};requestAnimationFrame(r)}function ey(e){"@babel/helpers - typeof";return ey=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ey(e)}function lZ(e){return pZ(e)||fZ(e)||cZ(e)||uZ()}function uZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cZ(e,t){if(e){if(typeof e=="string")return Mb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mb(e,t)}}function Mb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function fZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function pZ(e){if(Array.isArray(e))return e}function dZ(){var e={},t=function(){return null},n=!1,r=function a(o){if(!n){if(Array.isArray(o)){if(!o.length)return;var i=o,s=lZ(i),l=s[0],u=s.slice(1);if(typeof l=="number"){Nb(a.bind(null,u),l);return}a(l),Nb(a.bind(null,u));return}ey(o)==="object"&&(e=o,t(e)),typeof o=="function"&&o()}};return{stop:function(){n=!0},start:function(o){n=!1,r(o)},subscribe:function(o){return t=o,function(){t=function(){return null}}}}}function lu(e){"@babel/helpers - typeof";return lu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lu(e)}function Rb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ib(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Rb(Object(n),!0).forEach(function(r){DP(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Rb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function DP(e,t,n){return t=mZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mZ(e){var t=hZ(e,"string");return lu(t)==="symbol"?t:String(t)}function hZ(e,t){if(lu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(lu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var vZ=function(t,n){return[Object.keys(t),Object.keys(n)].reduce(function(r,a){return r.filter(function(o){return a.includes(o)})})},yZ=function(t){return t},gZ=function(t){return t.replace(/([A-Z])/g,function(n){return"-".concat(n.toLowerCase())})},hl=function(t,n){return Object.keys(n).reduce(function(r,a){return Ib(Ib({},r),{},DP({},a,t(a,n[a])))},{})},Db=function(t,n,r){return t.map(function(a){return"".concat(gZ(a)," ").concat(n,"ms ").concat(r)}).join(",")};function xZ(e,t){return PZ(e)||bZ(e,t)||LP(e,t)||wZ()}function wZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function bZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function PZ(e){if(Array.isArray(e))return e}function SZ(e){return _Z(e)||kZ(e)||LP(e)||OZ()}function OZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function LP(e,t){if(e){if(typeof e=="string")return ty(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ty(e,t)}}function kZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function _Z(e){if(Array.isArray(e))return ty(e)}function ty(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ep=1e-4,FP=function(t,n){return[0,3*t,3*n-6*t,3*t-3*n+1]},zP=function(t,n){return t.map(function(r,a){return r*Math.pow(n,a)}).reduce(function(r,a){return r+a})},Lb=function(t,n){return function(r){var a=FP(t,n);return zP(a,r)}},AZ=function(t,n){return function(r){var a=FP(t,n),o=[].concat(SZ(a.map(function(i,s){return i*s}).slice(1)),[0]);return zP(o,r)}},Fb=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0],o=n[1],i=n[2],s=n[3];if(n.length===1)switch(n[0]){case"linear":a=0,o=0,i=1,s=1;break;case"ease":a=.25,o=.1,i=.25,s=1;break;case"ease-in":a=.42,o=0,i=1,s=1;break;case"ease-out":a=.42,o=0,i=.58,s=1;break;case"ease-in-out":a=0,o=0,i=.58,s=1;break;default:{var l=n[0].split("(");if(l[0]==="cubic-bezier"&&l[1].split(")")[0].split(",").length===4){var u=l[1].split(")")[0].split(",").map(function(g){return parseFloat(g)}),f=xZ(u,4);a=f[0],o=f[1],i=f[2],s=f[3]}}}var c=Lb(a,i),p=Lb(o,s),d=AZ(a,i),h=function(v){return v>1?1:v<0?0:v},m=function(v){for(var y=v>1?1:v,x=y,P=0;P<8;++P){var w=c(x)-y,S=d(x);if(Math.abs(w-y)<ep||S<ep)return p(x);x=h(x-w/S)}return p(x)};return m.isStepper=!1,m},CZ=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.stiff,r=n===void 0?100:n,a=t.damping,o=a===void 0?8:a,i=t.dt,s=i===void 0?17:i,l=function(f,c,p){var d=-(f-c)*r,h=p*o,m=p+(d-h)*s/1e3,g=p*s/1e3+f;return Math.abs(g-c)<ep&&Math.abs(m)<ep?[c,0]:[g,m]};return l.isStepper=!0,l.dt=s,l},EZ=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0];if(typeof a=="string")switch(a){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return Fb(a);case"spring":return CZ();default:if(a.split("(")[0]==="cubic-bezier")return Fb(a)}return typeof a=="function"?a:null};function uu(e){"@babel/helpers - typeof";return uu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uu(e)}function zb(e){return $Z(e)||jZ(e)||BP(e)||TZ()}function TZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function $Z(e){if(Array.isArray(e))return ry(e)}function Bb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Bb(Object(n),!0).forEach(function(r){ny(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ny(e,t,n){return t=NZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function NZ(e){var t=MZ(e,"string");return uu(t)==="symbol"?t:String(t)}function MZ(e,t){if(uu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(uu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function RZ(e,t){return LZ(e)||DZ(e,t)||BP(e,t)||IZ()}function IZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function BP(e,t){if(e){if(typeof e=="string")return ry(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ry(e,t)}}function ry(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function DZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function LZ(e){if(Array.isArray(e))return e}var tp=function(t,n,r){return t+(n-t)*r},ay=function(t){var n=t.from,r=t.to;return n!==r},FZ=function e(t,n,r){var a=hl(function(o,i){if(ay(i)){var s=t(i.from,i.to,i.velocity),l=RZ(s,2),u=l[0],f=l[1];return mt(mt({},i),{},{from:u,velocity:f})}return i},n);return r<1?hl(function(o,i){return ay(i)?mt(mt({},i),{},{velocity:tp(i.velocity,a[o].velocity,r),from:tp(i.from,a[o].from,r)}):i},n):e(t,a,r-1)};const zZ=function(e,t,n,r,a){var o=vZ(e,t),i=o.reduce(function(g,v){return mt(mt({},g),{},ny({},v,[e[v],t[v]]))},{}),s=o.reduce(function(g,v){return mt(mt({},g),{},ny({},v,{from:e[v],velocity:0,to:t[v]}))},{}),l=-1,u,f,c=function(){return null},p=function(){return hl(function(v,y){return y.from},s)},d=function(){return!Object.values(s).filter(ay).length},h=function(v){u||(u=v);var y=v-u,x=y/n.dt;s=FZ(n,s,x),a(mt(mt(mt({},e),t),p())),u=v,d()||(l=requestAnimationFrame(c))},m=function(v){f||(f=v);var y=(v-f)/r,x=hl(function(w,S){return tp.apply(void 0,zb(S).concat([n(y)]))},i);if(a(mt(mt(mt({},e),t),x)),y<1)l=requestAnimationFrame(c);else{var P=hl(function(w,S){return tp.apply(void 0,zb(S).concat([n(1)]))},i);a(mt(mt(mt({},e),t),P))}};return c=n.isStepper?h:m,function(){return requestAnimationFrame(c),function(){cancelAnimationFrame(l)}}};function Wi(e){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wi(e)}var BZ=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function HZ(e,t){if(e==null)return{};var n=GZ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GZ(e,t){if(e==null)return{};var n={},r=Object.keys(e),a,o;for(o=0;o<r.length;o++)a=r[o],!(t.indexOf(a)>=0)&&(n[a]=e[a]);return n}function Ym(e){return VZ(e)||qZ(e)||WZ(e)||UZ()}function UZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function WZ(e,t){if(e){if(typeof e=="string")return oy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return oy(e,t)}}function qZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function VZ(e){if(Array.isArray(e))return oy(e)}function oy(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Hb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function _n(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Hb(Object(n),!0).forEach(function(r){nl(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Hb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function nl(e,t,n){return t=HP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function KZ(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function XZ(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,HP(r.key),r)}}function YZ(e,t,n){return t&&XZ(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function HP(e){var t=QZ(e,"string");return Wi(t)==="symbol"?t:String(t)}function QZ(e,t){if(Wi(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wi(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ZZ(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&iy(e,t)}function iy(e,t){return iy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},iy(e,t)}function JZ(e){var t=eJ();return function(){var r=np(e),a;if(t){var o=np(this).constructor;a=Reflect.construct(r,arguments,o)}else a=r.apply(this,arguments);return sy(this,a)}}function sy(e,t){if(t&&(Wi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ly(e)}function ly(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function eJ(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function np(e){return np=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},np(e)}var Vn=function(e){ZZ(n,e);var t=JZ(n);function n(r,a){var o;KZ(this,n),o=t.call(this,r,a);var i=o.props,s=i.isActive,l=i.attributeName,u=i.from,f=i.to,c=i.steps,p=i.children,d=i.duration;if(o.handleStyleChange=o.handleStyleChange.bind(ly(o)),o.changeStyle=o.changeStyle.bind(ly(o)),!s||d<=0)return o.state={style:{}},typeof p=="function"&&(o.state={style:f}),sy(o);if(c&&c.length)o.state={style:c[0].style};else if(u){if(typeof p=="function")return o.state={style:u},sy(o);o.state={style:l?nl({},l,u):u}}else o.state={style:{}};return o}return YZ(n,[{key:"componentDidMount",value:function(){var a=this.props,o=a.isActive,i=a.canBegin;this.mounted=!0,!(!o||!i)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(a){var o=this.props,i=o.isActive,s=o.canBegin,l=o.attributeName,u=o.shouldReAnimate,f=o.to,c=o.from,p=this.state.style;if(s){if(!i){var d={style:l?nl({},l,f):f};this.state&&p&&(l&&p[l]!==f||!l&&p!==f)&&this.setState(d);return}if(!(iZ(a.to,f)&&a.canBegin&&a.isActive)){var h=!a.canBegin||!a.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=h||u?c:a.to;if(this.state&&p){var g={style:l?nl({},l,m):m};(l&&p[l]!==m||!l&&p!==m)&&this.setState(g)}this.runAnimation(_n(_n({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var a=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),a&&a()}},{key:"handleStyleChange",value:function(a){this.changeStyle(a)}},{key:"changeStyle",value:function(a){this.mounted&&this.setState({style:a})}},{key:"runJSAnimation",value:function(a){var o=this,i=a.from,s=a.to,l=a.duration,u=a.easing,f=a.begin,c=a.onAnimationEnd,p=a.onAnimationStart,d=zZ(i,s,EZ(u),l,this.changeStyle),h=function(){o.stopJSAnimation=d()};this.manager.start([p,f,h,l,c])}},{key:"runStepAnimation",value:function(a){var o=this,i=a.steps,s=a.begin,l=a.onAnimationStart,u=i[0],f=u.style,c=u.duration,p=c===void 0?0:c,d=function(m,g,v){if(v===0)return m;var y=g.duration,x=g.easing,P=x===void 0?"ease":x,w=g.style,S=g.properties,O=g.onAnimationEnd,_=v>0?i[v-1]:g,A=S||Object.keys(w);if(typeof P=="function"||P==="spring")return[].concat(Ym(m),[o.runJSAnimation.bind(o,{from:_.style,to:w,duration:y,easing:P}),y]);var j=Db(A,y,P),E=_n(_n(_n({},_.style),w),{},{transition:j});return[].concat(Ym(m),[E,y,O]).filter(yZ)};return this.manager.start([l].concat(Ym(i.reduce(d,[f,Math.max(p,s)])),[a.onAnimationEnd]))}},{key:"runAnimation",value:function(a){this.manager||(this.manager=dZ());var o=a.begin,i=a.duration,s=a.attributeName,l=a.to,u=a.easing,f=a.onAnimationStart,c=a.onAnimationEnd,p=a.steps,d=a.children,h=this.manager;if(this.unSubscribe=h.subscribe(this.handleStyleChange),typeof u=="function"||typeof d=="function"||u==="spring"){this.runJSAnimation(a);return}if(p.length>1){this.runStepAnimation(a);return}var m=s?nl({},s,l):l,g=Db(Object.keys(m),i,u);h.start([f,o,_n(_n({},m),{},{transition:g}),i,c])}},{key:"render",value:function(){var a=this.props,o=a.children;a.begin;var i=a.duration;a.attributeName,a.easing;var s=a.isActive;a.steps,a.from,a.to,a.canBegin,a.onAnimationEnd,a.shouldReAnimate,a.onAnimationReStart;var l=HZ(a,BZ),u=k.Children.count(o),f=this.state.style;if(typeof o=="function")return o(f);if(!s||u===0||i<=0)return o;var c=function(d){var h=d.props,m=h.style,g=m===void 0?{}:m,v=h.className,y=k.cloneElement(d,_n(_n({},l),{},{style:_n(_n({},g),f),className:v}));return y};return u===1?c(k.Children.only(o)):C.createElement("div",null,k.Children.map(o,function(p){return c(p)}))}}]),n}(k.PureComponent);Vn.displayName="Animate";Vn.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};Vn.propTypes={from:ge.oneOfType([ge.object,ge.string]),to:ge.oneOfType([ge.object,ge.string]),attributeName:ge.string,duration:ge.number,begin:ge.number,easing:ge.oneOfType([ge.string,ge.func]),steps:ge.arrayOf(ge.shape({duration:ge.number.isRequired,style:ge.object.isRequired,easing:ge.oneOfType([ge.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ge.func]),properties:ge.arrayOf("string"),onAnimationEnd:ge.func})),children:ge.oneOfType([ge.node,ge.func]),isActive:ge.bool,canBegin:ge.bool,onAnimationEnd:ge.func,shouldReAnimate:ge.bool,onAnimationStart:ge.func,onAnimationReStart:ge.func};function cu(e){"@babel/helpers - typeof";return cu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cu(e)}function rp(){return rp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rp.apply(this,arguments)}function tJ(e,t){return oJ(e)||aJ(e,t)||rJ(e,t)||nJ()}function nJ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function rJ(e,t){if(e){if(typeof e=="string")return Gb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Gb(e,t)}}function Gb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function aJ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function oJ(e){if(Array.isArray(e))return e}function Ub(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Wb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ub(Object(n),!0).forEach(function(r){iJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ub(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function iJ(e,t,n){return t=sJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sJ(e){var t=lJ(e,"string");return cu(t)=="symbol"?t:t+""}function lJ(e,t){if(cu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(cu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var qb=function(t,n,r,a,o){var i=Math.min(Math.abs(r)/2,Math.abs(a)/2),s=a>=0?1:-1,l=r>=0?1:-1,u=a>=0&&r>=0||a<0&&r<0?1:0,f;if(i>0&&o instanceof Array){for(var c=[0,0,0,0],p=0,d=4;p<d;p++)c[p]=o[p]>i?i:o[p];f="M".concat(t,",").concat(n+s*c[0]),c[0]>0&&(f+="A ".concat(c[0],",").concat(c[0],",0,0,").concat(u,",").concat(t+l*c[0],",").concat(n)),f+="L ".concat(t+r-l*c[1],",").concat(n),c[1]>0&&(f+="A ".concat(c[1],",").concat(c[1],",0,0,").concat(u,`,
+        `).concat(t+r,",").concat(n+s*c[1])),f+="L ".concat(t+r,",").concat(n+a-s*c[2]),c[2]>0&&(f+="A ".concat(c[2],",").concat(c[2],",0,0,").concat(u,`,
+        `).concat(t+r-l*c[2],",").concat(n+a)),f+="L ".concat(t+l*c[3],",").concat(n+a),c[3]>0&&(f+="A ".concat(c[3],",").concat(c[3],",0,0,").concat(u,`,
+        `).concat(t,",").concat(n+a-s*c[3])),f+="Z"}else if(i>0&&o===+o&&o>0){var h=Math.min(i,o);f="M ".concat(t,",").concat(n+s*h,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+l*h,",").concat(n,`
+            L `).concat(t+r-l*h,",").concat(n,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+r,",").concat(n+s*h,`
+            L `).concat(t+r,",").concat(n+a-s*h,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+r-l*h,",").concat(n+a,`
+            L `).concat(t+l*h,",").concat(n+a,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t,",").concat(n+a-s*h," Z")}else f="M ".concat(t,",").concat(n," h ").concat(r," v ").concat(a," h ").concat(-r," Z");return f},uJ=function(t,n){if(!t||!n)return!1;var r=t.x,a=t.y,o=n.x,i=n.y,s=n.width,l=n.height;if(Math.abs(s)>0&&Math.abs(l)>0){var u=Math.min(o,o+s),f=Math.max(o,o+s),c=Math.min(i,i+l),p=Math.max(i,i+l);return r>=u&&r<=f&&a>=c&&a<=p}return!1},cJ={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},Ug=function(t){var n=Wb(Wb({},cJ),t),r=k.useRef(),a=k.useState(-1),o=tJ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var P=r.current.getTotalLength();P&&s(P)}catch{}},[]);var l=n.x,u=n.y,f=n.width,c=n.height,p=n.radius,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isAnimationActive,y=n.isUpdateAnimationActive;if(l!==+l||u!==+u||f!==+f||c!==+c||f===0||c===0)return null;var x=ue("recharts-rectangle",d);return y?C.createElement(Vn,{canBegin:i>0,from:{width:f,height:c,x:l,y:u},to:{width:f,height:c,x:l,y:u},duration:m,animationEasing:h,isActive:y},function(P){var w=P.width,S=P.height,O=P.x,_=P.y;return C.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,isActive:v,easing:h},C.createElement("path",rp({},re(n,!0),{className:x,d:qb(O,_,w,S,p),ref:r})))}):C.createElement("path",rp({},re(n,!0),{className:x,d:qb(l,u,f,c,p)}))};function uy(){return uy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},uy.apply(this,arguments)}var Ad=function(t){var n=t.cx,r=t.cy,a=t.r,o=t.className,i=ue("recharts-dot",o);return n===+n&&r===+r&&a===+a?k.createElement("circle",uy({},re(t,!1),Sf(t),{className:i,cx:n,cy:r,r:a})):null};function fu(e){"@babel/helpers - typeof";return fu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fu(e)}var fJ=["x","y","top","left","width","height","className"];function cy(){return cy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cy.apply(this,arguments)}function Vb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function pJ(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Vb(Object(n),!0).forEach(function(r){dJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function dJ(e,t,n){return t=mJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mJ(e){var t=hJ(e,"string");return fu(t)=="symbol"?t:t+""}function hJ(e,t){if(fu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(fu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function vJ(e,t){if(e==null)return{};var n=yJ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yJ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var gJ=function(t,n,r,a,o,i){return"M".concat(t,",").concat(o,"v").concat(a,"M").concat(i,",").concat(n,"h").concat(r)},xJ=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.top,s=i===void 0?0:i,l=t.left,u=l===void 0?0:l,f=t.width,c=f===void 0?0:f,p=t.height,d=p===void 0?0:p,h=t.className,m=vJ(t,fJ),g=pJ({x:r,y:o,top:s,left:u,width:c,height:d},m);return!V(r)||!V(o)||!V(c)||!V(d)||!V(s)||!V(u)?null:C.createElement("path",cy({},re(g,!0),{className:ue("recharts-cross",h),d:gJ(r,o,c,d,s,u)}))},wJ=r7,bJ=wJ(Object.getPrototypeOf,Object),PJ=bJ,SJ=Ur,OJ=PJ,kJ=Wr,_J="[object Object]",AJ=Function.prototype,CJ=Object.prototype,GP=AJ.toString,EJ=CJ.hasOwnProperty,TJ=GP.call(Object);function jJ(e){if(!kJ(e)||SJ(e)!=_J)return!1;var t=OJ(e);if(t===null)return!0;var n=EJ.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&GP.call(n)==TJ}var $J=jJ;const NJ=Ce($J);var MJ=Ur,RJ=Wr,IJ="[object Boolean]";function DJ(e){return e===!0||e===!1||RJ(e)&&MJ(e)==IJ}var LJ=DJ;const FJ=Ce(LJ);function pu(e){"@babel/helpers - typeof";return pu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pu(e)}function ap(){return ap=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ap.apply(this,arguments)}function zJ(e,t){return UJ(e)||GJ(e,t)||HJ(e,t)||BJ()}function BJ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HJ(e,t){if(e){if(typeof e=="string")return Kb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kb(e,t)}}function Kb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function GJ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function UJ(e){if(Array.isArray(e))return e}function Xb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Yb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xb(Object(n),!0).forEach(function(r){WJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function WJ(e,t,n){return t=qJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qJ(e){var t=VJ(e,"string");return pu(t)=="symbol"?t:t+""}function VJ(e,t){if(pu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(pu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Qb=function(t,n,r,a,o){var i=r-a,s;return s="M ".concat(t,",").concat(n),s+="L ".concat(t+r,",").concat(n),s+="L ".concat(t+r-i/2,",").concat(n+o),s+="L ".concat(t+r-i/2-a,",").concat(n+o),s+="L ".concat(t,",").concat(n," Z"),s},KJ={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},XJ=function(t){var n=Yb(Yb({},KJ),t),r=k.useRef(),a=k.useState(-1),o=zJ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var x=r.current.getTotalLength();x&&s(x)}catch{}},[]);var l=n.x,u=n.y,f=n.upperWidth,c=n.lowerWidth,p=n.height,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isUpdateAnimationActive;if(l!==+l||u!==+u||f!==+f||c!==+c||p!==+p||f===0&&c===0||p===0)return null;var y=ue("recharts-trapezoid",d);return v?C.createElement(Vn,{canBegin:i>0,from:{upperWidth:0,lowerWidth:0,height:p,x:l,y:u},to:{upperWidth:f,lowerWidth:c,height:p,x:l,y:u},duration:m,animationEasing:h,isActive:v},function(x){var P=x.upperWidth,w=x.lowerWidth,S=x.height,O=x.x,_=x.y;return C.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,easing:h},C.createElement("path",ap({},re(n,!0),{className:y,d:Qb(O,_,P,w,S),ref:r})))}):C.createElement("g",null,C.createElement("path",ap({},re(n,!0),{className:y,d:Qb(l,u,f,c,p)})))},YJ=["option","shapeType","propTransformer","activeClassName","isActive"];function du(e){"@babel/helpers - typeof";return du=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},du(e)}function QJ(e,t){if(e==null)return{};var n=ZJ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZJ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Zb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function op(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Zb(Object(n),!0).forEach(function(r){JJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function JJ(e,t,n){return t=eee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function eee(e){var t=tee(e,"string");return du(t)=="symbol"?t:t+""}function tee(e,t){if(du(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(du(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function nee(e,t){return op(op({},t),e)}function ree(e,t){return e==="symbols"}function Jb(e){var t=e.shapeType,n=e.elementProps;switch(t){case"rectangle":return C.createElement(Ug,n);case"trapezoid":return C.createElement(XJ,n);case"sector":return C.createElement($P,n);case"symbols":if(ree(t))return C.createElement(md,n);break;default:return null}}function aee(e){return k.isValidElement(e)?e.props:e}function fy(e){var t=e.option,n=e.shapeType,r=e.propTransformer,a=r===void 0?nee:r,o=e.activeClassName,i=o===void 0?"recharts-active-shape":o,s=e.isActive,l=QJ(e,YJ),u;if(k.isValidElement(t))u=k.cloneElement(t,op(op({},l),aee(t)));else if(oe(t))u=t(l);else if(NJ(t)&&!FJ(t)){var f=a(t,l);u=C.createElement(Jb,{shapeType:n,elementProps:f})}else{var c=l;u=C.createElement(Jb,{shapeType:n,elementProps:c})}return s?C.createElement(ye,{className:i},u):u}function Cd(e,t){return t!=null&&"trapezoids"in e.props}function Ed(e,t){return t!=null&&"sectors"in e.props}function mu(e,t){return t!=null&&"points"in e.props}function oee(e,t){var n,r,a=e.x===(t==null||(n=t.labelViewBox)===null||n===void 0?void 0:n.x)||e.x===t.x,o=e.y===(t==null||(r=t.labelViewBox)===null||r===void 0?void 0:r.y)||e.y===t.y;return a&&o}function iee(e,t){var n=e.endAngle===t.endAngle,r=e.startAngle===t.startAngle;return n&&r}function see(e,t){var n=e.x===t.x,r=e.y===t.y,a=e.z===t.z;return n&&r&&a}function lee(e,t){var n;return Cd(e,t)?n=oee:Ed(e,t)?n=iee:mu(e,t)&&(n=see),n}function uee(e,t){var n;return Cd(e,t)?n="trapezoids":Ed(e,t)?n="sectors":mu(e,t)&&(n="points"),n}function cee(e,t){if(Cd(e,t)){var n;return(n=t.tooltipPayload)===null||n===void 0||(n=n[0])===null||n===void 0||(n=n.payload)===null||n===void 0?void 0:n.payload}if(Ed(e,t)){var r;return(r=t.tooltipPayload)===null||r===void 0||(r=r[0])===null||r===void 0||(r=r.payload)===null||r===void 0?void 0:r.payload}return mu(e,t)?t.payload:{}}function fee(e){var t=e.activeTooltipItem,n=e.graphicalItem,r=e.itemData,a=uee(n,t),o=cee(n,t),i=r.filter(function(l,u){var f=ko(o,l),c=n.props[a].filter(function(h){var m=lee(n,t);return m(h,t)}),p=n.props[a].indexOf(c[c.length-1]),d=u===p;return f&&d}),s=r.indexOf(i[i.length-1]);return s}var pee=Math.ceil,dee=Math.max;function mee(e,t,n,r){for(var a=-1,o=dee(pee((t-e)/(n||1)),0),i=Array(o);o--;)i[r?o:++a]=e,e+=n;return i}var hee=mee,vee=P7,e2=1/0,yee=17976931348623157e292;function gee(e){if(!e)return e===0?e:0;if(e=vee(e),e===e2||e===-e2){var t=e<0?-1:1;return t*yee}return e===e?e:0}var UP=gee,xee=hee,wee=yd,Qm=UP;function bee(e){return function(t,n,r){return r&&typeof r!="number"&&wee(t,n,r)&&(n=r=void 0),t=Qm(t),n===void 0?(n=t,t=0):n=Qm(n),r=r===void 0?t<n?1:-1:Qm(r),xee(t,n,r,e)}}var Pee=bee,See=Pee,Oee=See(),kee=Oee;const ip=Ce(kee);function hu(e){"@babel/helpers - typeof";return hu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},hu(e)}function t2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function n2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?t2(Object(n),!0).forEach(function(r){WP(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):t2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function WP(e,t,n){return t=_ee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _ee(e){var t=Aee(e,"string");return hu(t)=="symbol"?t:t+""}function Aee(e,t){if(hu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(hu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Cee=["Webkit","Moz","O","ms"],Eee=function(t,n){var r=t.replace(/(\w)/,function(o){return o.toUpperCase()}),a=Cee.reduce(function(o,i){return n2(n2({},o),{},WP({},i+r,n))},{});return a[t]=n,a};function qi(e){"@babel/helpers - typeof";return qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qi(e)}function sp(){return sp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},sp.apply(this,arguments)}function r2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?r2(Object(n),!0).forEach(function(r){Xt(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Tee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,VP(r.key),r)}}function jee(e,t,n){return t&&a2(e.prototype,t),n&&a2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function $ee(e,t,n){return t=lp(t),Nee(e,qP()?Reflect.construct(t,n||[],lp(e).constructor):t.apply(e,n))}function Nee(e,t){if(t&&(qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Mee(e)}function Mee(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function qP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(qP=function(){return!!e})()}function lp(e){return lp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},lp(e)}function Ree(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&py(e,t)}function py(e,t){return py=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},py(e,t)}function Xt(e,t,n){return t=VP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function VP(e){var t=Iee(e,"string");return qi(t)=="symbol"?t:t+""}function Iee(e,t){if(qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Dee=function(t){var n=t.data,r=t.startIndex,a=t.endIndex,o=t.x,i=t.width,s=t.travellerWidth;if(!n||!n.length)return{};var l=n.length,u=dl().domain(ip(0,l)).range([o,o+i-s]),f=u.domain().map(function(c){return u(c)});return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:u(r),endX:u(a),scale:u,scaleValues:f}},o2=function(t){return t.changedTouches&&!!t.changedTouches.length},Vi=function(e){function t(n){var r;return Tee(this,t),r=$ee(this,t,[n]),Xt(r,"handleDrag",function(a){r.leaveTimer&&(clearTimeout(r.leaveTimer),r.leaveTimer=null),r.state.isTravellerMoving?r.handleTravellerMove(a):r.state.isSlideMoving&&r.handleSlideDrag(a)}),Xt(r,"handleTouchMove",function(a){a.changedTouches!=null&&a.changedTouches.length>0&&r.handleDrag(a.changedTouches[0])}),Xt(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var a=r.props,o=a.endIndex,i=a.onDragEnd,s=a.startIndex;i==null||i({endIndex:o,startIndex:s})}),r.detachDragEndListener()}),Xt(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Xt(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Xt(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Xt(r,"handleSlideDragStart",function(a){var o=o2(a)?a.changedTouches[0]:a;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return Ree(t,e),jee(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var a=r.startX,o=r.endX,i=this.state.scaleValues,s=this.props,l=s.gap,u=s.data,f=u.length-1,c=Math.min(a,o),p=Math.max(a,o),d=t.getIndexInRange(i,c),h=t.getIndexInRange(i,p);return{startIndex:d-d%l,endIndex:h===f?f:h-h%l}}},{key:"getTextOfTick",value:function(r){var a=this.props,o=a.data,i=a.tickFormatter,s=a.dataKey,l=st(o[r],s,r);return oe(i)?i(l,r):l}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var a=this.state,o=a.slideMoveStartX,i=a.startX,s=a.endX,l=this.props,u=l.x,f=l.width,c=l.travellerWidth,p=l.startIndex,d=l.endIndex,h=l.onChange,m=r.pageX-o;m>0?m=Math.min(m,u+f-c-s,u+f-c-i):m<0&&(m=Math.max(m,u-i,u-s));var g=this.getIndex({startX:i+m,endX:s+m});(g.startIndex!==p||g.endIndex!==d)&&h&&h(g),this.setState({startX:i+m,endX:s+m,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,a){var o=o2(a)?a.changedTouches[0]:a;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var a=this.state,o=a.brushMoveStartX,i=a.movingTravellerId,s=a.endX,l=a.startX,u=this.state[i],f=this.props,c=f.x,p=f.width,d=f.travellerWidth,h=f.onChange,m=f.gap,g=f.data,v={startX:this.state.startX,endX:this.state.endX},y=r.pageX-o;y>0?y=Math.min(y,c+p-d-u):y<0&&(y=Math.max(y,c-u)),v[i]=u+y;var x=this.getIndex(v),P=x.startIndex,w=x.endIndex,S=function(){var _=g.length-1;return i==="startX"&&(s>l?P%m===0:w%m===0)||s<l&&w===_||i==="endX"&&(s>l?w%m===0:P%m===0)||s>l&&w===_};this.setState(Xt(Xt({},i,u+y),"brushMoveStartX",r.pageX),function(){h&&S()&&h(x)})}},{key:"handleTravellerMoveKeyboard",value:function(r,a){var o=this,i=this.state,s=i.scaleValues,l=i.startX,u=i.endX,f=this.state[a],c=s.indexOf(f);if(c!==-1){var p=c+r;if(!(p===-1||p>=s.length)){var d=s[p];a==="startX"&&d>=u||a==="endX"&&d<=l||this.setState(Xt({},a,d),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.fill,u=r.stroke;return C.createElement("rect",{stroke:u,fill:l,x:a,y:o,width:i,height:s})}},{key:"renderPanorama",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.data,u=r.children,f=r.padding,c=k.Children.only(u);return c?C.cloneElement(c,{x:a,y:o,width:i,height:s,margin:f,compact:!0,data:l}):null}},{key:"renderTravellerLayer",value:function(r,a){var o,i,s=this,l=this.props,u=l.y,f=l.travellerWidth,c=l.height,p=l.traveller,d=l.ariaLabel,h=l.data,m=l.startIndex,g=l.endIndex,v=Math.max(r,this.props.x),y=Zm(Zm({},re(this.props,!1)),{},{x:v,y:u,width:f,height:c}),x=d||"Min value: ".concat((o=h[m])===null||o===void 0?void 0:o.name,", Max value: ").concat((i=h[g])===null||i===void 0?void 0:i.name);return C.createElement(ye,{tabIndex:0,role:"slider","aria-label":x,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[a],onTouchStart:this.travellerDragStartHandlers[a],onKeyDown:function(w){["ArrowLeft","ArrowRight"].includes(w.key)&&(w.preventDefault(),w.stopPropagation(),s.handleTravellerMoveKeyboard(w.key==="ArrowRight"?1:-1,a))},onFocus:function(){s.setState({isTravellerFocused:!0})},onBlur:function(){s.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(p,y))}},{key:"renderSlide",value:function(r,a){var o=this.props,i=o.y,s=o.height,l=o.stroke,u=o.travellerWidth,f=Math.min(r,a)+u,c=Math.max(Math.abs(a-r)-u,0);return C.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:l,fillOpacity:.2,x:f,y:i,width:c,height:s})}},{key:"renderText",value:function(){var r=this.props,a=r.startIndex,o=r.endIndex,i=r.y,s=r.height,l=r.travellerWidth,u=r.stroke,f=this.state,c=f.startX,p=f.endX,d=5,h={pointerEvents:"none",fill:u};return C.createElement(ye,{className:"recharts-brush-texts"},C.createElement(Df,sp({textAnchor:"end",verticalAnchor:"middle",x:Math.min(c,p)-d,y:i+s/2},h),this.getTextOfTick(a)),C.createElement(Df,sp({textAnchor:"start",verticalAnchor:"middle",x:Math.max(c,p)+l+d,y:i+s/2},h),this.getTextOfTick(o)))}},{key:"render",value:function(){var r=this.props,a=r.data,o=r.className,i=r.children,s=r.x,l=r.y,u=r.width,f=r.height,c=r.alwaysShowText,p=this.state,d=p.startX,h=p.endX,m=p.isTextActive,g=p.isSlideMoving,v=p.isTravellerMoving,y=p.isTravellerFocused;if(!a||!a.length||!V(s)||!V(l)||!V(u)||!V(f)||u<=0||f<=0)return null;var x=ue("recharts-brush",o),P=C.Children.count(i)===1,w=Eee("userSelect","none");return C.createElement(ye,{className:x,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:w},this.renderBackground(),P&&this.renderPanorama(),this.renderSlide(d,h),this.renderTravellerLayer(d,"startX"),this.renderTravellerLayer(h,"endX"),(m||g||v||y||c)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var a=r.x,o=r.y,i=r.width,s=r.height,l=r.stroke,u=Math.floor(o+s/2)-1;return C.createElement(C.Fragment,null,C.createElement("rect",{x:a,y:o,width:i,height:s,fill:l,stroke:"none"}),C.createElement("line",{x1:a+1,y1:u,x2:a+i-1,y2:u,fill:"none",stroke:"#fff"}),C.createElement("line",{x1:a+1,y1:u+2,x2:a+i-1,y2:u+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,a){var o;return C.isValidElement(r)?o=C.cloneElement(r,a):oe(r)?o=r(a):o=t.renderDefaultTraveller(a),o}},{key:"getDerivedStateFromProps",value:function(r,a){var o=r.data,i=r.width,s=r.x,l=r.travellerWidth,u=r.updateId,f=r.startIndex,c=r.endIndex;if(o!==a.prevData||u!==a.prevUpdateId)return Zm({prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i},o&&o.length?Dee({data:o,width:i,x:s,travellerWidth:l,startIndex:f,endIndex:c}):{scale:null,scaleValues:null});if(a.scale&&(i!==a.prevWidth||s!==a.prevX||l!==a.prevTravellerWidth)){a.scale.range([s,s+i-l]);var p=a.scale.domain().map(function(d){return a.scale(d)});return{prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i,startX:a.scale(r.startIndex),endX:a.scale(r.endIndex),scaleValues:p}}return null}},{key:"getIndexInRange",value:function(r,a){for(var o=r.length,i=0,s=o-1;s-i>1;){var l=Math.floor((i+s)/2);r[l]>a?s=l:i=l}return a>=r[s]?s:i}}])}(k.PureComponent);Xt(Vi,"displayName","Brush");Xt(Vi,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var Lee=hg;function Fee(e,t){var n;return Lee(e,function(r,a,o){return n=t(r,a,o),!n}),!!n}var zee=Fee,Bee=X8,Hee=Ia,Gee=zee,Uee=Vt,Wee=yd;function qee(e,t,n){var r=Uee(e)?Bee:Gee;return n&&Wee(e,t,n)&&(t=void 0),r(e,Hee(t))}var Vee=qee;const Kee=Ce(Vee);var mr=function(t,n){var r=t.alwaysShow,a=t.ifOverflow;return r&&(a="extendDomain"),a===n},i2=y7;function Xee(e,t,n){t=="__proto__"&&i2?i2(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Yee=Xee,Qee=Yee,Zee=h7,Jee=Ia;function ete(e,t){var n={};return t=Jee(t),Zee(e,function(r,a,o){Qee(n,a,t(r,a,o))}),n}var tte=ete;const nte=Ce(tte);function rte(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}var ate=rte,ote=hg;function ite(e,t){var n=!0;return ote(e,function(r,a,o){return n=!!t(r,a,o),n}),n}var ste=ite,lte=ate,ute=ste,cte=Ia,fte=Vt,pte=yd;function dte(e,t,n){var r=fte(e)?lte:ute;return n&&pte(e,t,n)&&(t=void 0),r(e,cte(t))}var mte=dte;const KP=Ce(mte);var hte=["x","y"];function vu(e){"@babel/helpers - typeof";return vu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vu(e)}function dy(){return dy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},dy.apply(this,arguments)}function s2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ys(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?s2(Object(n),!0).forEach(function(r){vte(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vte(e,t,n){return t=yte(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yte(e){var t=gte(e,"string");return vu(t)=="symbol"?t:t+""}function gte(e,t){if(vu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(vu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function xte(e,t){if(e==null)return{};var n=wte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function bte(e,t){var n=e.x,r=e.y,a=xte(e,hte),o="".concat(n),i=parseInt(o,10),s="".concat(r),l=parseInt(s,10),u="".concat(t.height||a.height),f=parseInt(u,10),c="".concat(t.width||a.width),p=parseInt(c,10);return Ys(Ys(Ys(Ys(Ys({},t),a),i?{x:i}:{}),l?{y:l}:{}),{},{height:f,width:p,name:t.name,radius:t.radius})}function l2(e){return C.createElement(fy,dy({shapeType:"rectangle",propTransformer:bte,activeClassName:"recharts-active-bar"},e))}var Pte=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,a){if(typeof t=="number")return t;var o=V(r)||FM(r);return o?t(r,a):(o||Ao(),n)}},Ste=["value","background"],XP;function Ki(e){"@babel/helpers - typeof";return Ki=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ki(e)}function Ote(e,t){if(e==null)return{};var n=kte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function up(){return up=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},up.apply(this,arguments)}function u2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Je(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?u2(Object(n),!0).forEach(function(r){ma(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function _te(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,QP(r.key),r)}}function Ate(e,t,n){return t&&c2(e.prototype,t),n&&c2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Cte(e,t,n){return t=cp(t),Ete(e,YP()?Reflect.construct(t,n||[],cp(e).constructor):t.apply(e,n))}function Ete(e,t){if(t&&(Ki(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Tte(e)}function Tte(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function YP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(YP=function(){return!!e})()}function cp(e){return cp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},cp(e)}function jte(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&my(e,t)}function my(e,t){return my=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},my(e,t)}function ma(e,t,n){return t=QP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function QP(e){var t=$te(e,"string");return Ki(t)=="symbol"?t:t+""}function $te(e,t){if(Ki(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ki(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Vr=function(e){function t(){var n;_te(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=Cte(this,t,[].concat(a)),ma(n,"state",{isAnimationFinished:!1}),ma(n,"id",$o("recharts-bar-")),ma(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),i&&i()}),ma(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),i&&i()}),n}return jte(t,e),Ate(t,[{key:"renderRectanglesStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.dataKey,l=o.activeIndex,u=o.activeBar,f=re(this.props,!1);return r&&r.map(function(c,p){var d=p===l,h=d?u:i,m=Je(Je(Je({},f),c),{},{isActive:d,option:h,index:p,dataKey:s,onAnimationStart:a.handleAnimationStart,onAnimationEnd:a.handleAnimationEnd});return C.createElement(ye,up({className:"recharts-bar-rectangle"},Fl(a.props,c,p),{key:"rectangle-".concat(c==null?void 0:c.x,"-").concat(c==null?void 0:c.y,"-").concat(c==null?void 0:c.value,"-").concat(p)}),C.createElement(l2,m))})}},{key:"renderRectanglesWithAnimation",value:function(){var r=this,a=this.props,o=a.data,i=a.layout,s=a.isAnimationActive,l=a.animationBegin,u=a.animationDuration,f=a.animationEasing,c=a.animationId,p=this.state.prevData;return C.createElement(Vn,{begin:l,duration:u,isActive:s,easing:f,from:{t:0},to:{t:1},key:"bar-".concat(c),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(d){var h=d.t,m=o.map(function(g,v){var y=p&&p[v];if(y){var x=Xe(y.x,g.x),P=Xe(y.y,g.y),w=Xe(y.width,g.width),S=Xe(y.height,g.height);return Je(Je({},g),{},{x:x(h),y:P(h),width:w(h),height:S(h)})}if(i==="horizontal"){var O=Xe(0,g.height),_=O(h);return Je(Je({},g),{},{y:g.y+g.height-_,height:_})}var A=Xe(0,g.width),j=A(h);return Je(Je({},g),{},{width:j})});return C.createElement(ye,null,r.renderRectanglesStatically(m))})}},{key:"renderRectangles",value:function(){var r=this.props,a=r.data,o=r.isAnimationActive,i=this.state.prevData;return o&&a&&a.length&&(!i||!ko(i,a))?this.renderRectanglesWithAnimation():this.renderRectanglesStatically(a)}},{key:"renderBackground",value:function(){var r=this,a=this.props,o=a.data,i=a.dataKey,s=a.activeIndex,l=re(this.props.background,!1);return o.map(function(u,f){u.value;var c=u.background,p=Ote(u,Ste);if(!c)return null;var d=Je(Je(Je(Je(Je({},p),{},{fill:"#eee"},c),l),Fl(r.props,u,f)),{},{onAnimationStart:r.handleAnimationStart,onAnimationEnd:r.handleAnimationEnd,dataKey:i,index:f,className:"recharts-bar-background-rectangle"});return C.createElement(l2,up({key:"background-bar-".concat(f),option:r.props.background,isActive:f===s},d))})}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.data,s=o.xAxis,l=o.yAxis,u=o.layout,f=o.children,c=qt(f,Es);if(!c)return null;var p=u==="vertical"?i[0].height/2:i[0].width/2,d=function(g,v){var y=Array.isArray(g.value)?g.value[1]:g.value;return{x:g.x,y:g.y,value:y,errorVal:st(g,v)}},h={clipPath:r?"url(#clipPath-".concat(a,")"):null};return C.createElement(ye,h,c.map(function(m){return C.cloneElement(m,{key:"error-bar-".concat(a,"-").concat(m.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,offset:p,dataPointFormatter:d})}))}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.data,i=r.className,s=r.xAxis,l=r.yAxis,u=r.left,f=r.top,c=r.width,p=r.height,d=r.isAnimationActive,h=r.background,m=r.id;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-bar",i),y=s&&s.allowDataOverflow,x=l&&l.allowDataOverflow,P=y||x,w=te(m)?this.id:m;return C.createElement(ye,{className:v},y||x?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(w)},C.createElement("rect",{x:y?u:u-c/2,y:x?f:f-p/2,width:y?c:c*2,height:x?p:p*2}))):null,C.createElement(ye,{className:"recharts-bar-rectangles",clipPath:P?"url(#clipPath-".concat(w,")"):null},h?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(P,w),(!d||g)&&dr.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curData:r.data,prevData:a.curData}:r.data!==a.curData?{curData:r.data}:null}}])}(k.PureComponent);XP=Vr;ma(Vr,"displayName","Bar");ma(Vr,"defaultProps",{xAxisId:0,yAxisId:0,legendType:"rect",minPointSize:0,hide:!1,data:[],layout:"vertical",activeBar:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:400,animationEasing:"ease"});ma(Vr,"getComposedData",function(e){var t=e.props,n=e.item,r=e.barPosition,a=e.bandSize,o=e.xAxis,i=e.yAxis,s=e.xAxisTicks,l=e.yAxisTicks,u=e.stackedData,f=e.dataStartIndex,c=e.displayedData,p=e.offset,d=uY(r,n);if(!d)return null;var h=t.layout,m=n.type.defaultProps,g=m!==void 0?Je(Je({},m),n.props):n.props,v=g.dataKey,y=g.children,x=g.minPointSize,P=h==="horizontal"?i:o,w=u?P.scale.domain():null,S=yY({numericAxis:P}),O=qt(y,gg),_=c.map(function(A,j){var E,T,N,M,I,R;u?E=cY(u[f+j],w):(E=st(A,v),Array.isArray(E)||(E=[S,E]));var L=Pte(x,XP.defaultProps.minPointSize)(E[1],j);if(h==="horizontal"){var $,D=[i.scale(E[0]),i.scale(E[1])],H=D[0],W=D[1];T=ub({axis:o,ticks:s,bandSize:a,offset:d.offset,entry:A,index:j}),N=($=W??H)!==null&&$!==void 0?$:void 0,M=d.size;var G=H-W;if(I=Number.isNaN(G)?0:G,R={x:T,y:i.y,width:M,height:i.height},Math.abs(L)>0&&Math.abs(I)<Math.abs(L)){var Z=Dn(I||L)*(Math.abs(L)-Math.abs(I));N-=Z,I+=Z}}else{var ie=[o.scale(E[0]),o.scale(E[1])],ve=ie[0],Pe=ie[1];if(T=ve,N=ub({axis:i,ticks:l,bandSize:a,offset:d.offset,entry:A,index:j}),M=Pe-ve,I=d.size,R={x:o.x,y:N,width:o.width,height:I},Math.abs(L)>0&&Math.abs(M)<Math.abs(L)){var J=Dn(M||L)*(Math.abs(L)-Math.abs(M));M+=J}}return Je(Je(Je({},A),{},{x:T,y:N,width:M,height:I,value:u?E:E[1],payload:A,background:R},O&&O[j]&&O[j].props),{},{tooltipPayload:[EP(n,A)],tooltipPosition:{x:T+M/2,y:N+I/2}})});return Je({data:_,layout:h},p)});function yu(e){"@babel/helpers - typeof";return yu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yu(e)}function Nte(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ZP(r.key),r)}}function Mte(e,t,n){return t&&f2(e.prototype,t),n&&f2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function p2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Nn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?p2(Object(n),!0).forEach(function(r){Td(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):p2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Td(e,t,n){return t=ZP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ZP(e){var t=Rte(e,"string");return yu(t)=="symbol"?t:t+""}function Rte(e,t){if(yu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(yu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var jd=function(t,n,r,a,o){var i=t.width,s=t.height,l=t.layout,u=t.children,f=Object.keys(n),c={left:r.left,leftMirror:r.left,right:i-r.right,rightMirror:i-r.right,top:r.top,topMirror:r.top,bottom:s-r.bottom,bottomMirror:s-r.bottom},p=!!Qt(u,Vr);return f.reduce(function(d,h){var m=n[h],g=m.orientation,v=m.domain,y=m.padding,x=y===void 0?{}:y,P=m.mirror,w=m.reversed,S="".concat(g).concat(P?"Mirror":""),O,_,A,j,E;if(m.type==="number"&&(m.padding==="gap"||m.padding==="no-gap")){var T=v[1]-v[0],N=1/0,M=m.categoricalDomain.sort(GM);if(M.forEach(function(ie,ve){ve>0&&(N=Math.min((ie||0)-(M[ve-1]||0),N))}),Number.isFinite(N)){var I=N/T,R=m.layout==="vertical"?r.height:r.width;if(m.padding==="gap"&&(O=I*R/2),m.padding==="no-gap"){var L=Oo(t.barCategoryGap,I*R),$=I*R/2;O=$-L-($-L)/R*L}}}a==="xAxis"?_=[r.left+(x.left||0)+(O||0),r.left+r.width-(x.right||0)-(O||0)]:a==="yAxis"?_=l==="horizontal"?[r.top+r.height-(x.bottom||0),r.top+(x.top||0)]:[r.top+(x.top||0)+(O||0),r.top+r.height-(x.bottom||0)-(O||0)]:_=m.range,w&&(_=[_[1],_[0]]);var D=sY(m,o,p),H=D.scale,W=D.realScaleType;H.domain(v).range(_),lY(H);var G=vY(H,Nn(Nn({},m),{},{realScaleType:W}));a==="xAxis"?(E=g==="top"&&!P||g==="bottom"&&P,A=r.left,j=c[S]-E*m.height):a==="yAxis"&&(E=g==="left"&&!P||g==="right"&&P,A=c[S]-E*m.width,j=r.top);var Z=Nn(Nn(Nn({},m),G),{},{realScaleType:W,x:A,y:j,scale:H,width:a==="xAxis"?r.width:m.width,height:a==="yAxis"?r.height:m.height});return Z.bandSize=Qf(Z,G),!m.hide&&a==="xAxis"?c[S]+=(E?-1:1)*Z.height:m.hide||(c[S]+=(E?-1:1)*Z.width),Nn(Nn({},d),{},Td({},h,Z))},{})},JP=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return{x:Math.min(r,o),y:Math.min(a,i),width:Math.abs(o-r),height:Math.abs(i-a)}},Ite=function(t){var n=t.x1,r=t.y1,a=t.x2,o=t.y2;return JP({x:n,y:r},{x:a,y:o})},eS=function(){function e(t){Nte(this,e),this.scale=t}return Mte(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.bandAware,o=r.position;if(n!==void 0){if(o)switch(o){case"start":return this.scale(n);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+i}case"end":{var s=this.bandwidth?this.bandwidth():0;return this.scale(n)+s}default:return this.scale(n)}if(a){var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+l}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),a=r[0],o=r[r.length-1];return a<=o?n>=a&&n<=o:n>=o&&n<=a}}],[{key:"create",value:function(n){return new e(n)}}])}();Td(eS,"EPS",1e-4);var Wg=function(t){var n=Object.keys(t).reduce(function(r,a){return Nn(Nn({},r),{},Td({},a,eS.create(t[a])))},{});return Nn(Nn({},n),{},{apply:function(a){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.bandAware,s=o.position;return nte(a,function(l,u){return n[u].apply(l,{bandAware:i,position:s})})},isInRange:function(a){return KP(a,function(o,i){return n[i].isInRange(o)})}})};function Dte(e){return(e%180+180)%180}var Lte=function(t){var n=t.width,r=t.height,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=Dte(a),i=o*Math.PI/180,s=Math.atan(r/n),l=i>s&&i<Math.PI-s?r/Math.sin(i):n/Math.cos(i);return Math.abs(l)},Fte=Ia,zte=Nu,Bte=hd;function Hte(e){return function(t,n,r){var a=Object(t);if(!zte(t)){var o=Fte(n);t=Bte(t),n=function(s){return o(a[s],s,a)}}var i=e(t,n,r);return i>-1?a[o?t[i]:i]:void 0}}var Gte=Hte,Ute=UP;function Wte(e){var t=Ute(e),n=t%1;return t===t?n?t-n:t:0}var qte=Wte,Vte=u7,Kte=Ia,Xte=qte,Yte=Math.max;function Qte(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var a=n==null?0:Xte(n);return a<0&&(a=Yte(r+a,0)),Vte(e,Kte(t),a)}var Zte=Qte,Jte=Gte,ene=Zte,tne=Jte(ene),nne=tne;const rne=Ce(nne);var ane=WN(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),qg=k.createContext(void 0),Vg=k.createContext(void 0),tS=k.createContext(void 0),nS=k.createContext({}),rS=k.createContext(void 0),aS=k.createContext(0),oS=k.createContext(0),d2=function(t){var n=t.state,r=n.xAxisMap,a=n.yAxisMap,o=n.offset,i=t.clipPathId,s=t.children,l=t.width,u=t.height,f=ane(o);return C.createElement(qg.Provider,{value:r},C.createElement(Vg.Provider,{value:a},C.createElement(nS.Provider,{value:o},C.createElement(tS.Provider,{value:f},C.createElement(rS.Provider,{value:i},C.createElement(aS.Provider,{value:u},C.createElement(oS.Provider,{value:l},s)))))))},one=function(){return k.useContext(rS)},iS=function(t){var n=k.useContext(qg);n==null&&Ao();var r=n[t];return r==null&&Ao(),r},ine=function(){var t=k.useContext(qg);return oa(t)},sne=function(){var t=k.useContext(Vg),n=rne(t,function(r){return KP(r.domain,Number.isFinite)});return n||oa(t)},sS=function(t){var n=k.useContext(Vg);n==null&&Ao();var r=n[t];return r==null&&Ao(),r},lne=function(){var t=k.useContext(tS);return t},une=function(){return k.useContext(nS)},Kg=function(){return k.useContext(oS)},Xg=function(){return k.useContext(aS)};function Xi(e){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xi(e)}function cne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function fne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,uS(r.key),r)}}function pne(e,t,n){return t&&fne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function dne(e,t,n){return t=fp(t),mne(e,lS()?Reflect.construct(t,n||[],fp(e).constructor):t.apply(e,n))}function mne(e,t){if(t&&(Xi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return hne(e)}function hne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function lS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(lS=function(){return!!e})()}function fp(e){return fp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},fp(e)}function vne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&hy(e,t)}function hy(e,t){return hy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},hy(e,t)}function m2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function h2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?m2(Object(n),!0).forEach(function(r){Yg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):m2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Yg(e,t,n){return t=uS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function uS(e){var t=yne(e,"string");return Xi(t)=="symbol"?t:t+""}function yne(e,t){if(Xi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Xi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function gne(e,t){return Pne(e)||bne(e,t)||wne(e,t)||xne()}function xne(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function wne(e,t){if(e){if(typeof e=="string")return v2(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return v2(e,t)}}function v2(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function bne(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function Pne(e){if(Array.isArray(e))return e}function vy(){return vy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vy.apply(this,arguments)}var Sne=function(t,n){var r;return C.isValidElement(t)?r=C.cloneElement(t,n):oe(t)?r=t(n):r=C.createElement("line",vy({},n,{className:"recharts-reference-line-line"})),r},One=function(t,n,r,a,o,i,s,l,u){var f=o.x,c=o.y,p=o.width,d=o.height;if(r){var h=u.y,m=t.y.apply(h,{position:i});if(mr(u,"discard")&&!t.y.isInRange(m))return null;var g=[{x:f+p,y:m},{x:f,y:m}];return l==="left"?g.reverse():g}if(n){var v=u.x,y=t.x.apply(v,{position:i});if(mr(u,"discard")&&!t.x.isInRange(y))return null;var x=[{x:y,y:c+d},{x:y,y:c}];return s==="top"?x.reverse():x}if(a){var P=u.segment,w=P.map(function(S){return t.apply(S,{position:i})});return mr(u,"discard")&&Kee(w,function(S){return!t.isInRange(S)})?null:w}return null};function kne(e){var t=e.x,n=e.y,r=e.segment,a=e.xAxisId,o=e.yAxisId,i=e.shape,s=e.className,l=e.alwaysShow,u=one(),f=iS(a),c=sS(o),p=lne();if(!u||!p)return null;$r(l===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var d=Wg({x:f.scale,y:c.scale}),h=it(t),m=it(n),g=r&&r.length===2,v=One(d,h,m,g,p,e.position,f.orientation,c.orientation,e);if(!v)return null;var y=gne(v,2),x=y[0],P=x.x,w=x.y,S=y[1],O=S.x,_=S.y,A=mr(e,"hidden")?"url(#".concat(u,")"):void 0,j=h2(h2({clipPath:A},re(e,!0)),{},{x1:P,y1:w,x2:O,y2:_});return C.createElement(ye,{className:ue("recharts-reference-line",s)},Sne(i,j),At.renderCallByParent(e,Ite({x1:P,y1:w,x2:O,y2:_})))}var Qg=function(e){function t(){return cne(this,t),dne(this,t,arguments)}return vne(t,e),pne(t,[{key:"render",value:function(){return C.createElement(kne,this.props)}}])}(C.Component);Yg(Qg,"displayName","ReferenceLine");Yg(Qg,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});function yy(){return yy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yy.apply(this,arguments)}function Yi(e){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yi(e)}function y2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function g2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?y2(Object(n),!0).forEach(function(r){$d(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function _ne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ane(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,fS(r.key),r)}}function Cne(e,t,n){return t&&Ane(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Ene(e,t,n){return t=pp(t),Tne(e,cS()?Reflect.construct(t,n||[],pp(e).constructor):t.apply(e,n))}function Tne(e,t){if(t&&(Yi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jne(e)}function jne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function cS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(cS=function(){return!!e})()}function pp(e){return pp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},pp(e)}function $ne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&gy(e,t)}function gy(e,t){return gy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},gy(e,t)}function $d(e,t,n){return t=fS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fS(e){var t=Nne(e,"string");return Yi(t)=="symbol"?t:t+""}function Nne(e,t){if(Yi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Yi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Mne=function(t){var n=t.x,r=t.y,a=t.xAxis,o=t.yAxis,i=Wg({x:a.scale,y:o.scale}),s=i.apply({x:n,y:r},{bandAware:!0});return mr(t,"discard")&&!i.isInRange(s)?null:s},Nd=function(e){function t(){return _ne(this,t),Ene(this,t,arguments)}return $ne(t,e),Cne(t,[{key:"render",value:function(){var r=this.props,a=r.x,o=r.y,i=r.r,s=r.alwaysShow,l=r.clipPathId,u=it(a),f=it(o);if($r(s===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.'),!u||!f)return null;var c=Mne(this.props);if(!c)return null;var p=c.x,d=c.y,h=this.props,m=h.shape,g=h.className,v=mr(this.props,"hidden")?"url(#".concat(l,")"):void 0,y=g2(g2({clipPath:v},re(this.props,!0)),{},{cx:p,cy:d});return C.createElement(ye,{className:ue("recharts-reference-dot",g)},t.renderDot(m,y),At.renderCallByParent(this.props,{x:p-i,y:d-i,width:2*i,height:2*i}))}}])}(C.Component);$d(Nd,"displayName","ReferenceDot");$d(Nd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1});$d(Nd,"renderDot",function(e,t){var n;return C.isValidElement(e)?n=C.cloneElement(e,t):oe(e)?n=e(t):n=C.createElement(Ad,yy({},t,{cx:t.cx,cy:t.cy,className:"recharts-reference-dot-dot"})),n});function xy(){return xy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},xy.apply(this,arguments)}function Qi(e){"@babel/helpers - typeof";return Qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qi(e)}function x2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function w2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?x2(Object(n),!0).forEach(function(r){Md(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):x2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Rne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ine(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,dS(r.key),r)}}function Dne(e,t,n){return t&&Ine(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Lne(e,t,n){return t=dp(t),Fne(e,pS()?Reflect.construct(t,n||[],dp(e).constructor):t.apply(e,n))}function Fne(e,t){if(t&&(Qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return zne(e)}function zne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function pS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(pS=function(){return!!e})()}function dp(e){return dp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},dp(e)}function Bne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&wy(e,t)}function wy(e,t){return wy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},wy(e,t)}function Md(e,t,n){return t=dS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dS(e){var t=Hne(e,"string");return Qi(t)=="symbol"?t:t+""}function Hne(e,t){if(Qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Gne=function(t,n,r,a,o){var i=o.x1,s=o.x2,l=o.y1,u=o.y2,f=o.xAxis,c=o.yAxis;if(!f||!c)return null;var p=Wg({x:f.scale,y:c.scale}),d={x:t?p.x.apply(i,{position:"start"}):p.x.rangeMin,y:r?p.y.apply(l,{position:"start"}):p.y.rangeMin},h={x:n?p.x.apply(s,{position:"end"}):p.x.rangeMax,y:a?p.y.apply(u,{position:"end"}):p.y.rangeMax};return mr(o,"discard")&&(!p.isInRange(d)||!p.isInRange(h))?null:JP(d,h)},Rd=function(e){function t(){return Rne(this,t),Lne(this,t,arguments)}return Bne(t,e),Dne(t,[{key:"render",value:function(){var r=this.props,a=r.x1,o=r.x2,i=r.y1,s=r.y2,l=r.className,u=r.alwaysShow,f=r.clipPathId;$r(u===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var c=it(a),p=it(o),d=it(i),h=it(s),m=this.props.shape;if(!c&&!p&&!d&&!h&&!m)return null;var g=Gne(c,p,d,h,this.props);if(!g&&!m)return null;var v=mr(this.props,"hidden")?"url(#".concat(f,")"):void 0;return C.createElement(ye,{className:ue("recharts-reference-area",l)},t.renderRect(m,w2(w2({clipPath:v},re(this.props,!0)),g)),At.renderCallByParent(this.props,g))}}])}(C.Component);Md(Rd,"displayName","ReferenceArea");Md(Rd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1});Md(Rd,"renderRect",function(e,t){var n;return C.isValidElement(e)?n=C.cloneElement(e,t):oe(e)?n=e(t):n=C.createElement(Ug,xy({},t,{className:"recharts-reference-area-rect"})),n});function mS(e,t,n){if(t<1)return[];if(t===1&&n===void 0)return e;for(var r=[],a=0;a<e.length;a+=t)r.push(e[a]);return r}function Une(e,t,n){var r={width:e.width+t.width,height:e.height+t.height};return Lte(r,n)}function Wne(e,t,n){var r=n==="width",a=e.x,o=e.y,i=e.width,s=e.height;return t===1?{start:r?a:o,end:r?a+i:o+s}:{start:r?a+i:o+s,end:r?a:o}}function mp(e,t,n,r,a){if(e*t<e*r||e*t>e*a)return!1;var o=n();return e*(t-e*o/2-r)>=0&&e*(t+e*o/2-a)<=0}function qne(e,t){return mS(e,t+1)}function Vne(e,t,n,r,a){for(var o=(r||[]).slice(),i=t.start,s=t.end,l=0,u=1,f=i,c=function(){var h=r==null?void 0:r[l];if(h===void 0)return{v:mS(r,u)};var m=l,g,v=function(){return g===void 0&&(g=n(h,m)),g},y=h.coordinate,x=l===0||mp(e,y,v,f,s);x||(l=0,f=i,u+=1),x&&(f=y+e*(v()/2+a),l+=u)},p;u<=o.length;)if(p=c(),p)return p.v;return[]}function gu(e){"@babel/helpers - typeof";return gu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gu(e)}function b2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?b2(Object(n),!0).forEach(function(r){Kne(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Kne(e,t,n){return t=Xne(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Xne(e){var t=Yne(e,"string");return gu(t)=="symbol"?t:t+""}function Yne(e,t){if(gu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(gu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Qne(e,t,n,r,a){for(var o=(r||[]).slice(),i=o.length,s=t.start,l=t.end,u=function(p){var d=o[p],h,m=function(){return h===void 0&&(h=n(d,p)),h};if(p===i-1){var g=e*(d.coordinate+e*m()/2-l);o[p]=d=kt(kt({},d),{},{tickCoord:g>0?d.coordinate-g*e:d.coordinate})}else o[p]=d=kt(kt({},d),{},{tickCoord:d.coordinate});var v=mp(e,d.tickCoord,m,s,l);v&&(l=d.tickCoord-e*(m()/2+a),o[p]=kt(kt({},d),{},{isShow:!0}))},f=i-1;f>=0;f--)u(f);return o}function Zne(e,t,n,r,a,o){var i=(r||[]).slice(),s=i.length,l=t.start,u=t.end;if(o){var f=r[s-1],c=n(f,s-1),p=e*(f.coordinate+e*c/2-u);i[s-1]=f=kt(kt({},f),{},{tickCoord:p>0?f.coordinate-p*e:f.coordinate});var d=mp(e,f.tickCoord,function(){return c},l,u);d&&(u=f.tickCoord-e*(c/2+a),i[s-1]=kt(kt({},f),{},{isShow:!0}))}for(var h=o?s-1:s,m=function(y){var x=i[y],P,w=function(){return P===void 0&&(P=n(x,y)),P};if(y===0){var S=e*(x.coordinate-e*w()/2-l);i[y]=x=kt(kt({},x),{},{tickCoord:S<0?x.coordinate-S*e:x.coordinate})}else i[y]=x=kt(kt({},x),{},{tickCoord:x.coordinate});var O=mp(e,x.tickCoord,w,l,u);O&&(l=x.tickCoord+e*(w()/2+a),i[y]=kt(kt({},x),{},{isShow:!0}))},g=0;g<h;g++)m(g);return i}function Zg(e,t,n){var r=e.tick,a=e.ticks,o=e.viewBox,i=e.minTickGap,s=e.orientation,l=e.interval,u=e.tickFormatter,f=e.unit,c=e.angle;if(!a||!a.length||!r)return[];if(V(l)||Da.isSsr)return qne(a,typeof l=="number"&&V(l)?l:0);var p=[],d=s==="top"||s==="bottom"?"width":"height",h=f&&d==="width"?pl(f,{fontSize:t,letterSpacing:n}):{width:0,height:0},m=function(x,P){var w=oe(u)?u(x.value,P):x.value;return d==="width"?Une(pl(w,{fontSize:t,letterSpacing:n}),h,c):pl(w,{fontSize:t,letterSpacing:n})[d]},g=a.length>=2?Dn(a[1].coordinate-a[0].coordinate):1,v=Wne(o,g,d);return l==="equidistantPreserveStart"?Vne(g,v,m,a,i):(l==="preserveStart"||l==="preserveStartEnd"?p=Zne(g,v,m,a,i,l==="preserveStartEnd"):p=Qne(g,v,m,a,i),p.filter(function(y){return y.isShow}))}var Jne=["viewBox"],ere=["viewBox"],tre=["ticks"];function Zi(e){"@babel/helpers - typeof";return Zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zi(e)}function ri(){return ri=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ri.apply(this,arguments)}function P2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function nt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?P2(Object(n),!0).forEach(function(r){Jg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):P2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Jm(e,t){if(e==null)return{};var n=nre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function nre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function rre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function S2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,vS(r.key),r)}}function are(e,t,n){return t&&S2(e.prototype,t),n&&S2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function ore(e,t,n){return t=hp(t),ire(e,hS()?Reflect.construct(t,n||[],hp(e).constructor):t.apply(e,n))}function ire(e,t){if(t&&(Zi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return sre(e)}function sre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function hS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(hS=function(){return!!e})()}function hp(e){return hp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},hp(e)}function lre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&by(e,t)}function by(e,t){return by=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},by(e,t)}function Jg(e,t,n){return t=vS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vS(e){var t=ure(e,"string");return Zi(t)=="symbol"?t:t+""}function ure(e,t){if(Zi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Zi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Ts=function(e){function t(n){var r;return rre(this,t),r=ore(this,t,[n]),r.state={fontSize:"",letterSpacing:""},r}return lre(t,e),are(t,[{key:"shouldComponentUpdate",value:function(r,a){var o=r.viewBox,i=Jm(r,Jne),s=this.props,l=s.viewBox,u=Jm(s,ere);return!mi(o,l)||!mi(i,u)||!mi(a,this.state)}},{key:"componentDidMount",value:function(){var r=this.layerReference;if(r){var a=r.getElementsByClassName("recharts-cartesian-axis-tick-value")[0];a&&this.setState({fontSize:window.getComputedStyle(a).fontSize,letterSpacing:window.getComputedStyle(a).letterSpacing})}}},{key:"getTickLineCoord",value:function(r){var a=this.props,o=a.x,i=a.y,s=a.width,l=a.height,u=a.orientation,f=a.tickSize,c=a.mirror,p=a.tickMargin,d,h,m,g,v,y,x=c?-1:1,P=r.tickSize||f,w=V(r.tickCoord)?r.tickCoord:r.coordinate;switch(u){case"top":d=h=r.coordinate,g=i+ +!c*l,m=g-x*P,y=m-x*p,v=w;break;case"left":m=g=r.coordinate,h=o+ +!c*s,d=h-x*P,v=d-x*p,y=w;break;case"right":m=g=r.coordinate,h=o+ +c*s,d=h+x*P,v=d+x*p,y=w;break;default:d=h=r.coordinate,g=i+ +c*l,m=g+x*P,y=m+x*p,v=w;break}return{line:{x1:d,y1:m,x2:h,y2:g},tick:{x:v,y}}}},{key:"getTickTextAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i;switch(a){case"left":i=o?"start":"end";break;case"right":i=o?"end":"start";break;default:i="middle";break}return i}},{key:"getTickVerticalAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i="end";switch(a){case"left":case"right":i="middle";break;case"top":i=o?"start":"end";break;default:i=o?"end":"start";break}return i}},{key:"renderAxisLine",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.orientation,u=r.mirror,f=r.axisLine,c=nt(nt(nt({},re(this.props,!1)),re(f,!1)),{},{fill:"none"});if(l==="top"||l==="bottom"){var p=+(l==="top"&&!u||l==="bottom"&&u);c=nt(nt({},c),{},{x1:a,y1:o+p*s,x2:a+i,y2:o+p*s})}else{var d=+(l==="left"&&!u||l==="right"&&u);c=nt(nt({},c),{},{x1:a+d*i,y1:o,x2:a+d*i,y2:o+s})}return C.createElement("line",ri({},c,{className:ue("recharts-cartesian-axis-line",gn(f,"className"))}))}},{key:"renderTicks",value:function(r,a,o){var i=this,s=this.props,l=s.tickLine,u=s.stroke,f=s.tick,c=s.tickFormatter,p=s.unit,d=Zg(nt(nt({},this.props),{},{ticks:r}),a,o),h=this.getTickTextAnchor(),m=this.getTickVerticalAnchor(),g=re(this.props,!1),v=re(f,!1),y=nt(nt({},g),{},{fill:"none"},re(l,!1)),x=d.map(function(P,w){var S=i.getTickLineCoord(P),O=S.line,_=S.tick,A=nt(nt(nt(nt({textAnchor:h,verticalAnchor:m},g),{},{stroke:"none",fill:u},v),_),{},{index:w,payload:P,visibleTicksCount:d.length,tickFormatter:c});return C.createElement(ye,ri({className:"recharts-cartesian-axis-tick",key:"tick-".concat(P.value,"-").concat(P.coordinate,"-").concat(P.tickCoord)},Fl(i.props,P,w)),l&&C.createElement("line",ri({},y,O,{className:ue("recharts-cartesian-axis-tick-line",gn(l,"className"))})),f&&t.renderTickItem(f,A,"".concat(oe(c)?c(P.value,w):P.value).concat(p||"")))});return C.createElement("g",{className:"recharts-cartesian-axis-ticks"},x)}},{key:"render",value:function(){var r=this,a=this.props,o=a.axisLine,i=a.width,s=a.height,l=a.ticksGenerator,u=a.className,f=a.hide;if(f)return null;var c=this.props,p=c.ticks,d=Jm(c,tre),h=p;return oe(l)&&(h=p&&p.length>0?l(this.props):l(d)),i<=0||s<=0||!h||!h.length?null:C.createElement(ye,{className:ue("recharts-cartesian-axis",u),ref:function(g){r.layerReference=g}},o&&this.renderAxisLine(),this.renderTicks(h,this.state.fontSize,this.state.letterSpacing),At.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,a,o){var i,s=ue(a.className,"recharts-cartesian-axis-tick-value");return C.isValidElement(r)?i=C.cloneElement(r,nt(nt({},a),{},{className:s})):oe(r)?i=r(nt(nt({},a),{},{className:s})):i=C.createElement(Df,ri({},a,{className:"recharts-cartesian-axis-tick-value"}),o),i}}])}(k.Component);Jg(Ts,"displayName","CartesianAxis");Jg(Ts,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var cre=["x1","y1","x2","y2","key"],fre=["offset"];function Co(e){"@babel/helpers - typeof";return Co=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Co(e)}function O2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ct(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?O2(Object(n),!0).forEach(function(r){pre(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function pre(e,t,n){return t=dre(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dre(e){var t=mre(e,"string");return Co(t)=="symbol"?t:t+""}function mre(e,t){if(Co(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Co(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function to(){return to=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},to.apply(this,arguments)}function k2(e,t){if(e==null)return{};var n=hre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var vre=function(t){var n=t.fill;if(!n||n==="none")return null;var r=t.fillOpacity,a=t.x,o=t.y,i=t.width,s=t.height,l=t.ry;return C.createElement("rect",{x:a,y:o,ry:l,width:i,height:s,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function yS(e,t){var n;if(C.isValidElement(e))n=C.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=t.x1,a=t.y1,o=t.x2,i=t.y2,s=t.key,l=k2(t,cre),u=re(l,!1);u.offset;var f=k2(u,fre);n=C.createElement("line",to({},f,{x1:r,y1:a,x2:o,y2:i,fill:"none",key:s}))}return n}function yre(e){var t=e.x,n=e.width,r=e.horizontal,a=r===void 0?!0:r,o=e.horizontalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=Ct(Ct({},e),{},{x1:t,y1:s,x2:t+n,y2:s,key:"line-".concat(l),index:l});return yS(a,u)});return C.createElement("g",{className:"recharts-cartesian-grid-horizontal"},i)}function gre(e){var t=e.y,n=e.height,r=e.vertical,a=r===void 0?!0:r,o=e.verticalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=Ct(Ct({},e),{},{x1:s,y1:t,x2:s,y2:t+n,key:"line-".concat(l),index:l});return yS(a,u)});return C.createElement("g",{className:"recharts-cartesian-grid-vertical"},i)}function xre(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,a=e.y,o=e.width,i=e.height,s=e.horizontalPoints,l=e.horizontal,u=l===void 0?!0:l;if(!u||!t||!t.length)return null;var f=s.map(function(p){return Math.round(p+a-a)}).sort(function(p,d){return p-d});a!==f[0]&&f.unshift(0);var c=f.map(function(p,d){var h=!f[d+1],m=h?a+i-p:f[d+1]-p;if(m<=0)return null;var g=d%t.length;return C.createElement("rect",{key:"react-".concat(d),y:p,x:r,height:m,width:o,stroke:"none",fill:t[g],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return C.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},c)}function wre(e){var t=e.vertical,n=t===void 0?!0:t,r=e.verticalFill,a=e.fillOpacity,o=e.x,i=e.y,s=e.width,l=e.height,u=e.verticalPoints;if(!n||!r||!r.length)return null;var f=u.map(function(p){return Math.round(p+o-o)}).sort(function(p,d){return p-d});o!==f[0]&&f.unshift(0);var c=f.map(function(p,d){var h=!f[d+1],m=h?o+s-p:f[d+1]-p;if(m<=0)return null;var g=d%r.length;return C.createElement("rect",{key:"react-".concat(d),x:p,y:i,width:m,height:l,stroke:"none",fill:r[g],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return C.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},c)}var bre=function(t,n){var r=t.xAxis,a=t.width,o=t.height,i=t.offset;return AP(Zg(Ct(Ct(Ct({},Ts.defaultProps),r),{},{ticks:Er(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.left,i.left+i.width,n)},Pre=function(t,n){var r=t.yAxis,a=t.width,o=t.height,i=t.offset;return AP(Zg(Ct(Ct(Ct({},Ts.defaultProps),r),{},{ticks:Er(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.top,i.top+i.height,n)},Ho={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function Ln(e){var t,n,r,a,o,i,s=Kg(),l=Xg(),u=une(),f=Ct(Ct({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:Ho.stroke,fill:(n=e.fill)!==null&&n!==void 0?n:Ho.fill,horizontal:(r=e.horizontal)!==null&&r!==void 0?r:Ho.horizontal,horizontalFill:(a=e.horizontalFill)!==null&&a!==void 0?a:Ho.horizontalFill,vertical:(o=e.vertical)!==null&&o!==void 0?o:Ho.vertical,verticalFill:(i=e.verticalFill)!==null&&i!==void 0?i:Ho.verticalFill,x:V(e.x)?e.x:u.left,y:V(e.y)?e.y:u.top,width:V(e.width)?e.width:u.width,height:V(e.height)?e.height:u.height}),c=f.x,p=f.y,d=f.width,h=f.height,m=f.syncWithTicks,g=f.horizontalValues,v=f.verticalValues,y=ine(),x=sne();if(!V(d)||d<=0||!V(h)||h<=0||!V(c)||c!==+c||!V(p)||p!==+p)return null;var P=f.verticalCoordinatesGenerator||bre,w=f.horizontalCoordinatesGenerator||Pre,S=f.horizontalPoints,O=f.verticalPoints;if((!S||!S.length)&&oe(w)){var _=g&&g.length,A=w({yAxis:x?Ct(Ct({},x),{},{ticks:_?g:x.ticks}):void 0,width:s,height:l,offset:u},_?!0:m);$r(Array.isArray(A),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Co(A),"]")),Array.isArray(A)&&(S=A)}if((!O||!O.length)&&oe(P)){var j=v&&v.length,E=P({xAxis:y?Ct(Ct({},y),{},{ticks:j?v:y.ticks}):void 0,width:s,height:l,offset:u},j?!0:m);$r(Array.isArray(E),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Co(E),"]")),Array.isArray(E)&&(O=E)}return C.createElement("g",{className:"recharts-cartesian-grid"},C.createElement(vre,{fill:f.fill,fillOpacity:f.fillOpacity,x:f.x,y:f.y,width:f.width,height:f.height,ry:f.ry}),C.createElement(yre,to({},f,{offset:u,horizontalPoints:S,xAxis:y,yAxis:x})),C.createElement(gre,to({},f,{offset:u,verticalPoints:O,xAxis:y,yAxis:x})),C.createElement(xre,to({},f,{horizontalPoints:S})),C.createElement(wre,to({},f,{verticalPoints:O})))}Ln.displayName="CartesianGrid";var Sre=["type","layout","connectNulls","ref"],Ore=["key"];function Ji(e){"@babel/helpers - typeof";return Ji=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ji(e)}function _2(e,t){if(e==null)return{};var n=kre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vl(){return vl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},vl.apply(this,arguments)}function A2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Kt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?A2(Object(n),!0).forEach(function(r){Mn(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):A2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Go(e){return Ere(e)||Cre(e)||Are(e)||_re()}function _re(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Are(e,t){if(e){if(typeof e=="string")return Py(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Py(e,t)}}function Cre(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Ere(e){if(Array.isArray(e))return Py(e)}function Py(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Tre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function C2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,xS(r.key),r)}}function jre(e,t,n){return t&&C2(e.prototype,t),n&&C2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function $re(e,t,n){return t=vp(t),Nre(e,gS()?Reflect.construct(t,n||[],vp(e).constructor):t.apply(e,n))}function Nre(e,t){if(t&&(Ji(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Mre(e)}function Mre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function gS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(gS=function(){return!!e})()}function vp(e){return vp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},vp(e)}function Rre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Sy(e,t)}function Sy(e,t){return Sy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Sy(e,t)}function Mn(e,t,n){return t=xS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xS(e){var t=Ire(e,"string");return Ji(t)=="symbol"?t:t+""}function Ire(e,t){if(Ji(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ji(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Rt=function(e){function t(){var n;Tre(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=$re(this,t,[].concat(a)),Mn(n,"state",{isAnimationFinished:!0,totalLength:0}),Mn(n,"generateSimpleStrokeDasharray",function(i,s){return"".concat(s,"px ").concat(i-s,"px")}),Mn(n,"getStrokeDasharray",function(i,s,l){var u=l.reduce(function(v,y){return v+y});if(!u)return n.generateSimpleStrokeDasharray(s,i);for(var f=Math.floor(i/u),c=i%u,p=s-i,d=[],h=0,m=0;h<l.length;m+=l[h],++h)if(m+l[h]>c){d=[].concat(Go(l.slice(0,h)),[c-m]);break}var g=d.length%2===0?[0,p]:[p];return[].concat(Go(t.repeat(l,f)),Go(d),g).map(function(v){return"".concat(v,"px")}).join(", ")}),Mn(n,"id",$o("recharts-line-")),Mn(n,"pathRef",function(i){n.mainCurve=i}),Mn(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),Mn(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return Rre(t,e),jre(t,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();this.setState({totalLength:r})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();r!==this.state.totalLength&&this.setState({totalLength:r})}}},{key:"getTotalLength",value:function(){var r=this.mainCurve;try{return r&&r.getTotalLength&&r.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.points,s=o.xAxis,l=o.yAxis,u=o.layout,f=o.children,c=qt(f,Es);if(!c)return null;var p=function(m,g){return{x:m.x,y:m.y,value:m.value,errorVal:st(m.payload,g)}},d={clipPath:r?"url(#clipPath-".concat(a,")"):null};return C.createElement(ye,d,c.map(function(h){return C.cloneElement(h,{key:"bar-".concat(h.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,dataPointFormatter:p})}))}},{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive;if(i&&!this.state.isAnimationFinished)return null;var s=this.props,l=s.dot,u=s.points,f=s.dataKey,c=re(this.props,!1),p=re(l,!0),d=u.map(function(m,g){var v=Kt(Kt(Kt({key:"dot-".concat(g),r:3},c),p),{},{index:g,cx:m.x,cy:m.y,value:m.value,dataKey:f,payload:m.payload,points:u});return t.renderDotItem(l,v)}),h={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return C.createElement(ye,vl({className:"recharts-line-dots",key:"dots"},h),d)}},{key:"renderCurveStatically",value:function(r,a,o,i){var s=this.props,l=s.type,u=s.layout,f=s.connectNulls;s.ref;var c=_2(s,Sre),p=Kt(Kt(Kt({},re(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(o,")"):null,points:r},i),{},{type:l,layout:u,connectNulls:f});return C.createElement(mo,vl({},p,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.strokeDasharray,u=i.isAnimationActive,f=i.animationBegin,c=i.animationDuration,p=i.animationEasing,d=i.animationId,h=i.animateNewValues,m=i.width,g=i.height,v=this.state,y=v.prevPoints,x=v.totalLength;return C.createElement(Vn,{begin:f,duration:c,isActive:u,easing:p,from:{t:0},to:{t:1},key:"line-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(P){var w=P.t;if(y){var S=y.length/s.length,O=s.map(function(T,N){var M=Math.floor(N*S);if(y[M]){var I=y[M],R=Xe(I.x,T.x),L=Xe(I.y,T.y);return Kt(Kt({},T),{},{x:R(w),y:L(w)})}if(h){var $=Xe(m*2,T.x),D=Xe(g/2,T.y);return Kt(Kt({},T),{},{x:$(w),y:D(w)})}return Kt(Kt({},T),{},{x:T.x,y:T.y})});return o.renderCurveStatically(O,r,a)}var _=Xe(0,x),A=_(w),j;if(l){var E="".concat(l).split(/[,\s]+/gim).map(function(T){return parseFloat(T)});j=o.getStrokeDasharray(A,x,E)}else j=o.generateSimpleStrokeDasharray(x,A);return o.renderCurveStatically(s,r,a,{strokeDasharray:j})})}},{key:"renderCurve",value:function(r,a){var o=this.props,i=o.points,s=o.isAnimationActive,l=this.state,u=l.prevPoints,f=l.totalLength;return s&&i&&i.length&&(!u&&f>0||!ko(u,i))?this.renderCurveWithAnimation(r,a):this.renderCurveStatically(i,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.xAxis,f=a.yAxis,c=a.top,p=a.left,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-line",l),P=u&&u.allowDataOverflow,w=f&&f.allowDataOverflow,S=P||w,O=te(g)?this.id:g,_=(r=re(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},A=_.r,j=A===void 0?3:A,E=_.strokeWidth,T=E===void 0?2:E,N=w8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=j*2+T;return C.createElement(ye,{className:x},P||w?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(O)},C.createElement("rect",{x:P?p:p-d/2,y:w?c:c-h/2,width:P?d:d*2,height:w?h:h*2})),!I&&C.createElement("clipPath",{id:"clipPath-dots-".concat(O)},C.createElement("rect",{x:p-R/2,y:c-R/2,width:d+R,height:h+R}))):null,!y&&this.renderCurve(S,O),this.renderErrorBar(S,O),(y||i)&&this.renderDots(S,I,O),(!m||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}},{key:"repeat",value:function(r,a){for(var o=r.length%2!==0?[].concat(Go(r),[0]):r,i=[],s=0;s<a;++s)i=[].concat(Go(i),Go(o));return i}},{key:"renderDotItem",value:function(r,a){var o;if(C.isValidElement(r))o=C.cloneElement(r,a);else if(oe(r))o=r(a);else{var i=a.key,s=_2(a,Ore),l=ue("recharts-line-dot",typeof r!="boolean"?r.className:"");o=C.createElement(Ad,vl({key:i},s,{className:l}))}return o}}])}(k.PureComponent);Mn(Rt,"displayName","Line");Mn(Rt,"defaultProps",{xAxisId:0,yAxisId:0,connectNulls:!1,activeDot:!0,dot:!0,legendType:"line",stroke:"#3182bd",strokeWidth:1,fill:"#fff",points:[],isAnimationActive:!Da.isSsr,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",hide:!1,label:!1});Mn(Rt,"getComposedData",function(e){var t=e.props,n=e.xAxis,r=e.yAxis,a=e.xAxisTicks,o=e.yAxisTicks,i=e.dataKey,s=e.bandSize,l=e.displayedData,u=e.offset,f=t.layout,c=l.map(function(p,d){var h=st(p,i);return f==="horizontal"?{x:Ui({axis:n,ticks:a,bandSize:s,entry:p,index:d}),y:te(h)?null:r.scale(h),value:h,payload:p}:{x:te(h)?null:n.scale(h),y:Ui({axis:r,ticks:o,bandSize:s,entry:p,index:d}),value:h,payload:p}});return Kt({points:c,layout:f},u)});var Dre=["layout","type","stroke","connectNulls","isRange","ref"],Lre=["key"],wS;function es(e){"@babel/helpers - typeof";return es=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},es(e)}function bS(e,t){if(e==null)return{};var n=Fre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Fre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function no(){return no=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},no.apply(this,arguments)}function E2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?E2(Object(n),!0).forEach(function(r){ir(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function T2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,SS(r.key),r)}}function Bre(e,t,n){return t&&T2(e.prototype,t),n&&T2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Hre(e,t,n){return t=yp(t),Gre(e,PS()?Reflect.construct(t,n||[],yp(e).constructor):t.apply(e,n))}function Gre(e,t){if(t&&(es(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Ure(e)}function Ure(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function PS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(PS=function(){return!!e})()}function yp(e){return yp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},yp(e)}function Wre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Oy(e,t)}function Oy(e,t){return Oy=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Oy(e,t)}function ir(e,t,n){return t=SS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function SS(e){var t=qre(e,"string");return es(t)=="symbol"?t:t+""}function qre(e,t){if(es(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(es(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var ft=function(e){function t(){var n;zre(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=Hre(this,t,[].concat(a)),ir(n,"state",{isAnimationFinished:!0}),ir(n,"id",$o("recharts-area-")),ir(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),oe(i)&&i()}),ir(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),oe(i)&&i()}),n}return Wre(t,e),Bre(t,[{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(i&&!s)return null;var l=this.props,u=l.dot,f=l.points,c=l.dataKey,p=re(this.props,!1),d=re(u,!0),h=f.map(function(g,v){var y=Zr(Zr(Zr({key:"dot-".concat(v),r:3},p),d),{},{index:v,cx:g.x,cy:g.y,dataKey:c,value:g.value,payload:g.payload,points:f});return t.renderDotItem(u,y)}),m={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return C.createElement(ye,no({className:"recharts-area-dots"},m),h)}},{key:"renderHorizontalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].x,u=i[i.length-1].x,f=r*Math.abs(l-u),c=da(i.map(function(p){return p.y||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(da(o.map(function(p){return p.y||0})),c)),V(c)?C.createElement("rect",{x:l<u?l:l-f,y:0,width:f,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].y,u=i[i.length-1].y,f=r*Math.abs(l-u),c=da(i.map(function(p){return p.x||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(da(o.map(function(p){return p.x||0})),c)),V(c)?C.createElement("rect",{x:0,y:l<u?l:l-f,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(f)}):null}},{key:"renderClipRect",value:function(r){var a=this.props.layout;return a==="vertical"?this.renderVerticalRect(r):this.renderHorizontalRect(r)}},{key:"renderAreaStatically",value:function(r,a,o,i){var s=this.props,l=s.layout,u=s.type,f=s.stroke,c=s.connectNulls,p=s.isRange;s.ref;var d=bS(s,Dre);return C.createElement(ye,{clipPath:o?"url(#clipPath-".concat(i,")"):null},C.createElement(mo,no({},re(d,!0),{points:r,connectNulls:c,type:u,baseLine:a,layout:l,stroke:"none",className:"recharts-area-area"})),f!=="none"&&C.createElement(mo,no({},re(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:r})),f!=="none"&&p&&C.createElement(mo,no({},re(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:a})))}},{key:"renderAreaWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.baseLine,u=i.isAnimationActive,f=i.animationBegin,c=i.animationDuration,p=i.animationEasing,d=i.animationId,h=this.state,m=h.prevPoints,g=h.prevBaseLine;return C.createElement(Vn,{begin:f,duration:c,isActive:u,easing:p,from:{t:0},to:{t:1},key:"area-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(v){var y=v.t;if(m){var x=m.length/s.length,P=s.map(function(_,A){var j=Math.floor(A*x);if(m[j]){var E=m[j],T=Xe(E.x,_.x),N=Xe(E.y,_.y);return Zr(Zr({},_),{},{x:T(y),y:N(y)})}return _}),w;if(V(l)&&typeof l=="number"){var S=Xe(g,l);w=S(y)}else if(te(l)||Ps(l)){var O=Xe(g,0);w=O(y)}else w=l.map(function(_,A){var j=Math.floor(A*x);if(g[j]){var E=g[j],T=Xe(E.x,_.x),N=Xe(E.y,_.y);return Zr(Zr({},_),{},{x:T(y),y:N(y)})}return _});return o.renderAreaStatically(P,w,r,a)}return C.createElement(ye,null,C.createElement("defs",null,C.createElement("clipPath",{id:"animationClipPath-".concat(a)},o.renderClipRect(y))),C.createElement(ye,{clipPath:"url(#animationClipPath-".concat(a,")")},o.renderAreaStatically(s,l,r,a)))})}},{key:"renderArea",value:function(r,a){var o=this.props,i=o.points,s=o.baseLine,l=o.isAnimationActive,u=this.state,f=u.prevPoints,c=u.prevBaseLine,p=u.totalLength;return l&&i&&i.length&&(!f&&p>0||!ko(f,i)||!ko(c,s))?this.renderAreaWithAnimation(r,a):this.renderAreaStatically(i,s,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.top,f=a.left,c=a.xAxis,p=a.yAxis,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-area",l),P=c&&c.allowDataOverflow,w=p&&p.allowDataOverflow,S=P||w,O=te(g)?this.id:g,_=(r=re(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},A=_.r,j=A===void 0?3:A,E=_.strokeWidth,T=E===void 0?2:E,N=w8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=j*2+T;return C.createElement(ye,{className:x},P||w?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(O)},C.createElement("rect",{x:P?f:f-d/2,y:w?u:u-h/2,width:P?d:d*2,height:w?h:h*2})),!I&&C.createElement("clipPath",{id:"clipPath-dots-".concat(O)},C.createElement("rect",{x:f-R/2,y:u-R/2,width:d+R,height:h+R}))):null,y?null:this.renderArea(S,O),(i||y)&&this.renderDots(S,I,O),(!m||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:r.points!==a.curPoints||r.baseLine!==a.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(k.PureComponent);wS=ft;ir(ft,"displayName","Area");ir(ft,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});ir(ft,"getBaseValue",function(e,t,n,r){var a=e.layout,o=e.baseValue,i=t.props.baseValue,s=i??o;if(V(s)&&typeof s=="number")return s;var l=a==="horizontal"?r:n,u=l.scale.domain();if(l.type==="number"){var f=Math.max(u[0],u[1]),c=Math.min(u[0],u[1]);return s==="dataMin"?c:s==="dataMax"||f<0?f:Math.max(Math.min(u[0],u[1]),0)}return s==="dataMin"?u[0]:s==="dataMax"?u[1]:u[0]});ir(ft,"getComposedData",function(e){var t=e.props,n=e.item,r=e.xAxis,a=e.yAxis,o=e.xAxisTicks,i=e.yAxisTicks,s=e.bandSize,l=e.dataKey,u=e.stackedData,f=e.dataStartIndex,c=e.displayedData,p=e.offset,d=t.layout,h=u&&u.length,m=wS.getBaseValue(t,n,r,a),g=d==="horizontal",v=!1,y=c.map(function(P,w){var S;h?S=u[f+w]:(S=st(P,l),Array.isArray(S)?v=!0:S=[m,S]);var O=S[1]==null||h&&st(P,l)==null;return g?{x:Ui({axis:r,ticks:o,bandSize:s,entry:P,index:w}),y:O?null:a.scale(S[1]),value:S,payload:P}:{x:O?null:r.scale(S[1]),y:Ui({axis:a,ticks:i,bandSize:s,entry:P,index:w}),value:S,payload:P}}),x;return h||v?x=y.map(function(P){var w=Array.isArray(P.value)?P.value[0]:null;return g?{x:P.x,y:w!=null&&P.y!=null?a.scale(w):null}:{x:w!=null?r.scale(w):null,y:P.y}}):x=g?a.scale(m):r.scale(m),Zr({points:y,baseLine:x,layout:d,isRange:v},p)});ir(ft,"renderDotItem",function(e,t){var n;if(C.isValidElement(e))n=C.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=ue("recharts-area-dot",typeof e!="boolean"?e.className:""),a=t.key,o=bS(t,Lre);n=C.createElement(Ad,no({},o,{key:a,className:r}))}return n});function ts(e){"@babel/helpers - typeof";return ts=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ts(e)}function Vre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Kre(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_S(r.key),r)}}function Xre(e,t,n){return t&&Kre(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Yre(e,t,n){return t=gp(t),Qre(e,OS()?Reflect.construct(t,n||[],gp(e).constructor):t.apply(e,n))}function Qre(e,t){if(t&&(ts(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Zre(e)}function Zre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function OS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(OS=function(){return!!e})()}function gp(e){return gp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},gp(e)}function Jre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ky(e,t)}function ky(e,t){return ky=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},ky(e,t)}function kS(e,t,n){return t=_S(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _S(e){var t=eae(e,"string");return ts(t)=="symbol"?t:t+""}function eae(e,t){if(ts(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ts(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Id=function(e){function t(){return Vre(this,t),Yre(this,t,arguments)}return Jre(t,e),Xre(t,[{key:"render",value:function(){return null}}])}(k.Component);kS(Id,"displayName","ZAxis");kS(Id,"defaultProps",{zAxisId:0,range:[64,64],scale:"auto",type:"number"});var tae=["option","isActive"];function yl(){return yl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},yl.apply(this,arguments)}function nae(e,t){if(e==null)return{};var n=rae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function aae(e){var t=e.option,n=e.isActive,r=nae(e,tae);return typeof t=="string"?k.createElement(fy,yl({option:k.createElement(md,yl({type:t},r)),isActive:n,shapeType:"symbols"},r)):k.createElement(fy,yl({option:t,isActive:n,shapeType:"symbols"},r))}function ns(e){"@babel/helpers - typeof";return ns=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ns(e)}function gl(){return gl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},gl.apply(this,arguments)}function j2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function fn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?j2(Object(n),!0).forEach(function(r){ha(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):j2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function oae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,CS(r.key),r)}}function iae(e,t,n){return t&&$2(e.prototype,t),n&&$2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function sae(e,t,n){return t=xp(t),lae(e,AS()?Reflect.construct(t,n||[],xp(e).constructor):t.apply(e,n))}function lae(e,t){if(t&&(ns(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return uae(e)}function uae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function AS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(AS=function(){return!!e})()}function xp(e){return xp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},xp(e)}function cae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&_y(e,t)}function _y(e,t){return _y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},_y(e,t)}function ha(e,t,n){return t=CS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function CS(e){var t=fae(e,"string");return ns(t)=="symbol"?t:t+""}function fae(e,t){if(ns(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ns(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Dd=function(e){function t(){var n;oae(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=sae(this,t,[].concat(a)),ha(n,"state",{isAnimationFinished:!1}),ha(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0})}),ha(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1})}),ha(n,"id",$o("recharts-scatter-")),n}return cae(t,e),iae(t,[{key:"renderSymbolsStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.activeShape,l=o.activeIndex,u=re(this.props,!1);return r.map(function(f,c){var p=l===c,d=p?s:i,h=fn(fn({},u),f);return C.createElement(ye,gl({className:"recharts-scatter-symbol",key:"symbol-".concat(f==null?void 0:f.cx,"-").concat(f==null?void 0:f.cy,"-").concat(f==null?void 0:f.size,"-").concat(c)},Fl(a.props,f,c),{role:"img"}),C.createElement(aae,gl({option:d,isActive:p,key:"symbol-".concat(c)},h)))})}},{key:"renderSymbolsWithAnimation",value:function(){var r=this,a=this.props,o=a.points,i=a.isAnimationActive,s=a.animationBegin,l=a.animationDuration,u=a.animationEasing,f=a.animationId,c=this.state.prevPoints;return C.createElement(Vn,{begin:s,duration:l,isActive:i,easing:u,from:{t:0},to:{t:1},key:"pie-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(p){var d=p.t,h=o.map(function(m,g){var v=c&&c[g];if(v){var y=Xe(v.cx,m.cx),x=Xe(v.cy,m.cy),P=Xe(v.size,m.size);return fn(fn({},m),{},{cx:y(d),cy:x(d),size:P(d)})}var w=Xe(0,m.size);return fn(fn({},m),{},{size:w(d)})});return C.createElement(ye,null,r.renderSymbolsStatically(h))})}},{key:"renderSymbols",value:function(){var r=this.props,a=r.points,o=r.isAnimationActive,i=this.state.prevPoints;return o&&a&&a.length&&(!i||!ko(i,a))?this.renderSymbolsWithAnimation():this.renderSymbolsStatically(a)}},{key:"renderErrorBar",value:function(){var r=this.props.isAnimationActive;if(r&&!this.state.isAnimationFinished)return null;var a=this.props,o=a.points,i=a.xAxis,s=a.yAxis,l=a.children,u=qt(l,Es);return u?u.map(function(f,c){var p=f.props,d=p.direction,h=p.dataKey;return C.cloneElement(f,{key:"".concat(d,"-").concat(h,"-").concat(o[c]),data:o,xAxis:i,yAxis:s,layout:d==="x"?"vertical":"horizontal",dataPointFormatter:function(g,v){return{x:g.cx,y:g.cy,value:d==="x"?+g.node.x:+g.node.y,errorVal:st(g,v)}}})}):null}},{key:"renderLine",value:function(){var r=this.props,a=r.points,o=r.line,i=r.lineType,s=r.lineJointType,l=re(this.props,!1),u=re(o,!1),f,c;if(i==="joint")f=a.map(function(x){return{x:x.cx,y:x.cy}});else if(i==="fitting"){var p=HM(a),d=p.xmin,h=p.xmax,m=p.a,g=p.b,v=function(P){return m*P+g};f=[{x:d,y:v(d)},{x:h,y:v(h)}]}var y=fn(fn(fn({},l),{},{fill:"none",stroke:l&&l.fill},u),{},{points:f});return C.isValidElement(o)?c=C.cloneElement(o,y):oe(o)?c=o(y):c=C.createElement(mo,gl({},y,{type:s})),C.createElement(ye,{className:"recharts-scatter-line",key:"recharts-scatter-line"},c)}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.points,i=r.line,s=r.className,l=r.xAxis,u=r.yAxis,f=r.left,c=r.top,p=r.width,d=r.height,h=r.id,m=r.isAnimationActive;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-scatter",s),y=l&&l.allowDataOverflow,x=u&&u.allowDataOverflow,P=y||x,w=te(h)?this.id:h;return C.createElement(ye,{className:v,clipPath:P?"url(#clipPath-".concat(w,")"):null},y||x?C.createElement("defs",null,C.createElement("clipPath",{id:"clipPath-".concat(w)},C.createElement("rect",{x:y?f:f-p/2,y:x?c:c-d/2,width:y?p:p*2,height:x?d:d*2}))):null,i&&this.renderLine(),this.renderErrorBar(),C.createElement(ye,{key:"recharts-scatter-symbols"},this.renderSymbols()),(!m||g)&&dr.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}}])}(k.PureComponent);ha(Dd,"displayName","Scatter");ha(Dd,"defaultProps",{xAxisId:0,yAxisId:0,zAxisId:0,legendType:"circle",lineType:"joint",lineJointType:"linear",data:[],shape:"circle",hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:400,animationEasing:"linear"});ha(Dd,"getComposedData",function(e){var t=e.xAxis,n=e.yAxis,r=e.zAxis,a=e.item,o=e.displayedData,i=e.xAxisTicks,s=e.yAxisTicks,l=e.offset,u=a.props.tooltipType,f=qt(a.props.children,gg),c=te(t.dataKey)?a.props.dataKey:t.dataKey,p=te(n.dataKey)?a.props.dataKey:n.dataKey,d=r&&r.dataKey,h=r?r.range:Id.defaultProps.range,m=h&&h[0],g=t.scale.bandwidth?t.scale.bandwidth():0,v=n.scale.bandwidth?n.scale.bandwidth():0,y=o.map(function(x,P){var w=st(x,c),S=st(x,p),O=!te(d)&&st(x,d)||"-",_=[{name:te(t.dataKey)?a.props.name:t.name||t.dataKey,unit:t.unit||"",value:w,payload:x,dataKey:c,type:u},{name:te(n.dataKey)?a.props.name:n.name||n.dataKey,unit:n.unit||"",value:S,payload:x,dataKey:p,type:u}];O!=="-"&&_.push({name:r.name||r.dataKey,unit:r.unit||"",value:O,payload:x,dataKey:d,type:u});var A=Ui({axis:t,ticks:i,bandSize:g,entry:x,index:P,dataKey:c}),j=Ui({axis:n,ticks:s,bandSize:v,entry:x,index:P,dataKey:p}),E=O!=="-"?r.scale(O):m,T=Math.sqrt(Math.max(E,0)/Math.PI);return fn(fn({},x),{},{cx:A,cy:j,x:A-T,y:j-T,xAxis:t,yAxis:n,zAxis:r,width:2*T,height:2*T,size:E,node:{x:w,y:S,z:O},tooltipPayload:_,tooltipPosition:{x:A,y:j},payload:x},f&&f[P]&&f[P].props)});return fn({points:y},l)});function rs(e){"@babel/helpers - typeof";return rs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rs(e)}function pae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function dae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,jS(r.key),r)}}function mae(e,t,n){return t&&dae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function hae(e,t,n){return t=wp(t),vae(e,ES()?Reflect.construct(t,n||[],wp(e).constructor):t.apply(e,n))}function vae(e,t){if(t&&(rs(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return yae(e)}function yae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ES(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(ES=function(){return!!e})()}function wp(e){return wp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},wp(e)}function gae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ay(e,t)}function Ay(e,t){return Ay=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ay(e,t)}function TS(e,t,n){return t=jS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function jS(e){var t=xae(e,"string");return rs(t)=="symbol"?t:t+""}function xae(e,t){if(rs(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(rs(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Cy(){return Cy=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Cy.apply(this,arguments)}function wae(e){var t=e.xAxisId,n=Kg(),r=Xg(),a=iS(t);return a==null?null:k.createElement(Ts,Cy({},a,{className:ue("recharts-".concat(a.axisType," ").concat(a.axisType),a.className),viewBox:{x:0,y:0,width:n,height:r},ticksGenerator:function(i){return Er(i,!0)}}))}var Et=function(e){function t(){return pae(this,t),hae(this,t,arguments)}return gae(t,e),mae(t,[{key:"render",value:function(){return k.createElement(wae,this.props)}}])}(k.Component);TS(Et,"displayName","XAxis");TS(Et,"defaultProps",{allowDecimals:!0,hide:!1,orientation:"bottom",width:0,height:30,mirror:!1,xAxisId:0,tickCount:5,type:"category",padding:{left:0,right:0},allowDataOverflow:!1,scale:"auto",reversed:!1,allowDuplicatedCategory:!0});function as(e){"@babel/helpers - typeof";return as=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},as(e)}function bae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,MS(r.key),r)}}function Sae(e,t,n){return t&&Pae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Oae(e,t,n){return t=bp(t),kae(e,$S()?Reflect.construct(t,n||[],bp(e).constructor):t.apply(e,n))}function kae(e,t){if(t&&(as(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return _ae(e)}function _ae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function $S(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return($S=function(){return!!e})()}function bp(e){return bp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},bp(e)}function Aae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ey(e,t)}function Ey(e,t){return Ey=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ey(e,t)}function NS(e,t,n){return t=MS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function MS(e){var t=Cae(e,"string");return as(t)=="symbol"?t:t+""}function Cae(e,t){if(as(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(as(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Ty(){return Ty=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ty.apply(this,arguments)}var Eae=function(t){var n=t.yAxisId,r=Kg(),a=Xg(),o=sS(n);return o==null?null:k.createElement(Ts,Ty({},o,{className:ue("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:r,height:a},ticksGenerator:function(s){return Er(s,!0)}}))},yt=function(e){function t(){return bae(this,t),Oae(this,t,arguments)}return Aae(t,e),Sae(t,[{key:"render",value:function(){return k.createElement(Eae,this.props)}}])}(k.Component);NS(yt,"displayName","YAxis");NS(yt,"defaultProps",{allowDuplicatedCategory:!0,allowDecimals:!0,hide:!1,orientation:"left",width:60,height:0,mirror:!1,yAxisId:0,tickCount:5,type:"number",padding:{top:0,bottom:0},allowDataOverflow:!1,scale:"auto",reversed:!1});function N2(e){return Nae(e)||$ae(e)||jae(e)||Tae()}function Tae(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function jae(e,t){if(e){if(typeof e=="string")return jy(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return jy(e,t)}}function $ae(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Nae(e){if(Array.isArray(e))return jy(e)}function jy(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var $y=function(t,n,r,a,o){var i=qt(t,Qg),s=qt(t,Nd),l=[].concat(N2(i),N2(s)),u=qt(t,Rd),f="".concat(a,"Id"),c=a[0],p=n;if(l.length&&(p=l.reduce(function(m,g){if(g.props[f]===r&&mr(g.props,"extendDomain")&&V(g.props[c])){var v=g.props[c];return[Math.min(m[0],v),Math.max(m[1],v)]}return m},p)),u.length){var d="".concat(c,"1"),h="".concat(c,"2");p=u.reduce(function(m,g){if(g.props[f]===r&&mr(g.props,"extendDomain")&&V(g.props[d])&&V(g.props[h])){var v=g.props[d],y=g.props[h];return[Math.min(m[0],v,y),Math.max(m[1],v,y)]}return m},p)}return o&&o.length&&(p=o.reduce(function(m,g){return V(g)?[Math.min(m[0],g),Math.max(m[1],g)]:m},p)),p},RS={exports:{}};(function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function a(l,u,f){this.fn=l,this.context=u,this.once=f||!1}function o(l,u,f,c,p){if(typeof f!="function")throw new TypeError("The listener must be a function");var d=new a(f,c||l,p),h=n?n+u:u;return l._events[h]?l._events[h].fn?l._events[h]=[l._events[h],d]:l._events[h].push(d):(l._events[h]=d,l._eventsCount++),l}function i(l,u){--l._eventsCount===0?l._events=new r:delete l._events[u]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var u=[],f,c;if(this._eventsCount===0)return u;for(c in f=this._events)t.call(f,c)&&u.push(n?c.slice(1):c);return Object.getOwnPropertySymbols?u.concat(Object.getOwnPropertySymbols(f)):u},s.prototype.listeners=function(u){var f=n?n+u:u,c=this._events[f];if(!c)return[];if(c.fn)return[c.fn];for(var p=0,d=c.length,h=new Array(d);p<d;p++)h[p]=c[p].fn;return h},s.prototype.listenerCount=function(u){var f=n?n+u:u,c=this._events[f];return c?c.fn?1:c.length:0},s.prototype.emit=function(u,f,c,p,d,h){var m=n?n+u:u;if(!this._events[m])return!1;var g=this._events[m],v=arguments.length,y,x;if(g.fn){switch(g.once&&this.removeListener(u,g.fn,void 0,!0),v){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,f),!0;case 3:return g.fn.call(g.context,f,c),!0;case 4:return g.fn.call(g.context,f,c,p),!0;case 5:return g.fn.call(g.context,f,c,p,d),!0;case 6:return g.fn.call(g.context,f,c,p,d,h),!0}for(x=1,y=new Array(v-1);x<v;x++)y[x-1]=arguments[x];g.fn.apply(g.context,y)}else{var P=g.length,w;for(x=0;x<P;x++)switch(g[x].once&&this.removeListener(u,g[x].fn,void 0,!0),v){case 1:g[x].fn.call(g[x].context);break;case 2:g[x].fn.call(g[x].context,f);break;case 3:g[x].fn.call(g[x].context,f,c);break;case 4:g[x].fn.call(g[x].context,f,c,p);break;default:if(!y)for(w=1,y=new Array(v-1);w<v;w++)y[w-1]=arguments[w];g[x].fn.apply(g[x].context,y)}}return!0},s.prototype.on=function(u,f,c){return o(this,u,f,c,!1)},s.prototype.once=function(u,f,c){return o(this,u,f,c,!0)},s.prototype.removeListener=function(u,f,c,p){var d=n?n+u:u;if(!this._events[d])return this;if(!f)return i(this,d),this;var h=this._events[d];if(h.fn)h.fn===f&&(!p||h.once)&&(!c||h.context===c)&&i(this,d);else{for(var m=0,g=[],v=h.length;m<v;m++)(h[m].fn!==f||p&&!h[m].once||c&&h[m].context!==c)&&g.push(h[m]);g.length?this._events[d]=g.length===1?g[0]:g:i(this,d)}return this},s.prototype.removeAllListeners=function(u){var f;return u?(f=n?n+u:u,this._events[f]&&i(this,f)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=n,s.EventEmitter=s,e.exports=s})(RS);var Mae=RS.exports;const Rae=Ce(Mae);var eh=new Rae,th="recharts.syncMouseEvents";function xu(e){"@babel/helpers - typeof";return xu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xu(e)}function Iae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Dae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,IS(r.key),r)}}function Lae(e,t,n){return t&&Dae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function nh(e,t,n){return t=IS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function IS(e){var t=Fae(e,"string");return xu(t)=="symbol"?t:t+""}function Fae(e,t){if(xu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(xu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var zae=function(){function e(){Iae(this,e),nh(this,"activeIndex",0),nh(this,"coordinateList",[]),nh(this,"layout","horizontal")}return Lae(e,[{key:"setDetails",value:function(n){var r,a=n.coordinateList,o=a===void 0?null:a,i=n.container,s=i===void 0?null:i,l=n.layout,u=l===void 0?null:l,f=n.offset,c=f===void 0?null:f,p=n.mouseHandlerCallback,d=p===void 0?null:p;this.coordinateList=(r=o??this.coordinateList)!==null&&r!==void 0?r:[],this.container=s??this.container,this.layout=u??this.layout,this.offset=c??this.offset,this.mouseHandlerCallback=d??this.mouseHandlerCallback,this.activeIndex=Math.min(Math.max(this.activeIndex,0),this.coordinateList.length-1)}},{key:"focus",value:function(){this.spoofMouse()}},{key:"keyboardEvent",value:function(n){if(this.coordinateList.length!==0)switch(n.key){case"ArrowRight":{if(this.layout!=="horizontal")return;this.activeIndex=Math.min(this.activeIndex+1,this.coordinateList.length-1),this.spoofMouse();break}case"ArrowLeft":{if(this.layout!=="horizontal")return;this.activeIndex=Math.max(this.activeIndex-1,0),this.spoofMouse();break}}}},{key:"setIndex",value:function(n){this.activeIndex=n}},{key:"spoofMouse",value:function(){var n,r;if(this.layout==="horizontal"&&this.coordinateList.length!==0){var a=this.container.getBoundingClientRect(),o=a.x,i=a.y,s=a.height,l=this.coordinateList[this.activeIndex].coordinate,u=((n=window)===null||n===void 0?void 0:n.scrollX)||0,f=((r=window)===null||r===void 0?void 0:r.scrollY)||0,c=o+l+u,p=i+this.offset.top+s/2+f;this.mouseHandlerCallback({pageX:c,pageY:p})}}}])}();function Bae(e,t,n){if(n==="number"&&t===!0&&Array.isArray(e)){var r=e==null?void 0:e[0],a=e==null?void 0:e[1];if(r&&a&&V(r)&&V(a))return!0}return!1}function Hae(e,t,n,r){var a=r/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-a:n.left+.5,y:e==="horizontal"?n.top+.5:t.y-a,width:e==="horizontal"?r:n.width-1,height:e==="horizontal"?n.height-1:r}}function DS(e){var t=e.cx,n=e.cy,r=e.radius,a=e.startAngle,o=e.endAngle,i=vt(t,n,r,a),s=vt(t,n,r,o);return{points:[i,s],cx:t,cy:n,radius:r,startAngle:a,endAngle:o}}function Gae(e,t,n){var r,a,o,i;if(e==="horizontal")r=t.x,o=r,a=n.top,i=n.top+n.height;else if(e==="vertical")a=t.y,i=a,r=n.left,o=n.left+n.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var s=t.cx,l=t.cy,u=t.innerRadius,f=t.outerRadius,c=t.angle,p=vt(s,l,u,c),d=vt(s,l,f,c);r=p.x,a=p.y,o=d.x,i=d.y}else return DS(t);return[{x:r,y:a},{x:o,y:i}]}function wu(e){"@babel/helpers - typeof";return wu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},wu(e)}function M2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Pc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?M2(Object(n),!0).forEach(function(r){Uae(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):M2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Uae(e,t,n){return t=Wae(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Wae(e){var t=qae(e,"string");return wu(t)=="symbol"?t:t+""}function qae(e,t){if(wu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(wu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Vae(e){var t,n,r=e.element,a=e.tooltipEventType,o=e.isActive,i=e.activeCoordinate,s=e.activePayload,l=e.offset,u=e.activeTooltipIndex,f=e.tooltipAxisBandSize,c=e.layout,p=e.chartName,d=(t=r.props.cursor)!==null&&t!==void 0?t:(n=r.type.defaultProps)===null||n===void 0?void 0:n.cursor;if(!r||!d||!o||!i||p!=="ScatterChart"&&a!=="axis")return null;var h,m=mo;if(p==="ScatterChart")h=i,m=xJ;else if(p==="BarChart")h=Hae(c,i,l,f),m=Ug;else if(c==="radial"){var g=DS(i),v=g.cx,y=g.cy,x=g.radius,P=g.startAngle,w=g.endAngle;h={cx:v,cy:y,startAngle:P,endAngle:w,innerRadius:x,outerRadius:x},m=$P}else h={points:Gae(c,i,l)},m=mo;var S=Pc(Pc(Pc(Pc({stroke:"#ccc",pointerEvents:"none"},l),h),re(d,!1)),{},{payload:s,payloadIndex:u,className:ue("recharts-tooltip-cursor",d.className)});return k.isValidElement(d)?k.cloneElement(d,S):k.createElement(m,S)}var Kae=["item"],Xae=["children","className","width","height","style","compact","title","desc"];function os(e){"@babel/helpers - typeof";return os=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},os(e)}function ai(){return ai=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ai.apply(this,arguments)}function R2(e,t){return Zae(e)||Qae(e,t)||FS(e,t)||Yae()}function Yae(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Qae(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(f){u=!0,a=f}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function Zae(e){if(Array.isArray(e))return e}function I2(e,t){if(e==null)return{};var n=Jae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Jae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function eoe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function toe(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,zS(r.key),r)}}function noe(e,t,n){return t&&toe(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function roe(e,t,n){return t=Pp(t),aoe(e,LS()?Reflect.construct(t,n||[],Pp(e).constructor):t.apply(e,n))}function aoe(e,t){if(t&&(os(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return ooe(e)}function ooe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function LS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(LS=function(){return!!e})()}function Pp(e){return Pp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Pp(e)}function ioe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Ny(e,t)}function Ny(e,t){return Ny=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Ny(e,t)}function is(e){return uoe(e)||loe(e)||FS(e)||soe()}function soe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FS(e,t){if(e){if(typeof e=="string")return My(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return My(e,t)}}function loe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function uoe(e){if(Array.isArray(e))return My(e)}function My(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function D2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?D2(Object(n),!0).forEach(function(r){ee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):D2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ee(e,t,n){return t=zS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function zS(e){var t=coe(e,"string");return os(t)=="symbol"?t:t+""}function coe(e,t){if(os(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(os(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var foe={xAxis:["bottom","top"],yAxis:["left","right"]},poe={width:"100%",height:"100%"},BS={x:0,y:0};function Sc(e){return e}var doe=function(t,n){return n==="horizontal"?t.x:n==="vertical"?t.y:n==="centric"?t.angle:t.radius},moe=function(t,n,r,a){var o=n.find(function(f){return f&&f.index===r});if(o){if(t==="horizontal")return{x:o.coordinate,y:a.y};if(t==="vertical")return{x:a.x,y:o.coordinate};if(t==="centric"){var i=o.coordinate,s=a.radius;return z(z(z({},a),vt(a.cx,a.cy,s,i)),{},{angle:i,radius:s})}var l=o.coordinate,u=a.angle;return z(z(z({},a),vt(a.cx,a.cy,l,u)),{},{angle:u,radius:l})}return BS},Ld=function(t,n){var r=n.graphicalItems,a=n.dataStartIndex,o=n.dataEndIndex,i=(r??[]).reduce(function(s,l){var u=l.props.data;return u&&u.length?[].concat(is(s),is(u)):s},[]);return i.length>0?i:t&&t.length&&V(a)&&V(o)?t.slice(a,o+1):[]};function HS(e){return e==="number"?[0,"auto"]:void 0}var Ry=function(t,n,r,a){var o=t.graphicalItems,i=t.tooltipAxis,s=Ld(n,t);return r<0||!o||!o.length||r>=s.length?null:o.reduce(function(l,u){var f,c=(f=u.props.data)!==null&&f!==void 0?f:n;c&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(c=c.slice(t.dataStartIndex,t.dataEndIndex+1));var p;if(i.dataKey&&!i.allowDuplicatedCategory){var d=c===void 0?s:c;p=Pf(d,i.dataKey,a)}else p=c&&c[r]||s[r];return p?[].concat(is(l),[EP(u,p)]):l},[])},L2=function(t,n,r,a){var o=a||{x:t.chartX,y:t.chartY},i=doe(o,r),s=t.orderedTooltipTicks,l=t.tooltipAxis,u=t.tooltipTicks,f=tY(i,s,u,l);if(f>=0&&u){var c=u[f]&&u[f].value,p=Ry(t,n,f,c),d=moe(r,s,f,o);return{activeTooltipIndex:f,activeLabel:c,activePayload:p,activeCoordinate:d}}return null},hoe=function(t,n){var r=n.axes,a=n.graphicalItems,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,f=t.layout,c=t.children,p=t.stackOffset,d=_P(f,o);return r.reduce(function(h,m){var g,v=m.type.defaultProps!==void 0?z(z({},m.type.defaultProps),m.props):m.props,y=v.type,x=v.dataKey,P=v.allowDataOverflow,w=v.allowDuplicatedCategory,S=v.scale,O=v.ticks,_=v.includeHidden,A=v[i];if(h[A])return h;var j=Ld(t.data,{graphicalItems:a.filter(function(G){var Z,ie=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i];return ie===A}),dataStartIndex:l,dataEndIndex:u}),E=j.length,T,N,M;Bae(v.domain,P,y)&&(T=Xv(v.domain,null,P),d&&(y==="number"||S!=="auto")&&(M=ml(j,x,"category")));var I=HS(y);if(!T||T.length===0){var R,L=(R=v.domain)!==null&&R!==void 0?R:I;if(x){if(T=ml(j,x,y),y==="category"&&d){var $=BM(T);w&&$?(N=T,T=ip(0,E)):w||(T=pb(L,T,m).reduce(function(G,Z){return G.indexOf(Z)>=0?G:[].concat(is(G),[Z])},[]))}else if(y==="category")w?T=T.filter(function(G){return G!==""&&!te(G)}):T=pb(L,T,m).reduce(function(G,Z){return G.indexOf(Z)>=0||Z===""||te(Z)?G:[].concat(is(G),[Z])},[]);else if(y==="number"){var D=iY(j,a.filter(function(G){var Z,ie,ve=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i],Pe="hide"in G.props?G.props.hide:(ie=G.type.defaultProps)===null||ie===void 0?void 0:ie.hide;return ve===A&&(_||!Pe)}),x,o,f);D&&(T=D)}d&&(y==="number"||S!=="auto")&&(M=ml(j,x,"category"))}else d?T=ip(0,E):s&&s[A]&&s[A].hasStack&&y==="number"?T=p==="expand"?[0,1]:CP(s[A].stackGroups,l,u):T=kP(j,a.filter(function(G){var Z=i in G.props?G.props[i]:G.type.defaultProps[i],ie="hide"in G.props?G.props.hide:G.type.defaultProps.hide;return Z===A&&(_||!ie)}),y,f,!0);if(y==="number")T=$y(c,T,A,o,O),L&&(T=Xv(L,T,P));else if(y==="category"&&L){var H=L,W=T.every(function(G){return H.indexOf(G)>=0});W&&(T=H)}}return z(z({},h),{},ee({},A,z(z({},v),{},{axisType:o,domain:T,categoricalDomain:M,duplicateDomain:N,originalDomain:(g=v.domain)!==null&&g!==void 0?g:I,isCategorical:d,layout:f})))},{})},voe=function(t,n){var r=n.graphicalItems,a=n.Axis,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,f=t.layout,c=t.children,p=Ld(t.data,{graphicalItems:r,dataStartIndex:l,dataEndIndex:u}),d=p.length,h=_P(f,o),m=-1;return r.reduce(function(g,v){var y=v.type.defaultProps!==void 0?z(z({},v.type.defaultProps),v.props):v.props,x=y[i],P=HS("number");if(!g[x]){m++;var w;return h?w=ip(0,d):s&&s[x]&&s[x].hasStack?(w=CP(s[x].stackGroups,l,u),w=$y(c,w,x,o)):(w=Xv(P,kP(p,r.filter(function(S){var O,_,A=i in S.props?S.props[i]:(O=S.type.defaultProps)===null||O===void 0?void 0:O[i],j="hide"in S.props?S.props.hide:(_=S.type.defaultProps)===null||_===void 0?void 0:_.hide;return A===x&&!j}),"number",f),a.defaultProps.allowDataOverflow),w=$y(c,w,x,o)),z(z({},g),{},ee({},x,z(z({axisType:o},a.defaultProps),{},{hide:!0,orientation:gn(foe,"".concat(o,".").concat(m%2),null),domain:w,originalDomain:P,isCategorical:h,layout:f})))}return g},{})},yoe=function(t,n){var r=n.axisType,a=r===void 0?"xAxis":r,o=n.AxisComp,i=n.graphicalItems,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,f=t.children,c="".concat(a,"Id"),p=qt(f,o),d={};return p&&p.length?d=hoe(t,{axes:p,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u}):i&&i.length&&(d=voe(t,{Axis:o,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u})),d},goe=function(t){var n=oa(t),r=Er(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:vg(r,function(a){return a.coordinate}),tooltipAxis:n,tooltipAxisBandSize:Qf(n,r)}},F2=function(t){var n=t.children,r=t.defaultShowTooltip,a=Qt(n,Vi),o=0,i=0;return t.data&&t.data.length!==0&&(i=t.data.length-1),a&&a.props&&(a.props.startIndex>=0&&(o=a.props.startIndex),a.props.endIndex>=0&&(i=a.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:!!r}},xoe=function(t){return!t||!t.length?!1:t.some(function(n){var r=jr(n&&n.type);return r&&r.indexOf("Bar")>=0})},z2=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},woe=function(t,n){var r=t.props,a=t.graphicalItems,o=t.xAxisMap,i=o===void 0?{}:o,s=t.yAxisMap,l=s===void 0?{}:s,u=r.width,f=r.height,c=r.children,p=r.margin||{},d=Qt(c,Vi),h=Qt(c,hi),m=Object.keys(l).reduce(function(w,S){var O=l[S],_=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},_,w[_]+O.width)):w},{left:p.left||0,right:p.right||0}),g=Object.keys(i).reduce(function(w,S){var O=i[S],_=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},_,gn(w,"".concat(_))+O.height)):w},{top:p.top||0,bottom:p.bottom||0}),v=z(z({},g),m),y=v.bottom;d&&(v.bottom+=d.props.height||Vi.defaultProps.height),h&&n&&(v=aY(v,a,r,n));var x=u-v.left-v.right,P=f-v.top-v.bottom;return z(z({brushBottom:y},v),{},{width:Math.max(x,0),height:Math.max(P,0)})},boe=function(t,n){if(n==="xAxis")return t[n].width;if(n==="yAxis")return t[n].height},Fd=function(t){var n=t.chartName,r=t.GraphicalChild,a=t.defaultTooltipEventType,o=a===void 0?"axis":a,i=t.validateTooltipEventTypes,s=i===void 0?["axis"]:i,l=t.axisComponents,u=t.legendContent,f=t.formatAxisMap,c=t.defaultProps,p=function(v,y){var x=y.graphicalItems,P=y.stackGroups,w=y.offset,S=y.updateId,O=y.dataStartIndex,_=y.dataEndIndex,A=v.barSize,j=v.layout,E=v.barGap,T=v.barCategoryGap,N=v.maxBarSize,M=z2(j),I=M.numericAxisName,R=M.cateAxisName,L=xoe(x),$=[];return x.forEach(function(D,H){var W=Ld(v.data,{graphicalItems:[D],dataStartIndex:O,dataEndIndex:_}),G=D.type.defaultProps!==void 0?z(z({},D.type.defaultProps),D.props):D.props,Z=G.dataKey,ie=G.maxBarSize,ve=G["".concat(I,"Id")],Pe=G["".concat(R,"Id")],J={},le=l.reduce(function(Ba,Ha){var Wd=y["".concat(Ha.axisType,"Map")],l1=G["".concat(Ha.axisType,"Id")];Wd&&Wd[l1]||Ha.axisType==="zAxis"||Ao();var u1=Wd[l1];return z(z({},Ba),{},ee(ee({},Ha.axisType,u1),"".concat(Ha.axisType,"Ticks"),Er(u1)))},J),q=le[R],K=le["".concat(R,"Ticks")],X=P&&P[ve]&&P[ve].hasStack&&gY(D,P[ve].stackGroups),F=jr(D.type).indexOf("Bar")>=0,fe=Qf(q,K),ne=[],Ne=L&&nY({barSize:A,stackGroups:P,totalSize:boe(le,R)});if(F){var Me,Ze,Xn=te(ie)?N:ie,On=(Me=(Ze=Qf(q,K,!0))!==null&&Ze!==void 0?Ze:Xn)!==null&&Me!==void 0?Me:0;ne=rY({barGap:E,barCategoryGap:T,bandSize:On!==fe?On:fe,sizeList:Ne[Pe],maxBarSize:Xn}),On!==fe&&(ne=ne.map(function(Ba){return z(z({},Ba),{},{position:z(z({},Ba.position),{},{offset:Ba.position.offset-On/2})})}))}var Fu=D&&D.type&&D.type.getComposedData;Fu&&$.push({props:z(z({},Fu(z(z({},le),{},{displayedData:W,props:v,dataKey:Z,item:D,bandSize:fe,barPosition:ne,offset:w,stackedData:X,layout:j,dataStartIndex:O,dataEndIndex:_}))),{},ee(ee(ee({key:D.key||"item-".concat(H)},I,le[I]),R,le[R]),"animationId",S)),childIndex:eR(D,v.children),item:D})}),$},d=function(v,y){var x=v.props,P=v.dataStartIndex,w=v.dataEndIndex,S=v.updateId;if(!iw({props:x}))return null;var O=x.children,_=x.layout,A=x.stackOffset,j=x.data,E=x.reverseStackOrder,T=z2(_),N=T.numericAxisName,M=T.cateAxisName,I=qt(O,r),R=hY(j,I,"".concat(N,"Id"),"".concat(M,"Id"),A,E),L=l.reduce(function(G,Z){var ie="".concat(Z.axisType,"Map");return z(z({},G),{},ee({},ie,yoe(x,z(z({},Z),{},{graphicalItems:I,stackGroups:Z.axisType===N&&R,dataStartIndex:P,dataEndIndex:w}))))},{}),$=woe(z(z({},L),{},{props:x,graphicalItems:I}),y==null?void 0:y.legendBBox);Object.keys(L).forEach(function(G){L[G]=f(x,L[G],$,G.replace("Map",""),n)});var D=L["".concat(M,"Map")],H=goe(D),W=p(x,z(z({},L),{},{dataStartIndex:P,dataEndIndex:w,updateId:S,graphicalItems:I,stackGroups:R,offset:$}));return z(z({formattedGraphicalItems:W,graphicalItems:I,offset:$,stackGroups:R},H),L)},h=function(g){function v(y){var x,P,w;return eoe(this,v),w=roe(this,v,[y]),ee(w,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),ee(w,"accessibilityManager",new zae),ee(w,"handleLegendBBoxUpdate",function(S){if(S){var O=w.state,_=O.dataStartIndex,A=O.dataEndIndex,j=O.updateId;w.setState(z({legendBBox:S},d({props:w.props,dataStartIndex:_,dataEndIndex:A,updateId:j},z(z({},w.state),{},{legendBBox:S}))))}}),ee(w,"handleReceiveSyncEvent",function(S,O,_){if(w.props.syncId===S){if(_===w.eventEmitterSymbol&&typeof w.props.syncMethod!="function")return;w.applySyncEvent(O)}}),ee(w,"handleBrushChange",function(S){var O=S.startIndex,_=S.endIndex;if(O!==w.state.dataStartIndex||_!==w.state.dataEndIndex){var A=w.state.updateId;w.setState(function(){return z({dataStartIndex:O,dataEndIndex:_},d({props:w.props,dataStartIndex:O,dataEndIndex:_,updateId:A},w.state))}),w.triggerSyncEvent({dataStartIndex:O,dataEndIndex:_})}}),ee(w,"handleMouseEnter",function(S){var O=w.getMouseInfo(S);if(O){var _=z(z({},O),{},{isTooltipActive:!0});w.setState(_),w.triggerSyncEvent(_);var A=w.props.onMouseEnter;oe(A)&&A(_,S)}}),ee(w,"triggeredAfterMouseMove",function(S){var O=w.getMouseInfo(S),_=O?z(z({},O),{},{isTooltipActive:!0}):{isTooltipActive:!1};w.setState(_),w.triggerSyncEvent(_);var A=w.props.onMouseMove;oe(A)&&A(_,S)}),ee(w,"handleItemMouseEnter",function(S){w.setState(function(){return{isTooltipActive:!0,activeItem:S,activePayload:S.tooltipPayload,activeCoordinate:S.tooltipPosition||{x:S.cx,y:S.cy}}})}),ee(w,"handleItemMouseLeave",function(){w.setState(function(){return{isTooltipActive:!1}})}),ee(w,"handleMouseMove",function(S){S.persist(),w.throttleTriggeredAfterMouseMove(S)}),ee(w,"handleMouseLeave",function(S){w.throttleTriggeredAfterMouseMove.cancel();var O={isTooltipActive:!1};w.setState(O),w.triggerSyncEvent(O);var _=w.props.onMouseLeave;oe(_)&&_(O,S)}),ee(w,"handleOuterEvent",function(S){var O=JM(S),_=gn(w.props,"".concat(O));if(O&&oe(_)){var A,j;/.*touch.*/i.test(O)?j=w.getMouseInfo(S.changedTouches[0]):j=w.getMouseInfo(S),_((A=j)!==null&&A!==void 0?A:{},S)}}),ee(w,"handleClick",function(S){var O=w.getMouseInfo(S);if(O){var _=z(z({},O),{},{isTooltipActive:!0});w.setState(_),w.triggerSyncEvent(_);var A=w.props.onClick;oe(A)&&A(_,S)}}),ee(w,"handleMouseDown",function(S){var O=w.props.onMouseDown;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleMouseUp",function(S){var O=w.props.onMouseUp;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleTouchMove",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.throttleTriggeredAfterMouseMove(S.changedTouches[0])}),ee(w,"handleTouchStart",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.handleMouseDown(S.changedTouches[0])}),ee(w,"handleTouchEnd",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&w.handleMouseUp(S.changedTouches[0])}),ee(w,"handleDoubleClick",function(S){var O=w.props.onDoubleClick;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"handleContextMenu",function(S){var O=w.props.onContextMenu;if(oe(O)){var _=w.getMouseInfo(S);O(_,S)}}),ee(w,"triggerSyncEvent",function(S){w.props.syncId!==void 0&&eh.emit(th,w.props.syncId,S,w.eventEmitterSymbol)}),ee(w,"applySyncEvent",function(S){var O=w.props,_=O.layout,A=O.syncMethod,j=w.state.updateId,E=S.dataStartIndex,T=S.dataEndIndex;if(S.dataStartIndex!==void 0||S.dataEndIndex!==void 0)w.setState(z({dataStartIndex:E,dataEndIndex:T},d({props:w.props,dataStartIndex:E,dataEndIndex:T,updateId:j},w.state)));else if(S.activeTooltipIndex!==void 0){var N=S.chartX,M=S.chartY,I=S.activeTooltipIndex,R=w.state,L=R.offset,$=R.tooltipTicks;if(!L)return;if(typeof A=="function")I=A($,S);else if(A==="value"){I=-1;for(var D=0;D<$.length;D++)if($[D].value===S.activeLabel){I=D;break}}var H=z(z({},L),{},{x:L.left,y:L.top}),W=Math.min(N,H.x+H.width),G=Math.min(M,H.y+H.height),Z=$[I]&&$[I].value,ie=Ry(w.state,w.props.data,I),ve=$[I]?{x:_==="horizontal"?$[I].coordinate:W,y:_==="horizontal"?G:$[I].coordinate}:BS;w.setState(z(z({},S),{},{activeLabel:Z,activeCoordinate:ve,activePayload:ie,activeTooltipIndex:I}))}else w.setState(S)}),ee(w,"renderCursor",function(S){var O,_=w.state,A=_.isTooltipActive,j=_.activeCoordinate,E=_.activePayload,T=_.offset,N=_.activeTooltipIndex,M=_.tooltipAxisBandSize,I=w.getTooltipEventType(),R=(O=S.props.active)!==null&&O!==void 0?O:A,L=w.props.layout,$=S.key||"_recharts-cursor";return C.createElement(Vae,{key:$,activeCoordinate:j,activePayload:E,activeTooltipIndex:N,chartName:n,element:S,isActive:R,layout:L,offset:T,tooltipAxisBandSize:M,tooltipEventType:I})}),ee(w,"renderPolarAxis",function(S,O,_){var A=gn(S,"type.axisType"),j=gn(w.state,"".concat(A,"Map")),E=S.type.defaultProps,T=E!==void 0?z(z({},E),S.props):S.props,N=j&&j[T["".concat(A,"Id")]];return k.cloneElement(S,z(z({},N),{},{className:ue(A,N.className),key:S.key||"".concat(O,"-").concat(_),ticks:Er(N,!0)}))}),ee(w,"renderPolarGrid",function(S){var O=S.props,_=O.radialLines,A=O.polarAngles,j=O.polarRadius,E=w.state,T=E.radiusAxisMap,N=E.angleAxisMap,M=oa(T),I=oa(N),R=I.cx,L=I.cy,$=I.innerRadius,D=I.outerRadius;return k.cloneElement(S,{polarAngles:Array.isArray(A)?A:Er(I,!0).map(function(H){return H.coordinate}),polarRadius:Array.isArray(j)?j:Er(M,!0).map(function(H){return H.coordinate}),cx:R,cy:L,innerRadius:$,outerRadius:D,key:S.key||"polar-grid",radialLines:_})}),ee(w,"renderLegend",function(){var S=w.state.formattedGraphicalItems,O=w.props,_=O.children,A=O.width,j=O.height,E=w.props.margin||{},T=A-(E.left||0)-(E.right||0),N=SP({children:_,formattedGraphicalItems:S,legendWidth:T,legendContent:u});if(!N)return null;var M=N.item,I=I2(N,Kae);return k.cloneElement(M,z(z({},I),{},{chartWidth:A,chartHeight:j,margin:E,onBBoxUpdate:w.handleLegendBBoxUpdate}))}),ee(w,"renderTooltip",function(){var S,O=w.props,_=O.children,A=O.accessibilityLayer,j=Qt(_,Zn);if(!j)return null;var E=w.state,T=E.isTooltipActive,N=E.activeCoordinate,M=E.activePayload,I=E.activeLabel,R=E.offset,L=(S=j.props.active)!==null&&S!==void 0?S:T;return k.cloneElement(j,{viewBox:z(z({},R),{},{x:R.left,y:R.top}),active:L,label:I,payload:L?M:[],coordinate:N,accessibilityLayer:A})}),ee(w,"renderBrush",function(S){var O=w.props,_=O.margin,A=O.data,j=w.state,E=j.offset,T=j.dataStartIndex,N=j.dataEndIndex,M=j.updateId;return k.cloneElement(S,{key:S.key||"_recharts-brush",onChange:gc(w.handleBrushChange,S.props.onChange),data:A,x:V(S.props.x)?S.props.x:E.left,y:V(S.props.y)?S.props.y:E.top+E.height+E.brushBottom-(_.bottom||0),width:V(S.props.width)?S.props.width:E.width,startIndex:T,endIndex:N,updateId:"brush-".concat(M)})}),ee(w,"renderReferenceElement",function(S,O,_){if(!S)return null;var A=w,j=A.clipPathId,E=w.state,T=E.xAxisMap,N=E.yAxisMap,M=E.offset,I=S.type.defaultProps||{},R=S.props,L=R.xAxisId,$=L===void 0?I.xAxisId:L,D=R.yAxisId,H=D===void 0?I.yAxisId:D;return k.cloneElement(S,{key:S.key||"".concat(O,"-").concat(_),xAxis:T[$],yAxis:N[H],viewBox:{x:M.left,y:M.top,width:M.width,height:M.height},clipPathId:j})}),ee(w,"renderActivePoints",function(S){var O=S.item,_=S.activePoint,A=S.basePoint,j=S.childIndex,E=S.isRange,T=[],N=O.props.key,M=O.item.type.defaultProps!==void 0?z(z({},O.item.type.defaultProps),O.item.props):O.item.props,I=M.activeDot,R=M.dataKey,L=z(z({index:j,dataKey:R,cx:_.x,cy:_.y,r:4,fill:Gg(O.item),strokeWidth:2,stroke:"#fff",payload:_.payload,value:_.value},re(I,!1)),Sf(I));return T.push(v.renderActiveDot(I,L,"".concat(N,"-activePoint-").concat(j))),A?T.push(v.renderActiveDot(I,z(z({},L),{},{cx:A.x,cy:A.y}),"".concat(N,"-basePoint-").concat(j))):E&&T.push(null),T}),ee(w,"renderGraphicChild",function(S,O,_){var A=w.filterFormatItem(S,O,_);if(!A)return null;var j=w.getTooltipEventType(),E=w.state,T=E.isTooltipActive,N=E.tooltipAxis,M=E.activeTooltipIndex,I=E.activeLabel,R=w.props.children,L=Qt(R,Zn),$=A.props,D=$.points,H=$.isRange,W=$.baseLine,G=A.item.type.defaultProps!==void 0?z(z({},A.item.type.defaultProps),A.item.props):A.item.props,Z=G.activeDot,ie=G.hide,ve=G.activeBar,Pe=G.activeShape,J=!!(!ie&&T&&L&&(Z||ve||Pe)),le={};j!=="axis"&&L&&L.props.trigger==="click"?le={onClick:gc(w.handleItemMouseEnter,S.props.onClick)}:j!=="axis"&&(le={onMouseLeave:gc(w.handleItemMouseLeave,S.props.onMouseLeave),onMouseEnter:gc(w.handleItemMouseEnter,S.props.onMouseEnter)});var q=k.cloneElement(S,z(z({},A.props),le));function K(Ha){return typeof N.dataKey=="function"?N.dataKey(Ha.payload):null}if(J)if(M>=0){var X,F;if(N.dataKey&&!N.allowDuplicatedCategory){var fe=typeof N.dataKey=="function"?K:"payload.".concat(N.dataKey.toString());X=Pf(D,fe,I),F=H&&W&&Pf(W,fe,I)}else X=D==null?void 0:D[M],F=H&&W&&W[M];if(Pe||ve){var ne=S.props.activeIndex!==void 0?S.props.activeIndex:M;return[k.cloneElement(S,z(z(z({},A.props),le),{},{activeIndex:ne})),null,null]}if(!te(X))return[q].concat(is(w.renderActivePoints({item:A,activePoint:X,basePoint:F,childIndex:M,isRange:H})))}else{var Ne,Me=(Ne=w.getItemByXY(w.state.activeCoordinate))!==null&&Ne!==void 0?Ne:{graphicalItem:q},Ze=Me.graphicalItem,Xn=Ze.item,On=Xn===void 0?S:Xn,Fu=Ze.childIndex,Ba=z(z(z({},A.props),le),{},{activeIndex:Fu});return[k.cloneElement(On,Ba),null,null]}return H?[q,null,null]:[q,null]}),ee(w,"renderCustomized",function(S,O,_){return k.cloneElement(S,z(z({key:"recharts-customized-".concat(_)},w.props),w.state))}),ee(w,"renderMap",{CartesianGrid:{handler:Sc,once:!0},ReferenceArea:{handler:w.renderReferenceElement},ReferenceLine:{handler:Sc},ReferenceDot:{handler:w.renderReferenceElement},XAxis:{handler:Sc},YAxis:{handler:Sc},Brush:{handler:w.renderBrush,once:!0},Bar:{handler:w.renderGraphicChild},Line:{handler:w.renderGraphicChild},Area:{handler:w.renderGraphicChild},Radar:{handler:w.renderGraphicChild},RadialBar:{handler:w.renderGraphicChild},Scatter:{handler:w.renderGraphicChild},Pie:{handler:w.renderGraphicChild},Funnel:{handler:w.renderGraphicChild},Tooltip:{handler:w.renderCursor,once:!0},PolarGrid:{handler:w.renderPolarGrid,once:!0},PolarAngleAxis:{handler:w.renderPolarAxis},PolarRadiusAxis:{handler:w.renderPolarAxis},Customized:{handler:w.renderCustomized}}),w.clipPathId="".concat((x=y.id)!==null&&x!==void 0?x:$o("recharts"),"-clip"),w.throttleTriggeredAfterMouseMove=S7(w.triggeredAfterMouseMove,(P=y.throttleDelay)!==null&&P!==void 0?P:1e3/60),w.state={},w}return ioe(v,g),noe(v,[{key:"componentDidMount",value:function(){var x,P;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(P=this.props.margin.top)!==null&&P!==void 0?P:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,P=x.children,w=x.data,S=x.height,O=x.layout,_=Qt(P,Zn);if(_){var A=_.props.defaultIndex;if(!(typeof A!="number"||A<0||A>this.state.tooltipTicks.length-1)){var j=this.state.tooltipTicks[A]&&this.state.tooltipTicks[A].value,E=Ry(this.state,w,A,j),T=this.state.tooltipTicks[A].coordinate,N=(this.state.offset.top+S)/2,M=O==="horizontal",I=M?{x:T,y:N}:{y:T,x:N},R=this.state.formattedGraphicalItems.find(function($){var D=$.item;return D.type.name==="Scatter"});R&&(I=z(z({},I),R.props.points[A].tooltipPosition),E=R.props.points[A].tooltipPayload);var L={activeTooltipIndex:A,isTooltipActive:!0,activeLabel:j,activePayload:E,activeCoordinate:I};this.setState(L),this.renderCursor(_),this.accessibilityManager.setIndex(A)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,P){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==P.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var w,S;this.accessibilityManager.setDetails({offset:{left:(w=this.props.margin.left)!==null&&w!==void 0?w:0,top:(S=this.props.margin.top)!==null&&S!==void 0?S:0}})}return null}},{key:"componentDidUpdate",value:function(x){cv([Qt(x.children,Zn)],[Qt(this.props.children,Zn)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=Qt(this.props.children,Zn);if(x&&typeof x.props.shared=="boolean"){var P=x.props.shared?"axis":"item";return s.indexOf(P)>=0?P:o}return o}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var P=this.container,w=P.getBoundingClientRect(),S=AW(w),O={chartX:Math.round(x.pageX-S.left),chartY:Math.round(x.pageY-S.top)},_=w.width/P.offsetWidth||1,A=this.inRange(O.chartX,O.chartY,_);if(!A)return null;var j=this.state,E=j.xAxisMap,T=j.yAxisMap,N=this.getTooltipEventType(),M=L2(this.state,this.props.data,this.props.layout,A);if(N!=="axis"&&E&&T){var I=oa(E).scale,R=oa(T).scale,L=I&&I.invert?I.invert(O.chartX):null,$=R&&R.invert?R.invert(O.chartY):null;return z(z({},O),{},{xValue:L,yValue:$},M)}return M?z(z({},O),M):null}},{key:"inRange",value:function(x,P){var w=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,S=this.props.layout,O=x/w,_=P/w;if(S==="horizontal"||S==="vertical"){var A=this.state.offset,j=O>=A.left&&O<=A.left+A.width&&_>=A.top&&_<=A.top+A.height;return j?{x:O,y:_}:null}var E=this.state,T=E.angleAxisMap,N=E.radiusAxisMap;if(T&&N){var M=oa(T);return hb({x:O,y:_},M)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,P=this.getTooltipEventType(),w=Qt(x,Zn),S={};w&&P==="axis"&&(w.props.trigger==="click"?S={onClick:this.handleClick}:S={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var O=Sf(this.props,this.handleOuterEvent);return z(z({},O),S)}},{key:"addListener",value:function(){eh.on(th,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){eh.removeListener(th,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,P,w){for(var S=this.state.formattedGraphicalItems,O=0,_=S.length;O<_;O++){var A=S[O];if(A.item===x||A.props.key===x.key||P===jr(A.item.type)&&w===A.childIndex)return A}return null}},{key:"renderClipPath",value:function(){var x=this.clipPathId,P=this.state.offset,w=P.left,S=P.top,O=P.height,_=P.width;return C.createElement("defs",null,C.createElement("clipPath",{id:x},C.createElement("rect",{x:w,y:S,height:O,width:_})))}},{key:"getXScales",value:function(){var x=this.state.xAxisMap;return x?Object.entries(x).reduce(function(P,w){var S=R2(w,2),O=S[0],_=S[1];return z(z({},P),{},ee({},O,_.scale))},{}):null}},{key:"getYScales",value:function(){var x=this.state.yAxisMap;return x?Object.entries(x).reduce(function(P,w){var S=R2(w,2),O=S[0],_=S[1];return z(z({},P),{},ee({},O,_.scale))},{}):null}},{key:"getXScaleByAxisId",value:function(x){var P;return(P=this.state.xAxisMap)===null||P===void 0||(P=P[x])===null||P===void 0?void 0:P.scale}},{key:"getYScaleByAxisId",value:function(x){var P;return(P=this.state.yAxisMap)===null||P===void 0||(P=P[x])===null||P===void 0?void 0:P.scale}},{key:"getItemByXY",value:function(x){var P=this.state,w=P.formattedGraphicalItems,S=P.activeItem;if(w&&w.length)for(var O=0,_=w.length;O<_;O++){var A=w[O],j=A.props,E=A.item,T=E.type.defaultProps!==void 0?z(z({},E.type.defaultProps),E.props):E.props,N=jr(E.type);if(N==="Bar"){var M=(j.data||[]).find(function($){return uJ(x,$)});if(M)return{graphicalItem:A,payload:M}}else if(N==="RadialBar"){var I=(j.data||[]).find(function($){return hb(x,$)});if(I)return{graphicalItem:A,payload:I}}else if(Cd(A,S)||Ed(A,S)||mu(A,S)){var R=fee({graphicalItem:A,activeTooltipItem:S,itemData:T.data}),L=T.activeIndex===void 0?R:T.activeIndex;return{graphicalItem:z(z({},A),{},{childIndex:L}),payload:mu(A,S)?T.data[R]:A.props.data[R]}}}return null}},{key:"render",value:function(){var x=this;if(!iw(this))return null;var P=this.props,w=P.children,S=P.className,O=P.width,_=P.height,A=P.style,j=P.compact,E=P.title,T=P.desc,N=I2(P,Xae),M=re(N,!1);if(j)return C.createElement(d2,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},C.createElement(pv,ai({},M,{width:O,height:_,title:E,desc:T}),this.renderClipPath(),lw(w,this.renderMap)));if(this.props.accessibilityLayer){var I,R;M.tabIndex=(I=this.props.tabIndex)!==null&&I!==void 0?I:0,M.role=(R=this.props.role)!==null&&R!==void 0?R:"application",M.onKeyDown=function($){x.accessibilityManager.keyboardEvent($)},M.onFocus=function(){x.accessibilityManager.focus()}}var L=this.parseEventsOfWrapper();return C.createElement(d2,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},C.createElement("div",ai({className:ue("recharts-wrapper",S),style:z({position:"relative",cursor:"default",width:O,height:_},A)},L,{ref:function(D){x.container=D}}),C.createElement(pv,ai({},M,{width:O,height:_,title:E,desc:T,style:poe}),this.renderClipPath(),lw(w,this.renderMap)),this.renderLegend(),this.renderTooltip()))}}])}(k.Component);ee(h,"displayName",n),ee(h,"defaultProps",z({layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},c)),ee(h,"getDerivedStateFromProps",function(g,v){var y=g.dataKey,x=g.data,P=g.children,w=g.width,S=g.height,O=g.layout,_=g.stackOffset,A=g.margin,j=v.dataStartIndex,E=v.dataEndIndex;if(v.updateId===void 0){var T=F2(g);return z(z(z({},T),{},{updateId:0},d(z(z({props:g},T),{},{updateId:0}),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:S,prevLayout:O,prevStackOffset:_,prevMargin:A,prevChildren:P})}if(y!==v.prevDataKey||x!==v.prevData||w!==v.prevWidth||S!==v.prevHeight||O!==v.prevLayout||_!==v.prevStackOffset||!mi(A,v.prevMargin)){var N=F2(g),M={chartX:v.chartX,chartY:v.chartY,isTooltipActive:v.isTooltipActive},I=z(z({},L2(v,x,O)),{},{updateId:v.updateId+1}),R=z(z(z({},N),M),I);return z(z(z({},R),d(z({props:g},R),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:S,prevLayout:O,prevStackOffset:_,prevMargin:A,prevChildren:P})}if(!cv(P,v.prevChildren)){var L,$,D,H,W=Qt(P,Vi),G=W&&(L=($=W.props)===null||$===void 0?void 0:$.startIndex)!==null&&L!==void 0?L:j,Z=W&&(D=(H=W.props)===null||H===void 0?void 0:H.endIndex)!==null&&D!==void 0?D:E,ie=G!==j||Z!==E,ve=!te(x),Pe=ve&&!ie?v.updateId:v.updateId+1;return z(z({updateId:Pe},d(z(z({props:g},v),{},{updateId:Pe,dataStartIndex:G,dataEndIndex:Z}),v)),{},{prevChildren:P,dataStartIndex:G,dataEndIndex:Z})}return null}),ee(h,"renderActiveDot",function(g,v,y){var x;return k.isValidElement(g)?x=k.cloneElement(g,v):oe(g)?x=g(v):x=C.createElement(Ad,v),C.createElement(ye,{className:"recharts-active-dot",key:y},x)});var m=k.forwardRef(function(v,y){return C.createElement(h,ai({},v,{ref:y}))});return m.displayName=h.displayName,m},e1=Fd({chartName:"LineChart",GraphicalChild:Rt,axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),GS=Fd({chartName:"BarChart",GraphicalChild:Vr,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),Sp=Fd({chartName:"AreaChart",GraphicalChild:ft,axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt}],formatAxisMap:jd}),Poe=Fd({chartName:"ComposedChart",GraphicalChild:[Rt,ft,Vr,Dd],axisComponents:[{axisType:"xAxis",AxisComp:Et},{axisType:"yAxis",AxisComp:yt},{axisType:"zAxis",AxisComp:Id}],formatAxisMap:jd});const Soe={light:"",dark:".dark"},US=k.createContext(null);function WS(){const e=k.useContext(US);if(!e)throw new Error("useChart must be used within a <ChartContainer />");return e}const Fn=k.forwardRef(({id:e,className:t,children:n,config:r,...a},o)=>{const i=k.useId(),s=`chart-${e||i.replace(/:/g,"")}`;return b.jsx(US.Provider,{value:{config:r},children:b.jsxs("div",{"data-chart":s,ref:o,className:Oe("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...a,children:[b.jsx(Ooe,{id:s,config:r}),b.jsx(wW,{children:n})]})})});Fn.displayName="Chart";const Ooe=({id:e,config:t})=>{const n=Object.entries(t).filter(([r,a])=>a.theme||a.color);return n.length?b.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(Soe).map(([r,a])=>`
+${a} [data-chart=${e}] {
+${n.map(([o,i])=>{var l;const s=((l=i.theme)==null?void 0:l[r])||i.color;return s?`  --color-${o}: ${s};`:null}).join(`
+`)}
+}
+`).join(`
+`)}}):null},sr=Zn,zn=k.forwardRef(({active:e,payload:t,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:o=!1,label:i,labelFormatter:s,labelClassName:l,formatter:u,color:f,nameKey:c,labelKey:p},d)=>{const{config:h}=WS(),m=k.useMemo(()=>{var w;if(a||!(t!=null&&t.length))return null;const[v]=t,y=`${p||v.dataKey||v.name||"value"}`,x=Iy(h,v,y),P=!p&&typeof i=="string"?((w=h[i])==null?void 0:w.label)||i:x==null?void 0:x.label;return s?b.jsx("div",{className:Oe("font-medium",l),children:s(P,t)}):P?b.jsx("div",{className:Oe("font-medium",l),children:P}):null},[i,s,t,a,l,h,p]);if(!e||!(t!=null&&t.length))return null;const g=t.length===1&&r!=="dot";return b.jsxs("div",{ref:d,className:Oe("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[g?null:m,b.jsx("div",{className:"grid gap-1.5",children:t.map((v,y)=>{const x=`${c||v.name||v.dataKey||"value"}`,P=Iy(h,v,x),w=f||v.payload.fill||v.color;return b.jsx("div",{className:Oe("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:u&&(v==null?void 0:v.value)!==void 0&&v.name?u(v.value,v.name,v,y,v.payload):b.jsxs(b.Fragment,{children:[P!=null&&P.icon?b.jsx(P.icon,{}):!o&&b.jsx("div",{className:Oe("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":g&&r==="dashed"}),style:{"--color-bg":w,"--color-border":w}}),b.jsxs("div",{className:Oe("flex flex-1 justify-between leading-none",g?"items-end":"items-center"),children:[b.jsxs("div",{className:"grid gap-1.5",children:[g?m:null,b.jsx("span",{className:"text-muted-foreground",children:(P==null?void 0:P.label)||v.name})]}),v.value&&b.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:v.value.toLocaleString()})]})]})},v.dataKey)})})]})});zn.displayName="ChartTooltip";const koe=k.forwardRef(({className:e,hideIcon:t=!1,payload:n,verticalAlign:r="bottom",nameKey:a},o)=>{const{config:i}=WS();return n!=null&&n.length?b.jsx("div",{ref:o,className:Oe("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e),children:n.map(s=>{const l=`${a||s.dataKey||"value"}`,u=Iy(i,s,l);return b.jsxs("div",{className:Oe("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[u!=null&&u.icon&&!t?b.jsx(u.icon,{}):b.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:s.color}}),u==null?void 0:u.label]},s.value)})}):null});koe.displayName="ChartLegend";function Iy(e,t,n){if(typeof t!="object"||t===null)return;const r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let a=n;return n in t&&typeof t[n]=="string"?a=t[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in e?e[a]:e[n]}const _oe={empty:{icon:W4,title:"No Data Available",description:"There is no data to display at the moment."},error:{icon:dT,title:"Failed to Load Data",description:"An error occurred while loading the data. Please try again."},loading:{icon:V4,title:"Loading Data",description:"Please wait while we fetch the latest information."},"no-data":{icon:B4,title:"No Chart Data",description:"No data available to display in the chart."}},Aoe=({type:e="empty",title:t,description:n,action:r,className:a})=>{const o=_oe[e],i=o.icon;return b.jsx(xe,{className:`border-dashed ${a}`,children:b.jsxs(be,{className:"flex flex-col items-center justify-center py-12 px-6 text-center",children:[b.jsx("div",{className:"rounded-full bg-gray-100 p-3 mb-4",children:b.jsx(i,{className:`h-8 w-8 text-gray-400 ${e==="loading"?"animate-spin":""}`})}),b.jsx(we,{className:"text-lg font-medium text-gray-900 mb-2",children:t||o.title}),b.jsx("p",{className:"text-sm text-gray-500 mb-6 max-w-sm",children:n||o.description}),r&&b.jsxs(bf,{onClick:r.onClick,variant:"outline",size:"sm",children:[b.jsx(V4,{className:"h-4 w-4 mr-2"}),r.label]})]})})},Bn=({onRetry:e})=>b.jsx(Aoe,{type:"no-data",title:"No Chart Data",description:"Unable to generate chart with the current data set.",action:e?{label:"Retry",onClick:e}:void 0}),lr=({text:e="Kind Cluster / GitHub CI",position:t="top-center",className:n=""})=>{const r=()=>{switch(t){case"bottom-left":return"bottom-8 left-4";case"bottom-right":return"bottom-8 right-4";case"bottom-center":return"bottom-8 left-1/2 transform -translate-x-1/2";case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"top-center":return"left-1/2 transform -translate-x-1/2 -translate-y-1/2";default:return"bottom-8 left-1/2 transform -translate-x-1/2"}};return b.jsxs("div",{className:`absolute ${r()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${n}`,children:[b.jsx(q4,{className:"h-3 w-3 text-white"}),b.jsx("span",{className:"text-xs text-white font-medium",children:e})]})},Coe=({performanceMatrix:e,benchmarkResults:t,testConfiguration:n,performanceSummary:r,latencyPercentileComparison:a})=>{const o=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,throughput:Math.round(c.throughput),latency:Number(c.meanLatency.toFixed(1))})),i=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,gateway:Math.round(c.resources.envoyGateway.memory.mean),proxy:Math.round(c.resources.envoyProxy.memory.mean),total:Math.round(c.resources.envoyGateway.memory.mean+c.resources.envoyProxy.memory.mean)})),l=(()=>{if(a&&a.length>0){const c=a.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(c.p99.toFixed(1)),status:"watch"}]}if(t&&t.length>0){const c=t.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c&&c.latency&&c.latency.percentiles){const p=c.latency.percentiles;return[{percentile:"P50",value:Number((p.p50/1e3).toFixed(1)),status:"excellent"},{percentile:"P75",value:Number((p.p75/1e3).toFixed(1)),status:"excellent"},{percentile:"P90",value:Number((p.p90/1e3).toFixed(1)),status:"good"},{percentile:"P95",value:Number((p.p95/1e3).toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number((p.p99/1e3).toFixed(1)),status:"watch"}]}}return null})(),u=i.map(c=>({routes:c.routes,gatewayPerRoute:Number((c.gateway/c.routes).toFixed(2)),proxyPerRoute:Number((c.proxy/c.routes).toFixed(2)),totalPerRoute:Number((c.total/c.routes).toFixed(2))})),f={throughput:{label:"Throughput",color:"#8b5cf6"},latency:{label:"Latency",color:"#6366f1"},gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},totalPerRoute:{label:"Total per Route",color:"#8b5cf6"},gatewayPerRoute:{label:"Gateway per Route",color:"#a855f7"},proxyPerRoute:{label:"Proxy per Route",color:"#4f46e5"}};return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Avg Throughput"}),b.jsx(wT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[Math.round(r.avgThroughput)," RPS"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Mean Response Time"}),b.jsx(U4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[(r.avgLatency/1e3).toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"End-to-end as measured by Nighthawk"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Max Routes in Test"}),b.jsx(X4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:r.maxRoutes}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Routes tested successfully"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Reliability"}),b.jsx(yT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:"100%"}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Perfect system reliability"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Throughput Consistency"}),b.jsx(tn,{children:"Throughput remains stable across different route scales"})]}),b.jsx(be,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(Sp,{data:o,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{domain:[0,"dataMax"],tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c} RPS`,"Throughput"],labelFormatter:c=>`${c} routes`})}),b.jsx(ft,{dataKey:"throughput",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Usage"}),b.jsx(tn,{children:"Memory scaling patterns for Gateway and Proxy components"})]}),b.jsx(be,{children:i&&i.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(Sp,{data:i,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(zn,{})}),b.jsx(ft,{dataKey:"gateway",stackId:"memory",type:"monotone",fill:"#a855f7",stroke:"#a855f7"}),b.jsx(ft,{dataKey:"proxy",stackId:"memory",type:"monotone",fill:"#4f46e5",stroke:"#4f46e5"})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Distribution"}),b.jsx(tn,{children:"Latency percentiles at 1000 routes (worst case)"})]}),b.jsx(be,{children:l?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(GS,{data:l,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c}ms`,"Latency"]})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Efficiency"}),b.jsx(tn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(be,{children:u&&u.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:f,children:b.jsxs(e1,{data:u,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c}MB per route`,p==="gatewayPerRoute"?"Gateway":p==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:c=>`${c} routes`})}),b.jsx(Rt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Bn,{})})]})]})]})},Eoe=({latencyPercentileComparison:e,benchmarkResults:t})=>{const n=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})),a=(()=>{if(e&&e.length>0){const c=e.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(c.p99.toFixed(1)),category:"99th",status:"alert"}]}if(t&&t.length>0){const c=t.filter(p=>p.phase==="scaling-up").sort((p,d)=>d.routes-p.routes)[0];if(c&&c.latency&&c.latency.percentiles){const p=c.latency.percentiles;return[{percentile:"P50",value:Number((p.p50/1e3).toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number((p.p75/1e3).toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number((p.p90/1e3).toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number((p.p95/1e3).toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number((p.p99/1e3).toFixed(1)),category:"99th",status:"alert"}]}}return null})(),o=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,mean:Number((c.latency.mean/1e3).toFixed(1)),p95:Number((c.latency.percentiles.p95/1e3).toFixed(1)),ratio:Number((c.latency.percentiles.p95/c.latency.mean).toFixed(1))})),s=e&&e.length>0?e.filter(c=>c.phase==="scaling-up").sort((c,p)=>c.routes-p.routes).map(c=>({scale:`${c.routes} Routes`,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})):null,l={p50:{label:"P50 (Median)",color:"#8b5cf6"},p95:{label:"P95",color:"#6366f1"},p99:{label:"P99",color:"#4f46e5"},mean:{label:"Mean",color:"#a855f7"},ratio:{label:"P95/Mean Ratio",color:"#7c3aed"}},f=(()=>{if(n.length===0)return{medianLatency:0,p95Latency:0,p99Latency:0,consistencyRatio:0};const c=n[n.length-1],p=o.length>0?o.reduce((d,h)=>d+h.ratio,0)/o.length:0;return{medianLatency:(c==null?void 0:c.p50)||0,p95Latency:(c==null?void 0:c.p95)||0,p99Latency:(c==null?void 0:c.p99)||0,consistencyRatio:p}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Median RTT"}),b.jsx(gT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.medianLatency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"P95 RTT"}),b.jsx(hT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.p95Latency.toFixed(1),"ms"]}),b.jsxs("p",{className:"text-xs text-muted-foreground",children:["95% of requests under ",f.p95Latency.toFixed(0),"ms"]})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Tail RTT"}),b.jsx(xT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.p99Latency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P99 RTT (1% of requests)"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Consistency"}),b.jsx(G4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[f.consistencyRatio.toFixed(1),":1"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P95/Mean ratio"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Scaling Behavior"}),b.jsx(tn,{children:"How key percentiles perform as route count increases"})]}),b.jsx(be,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(Sp,{data:n,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:c=>`${c} routes`})}),b.jsx(ft,{dataKey:"p99",stackId:"latency",type:"monotone",fill:"#4f46e5",fillOpacity:.3,stroke:"#4f46e5",strokeWidth:1}),b.jsx(ft,{dataKey:"p95",stackId:"latency",type:"monotone",fill:"#6366f1",fillOpacity:.4,stroke:"#6366f1",strokeWidth:2}),b.jsx(ft,{dataKey:"p50",stackId:"latency",type:"monotone",fill:"#8b5cf6",fillOpacity:.6,stroke:"#8b5cf6",strokeWidth:3})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Distribution"}),b.jsx(tn,{children:"Percentile breakdown at 1000 routes (worst case scenario)"})]}),b.jsx(be,{children:a?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(GS,{data:a,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(c,p)=>[`${c}ms`,"RTT"],labelFormatter:c=>`${c} Percentile`})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Request RTT Consistency"}),b.jsx(tn,{children:"P95/Mean ratio shows how predictable RTT is"})]}),b.jsx(be,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:l,children:b.jsxs(e1,{data:o,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{yAxisId:"ratio",orientation:"left",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}x`}),b.jsx(yt,{yAxisId:"latency",orientation:"right",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:c=>`${c} routes`})}),b.jsx(Rt,{yAxisId:"latency",dataKey:"mean",type:"monotone",stroke:"#a855f7",strokeWidth:2,dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{yAxisId:"ratio",dataKey:"ratio",type:"monotone",stroke:"#7c3aed",strokeWidth:3,strokeDasharray:"5 5",dot:{fill:"#7c3aed",strokeWidth:2,r:4}})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Performance Summary"}),b.jsx(tn,{children:"RTT performance at different scales"})]}),b.jsx(be,{children:s&&s.length>0?b.jsx("div",{className:"space-y-4",children:s.map((c,p)=>b.jsx("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:c.scale}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["P50: ",c.p50,"ms"]}),b.jsxs("span",{children:["P95: ",c.p95,"ms"]}),b.jsxs("span",{children:["P99: ",c.p99,"ms"]})]})]})},p))}):b.jsx(Bn,{})})]})]})]})},Toe=({resourceTrends:e,benchmarkResults:t})=>{const n=t.filter(p=>p.phase==="scaling-up").map(p=>({routes:p.routes,gateway:Math.round(p.resources.envoyGateway.memory.mean),proxy:Math.round(p.resources.envoyProxy.memory.mean),total:Math.round(p.resources.envoyGateway.memory.mean+p.resources.envoyProxy.memory.mean)})),r=t.filter(p=>p.phase==="scaling-up").map(p=>({routes:p.routes,gatewayMean:Number(p.resources.envoyGateway.cpu.mean.toFixed(1)),gatewayMax:Number(p.resources.envoyGateway.cpu.max.toFixed(1)),proxyMean:Number(p.resources.envoyProxy.cpu.mean.toFixed(1)),proxyMax:Number(p.resources.envoyProxy.cpu.max.toFixed(1))})),a=n.map(p=>({routes:p.routes,gatewayPerRoute:Number((p.gateway/p.routes).toFixed(2)),proxyPerRoute:Number((p.proxy/p.routes).toFixed(2)),totalPerRoute:Number((p.total/p.routes).toFixed(2))})),o=()=>{if(n.length===0)return[{component:"Gateway",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Proxy",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Total",min:0,max:0,scaling:"No Data",efficiency:"Unknown"}];const p=n.map(m=>m.gateway),d=n.map(m=>m.proxy),h=n.map(m=>m.total);return[{component:"Gateway",min:Math.min(...p),max:Math.max(...p),scaling:i(n.map(m=>m.routes),p),efficiency:s(n.map(m=>m.routes),p)},{component:"Proxy",min:Math.min(...d),max:Math.max(...d),scaling:i(n.map(m=>m.routes),d),efficiency:s(n.map(m=>m.routes),d)},{component:"Total",min:Math.min(...h),max:Math.max(...h),scaling:i(n.map(m=>m.routes),h),efficiency:s(n.map(m=>m.routes),h)}]},i=(p,d)=>{if(p.length<3)return"Insufficient Data";const h=p.length,m=p.reduce((N,M)=>N+M,0),g=d.reduce((N,M)=>N+M,0),v=p.reduce((N,M,I)=>N+M*d[I],0),y=p.reduce((N,M)=>N+M*M,0),x=d.reduce((N,M)=>N+M*M,0),P=h*v-m*g,w=Math.sqrt((h*y-m*m)*(h*x-g*g)),S=w===0?0:P/w,O=S*S,_=[];for(let N=1;N<d.length;N++)_.push(d[N]-d[N-1]);const A=_.reduce((N,M)=>N+M,0)/_.length,j=_.reduce((N,M)=>N+Math.pow(M-A,2),0)/_.length,E=Math.sqrt(j),T=A===0?0:Math.abs(E/A);return O>.95?"Highly Linear":O>.85?"Linear":T>1.5?"Step-wise":O>.7?"Moderately Linear":"Variable"},s=(p,d)=>{if(p.length<2)return"Unknown";const h=p.map((w,S)=>d[S]/w),m=h[0],g=h[h.length-1],v=(m-g)/m,y=h.reduce((w,S)=>w+S,0)/h.length,x=h.reduce((w,S)=>w+Math.pow(S-y,2),0)/h.length,P=Math.sqrt(x)/y;return v>.3?"Excellent":v>.1||P<.2?"Good":P<.4?"Moderate":"Variable"},l=o(),u={gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},gatewayMean:{label:"Gateway Mean",color:"#8b5cf6"},gatewayMax:{label:"Gateway Peak",color:"#c084fc"},proxyMean:{label:"Proxy Mean",color:"#6366f1"},proxyMax:{label:"Proxy Peak",color:"#818cf8"}},c=(()=>{if(n.length===0||r.length===0||a.length===0)return{gatewayMemoryRange:"0-0MB",proxyMemoryRange:"0-0MB",peakCPU:0,memoryPerRouteAtScale:0};const p=n.map(S=>S.gateway),d=n.map(S=>S.proxy),h=Math.min(...p),m=Math.max(...p),g=Math.min(...d),v=Math.max(...d),y=r.flatMap(S=>[S.gatewayMax,S.proxyMax]),x=Math.max(...y),P=a[a.length-1],w=(P==null?void 0:P.totalPerRoute)||0;return{gatewayMemoryRange:`${h}-${m}MB`,proxyMemoryRange:`${g}-${v}MB`,peakCPU:Math.round(x),memoryPerRouteAtScale:w}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Gateway Memory"}),b.jsx(W4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.gatewayMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Linear scaling pattern"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Proxy Memory"}),b.jsx(K4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.proxyMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Efficient step-wise scaling"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Peak CPU"}),b.jsx(z4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.peakCPU,"%"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Brief spikes, stable avg"})]})]}),b.jsxs(xe,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(we,{className:"text-sm font-medium",children:"Efficiency"}),b.jsx(X4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(be,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.memoryPerRouteAtScale.toFixed(2),"MB"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Memory per route at scale"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Scaling"}),b.jsx(tn,{children:"How Gateway and Proxy memory usage grows with route count"})]}),b.jsx(be,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(Sp,{data:n,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p=>`${p}MB`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:p=>`${p} routes`})}),b.jsx(ft,{dataKey:"gateway",stackId:"memory",type:"monotone",fill:"#a855f7",fillOpacity:.6,stroke:"#a855f7",strokeWidth:2}),b.jsx(ft,{dataKey:"proxy",stackId:"memory",type:"monotone",fill:"#4f46e5",fillOpacity:.6,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"CPU Usage Patterns"}),b.jsx(tn,{children:"Mean vs peak CPU usage showing burst characteristics."})]}),b.jsx(be,{children:r&&r.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(Poe,{data:r,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p=>`${p}%`}),b.jsx(sr,{content:b.jsx(zn,{labelFormatter:p=>`${p} routes`})}),b.jsx(ft,{dataKey:"gatewayMax",type:"monotone",fill:"#c084fc",fillOpacity:.1,stroke:"#c084fc",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(ft,{dataKey:"proxyMax",type:"monotone",fill:"#818cf8",fillOpacity:.1,stroke:"#818cf8",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(Rt,{dataKey:"gatewayMean",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"proxyMean",type:"monotone",stroke:"#6366f1",strokeWidth:3,dot:{fill:"#6366f1",strokeWidth:2,r:4}})]})})]}):b.jsx(Bn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Efficiency"}),b.jsx(tn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(be,{children:a&&a.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(lr,{}),b.jsx(Fn,{config:u,children:b.jsxs(e1,{data:a,children:[b.jsx(Ln,{strokeDasharray:"3 3"}),b.jsx(Et,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(yt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:p=>`${p}MB`}),b.jsx(sr,{content:b.jsx(zn,{formatter:(p,d)=>[`${p}MB per route`,d==="gatewayPerRoute"?"Gateway":d==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:p=>`${p} routes`})}),b.jsx(Rt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Rt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Rt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Bn,{})})]}),b.jsxs(xe,{children:[b.jsxs(Se,{children:[b.jsx(we,{children:"Memory Scaling Summary"}),b.jsx(tn,{children:"Memory usage characteristics and scaling patterns across different components"})]}),b.jsx(be,{children:b.jsx("div",{className:"space-y-4",children:l.map((p,d)=>b.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:p.component}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["Range: ",p.min,"-",p.max,"MB"]}),b.jsxs("span",{children:["Pattern: ",p.scaling]})]})]}),b.jsxs("div",{className:"flex items-center space-x-2",children:[b.jsx(G4,{className:"h-4 w-4 text-green-600"}),b.jsx("span",{className:"text-sm font-medium text-green-700",children:p.efficiency})]})]},d))})})]})]})]})};var rh="rovingFocusGroup.onEntryFocus",joe={bubbles:!1,cancelable:!0},Lu="RovingFocusGroup",[Dy,qS,$oe]=g6(Lu),[Noe,VS]=ps(Lu,[$oe]),[Moe,Roe]=Noe(Lu),KS=k.forwardRef((e,t)=>b.jsx(Dy.Provider,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Dy.Slot,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Ioe,{...e,ref:t})})}));KS.displayName=Lu;var Ioe=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:i,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:f=!1,...c}=e,p=k.useRef(null),d=Ye(t,p),h=R0(o),[m,g]=xf({prop:i,defaultProp:s??null,onChange:l,caller:Lu}),[v,y]=k.useState(!1),x=Aa(u),P=qS(n),w=k.useRef(!1),[S,O]=k.useState(0);return k.useEffect(()=>{const _=p.current;if(_)return _.addEventListener(rh,x),()=>_.removeEventListener(rh,x)},[x]),b.jsx(Moe,{scope:n,orientation:r,dir:h,loop:a,currentTabStopId:m,onItemFocus:k.useCallback(_=>g(_),[g]),onItemShiftTab:k.useCallback(()=>y(!0),[]),onFocusableItemAdd:k.useCallback(()=>O(_=>_+1),[]),onFocusableItemRemove:k.useCallback(()=>O(_=>_-1),[]),children:b.jsx(Ee.div,{tabIndex:v||S===0?-1:0,"data-orientation":r,...c,ref:d,style:{outline:"none",...e.style},onMouseDown:pe(e.onMouseDown,()=>{w.current=!0}),onFocus:pe(e.onFocus,_=>{const A=!w.current;if(_.target===_.currentTarget&&A&&!v){const j=new CustomEvent(rh,joe);if(_.currentTarget.dispatchEvent(j),!j.defaultPrevented){const E=P().filter(R=>R.focusable),T=E.find(R=>R.active),N=E.find(R=>R.id===m),I=[T,N,...E].filter(Boolean).map(R=>R.ref.current);QS(I,f)}}w.current=!1}),onBlur:pe(e.onBlur,()=>y(!1))})})}),XS="RovingFocusGroupItem",YS=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:i,...s}=e,l=Tu(),u=o||l,f=Roe(XS,n),c=f.currentTabStopId===u,p=qS(n),{onFocusableItemAdd:d,onFocusableItemRemove:h,currentTabStopId:m}=f;return k.useEffect(()=>{if(r)return d(),()=>h()},[r,d,h]),b.jsx(Dy.ItemSlot,{scope:n,id:u,focusable:r,active:a,children:b.jsx(Ee.span,{tabIndex:c?0:-1,"data-orientation":f.orientation,...s,ref:t,onMouseDown:pe(e.onMouseDown,g=>{r?f.onItemFocus(u):g.preventDefault()}),onFocus:pe(e.onFocus,()=>f.onItemFocus(u)),onKeyDown:pe(e.onKeyDown,g=>{if(g.key==="Tab"&&g.shiftKey){f.onItemShiftTab();return}if(g.target!==g.currentTarget)return;const v=Foe(g,f.orientation,f.dir);if(v!==void 0){if(g.metaKey||g.ctrlKey||g.altKey||g.shiftKey)return;g.preventDefault();let x=p().filter(P=>P.focusable).map(P=>P.ref.current);if(v==="last")x.reverse();else if(v==="prev"||v==="next"){v==="prev"&&x.reverse();const P=x.indexOf(g.currentTarget);x=f.loop?zoe(x,P+1):x.slice(P+1)}setTimeout(()=>QS(x))}}),children:typeof i=="function"?i({isCurrentTabStop:c,hasTabStop:m!=null}):i})})});YS.displayName=XS;var Doe={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Loe(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Foe(e,t,n){const r=Loe(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Doe[r]}function QS(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function zoe(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Boe=KS,Hoe=YS;function Goe(e,t){return k.useReducer((n,r)=>t[n][r]??n,e)}var t1=e=>{const{present:t,children:n}=e,r=Uoe(t),a=typeof n=="function"?n({present:r.isPresent}):k.Children.only(n),o=Ye(r.ref,Woe(a));return typeof n=="function"||r.isPresent?k.cloneElement(a,{ref:o}):null};t1.displayName="Presence";function Uoe(e){const[t,n]=k.useState(),r=k.useRef(null),a=k.useRef(e),o=k.useRef("none"),i=e?"mounted":"unmounted",[s,l]=Goe(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return k.useEffect(()=>{const u=Oc(r.current);o.current=s==="mounted"?u:"none"},[s]),jt(()=>{const u=r.current,f=a.current;if(f!==e){const p=o.current,d=Oc(u);e?l("MOUNT"):d==="none"||(u==null?void 0:u.display)==="none"?l("UNMOUNT"):l(f&&p!==d?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,l]),jt(()=>{if(t){let u;const f=t.ownerDocument.defaultView??window,c=d=>{const m=Oc(r.current).includes(d.animationName);if(d.target===t&&m&&(l("ANIMATION_END"),!a.current)){const g=t.style.animationFillMode;t.style.animationFillMode="forwards",u=f.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=g)})}},p=d=>{d.target===t&&(o.current=Oc(r.current))};return t.addEventListener("animationstart",p),t.addEventListener("animationcancel",c),t.addEventListener("animationend",c),()=>{f.clearTimeout(u),t.removeEventListener("animationstart",p),t.removeEventListener("animationcancel",c),t.removeEventListener("animationend",c)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:k.useCallback(u=>{r.current=u?getComputedStyle(u):null,n(u)},[])}}function Oc(e){return(e==null?void 0:e.animationName)||"none"}function Woe(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var zd="Tabs",[qoe,dse]=ps(zd,[VS]),ZS=VS(),[Voe,n1]=qoe(zd),JS=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:i="horizontal",dir:s,activationMode:l="automatic",...u}=e,f=R0(s),[c,p]=xf({prop:r,onChange:a,defaultProp:o??"",caller:zd});return b.jsx(Voe,{scope:n,baseId:Tu(),value:c,onValueChange:p,orientation:i,dir:f,activationMode:l,children:b.jsx(Ee.div,{dir:f,"data-orientation":i,...u,ref:t})})});JS.displayName=zd;var eO="TabsList",tO=k.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...a}=e,o=n1(eO,n),i=ZS(n);return b.jsx(Boe,{asChild:!0,...i,orientation:o.orientation,dir:o.dir,loop:r,children:b.jsx(Ee.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:t})})});tO.displayName=eO;var nO="TabsTrigger",rO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,i=n1(nO,n),s=ZS(n),l=iO(i.baseId,r),u=sO(i.baseId,r),f=r===i.value;return b.jsx(Hoe,{asChild:!0,...s,focusable:!a,active:f,children:b.jsx(Ee.button,{type:"button",role:"tab","aria-selected":f,"aria-controls":u,"data-state":f?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:l,...o,ref:t,onMouseDown:pe(e.onMouseDown,c=>{!a&&c.button===0&&c.ctrlKey===!1?i.onValueChange(r):c.preventDefault()}),onKeyDown:pe(e.onKeyDown,c=>{[" ","Enter"].includes(c.key)&&i.onValueChange(r)}),onFocus:pe(e.onFocus,()=>{const c=i.activationMode!=="manual";!f&&!a&&c&&i.onValueChange(r)})})})});rO.displayName=nO;var aO="TabsContent",oO=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:a,children:o,...i}=e,s=n1(aO,n),l=iO(s.baseId,r),u=sO(s.baseId,r),f=r===s.value,c=k.useRef(f);return k.useEffect(()=>{const p=requestAnimationFrame(()=>c.current=!1);return()=>cancelAnimationFrame(p)},[]),b.jsx(t1,{present:a||f,children:({present:p})=>b.jsx(Ee.div,{"data-state":f?"active":"inactive","data-orientation":s.orientation,role:"tabpanel","aria-labelledby":l,hidden:!p,id:u,tabIndex:0,...i,ref:t,style:{...e.style,animationDuration:c.current?"0s":void 0},children:p&&o})})});oO.displayName=aO;function iO(e,t){return`${e}-trigger-${t}`}function sO(e,t){return`${e}-content-${t}`}var Koe=JS,lO=tO,uO=rO,cO=oO;const Xoe=Koe,fO=k.forwardRef(({className:e,...t},n)=>b.jsx(lO,{ref:n,className:Oe("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));fO.displayName=lO.displayName;const Bc=k.forwardRef(({className:e,...t},n)=>b.jsx(uO,{ref:n,className:Oe("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Bc.displayName=uO.displayName;const Hc=k.forwardRef(({className:e,...t},n)=>b.jsx(cO,{ref:n,className:Oe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Hc.displayName=cO.displayName;const Yoe={metadata:{version:"1.3.3",runId:"1.3.3-1750189826778",date:"2025-05-09",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5302.05,totalRequests:159067,latency:{min:384,mean:7440,max:68399,pstdev:12191,percentiles:{p50:3692,p75:5903,p80:6670,p90:10777,p95:47519,p99:54405,p999:59346}},resources:{envoyGateway:{memory:{min:126.17,max:126.17,mean:126.17},cpu:{min:.95,max:.95,mean:.95}},envoyProxy:{memory:{min:25.93,max:25.93,mean:25.93},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:358,upstreamConnections:42},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5270.25,totalRequests:158112,latency:{min:392,mean:7067,max:77467,pstdev:12552,percentiles:{p50:3330,p75:5225,p80:5887,p90:8906,p95:49113,p99:55103,p999:60295}},resources:{envoyGateway:{memory:{min:145.89,max:145.89,mean:145.89},cpu:{min:1.66,max:1.66,mean:1.66}},envoyProxy:{memory:{min:32.1,max:32.1,mean:32.1},cpu:{min:60.71,max:60.71,mean:60.71}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5307.61,totalRequests:159230,latency:{min:387,mean:7350,max:76185,pstdev:12732,percentiles:{p50:3508,p75:5524,p80:6220,p90:9652,p95:49100,p99:55363,p999:62654}},resources:{envoyGateway:{memory:{min:153.05,max:153.05,mean:153.05},cpu:{min:3.08,max:3.08,mean:3.08}},envoyProxy:{memory:{min:38.29,max:38.29,mean:38.29},cpu:{min:91.5,max:91.5,mean:91.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5139.63,totalRequests:154189,latency:{min:390,mean:7376,max:78098,pstdev:12993,percentiles:{p50:3429,p75:5431,p80:6116,p90:9633,p95:49809,p99:56043,p999:64651}},resources:{envoyGateway:{memory:{min:152.28,max:152.28,mean:152.28},cpu:{min:15.6,max:15.6,mean:15.6}},envoyProxy:{memory:{min:56.33,max:56.33,mean:56.33},cpu:{min:124.15,max:124.15,mean:124.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5169.8,totalRequests:155094,latency:{min:374,mean:7385,max:105918,pstdev:13085,percentiles:{p50:3382,p75:5336,p80:6024,p90:9658,p95:50104,p99:56487,p999:66418}},resources:{envoyGateway:{memory:{min:166.29,max:166.29,mean:166.29},cpu:{min:28.13,max:28.13,mean:28.13}},envoyProxy:{memory:{min:76.53,max:76.53,mean:76.53},cpu:{min:157.45,max:157.45,mean:157.45}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4963.46,totalRequests:148908,latency:{min:374,mean:7335,max:94580,pstdev:13294,percentiles:{p50:3255,p75:5279,p80:5998,p90:9532,p95:50294,p99:58908,p999:70729}},resources:{envoyGateway:{memory:{min:199.79,max:199.79,mean:199.79},cpu:{min:61.67,max:61.67,mean:61.67}},envoyProxy:{memory:{min:120.77,max:120.77,mean:120.77},cpu:{min:195.1,max:195.1,mean:195.1}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5200.07,totalRequests:156001,latency:{min:395,mean:7530,max:81936,pstdev:13142,percentiles:{p50:3438,p75:5497,p80:6226,p90:10218,p95:50345,p99:56436,p999:61919}},resources:{envoyGateway:{memory:{min:221.87,max:221.87,mean:221.87},cpu:{min:114.77,max:114.77,mean:114.77}},envoyProxy:{memory:{min:121.27,max:121.27,mean:121.27},cpu:{min:356.4,max:356.4,mean:356.4}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5229.66,totalRequests:156893,latency:{min:368,mean:6911,max:72273,pstdev:12396,percentiles:{p50:3227,p75:5075,p80:5695,p90:8751,p95:48676,p99:54822,p999:59865}},resources:{envoyGateway:{memory:{min:221.8,max:221.8,mean:221.8},cpu:{min:114.13,max:114.13,mean:114.13}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:325.9,max:325.9,mean:325.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5099.34,totalRequests:152980,latency:{min:357,mean:6637,max:68100,pstdev:12012,percentiles:{p50:3167,p75:4972,p80:5580,p90:8302,p95:47650,p99:53993,p999:59299}},resources:{envoyGateway:{memory:{min:182.69,max:182.69,mean:182.69},cpu:{min:113.02,max:113.02,mean:113.02}},envoyProxy:{memory:{min:121.2,max:121.2,mean:121.2},cpu:{min:295.3,max:295.3,mean:295.3}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5145.13,totalRequests:154357,latency:{min:379,mean:7234,max:111517,pstdev:12814,percentiles:{p50:3381,p75:5331,p80:5993,p90:9269,p95:49465,p99:55562,p999:64862}},resources:{envoyGateway:{memory:{min:159.09,max:159.09,mean:159.09},cpu:{min:102.57,max:102.57,mean:102.57}},envoyProxy:{memory:{min:121.08,max:121.08,mean:121.08},cpu:{min:263.29,max:263.29,mean:263.29}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5130.95,totalRequests:153929,latency:{min:365,mean:7098,max:95834,pstdev:12843,percentiles:{p50:3267,p75:5110,p80:5752,p90:8975,p95:49702,p99:56408,p999:67330}},resources:{envoyGateway:{memory:{min:163.91,max:163.91,mean:163.91},cpu:{min:91.18,max:91.18,mean:91.18}},envoyProxy:{memory:{min:120.91,max:120.91,mean:120.91},cpu:{min:230.77,max:230.77,mean:230.77}}},poolOverflow:362,upstreamConnections:38}]},Qoe={metadata:{version:"1.4.0",runId:"1.4.0-1750189826781",date:"2025-05-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5433.23,totalRequests:163e3,latency:{min:367,mean:6485,max:65673,pstdev:11042,percentiles:{p50:3222,p75:5166,p80:5879,p90:9253,p95:43970,p99:52201,p999:56854}},resources:{envoyGateway:{memory:{min:128.52,max:156.24,mean:150.28},cpu:{min:.13,max:.67,mean:.44}},envoyProxy:{memory:{min:0,max:27.01,mean:21.73},cpu:{min:0,max:72.36,mean:2.32}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.69,totalRequests:160221,latency:{min:355,mean:6582,max:88674,pstdev:11849,percentiles:{p50:3134,p75:4984,p80:5597,p90:8545,p95:46972,p99:53663,p999:59625}},resources:{envoyGateway:{memory:{min:155.3,max:169.25,mean:159.23},cpu:{min:.27,max:4.73,mean:.91}},envoyProxy:{memory:{min:26.64,max:33.18,mean:32.22},cpu:{min:0,max:99.91,mean:11.1}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5205.41,totalRequests:156162,latency:{min:384,mean:4221,max:63500,pstdev:9204,percentiles:{p50:2039,p75:3063,p80:3399,p90:4605,p95:7844,p99:49758,p999:54032}},resources:{envoyGateway:{memory:{min:156.77,max:174.36,mean:168.53},cpu:{min:.4,max:8.8,mean:1.37}},envoyProxy:{memory:{min:32.83,max:37.05,mean:36.58},cpu:{min:0,max:99.97,mean:4.39}}},poolOverflow:377,upstreamConnections:23},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5271.84,totalRequests:158157,latency:{min:393,mean:7209,max:93327,pstdev:12640,percentiles:{p50:3281,p75:5443,p80:6241,p90:10258,p95:48494,p99:55793,p999:65497}},resources:{envoyGateway:{memory:{min:179.66,max:187.8,mean:184.81},cpu:{min:.53,max:27.13,mean:4.87}},envoyProxy:{memory:{min:53.06,max:57.31,mean:56.58},cpu:{min:0,max:99.96,mean:15.82}}},poolOverflow:360,upstreamConnections:40},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5351.64,totalRequests:160555,latency:{min:370,mean:6797,max:91549,pstdev:12276,percentiles:{p50:3145,p75:5052,p80:5728,p90:8916,p95:47915,p99:54947,p999:65368}},resources:{envoyGateway:{memory:{min:186.4,max:200.27,mean:195.8},cpu:{min:.4,max:26.07,mean:1.71}},envoyProxy:{memory:{min:71.16,max:77.36,mean:77},cpu:{min:0,max:94.88,mean:3.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5239.17,totalRequests:157179,latency:{min:367,mean:6908,max:97939,pstdev:12608,percentiles:{p50:3176,p75:5046,p80:5680,p90:8770,p95:48472,p99:56449,p999:68317}},resources:{envoyGateway:{memory:{min:220.03,max:237.27,mean:233.38},cpu:{min:.07,max:1.2,mean:.78}},envoyProxy:{memory:{min:129.13,max:129.59,mean:129.34},cpu:{min:0,max:74.43,mean:2.24}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5409.79,totalRequests:162296,latency:{min:386,mean:6690,max:71688,pstdev:12144,percentiles:{p50:3075,p75:4937,p80:5610,p90:8727,p95:48252,p99:54595,p999:59408}},resources:{envoyGateway:{memory:{min:165.91,max:176.04,mean:168.11},cpu:{min:.67,max:3.73,mean:1.23}},envoyProxy:{memory:{min:123.28,max:123.45,mean:123.35},cpu:{min:0,max:99.72,mean:9.08}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5480.62,totalRequests:164426,latency:{min:378,mean:7119,max:85032,pstdev:12404,percentiles:{p50:3390,p75:5340,p80:6015,p90:9300,p95:48457,p99:55005,p999:60284}},resources:{envoyGateway:{memory:{min:165.36,max:171.88,mean:169.47},cpu:{min:.6,max:6.8,mean:1.44}},envoyProxy:{memory:{min:123.27,max:123.97,mean:123.42},cpu:{min:0,max:100.05,mean:11.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5413.63,totalRequests:162409,latency:{min:357,mean:6664,max:77307,pstdev:12030,percentiles:{p50:3140,p75:4935,p80:5560,p90:8456,p95:47661,p99:54544,p999:61110}},resources:{envoyGateway:{memory:{min:170.86,max:186.68,mean:173.53},cpu:{min:.67,max:67.27,mean:7.29}},envoyProxy:{memory:{min:123.27,max:129.61,mean:124.04},cpu:{min:0,max:100,mean:5.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5356.13,totalRequests:160684,latency:{min:376,mean:6544,max:86540,pstdev:11908,percentiles:{p50:3079,p75:4927,p80:5554,p90:8360,p95:47069,p99:54265,p999:62601}},resources:{envoyGateway:{memory:{min:176.87,max:192.99,mean:189.97},cpu:{min:.6,max:73.6,mean:5.05}},envoyProxy:{memory:{min:129.54,max:129.76,mean:129.65},cpu:{min:0,max:100.08,mean:11.45}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5339.99,totalRequests:160200,latency:{min:395,mean:6772,max:99700,pstdev:12345,percentiles:{p50:3118,p75:4954,p80:5598,p90:8672,p95:48261,p99:55498,p999:65902}},resources:{envoyGateway:{memory:{min:199.81,max:210.76,mean:205.85},cpu:{min:.4,max:31.13,mean:2.01}},envoyProxy:{memory:{min:129.54,max:129.74,mean:129.6},cpu:{min:0,max:99.87,mean:8.99}}},poolOverflow:362,upstreamConnections:38}]},Zoe={metadata:{version:"1.4.1",runId:"1.4.1-1750189826783",date:"2025-06-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5440.31,totalRequests:163209,latency:{min:335,mean:6565,max:66668,pstdev:11480,percentiles:{p50:3258,p75:5079,p80:5722,p90:8679,p95:45924,p99:53512,p999:58220}},resources:{envoyGateway:{memory:{min:128.02,max:151.26,mean:147.41},cpu:{min:.27,max:.67,mean:.45}},envoyProxy:{memory:{min:0,max:26.92,mean:22.58},cpu:{min:0,max:99.73,mean:6.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5429.88,totalRequests:162900,latency:{min:345,mean:6468,max:70791,pstdev:11793,percentiles:{p50:3170,p75:4794,p80:5311,p90:7534,p95:47400,p99:53536,p999:58034}},resources:{envoyGateway:{memory:{min:151.26,max:170.78,mean:161.92},cpu:{min:.4,max:4.33,mean:.97}},envoyProxy:{memory:{min:26.73,max:33.13,mean:31.63},cpu:{min:0,max:99.94,mean:3.35}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5499.86,totalRequests:164996,latency:{min:391,mean:8147,max:99663,pstdev:13319,percentiles:{p50:3957,p75:6308,p80:7120,p90:11799,p95:49942,p99:56190,p999:62709}},resources:{envoyGateway:{memory:{min:161.19,max:165.52,mean:163.96},cpu:{min:.4,max:8.67,mean:1.36}},envoyProxy:{memory:{min:32.98,max:39.18,mean:38.14},cpu:{min:0,max:99.97,mean:8.67}}},poolOverflow:353,upstreamConnections:47},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5335.1,totalRequests:160053,latency:{min:365,mean:6734,max:90963,pstdev:12096,percentiles:{p50:3228,p75:5042,p80:5649,p90:8465,p95:47704,p99:54396,p999:61714}},resources:{envoyGateway:{memory:{min:183.87,max:223.25,mean:206.96},cpu:{min:.47,max:79.87,mean:3.9}},envoyProxy:{memory:{min:57.15,max:57.52,mean:57.34},cpu:{min:0,max:99.97,mean:13.49}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5256.52,totalRequests:157696,latency:{min:389,mean:6320,max:77848,pstdev:11829,percentiles:{p50:2974,p75:4705,p80:5292,p90:7729,p95:47173,p99:54317,p999:64679}},resources:{envoyGateway:{memory:{min:186.16,max:199.19,mean:195.68},cpu:{min:.4,max:1.2,mean:.75}},envoyProxy:{memory:{min:63.26,max:79.43,mean:79.04},cpu:{min:0,max:99.86,mean:17.64}}},poolOverflow:365,upstreamConnections:35},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5280.09,totalRequests:158409,latency:{min:387,mean:6871,max:94064,pstdev:12441,percentiles:{p50:3186,p75:5019,p80:5651,p90:8766,p95:48361,p99:55758,p999:67403}},resources:{envoyGateway:{memory:{min:230.81,max:243.68,mean:238.65},cpu:{min:.13,max:1.13,mean:.8}},envoyProxy:{memory:{min:127.63,max:127.86,mean:127.72},cpu:{min:0,max:85.57,mean:6.19}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5430.18,totalRequests:162909,latency:{min:376,mean:6679,max:79630,pstdev:12142,percentiles:{p50:3147,p75:5015,p80:5630,p90:8374,p95:48377,p99:54654,p999:59858}},resources:{envoyGateway:{memory:{min:164.61,max:169.75,mean:165.39},cpu:{min:.8,max:3.47,mean:1.14}},envoyProxy:{memory:{min:121.22,max:121.61,mean:121.3},cpu:{min:0,max:99.74,mean:8.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5506.49,totalRequests:165195,latency:{min:386,mean:8319,max:85860,pstdev:13567,percentiles:{p50:3951,p75:6305,p80:7155,p90:12741,p95:50714,p99:57303,p999:63928}},resources:{envoyGateway:{memory:{min:165.63,max:175.23,mean:169.06},cpu:{min:.8,max:7.53,mean:1.54}},envoyProxy:{memory:{min:111.91,max:121.36,mean:113.46},cpu:{min:0,max:99.75,mean:7.62}}},poolOverflow:352,upstreamConnections:48},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5452.96,totalRequests:163589,latency:{min:395,mean:7694,max:97460,pstdev:12949,percentiles:{p50:3636,p75:5828,p80:6627,p90:10929,p95:49506,p99:55681,p999:62369}},resources:{envoyGateway:{memory:{min:166.64,max:195.48,mean:174.79},cpu:{min:.8,max:38.2,mean:5.63}},envoyProxy:{memory:{min:111.8,max:112.36,mean:111.95},cpu:{min:0,max:35.17,mean:2.77}}},poolOverflow:356,upstreamConnections:44},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5360.33,totalRequests:160815,latency:{min:354,mean:6538,max:92344,pstdev:12045,percentiles:{p50:3068,p75:4770,p80:5341,p90:7974,p95:47742,p99:54480,p999:62144}},resources:{envoyGateway:{memory:{min:180.27,max:192.65,mean:189.01},cpu:{min:.67,max:46.53,mean:4.41}},envoyProxy:{memory:{min:127.66,max:127.84,mean:127.72},cpu:{min:0,max:100.03,mean:9.14}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5334.03,totalRequests:160024,latency:{min:392,mean:6782,max:132493,pstdev:12373,percentiles:{p50:3182,p75:4977,p80:5586,p90:8359,p95:48365,p99:55252,p999:64712}},resources:{envoyGateway:{memory:{min:203.37,max:217.03,mean:209.04},cpu:{min:.67,max:5.67,mean:1.33}},envoyProxy:{memory:{min:127.65,max:127.84,mean:127.72},cpu:{min:0,max:99.86,mean:9.91}}},poolOverflow:362,upstreamConnections:38}]},Joe={metadata:{version:"1.3.2",runId:"1.3.2-1750189826777",date:"2025-03-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5203.06,totalRequests:156092,latency:{min:371,mean:6970,max:73949,pstdev:12106,percentiles:{p50:3331,p75:5396,p80:6080,p90:9715,p95:47564,p99:55666,p999:60872}},resources:{envoyGateway:{memory:{min:126.68,max:126.68,mean:126.68},cpu:{min:.99,max:.99,mean:.99}},envoyProxy:{memory:{min:28.17,max:28.17,mean:28.17},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5157.35,totalRequests:154724,latency:{min:380,mean:6752,max:83992,pstdev:12526,percentiles:{p50:3089,p75:4875,p80:5484,p90:8253,p95:49682,p99:55398,p999:61507}},resources:{envoyGateway:{memory:{min:129.05,max:129.05,mean:129.05},cpu:{min:1.79,max:1.79,mean:1.79}},envoyProxy:{memory:{min:32.33,max:32.33,mean:32.33},cpu:{min:61.02,max:61.02,mean:61.02}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5052.19,totalRequests:151566,latency:{min:363,mean:7564,max:72122,pstdev:13492,percentiles:{p50:3384,p75:5472,p80:6191,p90:9941,p95:51320,p99:57128,p999:63107}},resources:{envoyGateway:{memory:{min:146.92,max:146.92,mean:146.92},cpu:{min:3.17,max:3.17,mean:3.17}},envoyProxy:{memory:{min:40.52,max:40.52,mean:40.52},cpu:{min:91.79,max:91.79,mean:91.79}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5101.42,totalRequests:153051,latency:{min:397,mean:6832,max:82624,pstdev:12894,percentiles:{p50:2990,p75:4798,p80:5418,p90:8366,p95:50391,p99:56737,p999:65114}},resources:{envoyGateway:{memory:{min:154.98,max:154.98,mean:154.98},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.7,max:58.7,mean:58.7},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:4948.44,totalRequests:148459,latency:{min:398,mean:7200,max:94949,pstdev:13256,percentiles:{p50:3208,p75:5057,p80:5652,p90:8780,p95:50821,p99:57442,p999:66746}},resources:{envoyGateway:{memory:{min:163.01,max:163.01,mean:163.01},cpu:{min:27.68,max:27.68,mean:27.68}},envoyProxy:{memory:{min:78.9,max:78.9,mean:78.9},cpu:{min:158.2,max:158.2,mean:158.2}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4933.76,totalRequests:148015,latency:{min:361,mean:7088,max:127959,pstdev:13349,percentiles:{p50:3052,p75:4885,p80:5529,p90:8785,p95:50700,p99:59123,p999:70660}},resources:{envoyGateway:{memory:{min:196.05,max:196.05,mean:196.05},cpu:{min:62.32,max:62.32,mean:62.32}},envoyProxy:{memory:{min:127.19,max:127.19,mean:127.19},cpu:{min:196.79,max:196.79,mean:196.79}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.93,totalRequests:153515,latency:{min:387,mean:9017,max:78245,pstdev:15046,percentiles:{p50:3922,p75:6583,p80:7609,p90:16301,p95:54007,p99:59990,p999:67956}},resources:{envoyGateway:{memory:{min:210.06,max:210.06,mean:210.06},cpu:{min:115.56,max:115.56,mean:115.56}},envoyProxy:{memory:{min:110.31,max:110.31,mean:110.31},cpu:{min:358.89,max:358.89,mean:358.89}}},poolOverflow:351,upstreamConnections:49},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:4991.13,totalRequests:149734,latency:{min:391,mean:7071,max:80433,pstdev:12841,percentiles:{p50:3199,p75:5005,p80:5635,p90:8730,p95:49813,p99:55756,p999:61407}},resources:{envoyGateway:{memory:{min:199.41,max:199.41,mean:199.41},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:127.44,max:127.44,mean:127.44},cpu:{min:328.33,max:328.33,mean:328.33}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5138.59,totalRequests:154161,latency:{min:377,mean:6954,max:86982,pstdev:13049,percentiles:{p50:3045,p75:4886,p80:5525,p90:8466,p95:51048,p99:56733,p999:62337}},resources:{envoyGateway:{memory:{min:219.76,max:219.76,mean:219.76},cpu:{min:113.71,max:113.71,mean:113.71}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:297.73,max:297.73,mean:297.73}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5051.68,totalRequests:151551,latency:{min:389,mean:7977,max:86577,pstdev:14090,percentiles:{p50:3498,p75:5731,p80:6471,p90:10947,p95:52355,p99:58748,p999:67379}},resources:{envoyGateway:{memory:{min:259.14,max:259.14,mean:259.14},cpu:{min:103.22,max:103.22,mean:103.22}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:265.59,max:265.59,mean:265.59}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:4962.4,totalRequests:148872,latency:{min:384,mean:7209,max:110186,pstdev:13357,percentiles:{p50:3112,p75:5018,p80:5694,p90:9338,p95:51267,p99:57384,p999:67244}},resources:{envoyGateway:{memory:{min:177.76,max:177.76,mean:177.76},cpu:{min:91.86,max:91.86,mean:91.86}},envoyProxy:{memory:{min:127.24,max:127.24,mean:127.24},cpu:{min:233.07,max:233.07,mean:233.07}}},poolOverflow:362,upstreamConnections:38}]},eie={metadata:{version:"1.3.1",runId:"1.3.1-1750189826775",date:"2025-03-05",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5115.35,totalRequests:153465,latency:{min:389,mean:6604,max:74543,pstdev:11843,percentiles:{p50:3094,p75:5007,p80:5671,p90:8723,p95:46997,p99:55033,p999:60336}},resources:{envoyGateway:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:1.04,max:1.04,mean:1.04}},envoyProxy:{memory:{min:25.28,max:25.28,mean:25.28},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5150.43,totalRequests:154513,latency:{min:386,mean:6919,max:87556,pstdev:12645,percentiles:{p50:3126,p75:5009,p80:5646,p90:8620,p95:49580,p99:55326,p999:60073}},resources:{envoyGateway:{memory:{min:151.59,max:151.59,mean:151.59},cpu:{min:1.83,max:1.83,mean:1.83}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5211.7,totalRequests:156354,latency:{min:376,mean:6687,max:88604,pstdev:12657,percentiles:{p50:2913,p75:4676,p80:5309,p90:8259,p95:49930,p99:55853,p999:63514}},resources:{envoyGateway:{memory:{min:145.61,max:145.61,mean:145.61},cpu:{min:3.19,max:3.19,mean:3.19}},envoyProxy:{memory:{min:35.5,max:35.5,mean:35.5},cpu:{min:91.72,max:91.72,mean:91.72}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5066.99,totalRequests:152016,latency:{min:386,mean:7628,max:93048,pstdev:13700,percentiles:{p50:3310,p75:5414,p80:6156,p90:10289,p95:51750,p99:58007,p999:66938}},resources:{envoyGateway:{memory:{min:156.12,max:156.12,mean:156.12},cpu:{min:15.73,max:15.73,mean:15.73}},envoyProxy:{memory:{min:55.56,max:55.56,mean:55.56},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5098.53,totalRequests:152960,latency:{min:373,mean:7203,max:108142,pstdev:13209,percentiles:{p50:3161,p75:5083,p80:5791,p90:9292,p95:50372,p99:56864,p999:67850}},resources:{envoyGateway:{memory:{min:181.23,max:181.23,mean:181.23},cpu:{min:28.35,max:28.35,mean:28.35}},envoyProxy:{memory:{min:73.6,max:73.6,mean:73.6},cpu:{min:158.01,max:158.01,mean:158.01}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5048.96,totalRequests:151469,latency:{min:366,mean:7462,max:99799,pstdev:13676,percentiles:{p50:3122,p75:5245,p80:6050,p90:10398,p95:50685,p99:59639,p999:74547}},resources:{envoyGateway:{memory:{min:196.57,max:196.57,mean:196.57},cpu:{min:61.62,max:61.62,mean:61.62}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:196.43,max:196.43,mean:196.43}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.49,totalRequests:153495,latency:{min:373,mean:7373,max:79749,pstdev:13231,percentiles:{p50:3334,p75:5268,p80:5935,p90:9436,p95:50972,p99:56680,p999:62969}},resources:{envoyGateway:{memory:{min:213.36,max:213.36,mean:213.36},cpu:{min:114.56,max:114.56,mean:114.56}},envoyProxy:{memory:{min:109.79,max:109.79,mean:109.79},cpu:{min:357.84,max:357.84,mean:357.84}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5128.63,totalRequests:153859,latency:{min:380,mean:6787,max:76259,pstdev:12813,percentiles:{p50:2982,p75:4725,p80:5330,p90:8194,p95:50354,p99:56367,p999:61741}},resources:{envoyGateway:{memory:{min:217.34,max:217.34,mean:217.34},cpu:{min:113.9,max:113.9,mean:113.9}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:327.37,max:327.37,mean:327.37}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5217.06,totalRequests:156516,latency:{min:386,mean:7182,max:93491,pstdev:12999,percentiles:{p50:3211,p75:5188,p80:5872,p90:9449,p95:50083,p99:56135,p999:63309}},resources:{envoyGateway:{memory:{min:220.2,max:220.2,mean:220.2},cpu:{min:112.64,max:112.64,mean:112.64}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:296.73,max:296.73,mean:296.73}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5033.4,totalRequests:151002,latency:{min:380,mean:6522,max:92626,pstdev:12472,percentiles:{p50:2849,p75:4643,p80:5272,p90:8064,p95:49350,p99:55799,p999:64323}},resources:{envoyGateway:{memory:{min:201.77,max:201.77,mean:201.77},cpu:{min:102.25,max:102.25,mean:102.25}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:264.74,max:264.74,mean:264.74}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5061.34,totalRequests:151843,latency:{min:393,mean:7429,max:99934,pstdev:13552,percentiles:{p50:3227,p75:5180,p80:5867,p90:9747,p95:51320,p99:58009,p999:68829}},resources:{envoyGateway:{memory:{min:173.04,max:173.04,mean:173.04},cpu:{min:91.12,max:91.12,mean:91.12}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:360,upstreamConnections:40}]},tie={metadata:{version:"1.3.0",runId:"1.3.0-1750189826772",date:"2025-01-31",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5297.23,totalRequests:158917,latency:{min:371,mean:6861,max:69562,pstdev:12096,percentiles:{p50:3223,p75:5219,p80:5926,p90:9360,p95:48029,p99:54945,p999:60096}},resources:{envoyGateway:{memory:{min:116.36,max:116.36,mean:116.36},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:25.3,max:25.3,mean:25.3},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5276.06,totalRequests:158285,latency:{min:372,mean:6781,max:81436,pstdev:12685,percentiles:{p50:3035,p75:4783,p80:5410,p90:8210,p95:50042,p99:55861,p999:61739}},resources:{envoyGateway:{memory:{min:135.97,max:135.97,mean:135.97},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:60.97,max:60.97,mean:60.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5248.15,totalRequests:157445,latency:{min:386,mean:6832,max:83939,pstdev:12879,percentiles:{p50:2957,p75:4826,p80:5504,p90:8587,p95:50454,p99:56524,p999:63150}},resources:{envoyGateway:{memory:{min:128.67,max:128.67,mean:128.67},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:35.62,max:35.62,mean:35.62},cpu:{min:91.69,max:91.69,mean:91.69}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5190.05,totalRequests:155708,latency:{min:374,mean:6735,max:105820,pstdev:12667,percentiles:{p50:2997,p75:4715,p80:5323,p90:8205,p95:49692,p99:56199,p999:64403}},resources:{envoyGateway:{memory:{min:147.27,max:147.27,mean:147.27},cpu:{min:15.8,max:15.8,mean:15.8}},envoyProxy:{memory:{min:61.52,max:61.52,mean:61.52},cpu:{min:124.52,max:124.52,mean:124.52}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5171.63,totalRequests:155149,latency:{min:345,mean:7139,max:89923,pstdev:13210,percentiles:{p50:3191,p75:5039,p80:5680,p90:8824,p95:50767,p99:57397,p999:67665}},resources:{envoyGateway:{memory:{min:158.88,max:158.88,mean:158.88},cpu:{min:28.37,max:28.37,mean:28.37}},envoyProxy:{memory:{min:76,max:76,mean:76},cpu:{min:157.59,max:157.59,mean:157.59}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4998.06,totalRequests:149944,latency:{min:371,mean:6950,max:98525,pstdev:13111,percentiles:{p50:3057,p75:4816,p80:5416,p90:8383,p95:50270,p99:57946,p999:69038}},resources:{envoyGateway:{memory:{min:182.71,max:182.71,mean:182.71},cpu:{min:61.79,max:61.79,mean:61.79}},envoyProxy:{memory:{min:122.12,max:122.12,mean:122.12},cpu:{min:194.7,max:194.7,mean:194.7}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5224.35,totalRequests:156731,latency:{min:376,mean:6870,max:73203,pstdev:12827,percentiles:{p50:3060,p75:4817,p80:5428,p90:8280,p95:50618,p99:56178,p999:61280}},resources:{envoyGateway:{memory:{min:209.85,max:209.85,mean:209.85},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:110.5,max:110.5,mean:110.5},cpu:{min:356.13,max:356.13,mean:356.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5247.75,totalRequests:157436,latency:{min:383,mean:6991,max:88027,pstdev:12998,percentiles:{p50:3091,p75:4901,p80:5532,p90:8568,p95:50655,p99:56272,p999:62160}},resources:{envoyGateway:{memory:{min:208.95,max:208.95,mean:208.95},cpu:{min:114.35,max:114.35,mean:114.35}},envoyProxy:{memory:{min:122.19,max:122.19,mean:122.19},cpu:{min:325.78,max:325.78,mean:325.78}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5201.69,totalRequests:156051,latency:{min:380,mean:7027,max:78663,pstdev:12995,percentiles:{p50:3129,p75:4963,p80:5600,p90:8642,p95:50726,p99:56254,p999:61509}},resources:{envoyGateway:{memory:{min:211.34,max:211.34,mean:211.34},cpu:{min:113.23,max:113.23,mean:113.23}},envoyProxy:{memory:{min:122.17,max:122.17,mean:122.17},cpu:{min:295.15,max:295.15,mean:295.15}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5206.95,totalRequests:156214,latency:{min:386,mean:6893,max:92049,pstdev:12874,percentiles:{p50:3088,p75:4898,p80:5548,p90:8444,p95:50268,p99:56334,p999:65038}},resources:{envoyGateway:{memory:{min:158.73,max:158.73,mean:158.73},cpu:{min:102.79,max:102.79,mean:102.79}},envoyProxy:{memory:{min:122.15,max:122.15,mean:122.15},cpu:{min:263,max:263,mean:263}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5150.23,totalRequests:154507,latency:{min:375,mean:6786,max:84877,pstdev:12812,percentiles:{p50:3009,p75:4734,p80:5340,p90:8236,p95:50247,p99:56647,p999:65042}},resources:{envoyGateway:{memory:{min:168.04,max:168.04,mean:168.04},cpu:{min:91.51,max:91.51,mean:91.51}},envoyProxy:{memory:{min:122.14,max:122.14,mean:122.14},cpu:{min:230.49,max:230.49,mean:230.49}}},poolOverflow:363,upstreamConnections:37}]},nie={metadata:{version:"1.2.8",runId:"1.2.8-1750189826771",date:"2025-03-25",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.8",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5878.23,totalRequests:176347,latency:{min:376,mean:9154,max:75661,pstdev:14181,percentiles:{p50:4294,p75:7182,p80:8292,p90:22716,p95:52056,p99:58071,p999:64841}},resources:{envoyGateway:{memory:{min:108.89,max:108.89,mean:108.89},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:28.23,max:28.23,mean:28.23},cpu:{min:30.48,max:30.48,mean:30.48}}},poolOverflow:342,upstreamConnections:58},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5582.21,totalRequests:167469,latency:{min:359,mean:6378,max:69967,pstdev:12106,percentiles:{p50:2864,p75:4529,p80:5113,p90:7717,p95:48431,p99:54521,p999:59967}},resources:{envoyGateway:{memory:{min:132.62,max:132.62,mean:132.62},cpu:{min:1.54,max:1.54,mean:1.54}},envoyProxy:{memory:{min:32.39,max:32.39,mean:32.39},cpu:{min:60.99,max:60.99,mean:60.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5454.1,totalRequests:163623,latency:{min:368,mean:6738,max:72437,pstdev:12216,percentiles:{p50:3318,p75:5037,p80:5581,p90:8092,p95:47886,p99:53829,p999:60200}},resources:{envoyGateway:{memory:{min:135.66,max:135.66,mean:135.66},cpu:{min:2.91,max:2.91,mean:2.91}},envoyProxy:{memory:{min:38.6,max:38.6,mean:38.6},cpu:{min:91.91,max:91.91,mean:91.91}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5496.5,totalRequests:164898,latency:{min:375,mean:6453,max:103043,pstdev:12191,percentiles:{p50:2887,p75:4603,p80:5209,p90:7967,p95:48150,p99:54630,p999:63743}},resources:{envoyGateway:{memory:{min:147.15,max:147.15,mean:147.15},cpu:{min:15.47,max:15.47,mean:15.47}},envoyProxy:{memory:{min:60.75,max:60.75,mean:60.75},cpu:{min:125.31,max:125.31,mean:125.31}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5351.8,totalRequests:160554,latency:{min:377,mean:6516,max:93298,pstdev:12549,percentiles:{p50:2857,p75:4496,p80:5076,p90:7615,p95:49512,p99:55822,p999:65318}},resources:{envoyGateway:{memory:{min:155.79,max:155.79,mean:155.79},cpu:{min:28.01,max:28.01,mean:28.01}},envoyProxy:{memory:{min:82.96,max:82.96,mean:82.96},cpu:{min:159.29,max:159.29,mean:159.29}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5102.69,totalRequests:153086,latency:{min:358,mean:6968,max:108298,pstdev:13304,percentiles:{p50:2979,p75:4802,p80:5441,p90:8343,p95:50370,p99:60203,p999:71446}},resources:{envoyGateway:{memory:{min:190.03,max:190.03,mean:190.03},cpu:{min:61.69,max:61.69,mean:61.69}},envoyProxy:{memory:{min:133.22,max:133.22,mean:133.22},cpu:{min:199.84,max:199.84,mean:199.84}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5424.03,totalRequests:162721,latency:{min:362,mean:6570,max:73609,pstdev:12562,percentiles:{p50:2923,p75:4626,p80:5209,p90:7751,p95:49960,p99:55525,p999:60127}},resources:{envoyGateway:{memory:{min:127.89,max:127.89,mean:127.89},cpu:{min:114.69,max:114.69,mean:114.69}},envoyProxy:{memory:{min:112.11,max:112.11,mean:112.11},cpu:{min:363.01,max:363.01,mean:363.01}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5454.96,totalRequests:163653,latency:{min:363,mean:6397,max:73404,pstdev:12347,percentiles:{p50:2884,p75:4452,p80:4989,p90:7300,p95:49477,p99:55369,p999:61495}},resources:{envoyGateway:{memory:{min:136.28,max:136.28,mean:136.28},cpu:{min:114.05,max:114.05,mean:114.05}},envoyProxy:{memory:{min:114.79,max:114.79,mean:114.79},cpu:{min:332.54,max:332.54,mean:332.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5402.5,totalRequests:162075,latency:{min:366,mean:6575,max:127266,pstdev:12484,percentiles:{p50:2940,p75:4600,p80:5162,p90:7727,p95:49549,p99:55334,p999:61478}},resources:{envoyGateway:{memory:{min:140.91,max:140.91,mean:140.91},cpu:{min:112.87,max:112.87,mean:112.87}},envoyProxy:{memory:{min:114.76,max:114.76,mean:114.76},cpu:{min:301.85,max:301.85,mean:301.85}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5498.81,totalRequests:164969,latency:{min:349,mean:6325,max:84213,pstdev:12296,percentiles:{p50:2789,p75:4396,p80:4944,p90:7293,p95:48961,p99:55212,p999:65019}},resources:{envoyGateway:{memory:{min:148.36,max:148.36,mean:148.36},cpu:{min:102.53,max:102.53,mean:102.53}},envoyProxy:{memory:{min:133.35,max:133.35,mean:133.35},cpu:{min:269.43,max:269.43,mean:269.43}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5308.76,totalRequests:159263,latency:{min:361,mean:6727,max:98807,pstdev:12828,percentiles:{p50:2916,p75:4650,p80:5273,p90:8161,p95:49971,p99:56840,p999:67182}},resources:{envoyGateway:{memory:{min:157.93,max:157.93,mean:157.93},cpu:{min:91.26,max:91.26,mean:91.26}},envoyProxy:{memory:{min:133.2,max:133.2,mean:133.2},cpu:{min:236.02,max:236.02,mean:236.02}}},poolOverflow:362,upstreamConnections:38}]},rie={metadata:{version:"1.2.7",runId:"1.2.7-1750189826769",date:"2025-03-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.7",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5984.83,totalRequests:179545,latency:{min:402,mean:12033,max:92835,pstdev:16725,percentiles:{p50:5655,p75:9809,p80:11804,p90:49971,p95:55760,p99:64241,p999:73961}},resources:{envoyGateway:{memory:{min:112.35,max:112.35,mean:112.35},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:28.29,max:28.29,mean:28.29},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:323,upstreamConnections:77},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5564.85,totalRequests:166949,latency:{min:362,mean:6416,max:73261,pstdev:12268,percentiles:{p50:2855,p75:4514,p80:5094,p90:7660,p95:49031,p99:54939,p999:60436}},resources:{envoyGateway:{memory:{min:125.94,max:125.94,mean:125.94},cpu:{min:1.52,max:1.52,mean:1.52}},envoyProxy:{memory:{min:34.46,max:34.46,mean:34.46},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5618.23,totalRequests:168547,latency:{min:372,mean:6834,max:85766,pstdev:12643,percentiles:{p50:3107,p75:4954,p80:5560,p90:8454,p95:49485,p99:55513,p999:61272}},resources:{envoyGateway:{memory:{min:132.05,max:132.05,mean:132.05},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:40.63,max:40.63,mean:40.63},cpu:{min:92.02,max:92.02,mean:92.02}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5506.26,totalRequests:165193,latency:{min:383,mean:6670,max:85905,pstdev:12677,percentiles:{p50:2946,p75:4659,p80:5243,p90:7891,p95:49846,p99:56096,p999:65185}},resources:{envoyGateway:{memory:{min:146.09,max:146.09,mean:146.09},cpu:{min:15.43,max:15.43,mean:15.43}},envoyProxy:{memory:{min:62.86,max:62.86,mean:62.86},cpu:{min:125.21,max:125.21,mean:125.21}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5580.92,totalRequests:167428,latency:{min:310,mean:6716,max:89178,pstdev:12233,percentiles:{p50:3157,p75:4861,p80:5446,p90:8231,p95:47419,p99:54634,p999:65587}},resources:{envoyGateway:{memory:{min:163.49,max:163.49,mean:163.49},cpu:{min:28.15,max:28.15,mean:28.15}},envoyProxy:{memory:{min:83.07,max:83.07,mean:83.07},cpu:{min:159.15,max:159.15,mean:159.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5298.3,totalRequests:158951,latency:{min:369,mean:6537,max:122015,pstdev:12654,percentiles:{p50:2914,p75:4472,p80:5012,p90:7402,p95:48639,p99:58097,p999:69103}},resources:{envoyGateway:{memory:{min:187.81,max:187.81,mean:187.81},cpu:{min:62.41,max:62.41,mean:62.41}},envoyProxy:{memory:{min:133.27,max:133.27,mean:133.27},cpu:{min:199.13,max:199.13,mean:199.13}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5623.57,totalRequests:168711,latency:{min:380,mean:7190,max:75063,pstdev:13103,percentiles:{p50:3211,p75:5102,p80:5772,p90:9144,p95:50722,p99:56260,p999:61515}},resources:{envoyGateway:{memory:{min:132.38,max:132.38,mean:132.38},cpu:{min:116.08,max:116.08,mean:116.08}},envoyProxy:{memory:{min:128.69,max:128.69,mean:128.69},cpu:{min:362.3,max:362.3,mean:362.3}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5516.59,totalRequests:165498,latency:{min:329,mean:6044,max:69902,pstdev:11632,percentiles:{p50:2893,p75:4337,p80:4790,p90:6742,p95:47155,p99:53372,p999:58073}},resources:{envoyGateway:{memory:{min:144.02,max:144.02,mean:144.02},cpu:{min:115.5,max:115.5,mean:115.5}},envoyProxy:{memory:{min:129.14,max:129.14,mean:129.14},cpu:{min:331.76,max:331.76,mean:331.76}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5515.82,totalRequests:165475,latency:{min:380,mean:6483,max:79159,pstdev:12363,percentiles:{p50:2872,p75:4545,p80:5131,p90:7760,p95:49190,p99:55408,p999:61890}},resources:{envoyGateway:{memory:{min:135.79,max:135.79,mean:135.79},cpu:{min:114.36,max:114.36,mean:114.36}},envoyProxy:{memory:{min:109,max:109,mean:109},cpu:{min:301.13,max:301.13,mean:301.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5403.53,totalRequests:162106,latency:{min:354,mean:6429,max:83423,pstdev:12305,percentiles:{p50:2864,p75:4496,p80:5072,p90:7504,p95:48885,p99:55414,p999:63565}},resources:{envoyGateway:{memory:{min:155.42,max:155.42,mean:155.42},cpu:{min:103.9,max:103.9,mean:103.9}},envoyProxy:{memory:{min:133.59,max:133.59,mean:133.59},cpu:{min:268.85,max:268.85,mean:268.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5405.24,totalRequests:162162,latency:{min:387,mean:6615,max:90812,pstdev:12660,percentiles:{p50:2913,p75:4593,p80:5174,p90:7866,p95:49461,p99:56510,p999:67248}},resources:{envoyGateway:{memory:{min:165.58,max:165.58,mean:165.58},cpu:{min:92.35,max:92.35,mean:92.35}},envoyProxy:{memory:{min:133.42,max:133.42,mean:133.42},cpu:{min:235.87,max:235.87,mean:235.87}}},poolOverflow:362,upstreamConnections:38}]},aie={metadata:{version:"1.2.6",runId:"1.2.6-1750189826767",date:"2025-01-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.6",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5668.03,totalRequests:170041,latency:{min:354,mean:6713,max:73658,pstdev:11906,percentiles:{p50:3142,p75:5170,p80:5865,p90:9278,p95:47425,p99:54870,p999:59602}},resources:{envoyGateway:{memory:{min:108.82,max:108.82,mean:108.82},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:25.38,max:25.38,mean:25.38},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5542.06,totalRequests:166262,latency:{min:380,mean:6117,max:73658,pstdev:11949,percentiles:{p50:2749,p75:4310,p80:4842,p90:7067,p95:48484,p99:54499,p999:59725}},resources:{envoyGateway:{memory:{min:135.08,max:135.08,mean:135.08},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.53,max:31.53,mean:31.53},cpu:{min:61.17,max:61.17,mean:61.17}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5556.06,totalRequests:166682,latency:{min:363,mean:6439,max:100163,pstdev:12297,percentiles:{p50:2891,p75:4506,p80:5050,p90:7595,p95:49078,p99:54935,p999:60456}},resources:{envoyGateway:{memory:{min:140.09,max:140.09,mean:140.09},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:37.7,max:37.7,mean:37.7},cpu:{min:91.98,max:91.98,mean:91.98}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5462.58,totalRequests:163882,latency:{min:372,mean:6376,max:78544,pstdev:12289,percentiles:{p50:2853,p75:4454,p80:5002,p90:7458,p95:49076,p99:55132,p999:63879}},resources:{envoyGateway:{memory:{min:146.71,max:146.71,mean:146.71},cpu:{min:15.64,max:15.64,mean:15.64}},envoyProxy:{memory:{min:59.89,max:59.89,mean:59.89},cpu:{min:125.41,max:125.41,mean:125.41}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5427.5,totalRequests:162825,latency:{min:359,mean:6562,max:97148,pstdev:12598,percentiles:{p50:2881,p75:4518,p80:5091,p90:7774,p95:49301,p99:56102,p999:67338}},resources:{envoyGateway:{memory:{min:155.26,max:155.26,mean:155.26},cpu:{min:28.52,max:28.52,mean:28.52}},envoyProxy:{memory:{min:82.08,max:82.08,mean:82.08},cpu:{min:159.72,max:159.72,mean:159.72}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5261.62,totalRequests:157849,latency:{min:373,mean:6972,max:115060,pstdev:13251,percentiles:{p50:3015,p75:4770,p80:5385,p90:8293,p95:50296,p99:59930,p999:70590}},resources:{envoyGateway:{memory:{min:188.13,max:188.13,mean:188.13},cpu:{min:61.78,max:61.78,mean:61.78}},envoyProxy:{memory:{min:130.35,max:130.35,mean:130.35},cpu:{min:199.1,max:199.1,mean:199.1}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5543.17,totalRequests:166299,latency:{min:360,mean:6447,max:75276,pstdev:12396,percentiles:{p50:2866,p75:4486,p80:5040,p90:7527,p95:49663,p99:55240,p999:60647}},resources:{envoyGateway:{memory:{min:129.36,max:129.36,mean:129.36},cpu:{min:115.21,max:115.21,mean:115.21}},envoyProxy:{memory:{min:122.58,max:122.58,mean:122.58},cpu:{min:362.6,max:362.6,mean:362.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5522.73,totalRequests:165682,latency:{min:384,mean:6098,max:68321,pstdev:11922,percentiles:{p50:2776,p75:4326,p80:4838,p90:6958,p95:48431,p99:54296,p999:58857}},resources:{envoyGateway:{memory:{min:140.97,max:140.97,mean:140.97},cpu:{min:114.57,max:114.57,mean:114.57}},envoyProxy:{memory:{min:122.83,max:122.83,mean:122.83},cpu:{min:332.12,max:332.12,mean:332.12}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5500.66,totalRequests:165023,latency:{min:360,mean:6301,max:80400,pstdev:12064,percentiles:{p50:2833,p75:4483,p80:5035,p90:7574,p95:48777,p99:54876,p999:60850}},resources:{envoyGateway:{memory:{min:132.45,max:132.45,mean:132.45},cpu:{min:113.5,max:113.5,mean:113.5}},envoyProxy:{memory:{min:122.84,max:122.84,mean:122.84},cpu:{min:301.26,max:301.26,mean:301.26}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5453.33,totalRequests:163603,latency:{min:357,mean:6324,max:86024,pstdev:12138,percentiles:{p50:2842,p75:4429,p80:4967,p90:7393,p95:48201,p99:54683,p999:65251}},resources:{envoyGateway:{memory:{min:150.62,max:150.62,mean:150.62},cpu:{min:103.11,max:103.11,mean:103.11}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:269.03,max:269.03,mean:269.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5402.96,totalRequests:162089,latency:{min:371,mean:6575,max:90804,pstdev:12621,percentiles:{p50:2877,p75:4543,p80:5114,p90:7832,p95:49375,p99:56092,p999:69132}},resources:{envoyGateway:{memory:{min:159.25,max:159.25,mean:159.25},cpu:{min:91.66,max:91.66,mean:91.66}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:235.83,max:235.83,mean:235.83}}},poolOverflow:362,upstreamConnections:38}]},oie={metadata:{version:"1.2.5",runId:"1.2.5-1750189826766",date:"2025-01-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.5",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5704.46,totalRequests:171136,latency:{min:370,mean:6520,max:74477,pstdev:11781,percentiles:{p50:3051,p75:4913,p80:5565,p90:8700,p95:47091,p99:54638,p999:59404}},resources:{envoyGateway:{memory:{min:112.07,max:112.07,mean:112.07},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:24.38,max:24.38,mean:24.38},cpu:{min:30.47,max:30.47,mean:30.47}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5647.86,totalRequests:169439,latency:{min:379,mean:6313,max:80498,pstdev:11935,percentiles:{p50:2854,p75:4550,p80:5158,p90:7820,p95:48025,p99:54390,p999:60321}},resources:{envoyGateway:{memory:{min:123.4,max:123.4,mean:123.4},cpu:{min:1.48,max:1.48,mean:1.48}},envoyProxy:{memory:{min:30.55,max:30.55,mean:30.55},cpu:{min:61.09,max:61.09,mean:61.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5529.29,totalRequests:165879,latency:{min:379,mean:6240,max:73539,pstdev:12017,percentiles:{p50:2818,p75:4510,p80:5068,p90:7413,p95:48300,p99:54171,p999:59308}},resources:{envoyGateway:{memory:{min:139.7,max:139.7,mean:139.7},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:36.73,max:36.73,mean:36.73},cpu:{min:91.9,max:91.9,mean:91.9}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5542.3,totalRequests:166274,latency:{min:365,mean:6463,max:81305,pstdev:12357,percentiles:{p50:2890,p75:4545,p80:5116,p90:7585,p95:49043,p99:55365,p999:64399}},resources:{envoyGateway:{memory:{min:146.11,max:146.11,mean:146.11},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.91,max:58.91,mean:58.91},cpu:{min:124.96,max:124.96,mean:124.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5407.59,totalRequests:162228,latency:{min:363,mean:6396,max:88236,pstdev:12419,percentiles:{p50:2816,p75:4450,p80:5012,p90:7485,p95:48762,p99:55666,p999:67457}},resources:{envoyGateway:{memory:{min:154.01,max:154.01,mean:154.01},cpu:{min:27.98,max:27.98,mean:27.98}},envoyProxy:{memory:{min:81.11,max:81.11,mean:81.11},cpu:{min:158.85,max:158.85,mean:158.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5247.32,totalRequests:157425,latency:{min:374,mean:6604,max:106491,pstdev:12903,percentiles:{p50:2880,p75:4514,p80:5089,p90:7639,p95:49453,p99:58750,p999:71970}},resources:{envoyGateway:{memory:{min:183.52,max:183.52,mean:183.52},cpu:{min:61.85,max:61.85,mean:61.85}},envoyProxy:{memory:{min:129.33,max:129.33,mean:129.33},cpu:{min:198.98,max:198.98,mean:198.98}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5668.05,totalRequests:170048,latency:{min:366,mean:6143,max:73551,pstdev:12054,percentiles:{p50:2726,p75:4279,p80:4799,p90:7123,p95:48988,p99:54704,p999:58812}},resources:{envoyGateway:{memory:{min:138.57,max:138.57,mean:138.57},cpu:{min:115.2,max:115.2,mean:115.2}},envoyProxy:{memory:{min:121.88,max:121.88,mean:121.88},cpu:{min:361.89,max:361.89,mean:361.89}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5579.16,totalRequests:167375,latency:{min:353,mean:6190,max:87244,pstdev:12028,percentiles:{p50:2803,p75:4357,p80:4889,p90:7110,p95:48482,p99:54329,p999:59113}},resources:{envoyGateway:{memory:{min:132.83,max:132.83,mean:132.83},cpu:{min:114.63,max:114.63,mean:114.63}},envoyProxy:{memory:{min:122.16,max:122.16,mean:122.16},cpu:{min:331.47,max:331.47,mean:331.47}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5581.7,totalRequests:167453,latency:{min:377,mean:6525,max:72724,pstdev:12286,percentiles:{p50:2929,p75:4641,p80:5219,p90:7915,p95:48732,p99:54810,p999:61450}},resources:{envoyGateway:{memory:{min:133.91,max:133.91,mean:133.91},cpu:{min:113.44,max:113.44,mean:113.44}},envoyProxy:{memory:{min:122.02,max:122.02,mean:122.02},cpu:{min:300.79,max:300.79,mean:300.79}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5447.53,totalRequests:163426,latency:{min:368,mean:6540,max:88612,pstdev:12451,percentiles:{p50:2904,p75:4546,p80:5128,p90:7692,p95:49305,p99:55422,p999:64116}},resources:{envoyGateway:{memory:{min:145.28,max:145.28,mean:145.28},cpu:{min:102.98,max:102.98,mean:102.98}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:268.5,max:268.5,mean:268.5}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5437.61,totalRequests:163132,latency:{min:383,mean:6527,max:102998,pstdev:12600,percentiles:{p50:2827,p75:4470,p80:5070,p90:7714,p95:49029,p99:56436,p999:66684}},resources:{envoyGateway:{memory:{min:164.07,max:164.07,mean:164.07},cpu:{min:91.64,max:91.64,mean:91.64}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:235.61,max:235.61,mean:235.61}}},poolOverflow:362,upstreamConnections:38}]},iie={metadata:{version:"1.2.4",runId:"1.2.4-1750189826764",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5982.38,totalRequests:179472,latency:{min:349,mean:6011,max:83349,pstdev:11061,percentiles:{p50:2829,p75:4477,p80:5098,p90:7842,p95:43255,p99:53350,p999:59346}},resources:{envoyGateway:{memory:{min:110.54,max:110.54,mean:110.54},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.44,max:30.44,mean:30.44}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5917.46,totalRequests:177524,latency:{min:361,mean:6164,max:70909,pstdev:11809,percentiles:{p50:2843,p75:4366,p80:4876,p90:7109,p95:47788,p99:54372,p999:59932}},resources:{envoyGateway:{memory:{min:119.89,max:119.89,mean:119.89},cpu:{min:1.61,max:1.61,mean:1.61}},envoyProxy:{memory:{min:30.43,max:30.43,mean:30.43},cpu:{min:61.13,max:61.13,mean:61.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.25,totalRequests:177910,latency:{min:398,mean:6027,max:92041,pstdev:11760,percentiles:{p50:2652,p75:4198,p80:4747,p90:7135,p95:47513,p99:55083,p999:61542}},resources:{envoyGateway:{memory:{min:129.08,max:129.08,mean:129.08},cpu:{min:3.05,max:3.05,mean:3.05}},envoyProxy:{memory:{min:36.57,max:36.57,mean:36.57},cpu:{min:92.01,max:92.01,mean:92.01}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5612.73,totalRequests:168382,latency:{min:368,mean:6361,max:108085,pstdev:12378,percentiles:{p50:2817,p75:4383,p80:4929,p90:7356,p95:48795,p99:56586,p999:68399}},resources:{envoyGateway:{memory:{min:140.63,max:140.63,mean:140.63},cpu:{min:15.35,max:15.35,mean:15.35}},envoyProxy:{memory:{min:58.77,max:58.77,mean:58.77},cpu:{min:125.44,max:125.44,mean:125.44}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5799.01,totalRequests:173974,latency:{min:378,mean:6166,max:97771,pstdev:11964,percentiles:{p50:2818,p75:4251,p80:4742,p90:6922,p95:47560,p99:55281,p999:68112}},resources:{envoyGateway:{memory:{min:152.5,max:152.5,mean:152.5},cpu:{min:28.38,max:28.38,mean:28.38}},envoyProxy:{memory:{min:78.94,max:78.94,mean:78.94},cpu:{min:159.67,max:159.67,mean:159.67}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5474.43,totalRequests:164233,latency:{min:386,mean:6534,max:109809,pstdev:12936,percentiles:{p50:2656,p75:4361,p80:5013,p90:8074,p95:49516,p99:60213,p999:73678}},resources:{envoyGateway:{memory:{min:183.98,max:183.98,mean:183.98},cpu:{min:62.29,max:62.29,mean:62.29}},envoyProxy:{memory:{min:131.16,max:131.16,mean:131.16},cpu:{min:200.46,max:200.46,mean:200.46}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5816.39,totalRequests:174492,latency:{min:340,mean:6131,max:85209,pstdev:11868,percentiles:{p50:2730,p75:4264,p80:4816,p90:7369,p95:47933,p99:54984,p999:61820}},resources:{envoyGateway:{memory:{min:195,max:195,mean:195},cpu:{min:116.53,max:116.53,mean:116.53}},envoyProxy:{memory:{min:120.37,max:120.37,mean:120.37},cpu:{min:363.61,max:363.61,mean:363.61}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5848.8,totalRequests:175470,latency:{min:372,mean:6285,max:77979,pstdev:12136,percentiles:{p50:2760,p75:4334,p80:4906,p90:7492,p95:48553,p99:55732,p999:63037}},resources:{envoyGateway:{memory:{min:205.2,max:205.2,mean:205.2},cpu:{min:115.88,max:115.88,mean:115.88}},envoyProxy:{memory:{min:120.26,max:120.26,mean:120.26},cpu:{min:333.06,max:333.06,mean:333.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5897.55,totalRequests:176927,latency:{min:365,mean:6054,max:78041,pstdev:11770,percentiles:{p50:2761,p75:4253,p80:4770,p90:6934,p95:47628,p99:54935,p999:62232}},resources:{envoyGateway:{memory:{min:201.78,max:201.78,mean:201.78},cpu:{min:114.84,max:114.84,mean:114.84}},envoyProxy:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:302.66,max:302.66,mean:302.66}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5764.69,totalRequests:172941,latency:{min:376,mean:6540,max:87822,pstdev:12528,percentiles:{p50:2847,p75:4511,p80:5118,p90:7907,p95:49336,p99:56737,p999:66895}},resources:{envoyGateway:{memory:{min:237.36,max:237.36,mean:237.36},cpu:{min:104.3,max:104.3,mean:104.3}},envoyProxy:{memory:{min:131.2,max:131.2,mean:131.2},cpu:{min:270.32,max:270.32,mean:270.32}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5709.58,totalRequests:171290,latency:{min:350,mean:6172,max:93663,pstdev:11978,percentiles:{p50:2864,p75:4285,p80:4782,p90:6980,p95:47689,p99:55115,p999:67440}},resources:{envoyGateway:{memory:{min:158.41,max:158.41,mean:158.41},cpu:{min:92.69,max:92.69,mean:92.69}},envoyProxy:{memory:{min:131.32,max:131.32,mean:131.32},cpu:{min:236.85,max:236.85,mean:236.85}}},poolOverflow:363,upstreamConnections:37}]},sie={metadata:{version:"1.2.3",runId:"1.2.3-1750189826763",date:"2024-12-02",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6222.52,totalRequests:186680,latency:{min:349,mean:6177,max:70643,pstdev:11464,percentiles:{p50:2879,p75:4520,p80:5082,p90:7684,p95:46213,p99:54147,p999:60250}},resources:{envoyGateway:{memory:{min:110.2,max:110.2,mean:110.2},cpu:{min:.68,max:.68,mean:.68}},envoyProxy:{memory:{min:25.89,max:25.89,mean:25.89},cpu:{min:30.33,max:30.33,mean:30.33}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6170.38,totalRequests:185112,latency:{min:370,mean:5770,max:72798,pstdev:11358,percentiles:{p50:2657,p75:4054,p80:4535,p90:6537,p95:46632,p99:53751,p999:59174}},resources:{envoyGateway:{memory:{min:122.48,max:122.48,mean:122.48},cpu:{min:1.42,max:1.42,mean:1.42}},envoyProxy:{memory:{min:32.05,max:32.05,mean:32.05},cpu:{min:60.88,max:60.88,mean:60.88}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6085.51,totalRequests:182567,latency:{min:365,mean:5863,max:84721,pstdev:11540,percentiles:{p50:2605,p75:4127,p80:4662,p90:7048,p95:46759,p99:54556,p999:61736}},resources:{envoyGateway:{memory:{min:131.06,max:131.06,mean:131.06},cpu:{min:2.8,max:2.8,mean:2.8}},envoyProxy:{memory:{min:38.19,max:38.19,mean:38.19},cpu:{min:91.64,max:91.64,mean:91.64}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6032.83,totalRequests:180985,latency:{min:362,mean:6079,max:79421,pstdev:11806,percentiles:{p50:2707,p75:4272,p80:4832,p90:7327,p95:47441,p99:54743,p999:65808}},resources:{envoyGateway:{memory:{min:142.98,max:142.98,mean:142.98},cpu:{min:15.04,max:15.04,mean:15.04}},envoyProxy:{memory:{min:60.39,max:60.39,mean:60.39},cpu:{min:124.47,max:124.47,mean:124.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5773.98,totalRequests:173223,latency:{min:344,mean:6360,max:79355,pstdev:12473,percentiles:{p50:2707,p75:4299,p80:4888,p90:7643,p95:49309,p99:57382,p999:68141}},resources:{envoyGateway:{memory:{min:160.84,max:160.84,mean:160.84},cpu:{min:27.66,max:27.66,mean:27.66}},envoyProxy:{memory:{min:80.58,max:80.58,mean:80.58},cpu:{min:156.97,max:156.97,mean:156.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5776.08,totalRequests:173283,latency:{min:361,mean:6194,max:89714,pstdev:12241,percentiles:{p50:2703,p75:4241,p80:4791,p90:7296,p95:47755,p99:58537,p999:70676}},resources:{envoyGateway:{memory:{min:186.49,max:186.49,mean:186.49},cpu:{min:61.39,max:61.39,mean:61.39}},envoyProxy:{memory:{min:130.82,max:130.82,mean:130.82},cpu:{min:196.17,max:196.17,mean:196.17}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6128.86,totalRequests:183866,latency:{min:351,mean:5824,max:73633,pstdev:11470,percentiles:{p50:2578,p75:4038,p80:4570,p90:6823,p95:46927,p99:54392,p999:60213}},resources:{envoyGateway:{memory:{min:218.36,max:218.36,mean:218.36},cpu:{min:114.4,max:114.4,mean:114.4}},envoyProxy:{memory:{min:118.8,max:118.8,mean:118.8},cpu:{min:358.03,max:358.03,mean:358.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6065.62,totalRequests:181969,latency:{min:378,mean:5877,max:82526,pstdev:11643,percentiles:{p50:2588,p75:4048,p80:4587,p90:6876,p95:47429,p99:54710,p999:62111}},resources:{envoyGateway:{memory:{min:222.42,max:222.42,mean:222.42},cpu:{min:113.86,max:113.86,mean:113.86}},envoyProxy:{memory:{min:119.23,max:119.23,mean:119.23},cpu:{min:327.6,max:327.6,mean:327.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6045.71,totalRequests:181360,latency:{min:388,mean:6024,max:80216,pstdev:11596,percentiles:{p50:2802,p75:4253,p80:4761,p90:6951,p95:47183,p99:54065,p999:59455}},resources:{envoyGateway:{memory:{min:142.37,max:142.37,mean:142.37},cpu:{min:112.77,max:112.77,mean:112.77}},envoyProxy:{memory:{min:119.54,max:119.54,mean:119.54},cpu:{min:296.95,max:296.95,mean:296.95}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5956.66,totalRequests:178700,latency:{min:379,mean:6153,max:85528,pstdev:12032,percentiles:{p50:2640,p75:4362,p80:4961,p90:7625,p95:47886,p99:55965,p999:65695}},resources:{envoyGateway:{memory:{min:148.72,max:148.72,mean:148.72},cpu:{min:102.49,max:102.49,mean:102.49}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:264.96,max:264.96,mean:264.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5958.61,totalRequests:178765,latency:{min:362,mean:5967,max:83480,pstdev:11671,percentiles:{p50:2714,p75:4156,p80:4658,p90:6839,p95:46901,p99:54601,p999:65464}},resources:{envoyGateway:{memory:{min:164.87,max:164.87,mean:164.87},cpu:{min:91.25,max:91.25,mean:91.25}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:363,upstreamConnections:37}]},lie={metadata:{version:"1.2.2",runId:"1.2.2-1750189826761",date:"2024-11-28",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6249.74,totalRequests:187495,latency:{min:333,mean:5937,max:75075,pstdev:10895,percentiles:{p50:2840,p75:4501,p80:5077,p90:7640,p95:41435,p99:53243,p999:58066}},resources:{envoyGateway:{memory:{min:106.26,max:106.26,mean:106.26},cpu:{min:.73,max:.73,mean:.73}},envoyProxy:{memory:{min:26.09,max:26.09,mean:26.09},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6140.58,totalRequests:184222,latency:{min:373,mean:5812,max:79740,pstdev:11513,percentiles:{p50:2590,p75:4071,p80:4583,p90:6812,p95:46811,p99:54179,p999:61151}},resources:{envoyGateway:{memory:{min:131.24,max:131.24,mean:131.24},cpu:{min:1.34,max:1.34,mean:1.34}},envoyProxy:{memory:{min:32.26,max:32.26,mean:32.26},cpu:{min:60.74,max:60.74,mean:60.74}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6149.72,totalRequests:184494,latency:{min:366,mean:5813,max:89935,pstdev:11434,percentiles:{p50:2637,p75:4073,p80:4561,p90:6680,p95:46505,p99:53872,p999:60348}},resources:{envoyGateway:{memory:{min:133.05,max:133.05,mean:133.05},cpu:{min:2.75,max:2.75,mean:2.75}},envoyProxy:{memory:{min:38.38,max:38.38,mean:38.38},cpu:{min:91.57,max:91.57,mean:91.57}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6076.78,totalRequests:182305,latency:{min:361,mean:6031,max:87502,pstdev:11819,percentiles:{p50:2675,p75:4203,p80:4751,p90:7118,p95:47147,p99:55078,p999:67106}},resources:{envoyGateway:{memory:{min:153.62,max:153.62,mean:153.62},cpu:{min:14.77,max:14.77,mean:14.77}},envoyProxy:{memory:{min:60.45,max:60.45,mean:60.45},cpu:{min:124.04,max:124.04,mean:124.04}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5928.89,totalRequests:177873,latency:{min:336,mean:6196,max:85643,pstdev:12032,percentiles:{p50:2803,p75:4338,p80:4852,p90:7143,p95:47726,p99:55619,p999:67780}},resources:{envoyGateway:{memory:{min:145.79,max:145.79,mean:145.79},cpu:{min:27.17,max:27.17,mean:27.17}},envoyProxy:{memory:{min:80.64,max:80.64,mean:80.64},cpu:{min:157.65,max:157.65,mean:157.65}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5843.64,totalRequests:175314,latency:{min:339,mean:6452,max:101912,pstdev:12482,percentiles:{p50:2790,p75:4509,p80:5136,p90:8012,p95:47702,p99:58542,p999:74014}},resources:{envoyGateway:{memory:{min:173.7,max:173.7,mean:173.7},cpu:{min:61.12,max:61.12,mean:61.12}},envoyProxy:{memory:{min:130.89,max:130.89,mean:130.89},cpu:{min:195.74,max:195.74,mean:195.74}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6096.9,totalRequests:182907,latency:{min:365,mean:5840,max:99377,pstdev:11326,percentiles:{p50:2735,p75:4188,p80:4674,p90:6654,p95:46344,p99:53444,p999:58591}},resources:{envoyGateway:{memory:{min:230.99,max:230.99,mean:230.99},cpu:{min:114.22,max:114.22,mean:114.22}},envoyProxy:{memory:{min:121.56,max:121.56,mean:121.56},cpu:{min:358.71,max:358.71,mean:358.71}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6151.76,totalRequests:184556,latency:{min:376,mean:5805,max:84885,pstdev:11572,percentiles:{p50:2520,p75:3969,p80:4498,p90:6842,p95:46837,p99:54761,p999:62570}},resources:{envoyGateway:{memory:{min:233.63,max:233.63,mean:233.63},cpu:{min:113.65,max:113.65,mean:113.65}},envoyProxy:{memory:{min:121.86,max:121.86,mean:121.86},cpu:{min:328.3,max:328.3,mean:328.3}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6157.53,totalRequests:184729,latency:{min:379,mean:5964,max:75988,pstdev:11502,percentiles:{p50:2743,p75:4204,p80:4695,p90:6941,p95:46497,p99:54179,p999:62005}},resources:{envoyGateway:{memory:{min:141.36,max:141.36,mean:141.36},cpu:{min:112.67,max:112.67,mean:112.67}},envoyProxy:{memory:{min:122.04,max:122.04,mean:122.04},cpu:{min:297.59,max:297.59,mean:297.59}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:6060.5,totalRequests:181818,latency:{min:360,mean:6022,max:92483,pstdev:11657,percentiles:{p50:2685,p75:4265,p80:4811,p90:7313,p95:46495,p99:54495,p999:64219}},resources:{envoyGateway:{memory:{min:150.71,max:150.71,mean:150.71},cpu:{min:102.4,max:102.4,mean:102.4}},envoyProxy:{memory:{min:130.9,max:130.9,mean:130.9},cpu:{min:265.29,max:265.29,mean:265.29}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5966.83,totalRequests:179008,latency:{min:343,mean:5962,max:102715,pstdev:11763,percentiles:{p50:2668,p75:4125,p80:4633,p90:6863,p95:46741,p99:54929,p999:67018}},resources:{envoyGateway:{memory:{min:162.62,max:162.62,mean:162.62},cpu:{min:91.03,max:91.03,mean:91.03}},envoyProxy:{memory:{min:131.05,max:131.05,mean:131.05},cpu:{min:232.55,max:232.55,mean:232.55}}},poolOverflow:363,upstreamConnections:37}]},uie={metadata:{version:"1.2.1",runId:"1.2.1-1750189826759",date:"2024-11-07",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6110.53,totalRequests:183316,latency:{min:337,mean:6415,max:92647,pstdev:11350,percentiles:{p50:3107,p75:5037,p80:5711,p90:8782,p95:45103,p99:53942,p999:60790}},resources:{envoyGateway:{memory:{min:111.18,max:111.18,mean:111.18},cpu:{min:.79,max:.79,mean:.79}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.62,max:30.62,mean:30.62}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6011.43,totalRequests:180343,latency:{min:377,mean:6244,max:72724,pstdev:11870,percentiles:{p50:2835,p75:4408,p80:4939,p90:7412,p95:47611,p99:54769,p999:61716}},resources:{envoyGateway:{memory:{min:116.45,max:116.45,mean:116.45},cpu:{min:1.59,max:1.59,mean:1.59}},envoyProxy:{memory:{min:30.41,max:30.41,mean:30.41},cpu:{min:61.42,max:61.42,mean:61.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5961.65,totalRequests:178854,latency:{min:370,mean:5979,max:81096,pstdev:11586,percentiles:{p50:2705,p75:4189,p80:4699,p90:7030,p95:46987,p99:54095,p999:61222}},resources:{envoyGateway:{memory:{min:128.02,max:128.02,mean:128.02},cpu:{min:3.04,max:3.04,mean:3.04}},envoyProxy:{memory:{min:36.55,max:36.55,mean:36.55},cpu:{min:92.49,max:92.49,mean:92.49}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5921.3,totalRequests:177639,latency:{min:376,mean:6208,max:100098,pstdev:11901,percentiles:{p50:2770,p75:4413,p80:5009,p90:7647,p95:46934,p99:55273,p999:68509}},resources:{envoyGateway:{memory:{min:144.93,max:144.93,mean:144.93},cpu:{min:15.11,max:15.11,mean:15.11}},envoyProxy:{memory:{min:58.75,max:58.75,mean:58.75},cpu:{min:125.9,max:125.9,mean:125.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5876.24,totalRequests:176290,latency:{min:365,mean:6248,max:80101,pstdev:12134,percentiles:{p50:2759,p75:4348,p80:4922,p90:7422,p95:47855,p99:56041,p999:67145}},resources:{envoyGateway:{memory:{min:155.94,max:155.94,mean:155.94},cpu:{min:27.72,max:27.72,mean:27.72}},envoyProxy:{memory:{min:80.95,max:80.95,mean:80.95},cpu:{min:159.58,max:159.58,mean:159.58}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5744.1,totalRequests:172323,latency:{min:380,mean:6374,max:100245,pstdev:12424,percentiles:{p50:2775,p75:4337,p80:4899,p90:7542,p95:47699,p99:59248,p999:71761}},resources:{envoyGateway:{memory:{min:184.41,max:184.41,mean:184.41},cpu:{min:61.5,max:61.5,mean:61.5}},envoyProxy:{memory:{min:129.19,max:129.19,mean:129.19},cpu:{min:199.75,max:199.75,mean:199.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6028.67,totalRequests:180864,latency:{min:361,mean:5919,max:75882,pstdev:11427,percentiles:{p50:2729,p75:4244,p80:4783,p90:6934,p95:46608,p99:53897,p999:59893}},resources:{envoyGateway:{memory:{min:229.41,max:229.41,mean:229.41},cpu:{min:114.16,max:114.16,mean:114.16}},envoyProxy:{memory:{min:121.69,max:121.69,mean:121.69},cpu:{min:363.78,max:363.78,mean:363.78}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6093.21,totalRequests:182799,latency:{min:364,mean:5859,max:73809,pstdev:11454,percentiles:{p50:2634,p75:4171,p80:4702,p90:7002,p95:46548,p99:53979,p999:62793}},resources:{envoyGateway:{memory:{min:236.91,max:236.91,mean:236.91},cpu:{min:113.6,max:113.6,mean:113.6}},envoyProxy:{memory:{min:122.3,max:122.3,mean:122.3},cpu:{min:333.22,max:333.22,mean:333.22}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6057.56,totalRequests:181727,latency:{min:366,mean:5898,max:83623,pstdev:11560,percentiles:{p50:2628,p75:4159,p80:4695,p90:6996,p95:46897,p99:54495,p999:61849}},resources:{envoyGateway:{memory:{min:143.71,max:143.71,mean:143.71},cpu:{min:112.58,max:112.58,mean:112.58}},envoyProxy:{memory:{min:121.84,max:121.84,mean:121.84},cpu:{min:302.58,max:302.58,mean:302.58}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5899.93,totalRequests:176998,latency:{min:329,mean:6218,max:88965,pstdev:12007,percentiles:{p50:2818,p75:4388,p80:4920,p90:7204,p95:47871,p99:55517,p999:65886}},resources:{envoyGateway:{memory:{min:154.24,max:154.24,mean:154.24},cpu:{min:102.3,max:102.3,mean:102.3}},envoyProxy:{memory:{min:129.34,max:129.34,mean:129.34},cpu:{min:270.21,max:270.21,mean:270.21}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5862.2,totalRequests:175868,latency:{min:359,mean:6106,max:107622,pstdev:11962,percentiles:{p50:2648,p75:4343,p80:4933,p90:7617,p95:47341,p99:55508,p999:69103}},resources:{envoyGateway:{memory:{min:153.72,max:153.72,mean:153.72},cpu:{min:91.07,max:91.07,mean:91.07}},envoyProxy:{memory:{min:129.18,max:129.18,mean:129.18},cpu:{min:237.04,max:237.04,mean:237.04}}},poolOverflow:363,upstreamConnections:37}]},cie={metadata:{version:"1.2.0",runId:"1.2.0-1750189826754",date:"2024-11-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6006.27,totalRequests:180191,latency:{min:359,mean:6202,max:74358,pstdev:11262,percentiles:{p50:2976,p75:4719,p80:5330,p90:8159,p95:44003,p99:54190,p999:59357}},resources:{envoyGateway:{memory:{min:113.66,max:113.66,mean:113.66},cpu:{min:.75,max:.75,mean:.75}},envoyProxy:{memory:{min:25.55,max:25.55,mean:25.55},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5988.15,totalRequests:179650,latency:{min:366,mean:6093,max:82386,pstdev:11670,percentiles:{p50:2838,p75:4283,p80:4798,p90:6972,p95:47523,p99:54038,p999:59813}},resources:{envoyGateway:{memory:{min:119.16,max:119.16,mean:119.16},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.71,max:31.71,mean:31.71},cpu:{min:61.03,max:61.03,mean:61.03}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.13,totalRequests:177905,latency:{min:374,mean:6182,max:93884,pstdev:11844,percentiles:{p50:2812,p75:4420,p80:4967,p90:7339,p95:47618,p99:54661,p999:61865}},resources:{envoyGateway:{memory:{min:123.35,max:123.35,mean:123.35},cpu:{min:2.89,max:2.89,mean:2.89}},envoyProxy:{memory:{min:37.86,max:37.86,mean:37.86},cpu:{min:91.87,max:91.87,mean:91.87}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5713.27,totalRequests:171401,latency:{min:384,mean:6405,max:105545,pstdev:12313,percentiles:{p50:2832,p75:4450,p80:5057,p90:7773,p95:48732,p99:56084,p999:66220}},resources:{envoyGateway:{memory:{min:150.92,max:150.92,mean:150.92},cpu:{min:15.08,max:15.08,mean:15.08}},envoyProxy:{memory:{min:60.05,max:60.05,mean:60.05},cpu:{min:125.09,max:125.09,mean:125.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5689.03,totalRequests:170675,latency:{min:365,mean:5939,max:98639,pstdev:11585,percentiles:{p50:2715,p75:4258,p80:4772,p90:7055,p95:45996,p99:54368,p999:68464}},resources:{envoyGateway:{memory:{min:156.97,max:156.97,mean:156.97},cpu:{min:27.62,max:27.62,mean:27.62}},envoyProxy:{memory:{min:82.26,max:82.26,mean:82.26},cpu:{min:158.86,max:158.86,mean:158.86}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5407.08,totalRequests:162220,latency:{min:371,mean:6424,max:131579,pstdev:12473,percentiles:{p50:2692,p75:4503,p80:5177,p90:8264,p95:47540,p99:58488,p999:72720}},resources:{envoyGateway:{memory:{min:215.93,max:215.93,mean:215.93},cpu:{min:61.56,max:61.56,mean:61.56}},envoyProxy:{memory:{min:130.5,max:130.5,mean:130.5},cpu:{min:197.45,max:197.45,mean:197.45}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5905.23,totalRequests:177157,latency:{min:396,mean:6205,max:92979,pstdev:12065,percentiles:{p50:2713,p75:4262,p80:4832,p90:7415,p95:48306,p99:55736,p999:63318}},resources:{envoyGateway:{memory:{min:233.71,max:233.71,mean:233.71},cpu:{min:114.53,max:114.53,mean:114.53}},envoyProxy:{memory:{min:118.94,max:118.94,mean:118.94},cpu:{min:360.39,max:360.39,mean:360.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5793.19,totalRequests:173800,latency:{min:385,mean:6501,max:86843,pstdev:12452,percentiles:{p50:2744,p75:4568,p80:5227,p90:8494,p95:48965,p99:56467,p999:65382}},resources:{envoyGateway:{memory:{min:202.08,max:202.08,mean:202.08},cpu:{min:113.96,max:113.96,mean:113.96}},envoyProxy:{memory:{min:121.24,max:121.24,mean:121.24},cpu:{min:329.91,max:329.91,mean:329.91}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5783.8,totalRequests:173514,latency:{min:385,mean:6179,max:85405,pstdev:11889,percentiles:{p50:2707,p75:4462,p80:5071,p90:7760,p95:47423,p99:54994,p999:64567}},resources:{envoyGateway:{memory:{min:144.59,max:144.59,mean:144.59},cpu:{min:112.93,max:112.93,mean:112.93}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:299.28,max:299.28,mean:299.28}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5804.51,totalRequests:174139,latency:{min:384,mean:6147,max:82661,pstdev:11892,percentiles:{p50:2807,p75:4284,p80:4791,p90:7039,p95:47558,p99:55162,p999:66723}},resources:{envoyGateway:{memory:{min:160.23,max:160.23,mean:160.23},cpu:{min:102.85,max:102.85,mean:102.85}},envoyProxy:{memory:{min:130.62,max:130.62,mean:130.62},cpu:{min:267.09,max:267.09,mean:267.09}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5804.87,totalRequests:174149,latency:{min:368,mean:5828,max:106119,pstdev:11561,percentiles:{p50:2647,p75:4078,p80:4553,p90:6656,p95:46047,p99:55025,p999:66633}},resources:{envoyGateway:{memory:{min:155.88,max:155.88,mean:155.88},cpu:{min:91.5,max:91.5,mean:91.5}},envoyProxy:{memory:{min:130.61,max:130.61,mean:130.61},cpu:{min:234.47,max:234.47,mean:234.47}}},poolOverflow:365,upstreamConnections:35}]},fie={metadata:{version:"1.1.4",runId:"1.1.4-1750190329987",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5971.73,totalRequests:179152,latency:{min:354,mean:6247,max:97591,pstdev:11371,percentiles:{p50:2948,p75:4694,p80:5352,p90:8420,p95:44519,p99:54398,p999:62244}},resources:{envoyGateway:{memory:{min:82.79,max:82.79,mean:82.79},cpu:{min:1.5000000000000002,max:1.5000000000000002,mean:1.5000000000000002}},envoyProxy:{memory:{min:24.11,max:24.11,mean:24.11},cpu:{min:101.53333333333335,max:101.53333333333335,mean:101.53333333333335}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5957.22,totalRequests:178717,latency:{min:385,mean:6145,max:93360,pstdev:11838,percentiles:{p50:2751,p75:4352,p80:4922,p90:7436,p95:47679,p99:54878,p999:62414}},resources:{envoyGateway:{memory:{min:103.29,max:103.29,mean:103.29},cpu:{min:6.800000000000001,max:6.800000000000001,mean:6.800000000000001}},envoyProxy:{memory:{min:32.29,max:32.29,mean:32.29},cpu:{min:204,max:204,mean:204}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5896.53,totalRequests:176899,latency:{min:360,mean:6376,max:93995,pstdev:12077,percentiles:{p50:2905,p75:4542,p80:5112,p90:7699,p95:48019,p99:55472,p999:63707}},resources:{envoyGateway:{memory:{min:151.7,max:151.7,mean:151.7},cpu:{min:32.599999999999994,max:32.599999999999994,mean:32.599999999999994}},envoyProxy:{memory:{min:46.46,max:46.46,mean:46.46},cpu:{min:309.8,max:309.8,mean:309.8}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5885.1,totalRequests:176553,latency:{min:370,mean:6378,max:102457,pstdev:12096,percentiles:{p50:2834,p75:4508,p80:5093,p90:7817,p95:48099,p99:55572,p999:64329}},resources:{envoyGateway:{memory:{min:763.38,max:763.38,mean:763.38},cpu:{min:605.6333333333333,max:605.6333333333333,mean:605.6333333333333}},envoyProxy:{memory:{min:150.81,max:150.81,mean:150.81},cpu:{min:494.66666666666674,max:494.66666666666674,mean:494.66666666666674}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5642.37,totalRequests:169274,latency:{min:314,mean:6430,max:135987,pstdev:12216,percentiles:{p50:2801,p75:4489,p80:5175,p90:8673,p95:46690,p99:56358,p999:73814}},resources:{envoyGateway:{memory:{min:1603.28,max:1603.28,mean:1603.28},cpu:{min:41.63333333333333,max:41.63333333333333,mean:41.63333333333333}},envoyProxy:{memory:{min:289.75,max:289.75,mean:289.75},cpu:{min:727.1666666666666,max:727.1666666666666,mean:727.1666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5993.8,totalRequests:179822,latency:{min:381,mean:5965,max:84086,pstdev:11660,percentiles:{p50:2666,p75:4169,p80:4715,p90:6995,p95:47218,p99:54775,p999:61200}},resources:{envoyGateway:{memory:{min:117.16,max:117.16,mean:117.16},cpu:{min:518.0333333333333,max:518.0333333333333,mean:518.0333333333333}},envoyProxy:{memory:{min:278.72,max:278.72,mean:278.72},cpu:{min:1205.8,max:1205.8,mean:1205.8}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5947.1,totalRequests:178412,latency:{min:346,mean:5809,max:76681,pstdev:11155,percentiles:{p50:2707,p75:4164,p80:4684,p90:6938,p95:45451,p99:53227,p999:59303}},resources:{envoyGateway:{memory:{min:123.23,max:123.23,mean:123.23},cpu:{min:512.5333333333333,max:512.5333333333333,mean:512.5333333333333}},envoyProxy:{memory:{min:291.25,max:291.25,mean:291.25},cpu:{min:1103.6333333333334,max:1103.6333333333334,mean:1103.6333333333334}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4884.46,totalRequests:146534,latency:{min:362,mean:7148,max:137863,pstdev:11237,percentiles:{p50:3375,p75:6266,p80:7621,p90:17699,p95:31992,p99:59576,p999:83935}},resources:{envoyGateway:{memory:{min:338.12,max:338.12,mean:338.12},cpu:{min:488.1333333333333,max:488.1333333333333,mean:488.1333333333333}},envoyProxy:{memory:{min:294.41,max:294.41,mean:294.41},cpu:{min:993,max:993,mean:993}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5737.62,totalRequests:172120,latency:{min:345,mean:6192,max:117288,pstdev:11530,percentiles:{p50:2822,p75:4535,p80:5155,p90:8463,p95:42631,p99:55584,p999:70291}},resources:{envoyGateway:{memory:{min:679.73,max:679.73,mean:679.73},cpu:{min:18.76666666666667,max:18.76666666666667,mean:18.76666666666667}},envoyProxy:{memory:{min:285.93,max:285.93,mean:285.93},cpu:{min:833.4333333333334,max:833.4333333333334,mean:833.4333333333334}}},poolOverflow:363,upstreamConnections:37}]},pie={metadata:{version:"1.1.3",runId:"1.1.3-1750190329984",date:"2024-11-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6070.53,totalRequests:182116,latency:{min:353,mean:6263,max:87117,pstdev:11274,percentiles:{p50:2994,p75:4783,p80:5441,p90:8506,p95:44029,p99:54130,p999:59291}},resources:{envoyGateway:{memory:{min:85.16,max:85.16,mean:85.16},cpu:{min:1.3666666666666665,max:1.3666666666666665,mean:1.3666666666666665}},envoyProxy:{memory:{min:26,max:26,mean:26},cpu:{min:101.43333333333334,max:101.43333333333334,mean:101.43333333333334}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5999.45,totalRequests:179985,latency:{min:368,mean:6117,max:76840,pstdev:11675,percentiles:{p50:2803,p75:4339,p80:4903,p90:7204,p95:47128,p99:54317,p999:60557}},resources:{envoyGateway:{memory:{min:102.18,max:102.18,mean:102.18},cpu:{min:7.033333333333333,max:7.033333333333333,mean:7.033333333333333}},envoyProxy:{memory:{min:34.18,max:34.18,mean:34.18},cpu:{min:203.56666666666666,max:203.56666666666666,mean:203.56666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6053.06,totalRequests:181592,latency:{min:390,mean:5889,max:94826,pstdev:11642,percentiles:{p50:2599,p75:4075,p80:4583,p90:6945,p95:47128,p99:54872,p999:62212}},resources:{envoyGateway:{memory:{min:151.34,max:151.34,mean:151.34},cpu:{min:31.633333333333336,max:31.633333333333336,mean:31.633333333333336}},envoyProxy:{memory:{min:48.34,max:48.34,mean:48.34},cpu:{min:309.06666666666666,max:309.06666666666666,mean:309.06666666666666}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5895.77,totalRequests:176873,latency:{min:378,mean:6220,max:100757,pstdev:12033,percentiles:{p50:2723,p75:4341,p80:4931,p90:7644,p95:47828,p99:55521,p999:67383}},resources:{envoyGateway:{memory:{min:687.16,max:687.16,mean:687.16},cpu:{min:578.2333333333332,max:578.2333333333332,mean:578.2333333333332}},envoyProxy:{memory:{min:150.69,max:150.69,mean:150.69},cpu:{min:488.20000000000005,max:488.20000000000005,mean:488.20000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5818.09,totalRequests:174543,latency:{min:356,mean:6109,max:107913,pstdev:11285,percentiles:{p50:2832,p75:4538,p80:5163,p90:8134,p95:42639,p99:54546,p999:67543}},resources:{envoyGateway:{memory:{min:1329.35,max:1329.35,mean:1329.35},cpu:{min:61.33333333333333,max:61.33333333333333,mean:61.33333333333333}},envoyProxy:{memory:{min:303.55,max:303.55,mean:303.55},cpu:{min:731.4333333333334,max:731.4333333333334,mean:731.4333333333334}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5996.79,totalRequests:179907,latency:{min:367,mean:6127,max:77688,pstdev:11777,percentiles:{p50:2745,p75:4292,p80:4835,p90:7317,p95:47597,p99:54706,p999:61323}},resources:{envoyGateway:{memory:{min:125.62,max:125.62,mean:125.62},cpu:{min:525.5,max:525.5,mean:525.5}},envoyProxy:{memory:{min:289.68,max:289.68,mean:289.68},cpu:{min:1239.6,max:1239.6,mean:1239.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5732.14,totalRequests:171956,latency:{min:336,mean:4876,max:76279,pstdev:10072,percentiles:{p50:2290,p75:3444,p80:3846,p90:5476,p95:24546,p99:51763,p999:57040}},resources:{envoyGateway:{memory:{min:132.64,max:132.64,mean:132.64},cpu:{min:520.8333333333333,max:520.8333333333333,mean:520.8333333333333}},envoyProxy:{memory:{min:291.68,max:291.68,mean:291.68},cpu:{min:1138.0333333333335,max:1138.0333333333335,mean:1138.0333333333335}}},poolOverflow:371,upstreamConnections:29},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5311.34,totalRequests:159332,latency:{min:362,mean:6219,max:144302,pstdev:11133,percentiles:{p50:2808,p75:4741,p80:5579,p90:10689,p95:37480,p99:53626,p999:73998}},resources:{envoyGateway:{memory:{min:179.01,max:179.01,mean:179.01},cpu:{min:497.9666666666666,max:497.9666666666666,mean:497.9666666666666}},envoyProxy:{memory:{min:298.77,max:298.77,mean:298.77},cpu:{min:1034.033333333333,max:1034.033333333333,mean:1034.033333333333}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5633.85,totalRequests:169021,latency:{min:369,mean:6266,max:106577,pstdev:11127,percentiles:{p50:2908,p75:4793,p80:5511,p90:9568,p95:36169,p99:54472,p999:68628}},resources:{envoyGateway:{memory:{min:487.12,max:487.12,mean:487.12},cpu:{min:27.133333333333336,max:27.133333333333336,mean:27.133333333333336}},envoyProxy:{memory:{min:299.84,max:299.84,mean:299.84},cpu:{min:837.8666666666668,max:837.8666666666668,mean:837.8666666666668}}},poolOverflow:363,upstreamConnections:37}]},die={metadata:{version:"1.1.2",runId:"1.1.2-1750190329982",date:"2024-09-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5649.72,totalRequests:169493,latency:{min:356,mean:6560,max:72347,pstdev:11796,percentiles:{p50:3044,p75:5011,p80:5690,p90:8937,p95:46880,p99:54560,p999:59316}},resources:{envoyGateway:{memory:{min:86.72,max:86.72,mean:86.72},cpu:{min:1.5666666666666667,max:1.5666666666666667,mean:1.5666666666666667}},envoyProxy:{memory:{min:24.26,max:24.26,mean:24.26},cpu:{min:101.63333333333333,max:101.63333333333333,mean:101.63333333333333}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5594.14,totalRequests:167826,latency:{min:377,mean:6225,max:71024,pstdev:11980,percentiles:{p50:2812,p75:4378,p80:4905,p90:7214,p95:48160,p99:54513,p999:59850}},resources:{envoyGateway:{memory:{min:106.76,max:106.76,mean:106.76},cpu:{min:7.7,max:7.7,mean:7.7}},envoyProxy:{memory:{min:32.43,max:32.43,mean:32.43},cpu:{min:204.53333333333333,max:204.53333333333333,mean:204.53333333333333}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5523.65,totalRequests:165711,latency:{min:379,mean:6455,max:77815,pstdev:12317,percentiles:{p50:2868,p75:4510,p80:5086,p90:7645,p95:49127,p99:55048,p999:61448}},resources:{envoyGateway:{memory:{min:149.03,max:149.03,mean:149.03},cpu:{min:29.333333333333332,max:29.333333333333332,mean:29.333333333333332}},envoyProxy:{memory:{min:46.61,max:46.61,mean:46.61},cpu:{min:309.7666666666667,max:309.7666666666667,mean:309.7666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5554.01,totalRequests:166624,latency:{min:357,mean:6246,max:99753,pstdev:12051,percentiles:{p50:2841,p75:4416,p80:4960,p90:7177,p95:48371,p99:54800,p999:63275}},resources:{envoyGateway:{memory:{min:375.51,max:375.51,mean:375.51},cpu:{min:615.1,max:615.1,mean:615.1}},envoyProxy:{memory:{min:152.97,max:152.97,mean:152.97},cpu:{min:492.4666666666667,max:492.4666666666667,mean:492.4666666666667}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5475.04,totalRequests:164256,latency:{min:365,mean:6546,max:95539,pstdev:12646,percentiles:{p50:2834,p75:4484,p80:5075,p90:7891,p95:49397,p99:56231,p999:67629}},resources:{envoyGateway:{memory:{min:1340.6,max:1340.6,mean:1340.6},cpu:{min:38.333333333333336,max:38.333333333333336,mean:38.333333333333336}},envoyProxy:{memory:{min:281.71,max:281.71,mean:281.71},cpu:{min:718.0666666666666,max:718.0666666666666,mean:718.0666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5657.68,totalRequests:169734,latency:{min:355,mean:7320,max:87252,pstdev:13162,percentiles:{p50:3307,p75:5218,p80:5885,p90:9252,p95:50671,p99:56332,p999:62406}},resources:{envoyGateway:{memory:{min:371.29,max:371.29,mean:371.29},cpu:{min:578.7666666666667,max:578.7666666666667,mean:578.7666666666667}},envoyProxy:{memory:{min:273.57,max:273.57,mean:273.57},cpu:{min:1224,max:1224,mean:1224}}},poolOverflow:356,upstreamConnections:44},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5587.8,totalRequests:167636,latency:{min:356,mean:6346,max:68095,pstdev:12097,percentiles:{p50:2890,p75:4509,p80:5041,p90:7495,p95:48560,p99:54345,p999:60436}},resources:{envoyGateway:{memory:{min:342.8,max:342.8,mean:342.8},cpu:{min:573.3000000000001,max:573.3000000000001,mean:573.3000000000001}},envoyProxy:{memory:{min:274.84,max:274.84,mean:274.84},cpu:{min:1122.2333333333333,max:1122.2333333333333,mean:1122.2333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4098.74,totalRequests:122966,latency:{min:347,mean:3660,max:99745,pstdev:7371,percentiles:{p50:1658,p75:2735,p80:3147,p90:5306,p95:18030,p99:42778,p999:60440}},resources:{envoyGateway:{memory:{min:433.01,max:433.01,mean:433.01},cpu:{min:486.96666666666664,max:486.96666666666664,mean:486.96666666666664}},envoyProxy:{memory:{min:281.27,max:281.27,mean:281.27},cpu:{min:996.0333333333333,max:996.0333333333333,mean:996.0333333333333}}},poolOverflow:384,upstreamConnections:16},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5306.46,totalRequests:159194,latency:{min:360,mean:6884,max:106807,pstdev:12850,percentiles:{p50:2983,p75:4873,p80:5573,p90:9215,p95:49102,p99:58521,p999:70213}},resources:{envoyGateway:{memory:{min:232.76,max:232.76,mean:232.76},cpu:{min:16.299999999999997,max:16.299999999999997,mean:16.299999999999997}},envoyProxy:{memory:{min:282.68,max:282.68,mean:282.68},cpu:{min:825.4333333333333,max:825.4333333333333,mean:825.4333333333333}}},poolOverflow:361,upstreamConnections:39}]},mie={metadata:{version:"1.1.1",runId:"1.1.1-1750190329981",date:"2024-09-12",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6258.99,totalRequests:187774,latency:{min:333,mean:5933,max:71266,pstdev:10816,percentiles:{p50:2898,p75:4513,p80:5099,p90:7661,p95:40607,p99:53149,p999:58789}},resources:{envoyGateway:{memory:{min:84.04,max:84.04,mean:84.04},cpu:{min:1.5333333333333334,max:1.5333333333333334,mean:1.5333333333333334}},envoyProxy:{memory:{min:25.57,max:25.57,mean:25.57},cpu:{min:101.33333333333331,max:101.33333333333331,mean:101.33333333333331}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6118.28,totalRequests:183552,latency:{min:359,mean:5828,max:81178,pstdev:11437,percentiles:{p50:2646,p75:4049,p80:4561,p90:6666,p95:46723,p99:53913,p999:60094}},resources:{envoyGateway:{memory:{min:101.33,max:101.33,mean:101.33},cpu:{min:6.8999999999999995,max:6.8999999999999995,mean:6.8999999999999995}},envoyProxy:{memory:{min:33.75,max:33.75,mean:33.75},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6045.36,totalRequests:181361,latency:{min:377,mean:5908,max:88063,pstdev:11539,percentiles:{p50:2659,p75:4143,p80:4675,p90:6863,p95:46733,p99:54091,p999:63211}},resources:{envoyGateway:{memory:{min:115.34,max:115.34,mean:115.34},cpu:{min:32.800000000000004,max:32.800000000000004,mean:32.800000000000004}},envoyProxy:{memory:{min:47.79,max:47.79,mean:47.79},cpu:{min:308.96666666666664,max:308.96666666666664,mean:308.96666666666664}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5881.18,totalRequests:176436,latency:{min:327,mean:6376,max:130330,pstdev:12048,percentiles:{p50:2843,p75:4548,p80:5181,p90:8168,p95:47517,p99:55470,p999:66041}},resources:{envoyGateway:{memory:{min:608.65,max:608.65,mean:608.65},cpu:{min:625.6666666666666,max:625.6666666666666,mean:625.6666666666666}},envoyProxy:{memory:{min:152.29,max:152.29,mean:152.29},cpu:{min:492.5666666666667,max:492.5666666666667,mean:492.5666666666667}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5875.93,totalRequests:176280,latency:{min:381,mean:6086,max:86654,pstdev:11932,percentiles:{p50:2704,p75:4181,p80:4727,p90:7177,p95:47091,p99:55814,p999:68415}},resources:{envoyGateway:{memory:{min:1308.52,max:1308.52,mean:1308.52},cpu:{min:39.49999999999999,max:39.49999999999999,mean:39.49999999999999}},envoyProxy:{memory:{min:283.24,max:283.24,mean:283.24},cpu:{min:707.1333333333332,max:707.1333333333332,mean:707.1333333333332}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6077.56,totalRequests:182327,latency:{min:362,mean:6197,max:92372,pstdev:11720,percentiles:{p50:2824,p75:4438,p80:5e3,p90:7503,p95:47110,p99:54169,p999:60426}},resources:{envoyGateway:{memory:{min:121.13,max:121.13,mean:121.13},cpu:{min:544.5333333333334,max:544.5333333333334,mean:544.5333333333334}},envoyProxy:{memory:{min:277.29,max:277.29,mean:277.29},cpu:{min:1206.4666666666665,max:1206.4666666666665,mean:1206.4666666666665}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6047.67,totalRequests:181438,latency:{min:370,mean:6062,max:92168,pstdev:11743,percentiles:{p50:2733,p75:4268,p80:4801,p90:7226,p95:47095,p99:54886,p999:61917}},resources:{envoyGateway:{memory:{min:126.22,max:126.22,mean:126.22},cpu:{min:538.8333333333334,max:538.8333333333334,mean:538.8333333333334}},envoyProxy:{memory:{min:285.62,max:285.62,mean:285.62},cpu:{min:1104.3000000000002,max:1104.3000000000002,mean:1104.3000000000002}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4654.8,totalRequests:139655,latency:{min:336,mean:4675,max:107409,pstdev:9843,percentiles:{p50:2048,p75:3459,p80:4015,p90:6531,p95:19138,p99:57518,p999:73269}},resources:{envoyGateway:{memory:{min:480.36,max:480.36,mean:480.36},cpu:{min:377,max:377,mean:377}},envoyProxy:{memory:{min:289.51,max:289.51,mean:289.51},cpu:{min:969.2333333333332,max:969.2333333333332,mean:969.2333333333332}}},poolOverflow:377,upstreamConnections:23},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5676.68,totalRequests:170301,latency:{min:376,mean:6244,max:153264,pstdev:11618,percentiles:{p50:2797,p75:4618,p80:5324,p90:8807,p95:40232,p99:56496,p999:73506}},resources:{envoyGateway:{memory:{min:436.58,max:436.58,mean:436.58},cpu:{min:28.066666666666666,max:28.066666666666666,mean:28.066666666666666}},envoyProxy:{memory:{min:283.47,max:283.47,mean:283.47},cpu:{min:813.3666666666667,max:813.3666666666667,mean:813.3666666666667}}},poolOverflow:363,upstreamConnections:37}]},hie={metadata:{version:"1.1.0",runId:"1.1.0-1750190329977",date:"2024-07-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6181.97,totalRequests:185463,latency:{min:362,mean:5902,max:73084,pstdev:11039,percentiles:{p50:2765,p75:4364,p80:4935,p90:7504,p95:41244,p99:53929,p999:61147}},resources:{envoyGateway:{memory:{min:86.2,max:86.2,mean:86.2},cpu:{min:1.4333333333333333,max:1.4333333333333333,mean:1.4333333333333333}},envoyProxy:{memory:{min:24.09,max:24.09,mean:24.09},cpu:{min:101.36666666666667,max:101.36666666666667,mean:101.36666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6103.97,totalRequests:183121,latency:{min:354,mean:5852,max:75943,pstdev:11382,percentiles:{p50:2681,p75:4083,p80:4601,p90:6825,p95:46262,p99:53862,p999:60651}},resources:{envoyGateway:{memory:{min:100.14,max:100.14,mean:100.14},cpu:{min:7.233333333333333,max:7.233333333333333,mean:7.233333333333333}},envoyProxy:{memory:{min:32.25,max:32.25,mean:32.25},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6074.87,totalRequests:182247,latency:{min:371,mean:5877,max:94171,pstdev:11399,percentiles:{p50:2732,p75:4191,p80:4677,p90:6801,p95:46481,p99:53866,p999:61036}},resources:{envoyGateway:{memory:{min:114.69,max:114.69,mean:114.69},cpu:{min:30,max:30,mean:30}},envoyProxy:{memory:{min:46.42,max:46.42,mean:46.42},cpu:{min:308.70000000000005,max:308.70000000000005,mean:308.70000000000005}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5993.57,totalRequests:179811,latency:{min:368,mean:6123,max:96571,pstdev:11831,percentiles:{p50:2753,p75:4261,p80:4799,p90:7247,p95:47368,p99:55248,p999:66586}},resources:{envoyGateway:{memory:{min:762.8,max:762.8,mean:762.8},cpu:{min:600.8666666666667,max:600.8666666666667,mean:600.8666666666667}},envoyProxy:{memory:{min:152.78,max:152.78,mean:152.78},cpu:{min:488.70000000000005,max:488.70000000000005,mean:488.70000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5812.8,totalRequests:174396,latency:{min:388,mean:6310,max:95719,pstdev:12246,percentiles:{p50:2729,p75:4334,p80:4905,p90:7607,p95:47970,p99:56811,p999:68165}},resources:{envoyGateway:{memory:{min:1593.56,max:1593.56,mean:1593.56},cpu:{min:36.56666666666667,max:36.56666666666667,mean:36.56666666666667}},envoyProxy:{memory:{min:289.79,max:289.79,mean:289.79},cpu:{min:715.6333333333333,max:715.6333333333333,mean:715.6333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5916.93,totalRequests:177517,latency:{min:385,mean:6352,max:82747,pstdev:12011,percentiles:{p50:2822,p75:4461,p80:5061,p90:7769,p95:47847,p99:55068,p999:62578}},resources:{envoyGateway:{memory:{min:124.07,max:124.07,mean:124.07},cpu:{min:519.6333333333332,max:519.6333333333332,mean:519.6333333333332}},envoyProxy:{memory:{min:284.03,max:284.03,mean:284.03},cpu:{min:1194.8666666666666,max:1194.8666666666666,mean:1194.8666666666666}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5876.35,totalRequests:176294,latency:{min:371,mean:6226,max:83869,pstdev:11816,percentiles:{p50:2770,p75:4396,p80:5e3,p90:7848,p95:47163,p99:55156,p999:64434}},resources:{envoyGateway:{memory:{min:131.62,max:131.62,mean:131.62},cpu:{min:513.6,max:513.6,mean:513.6}},envoyProxy:{memory:{min:291.73,max:291.73,mean:291.73},cpu:{min:1092.9333333333334,max:1092.9333333333334,mean:1092.9333333333334}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4820.43,totalRequests:144617,latency:{min:342,mean:7088,max:172031,pstdev:12642,percentiles:{p50:3156,p75:5480,p80:6443,p90:12007,p95:39675,p99:63842,p999:86532}},resources:{envoyGateway:{memory:{min:374.36,max:374.36,mean:374.36},cpu:{min:462.8,max:462.8,mean:462.8}},envoyProxy:{memory:{min:289.98,max:289.98,mean:289.98},cpu:{min:980.4,max:980.4,mean:980.4}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5746.71,totalRequests:172402,latency:{min:386,mean:6313,max:101535,pstdev:11578,percentiles:{p50:2875,p75:4579,p80:5222,p90:8617,p95:44341,p99:54996,p999:67178}},resources:{envoyGateway:{memory:{min:670.44,max:670.44,mean:670.44},cpu:{min:24.333333333333332,max:24.333333333333332,mean:24.333333333333332}},envoyProxy:{memory:{min:285.86,max:285.86,mean:285.86},cpu:{min:824.5666666666667,max:824.5666666666667,mean:824.5666666666667}}},poolOverflow:362,upstreamConnections:38}]},r1=[Zoe,Qoe,Yoe,Joe,eie,tie,nie,rie,aie,oie,iie,sie,lie,uie,cie,fie,pie,die,mie,hie],vie=()=>r1.map(e=>e.metadata.version),gi=r1.find(e=>e.metadata.version==="1.4.1"),St=(gi==null?void 0:gi.results)||[];gi!=null&&gi.metadata.testConfiguration;St.length,St.filter(e=>e.phase==="scaling-up").length,St.filter(e=>e.phase==="scaling-down").length,St.length>0&&Math.max(...St.map(e=>e.routes)),St.length>0&&Math.min(...St.map(e=>e.routes)),St.length>0&&St.reduce((e,t)=>e+t.throughput,0)/St.length,St.length>0&&St.reduce((e,t)=>e+t.latency.mean,0)/St.length;St.map(e=>({routes:e.routes,phase:e.phase,p50:e.latency.percentiles.p50/1e3,p75:e.latency.percentiles.p75/1e3,p90:e.latency.percentiles.p90/1e3,p95:e.latency.percentiles.p95/1e3,p99:e.latency.percentiles.p99/1e3,p999:e.latency.percentiles.p999/1e3}));St.map(e=>({routes:e.routes,phase:e.phase,envoyGatewayMemory:e.resources.envoyGateway.memory.mean,envoyGatewayCpu:e.resources.envoyGateway.cpu.mean,envoyProxyMemory:e.resources.envoyProxy.memory.mean,envoyProxyCpu:e.resources.envoyProxy.cpu.mean}));St.map(e=>({testName:e.testName,routes:e.routes,phase:e.phase,throughput:e.throughput,meanLatency:e.latency.mean/1e3,p95Latency:e.latency.percentiles.p95/1e3,totalMemory:e.resources.envoyGateway.memory.mean+e.resources.envoyProxy.memory.mean,totalCpu:e.resources.envoyGateway.cpu.mean+e.resources.envoyProxy.cpu.mean}));const yie=()=>{const e=vie(),[t,n]=k.useState(e[0]||""),r=k.useMemo(()=>r1.find(o=>o.metadata.version===t),[t]),a=k.useMemo(()=>{if(!r)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};const o=r.results;return{benchmarkResults:o,testConfiguration:r.metadata.testConfiguration,performanceSummary:{totalTests:o.length,scaleUpTests:o.filter(i=>i.phase==="scaling-up").length,scaleDownTests:o.filter(i=>i.phase==="scaling-down").length,maxRoutes:o.length>0?Math.max(...o.map(i=>i.routes)):0,minRoutes:o.length>0?Math.min(...o.map(i=>i.routes)):0,avgThroughput:o.length>0?o.reduce((i,s)=>i+s.throughput,0)/o.length:0,avgLatency:o.length>0?o.reduce((i,s)=>i+s.latency.mean,0)/o.length:0},latencyPercentileComparison:o.map(i=>({routes:i.routes,phase:i.phase,p50:i.latency.percentiles.p50/1e3,p75:i.latency.percentiles.p75/1e3,p90:i.latency.percentiles.p90/1e3,p95:i.latency.percentiles.p95/1e3,p99:i.latency.percentiles.p99/1e3,p999:i.latency.percentiles.p999/1e3})),resourceTrends:o.map(i=>({routes:i.routes,phase:i.phase,envoyGatewayMemory:i.resources.envoyGateway.memory.mean,envoyGatewayCpu:i.resources.envoyGateway.cpu.mean,envoyProxyMemory:i.resources.envoyProxy.memory.mean,envoyProxyCpu:i.resources.envoyProxy.cpu.mean})),performanceMatrix:o.map(i=>({testName:i.testName,routes:i.routes,phase:i.phase,throughput:i.throughput,meanLatency:i.latency.mean/1e3,p95Latency:i.latency.percentiles.p95/1e3,totalMemory:i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean,totalCpu:i.resources.envoyGateway.cpu.mean+i.resources.envoyProxy.cpu.mean})),metadata:r.metadata}},[r]);return{selectedVersion:t,setSelectedVersion:n,availableVersions:e,...a}},gie=({apiBase:e="https://envoy-gateway-benchmark-report.netlify.app/api",initialVersion:t,theme:n="light",containerClassName:r="",features:a={header:!1,versionSelector:!0,summaryCards:!0,tabs:["overview","latency","resources"]}})=>{var i,s,l,u,f,c;const o=yie();return k.useEffect(()=>{n==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[n]),k.useEffect(()=>{const p=document.createElement("style");return p.textContent=`
+      .benchmark-dashboard [data-radix-popper-content-wrapper] {
+        z-index: 9999 !important;
+      }
+      .benchmark-dashboard .relative.z-50 {
+        z-index: 9999 !important;
+      }
+    `,document.head.appendChild(p),()=>{document.head.removeChild(p)}},[]),b.jsxs("div",{className:`benchmark-dashboard ${n} ${r}`,"data-theme":n,children:[a.header&&b.jsxs("div",{className:"mb-8",children:[b.jsx("h2",{className:"text-3xl font-bold",children:"Performance Benchmark Report Explorer"}),b.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300",children:"Detailed performance analysis"})]}),a.versionSelector&&b.jsx("div",{className:"mb-6",children:b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full",children:b.jsx(ij,{selectedVersion:o.selectedVersion,availableVersions:o.availableVersions,onVersionChange:o.setSelectedVersion,metadata:o.metadata})})}),a.summaryCards&&o.performanceSummary&&b.jsx("div",{className:"mb-8",children:b.jsx(lj,{performanceSummary:o.performanceSummary,benchmarkResults:o.benchmarkResults})}),a.tabs&&a.tabs.length>0&&b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden",children:b.jsxs(Xoe,{defaultValue:a.tabs[0],className:"w-full",children:[b.jsxs(fO,{className:`grid w-full ${a.tabs.length===1?"grid-cols-1":a.tabs.length===2?"grid-cols-2":"grid-cols-3"} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`,children:[((i=a.tabs)==null?void 0:i.includes("overview"))&&b.jsx(Bc,{value:"overview",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Overview"}),((s=a.tabs)==null?void 0:s.includes("latency"))&&b.jsx(Bc,{value:"latency",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Request RTT Analysis"}),((l=a.tabs)==null?void 0:l.includes("resources"))&&b.jsx(Bc,{value:"resources",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Resource Usage"})]}),b.jsxs("div",{className:"p-6",children:[((u=a.tabs)==null?void 0:u.includes("overview"))&&b.jsx(Hc,{value:"overview",children:b.jsx(Coe,{performanceMatrix:o.performanceMatrix,benchmarkResults:o.benchmarkResults,testConfiguration:o.testConfiguration,performanceSummary:o.performanceSummary,latencyPercentileComparison:o.latencyPercentileComparison})}),((f=a.tabs)==null?void 0:f.includes("latency"))&&b.jsx(Hc,{value:"latency",children:b.jsx(Eoe,{latencyPercentileComparison:o.latencyPercentileComparison,benchmarkResults:o.benchmarkResults})}),((c=a.tabs)==null?void 0:c.includes("resources"))&&b.jsx(Hc,{value:"resources",children:b.jsx(Toe,{resourceTrends:o.resourceTrends,benchmarkResults:o.benchmarkResults})})]})]})})]})};class pO{static async getAllCSS(){const t="shadow-dom-css";if(this.cssCache.has(t))return this.cssCache.get(t);try{let n="";const r=this.getBundledCSS();if(r){n=this.transformCSSForShadowDOM(r);const a=`
+          ${this.getShadowDOMStyles()}
+          ${n}
+        `;return this.cssCache.set(t,a),a}else{const a=this.getFallbackCSS();return this.cssCache.set(t,a),a}}catch(n){return console.error("Error loading CSS for Shadow DOM:",n),this.getFallbackCSS()}}static getBundledCSS(){return window.__BENCHMARK_CSS__||null}static getCSSVariables(){return`
+      /* CSS Custom Properties for theming */
+      :host(.benchmark-dashboard) {
+        --background: 0 0% 100%;
+        --foreground: 222.2 84% 4.9%;
+        --card: 0 0% 100%;
+        --card-foreground: 222.2 84% 4.9%;
+        --popover: 0 0% 100%;
+        --popover-foreground: 222.2 84% 4.9%;
+        --primary: 222.2 47.4% 11.2%;
+        --primary-foreground: 210 40% 98%;
+        --secondary: 210 40% 96.1%;
+        --secondary-foreground: 222.2 47.4% 11.2%;
+        --muted: 210 40% 96.1%;
+        --muted-foreground: 215.4 16.3% 46.9%;
+        --accent: 210 40% 96.1%;
+        --accent-foreground: 222.2 47.4% 11.2%;
+        --destructive: 0 84.2% 60.2%;
+        --destructive-foreground: 210 40% 98%;
+        --border: 214.3 31.8% 91.4%;
+        --input: 214.3 31.8% 91.4%;
+        --ring: 222.2 84% 4.9%;
+        --radius: 0.5rem;
+        --sidebar-background: 0 0% 98%;
+        --sidebar-foreground: 240 5.3% 26.1%;
+        --sidebar-primary: 240 5.9% 10%;
+        --sidebar-primary-foreground: 0 0% 98%;
+        --sidebar-accent: 240 4.8% 95.9%;
+        --sidebar-accent-foreground: 240 5.9% 10%;
+        --sidebar-border: 220 13% 91%;
+        --sidebar-ring: 217.2 91.2% 59.8%;
+      }
+
+      :host(.benchmark-dashboard.dark) {
+        --background: 222.2 84% 4.9%;
+        --foreground: 210 40% 98%;
+        --card: 222.2 84% 4.9%;
+        --card-foreground: 210 40% 98%;
+        --popover: 222.2 84% 4.9%;
+        --popover-foreground: 210 40% 98%;
+        --primary: 210 40% 98%;
+        --primary-foreground: 222.2 47.4% 11.2%;
+        --secondary: 217.2 32.6% 17.5%;
+        --secondary-foreground: 210 40% 98%;
+        --muted: 217.2 32.6% 17.5%;
+        --muted-foreground: 215 20.2% 65.1%;
+        --accent: 217.2 32.6% 17.5%;
+        --accent-foreground: 210 40% 98%;
+        --destructive: 0 62.8% 30.6%;
+        --destructive-foreground: 210 40% 98%;
+        --border: 217.2 32.6% 17.5%;
+        --input: 217.2 32.6% 17.5%;
+        --ring: 212.7 26.8% 83.9%;
+        --sidebar-background: 240 5.9% 10%;
+        --sidebar-foreground: 240 4.8% 95.9%;
+        --sidebar-primary: 224.3 76.3% 48%;
+        --sidebar-primary-foreground: 0 0% 100%;
+        --sidebar-accent: 240 3.7% 15.9%;
+        --sidebar-accent-foreground: 240 4.8% 95.9%;
+        --sidebar-border: 240 3.7% 15.9%;
+        --sidebar-ring: 217.2 91.2% 59.8%;
+      }
+    `}static getShadowDOMStyles(){return`
+      /* Shadow DOM host styles */
+      :host {
+        all: initial;
+        display: block;
+        font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+        line-height: 1.5;
+        -webkit-font-smoothing: antialiased;
+        -moz-osx-font-smoothing: grayscale;
+        color: hsl(var(--foreground));
+        background: hsl(var(--background));
+      }
+
+      /* Reset all elements */
+      * {
+        box-sizing: border-box;
+      }
+
+      /* Shadow root container */
+      #shadow-root {
+        width: 100%;
+        min-height: 100%;
+        position: relative;
+      }
+
+      /* Ensure proper isolation */
+      :host([hidden]) {
+        display: none;
+      }
+    `}static transformCSSForShadowDOM(t){return t=t.replace(/:root\s*{([^}]*)}/g,":host {$1}"),t=t.replace(/\.dark\s*,\s*body\.dark\s*{([^}]*)}/g,":host(.dark) {$1}"),t=t.replace(/\.dark\s*{([^}]*)}/g,":host(.dark) {$1}"),t=t.replace(/body\.dark\s*{([^}]*)}/g,":host(.dark) {$1}"),t=t.replace(/body\s*{([^}]*)}/g,":host {$1}"),t}static getFallbackCSS(){return`
+      ${this.getShadowDOMStyles()}
+      ${this.getCSSVariables()}
+      ${this.getTailwindFallback()}
+    `}static getTailwindFallback(){return`
+      /* Tailwind-like reset */
+      *,
+      ::before,
+      ::after {
+        box-sizing: border-box;
+        border-width: 0;
+        border-style: solid;
+        border-color: hsl(var(--border));
+      }
+
+      /* Display utilities */
+      .flex { display: flex !important; }
+      .grid { display: grid !important; }
+      .block { display: block !important; }
+      .inline-block { display: inline-block !important; }
+      .inline { display: inline !important; }
+      .hidden { display: none !important; }
+      .inline-flex { display: inline-flex !important; }
+
+      /* Sizing utilities */
+      .w-full { width: 100% !important; }
+      .w-8 { width: 2rem !important; }
+      .w-auto { width: auto !important; }
+      .h-full { height: 100% !important; }
+      .h-8 { height: 2rem !important; }
+      .h-auto { height: auto !important; }
+      .min-h-full { min-height: 100% !important; }
+
+      /* Spacing utilities - Padding */
+      .p-0 { padding: 0 !important; }
+      .p-1 { padding: 0.25rem !important; }
+      .p-2 { padding: 0.5rem !important; }
+      .p-4 { padding: 1rem !important; }
+      .p-6 { padding: 1.5rem !important; }
+      .p-8 { padding: 2rem !important; }
+      .px-3 { padding-left: 0.75rem !important; padding-right: 0.75rem !important; }
+      .px-4 { padding-left: 1rem !important; padding-right: 1rem !important; }
+      .px-6 { padding-left: 1.5rem !important; padding-right: 1.5rem !important; }
+      .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; }
+      .py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; }
+      .py-12 { padding-top: 3rem !important; padding-bottom: 3rem !important; }
+
+      /* Spacing utilities - Margin */
+      .m-0 { margin: 0 !important; }
+      .m-1 { margin: 0.25rem !important; }
+      .m-2 { margin: 0.5rem !important; }
+      .m-4 { margin: 1rem !important; }
+      .m-6 { margin: 1.5rem !important; }
+      .m-8 { margin: 2rem !important; }
+      .mb-2 { margin-bottom: 0.5rem !important; }
+      .mb-4 { margin-bottom: 1rem !important; }
+      .mb-5 { margin-bottom: 1.25rem !important; }
+      .mb-6 { margin-bottom: 1.5rem !important; }
+      .mb-8 { margin-bottom: 2rem !important; }
+      .mt-4 { margin-top: 1rem !important; }
+      .mt-5 { margin-top: 1.25rem !important; }
+      .mr-3 { margin-right: 0.75rem !important; }
+
+      /* Typography */
+      .text-sm { font-size: 0.875rem !important; line-height: 1.25rem !important; }
+      .text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
+      .text-lg { font-size: 1.125rem !important; line-height: 1.75rem !important; }
+      .text-xl { font-size: 1.25rem !important; line-height: 1.75rem !important; }
+      .text-2xl { font-size: 1.5rem !important; line-height: 2rem !important; }
+      .text-3xl { font-size: 1.875rem !important; line-height: 2.25rem !important; }
+
+      .font-medium { font-weight: 500 !important; }
+      .font-semibold { font-weight: 600 !important; }
+      .font-bold { font-weight: 700 !important; }
+
+      /* Text colors */
+      .text-white { color: #ffffff !important; }
+      .text-gray-600 { color: hsl(var(--muted-foreground)) !important; }
+      .text-gray-700 { color: hsl(var(--foreground)) !important; }
+      .text-gray-800 { color: hsl(var(--foreground)) !important; }
+      .text-gray-900 { color: hsl(var(--foreground)) !important; }
+
+      /* Background colors */
+      .bg-white { background-color: hsl(var(--background)) !important; }
+      .bg-gray-50 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-100 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-700 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-800 { background-color: hsl(var(--card)) !important; }
+      .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)) !important; }
+
+      /* Gradient colors */
+      .from-purple-600 { --tw-gradient-from: #9333ea !important; --tw-gradient-to: rgb(147 51 234 / 0) !important; --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important; }
+      .to-indigo-600 { --tw-gradient-to: #4f46e5 !important; }
+
+      /* Border utilities */
+      .border { border-width: 1px !important; }
+      .border-b { border-bottom-width: 1px !important; }
+      .border-b-2 { border-bottom-width: 2px !important; }
+      .border-t-lg { border-top-width: 4px !important; }
+      .border-gray-200 { border-color: hsl(var(--border)) !important; }
+      .border-gray-300 { border-color: hsl(var(--border)) !important; }
+      .border-gray-700 { border-color: hsl(var(--border)) !important; }
+      .border-blue-600 { border-color: #2563eb !important; }
+      .border-purple-600 { border-color: #9333ea !important; }
+      .border-transparent { border-color: transparent !important; }
+
+      /* Border radius */
+      .rounded { border-radius: 0.25rem !important; }
+      .rounded-md { border-radius: 0.375rem !important; }
+      .rounded-lg { border-radius: 0.5rem !important; }
+      .rounded-xl { border-radius: 0.75rem !important; }
+      .rounded-2xl { border-radius: 1rem !important; }
+      .rounded-t-lg { border-top-left-radius: 0.5rem !important; border-top-right-radius: 0.5rem !important; }
+      .rounded-full { border-radius: 9999px !important; }
+      .rounded-none { border-radius: 0px !important; }
+
+      /* Box shadow */
+      .shadow { box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1) !important; }
+      .shadow-lg { box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) !important; }
+
+      /* Grid utilities */
+      .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
+      .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
+      .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
+
+      .gap-1 { gap: 0.25rem !important; }
+      .gap-2 { gap: 0.5rem !important; }
+      .gap-4 { gap: 1rem !important; }
+
+      /* Flexbox utilities */
+      .items-center { align-items: center !important; }
+      .items-start { align-items: flex-start !important; }
+      .justify-center { justify-content: center !important; }
+      .justify-between { justify-content: space-between !important; }
+      .justify-start { justify-content: flex-start !important; }
+
+      /* Position utilities */
+      .relative { position: relative !important; }
+      .absolute { position: absolute !important; }
+      .z-50 { z-index: 50 !important; }
+
+      /* Overflow utilities */
+      .overflow-hidden { overflow: hidden !important; }
+      .overflow-auto { overflow: auto !important; }
+
+      /* Cursor utilities */
+      .cursor-pointer { cursor: pointer !important; }
+
+      /* Transition utilities */
+      .transition-all { transition-property: all !important; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important; transition-duration: 150ms !important; }
+      .duration-200 { transition-duration: 200ms !important; }
+
+      /* Hover utilities */
+      .hover\\:bg-gray-50:hover { background-color: hsl(var(--muted)) !important; }
+      .hover\\:bg-gray-700:hover { background-color: hsl(var(--muted)) !important; }
+
+      /* Animation utilities */
+      @keyframes spin {
+        to {
+          transform: rotate(360deg);
+        }
+      }
+      .animate-spin {
+        animation: spin 1s linear infinite !important;
+      }
+
+      /* Dark mode utilities */
+      .dark\\:bg-gray-700 { background-color: hsl(var(--muted)) !important; }
+      .dark\\:bg-gray-800 { background-color: hsl(var(--card)) !important; }
+      .dark\\:border-gray-700 { border-color: hsl(var(--border)) !important; }
+      .dark\\:text-gray-300 { color: hsl(var(--muted-foreground)) !important; }
+      .dark\\:hover\\:bg-gray-700:hover { background-color: hsl(var(--muted)) !important; }
+
+      /* Data attribute utilities for Radix components */
+      [data-state="active"] {
+        background: linear-gradient(to right, #9333ea, #4f46e5) !important;
+        color: white !important;
+        box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) !important;
+        border-bottom: 2px solid #9333ea !important;
+      }
+
+      /* White space utilities */
+      .whitespace-nowrap { white-space: nowrap !important; }
+
+      /* Text alignment */
+      .text-center { text-align: center !important; }
+      .text-left { text-align: left !important; }
+
+      /* Responsive utilities (basic support) */
+      @media (min-width: 640px) {
+        .sm\\:text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
+      }
+    `}}f1(pO,"cssCache",new Map);var Bd=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Hd=typeof window>"u"||"Deno"in globalThis;function En(){}function xie(e,t){return typeof e=="function"?e(t):e}function wie(e){return typeof e=="number"&&e>=0&&e!==1/0}function bie(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Ly(e,t){return typeof e=="function"?e(t):e}function Pie(e,t){return typeof e=="function"?e(t):e}function B2(e,t){const{type:n="all",exact:r,fetchStatus:a,predicate:o,queryKey:i,stale:s}=e;if(i){if(r){if(t.queryHash!==a1(i,t.options))return!1}else if(!Pu(t.queryKey,i))return!1}if(n!=="all"){const l=t.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||a&&a!==t.state.fetchStatus||o&&!o(t))}function H2(e,t){const{exact:n,status:r,predicate:a,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(n){if(bu(t.options.mutationKey)!==bu(o))return!1}else if(!Pu(t.options.mutationKey,o))return!1}return!(r&&t.state.status!==r||a&&!a(t))}function a1(e,t){return((t==null?void 0:t.queryKeyHashFn)||bu)(e)}function bu(e){return JSON.stringify(e,(t,n)=>Fy(n)?Object.keys(n).sort().reduce((r,a)=>(r[a]=n[a],r),{}):n)}function Pu(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>Pu(e[n],t[n])):!1}function dO(e,t){if(e===t)return e;const n=G2(e)&&G2(t);if(n||Fy(e)&&Fy(t)){const r=n?e:Object.keys(e),a=r.length,o=n?t:Object.keys(t),i=o.length,s=n?[]:{},l=new Set(r);let u=0;for(let f=0;f<i;f++){const c=n?f:o[f];(!n&&l.has(c)||n)&&e[c]===void 0&&t[c]===void 0?(s[c]=void 0,u++):(s[c]=dO(e[c],t[c]),s[c]===e[c]&&e[c]!==void 0&&u++)}return a===i&&u===a?e:s}return t}function G2(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Fy(e){if(!U2(e))return!1;const t=e.constructor;if(t===void 0)return!0;const n=t.prototype;return!(!U2(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function U2(e){return Object.prototype.toString.call(e)==="[object Object]"}function Sie(e){return new Promise(t=>{setTimeout(t,e)})}function Oie(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?dO(e,t):t}function kie(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function _ie(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var o1=Symbol();function mO(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===o1?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var ro,ia,xi,X2,Aie=(X2=class extends Bd{constructor(){super();me(this,ro);me(this,ia);me(this,xi);ae(this,xi,t=>{if(!Hd&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){B(this,ia)||this.setEventListener(B(this,xi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,ia))==null||t.call(this),ae(this,ia,void 0))}setEventListener(t){var n;ae(this,xi,t),(n=B(this,ia))==null||n.call(this),ae(this,ia,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){B(this,ro)!==t&&(ae(this,ro,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof B(this,ro)=="boolean"?B(this,ro):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},ro=new WeakMap,ia=new WeakMap,xi=new WeakMap,X2),hO=new Aie,wi,sa,bi,Y2,Cie=(Y2=class extends Bd{constructor(){super();me(this,wi,!0);me(this,sa);me(this,bi);ae(this,bi,t=>{if(!Hd&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){B(this,sa)||this.setEventListener(B(this,bi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,sa))==null||t.call(this),ae(this,sa,void 0))}setEventListener(t){var n;ae(this,bi,t),(n=B(this,sa))==null||n.call(this),ae(this,sa,t(this.setOnline.bind(this)))}setOnline(t){B(this,wi)!==t&&(ae(this,wi,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return B(this,wi)}},wi=new WeakMap,sa=new WeakMap,bi=new WeakMap,Y2),Op=new Cie;function Eie(){let e,t;const n=new Promise((a,o)=>{e=a,t=o});n.status="pending",n.catch(()=>{});function r(a){Object.assign(n,a),delete n.resolve,delete n.reject}return n.resolve=a=>{r({status:"fulfilled",value:a}),e(a)},n.reject=a=>{r({status:"rejected",reason:a}),t(a)},n}function Tie(e){return Math.min(1e3*2**e,3e4)}function vO(e){return(e??"online")==="online"?Op.isOnline():!0}var yO=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function ah(e){return e instanceof yO}function gO(e){let t=!1,n=0,r=!1,a;const o=Eie(),i=m=>{var g;r||(p(new yO(m)),(g=e.abort)==null||g.call(e))},s=()=>{t=!0},l=()=>{t=!1},u=()=>hO.isFocused()&&(e.networkMode==="always"||Op.isOnline())&&e.canRun(),f=()=>vO(e.networkMode)&&e.canRun(),c=m=>{var g;r||(r=!0,(g=e.onSuccess)==null||g.call(e,m),a==null||a(),o.resolve(m))},p=m=>{var g;r||(r=!0,(g=e.onError)==null||g.call(e,m),a==null||a(),o.reject(m))},d=()=>new Promise(m=>{var g;a=v=>{(r||u())&&m(v)},(g=e.onPause)==null||g.call(e)}).then(()=>{var m;a=void 0,r||(m=e.onContinue)==null||m.call(e)}),h=()=>{if(r)return;let m;const g=n===0?e.initialPromise:void 0;try{m=g??e.fn()}catch(v){m=Promise.reject(v)}Promise.resolve(m).then(c).catch(v=>{var S;if(r)return;const y=e.retry??(Hd?0:3),x=e.retryDelay??Tie,P=typeof x=="function"?x(n,v):x,w=y===!0||typeof y=="number"&&n<y||typeof y=="function"&&y(n,v);if(t||!w){p(v);return}n++,(S=e.onFail)==null||S.call(e,n,v),Sie(P).then(()=>u()?void 0:d()).then(()=>{t?p(v):h()})})};return{promise:o,cancel:i,continue:()=>(a==null||a(),o),cancelRetry:s,continueRetry:l,canStart:f,start:()=>(f()?h():d().then(h),o)}}var jie=e=>setTimeout(e,0);function $ie(){let e=[],t=0,n=s=>{s()},r=s=>{s()},a=jie;const o=s=>{t?e.push(s):a(()=>{n(s)})},i=()=>{const s=e;e=[],s.length&&a(()=>{r(()=>{s.forEach(l=>{n(l)})})})};return{batch:s=>{let l;t++;try{l=s()}finally{t--,t||i()}return l},batchCalls:s=>(...l)=>{o(()=>{s(...l)})},schedule:o,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{a=s}}}var Mt=$ie(),ao,Q2,xO=(Q2=class{constructor(){me(this,ao)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),wie(this.gcTime)&&ae(this,ao,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Hd?1/0:5*60*1e3))}clearGcTimeout(){B(this,ao)&&(clearTimeout(B(this,ao)),ae(this,ao,void 0))}},ao=new WeakMap,Q2),Pi,oo,pn,io,Ot,Su,so,Tn,br,Z2,Nie=(Z2=class extends xO{constructor(t){super();me(this,Tn);me(this,Pi);me(this,oo);me(this,pn);me(this,io);me(this,Ot);me(this,Su);me(this,so);ae(this,so,!1),ae(this,Su,t.defaultOptions),this.setOptions(t.options),this.observers=[],ae(this,io,t.client),ae(this,pn,B(this,io).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,ae(this,Pi,Rie(this.options)),this.state=t.state??B(this,Pi),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=B(this,Ot))==null?void 0:t.promise}setOptions(t){this.options={...B(this,Su),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&B(this,pn).remove(this)}setData(t,n){const r=Oie(this.state.data,t,this.options);return wt(this,Tn,br).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){wt(this,Tn,br).call(this,{type:"setState",state:t,setStateOptions:n})}cancel(t){var r,a;const n=(r=B(this,Ot))==null?void 0:r.promise;return(a=B(this,Ot))==null||a.cancel(t),n?n.then(En).catch(En):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(B(this,Pi))}isActive(){return this.observers.some(t=>Pie(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===o1||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Ly(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!bie(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,Ot))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,Ot))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),B(this,pn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(B(this,Ot)&&(B(this,so)?B(this,Ot).cancel({revert:!0}):B(this,Ot).cancelRetry()),this.scheduleGc()),B(this,pn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||wt(this,Tn,br).call(this,{type:"invalidate"})}fetch(t,n){var u,f,c;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(B(this,Ot))return B(this,Ot).continueRetry(),B(this,Ot).promise}if(t&&this.setOptions(t),!this.options.queryFn){const p=this.observers.find(d=>d.options.queryFn);p&&this.setOptions(p.options)}const r=new AbortController,a=p=>{Object.defineProperty(p,"signal",{enumerable:!0,get:()=>(ae(this,so,!0),r.signal)})},o=()=>{const p=mO(this.options,n),h=(()=>{const m={client:B(this,io),queryKey:this.queryKey,meta:this.meta};return a(m),m})();return ae(this,so,!1),this.options.persister?this.options.persister(p,h,this):p(h)},s=(()=>{const p={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:B(this,io),state:this.state,fetchFn:o};return a(p),p})();(u=this.options.behavior)==null||u.onFetch(s,this),ae(this,oo,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((f=s.fetchOptions)==null?void 0:f.meta))&&wt(this,Tn,br).call(this,{type:"fetch",meta:(c=s.fetchOptions)==null?void 0:c.meta});const l=p=>{var d,h,m,g;ah(p)&&p.silent||wt(this,Tn,br).call(this,{type:"error",error:p}),ah(p)||((h=(d=B(this,pn).config).onError)==null||h.call(d,p,this),(g=(m=B(this,pn).config).onSettled)==null||g.call(m,this.state.data,p,this)),this.scheduleGc()};return ae(this,Ot,gO({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,abort:r.abort.bind(r),onSuccess:p=>{var d,h,m,g;if(p===void 0){l(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(p)}catch(v){l(v);return}(h=(d=B(this,pn).config).onSuccess)==null||h.call(d,p,this),(g=(m=B(this,pn).config).onSettled)==null||g.call(m,p,this.state.error,this),this.scheduleGc()},onError:l,onFail:(p,d)=>{wt(this,Tn,br).call(this,{type:"failed",failureCount:p,error:d})},onPause:()=>{wt(this,Tn,br).call(this,{type:"pause"})},onContinue:()=>{wt(this,Tn,br).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0})),B(this,Ot).start()}},Pi=new WeakMap,oo=new WeakMap,pn=new WeakMap,io=new WeakMap,Ot=new WeakMap,Su=new WeakMap,so=new WeakMap,Tn=new WeakSet,br=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Mie(r.data,this.options),fetchMeta:t.meta??null};case"success":return ae(this,oo,void 0),{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const a=t.error;return ah(a)&&a.revert&&B(this,oo)?{...B(this,oo),fetchStatus:"idle"}:{...r,error:a,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:a,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),Mt.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),B(this,pn).notify({query:this,type:"updated",action:t})})},Z2);function Mie(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:vO(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Rie(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Jn,J2,Iie=(J2=class extends Bd{constructor(t={}){super();me(this,Jn);this.config=t,ae(this,Jn,new Map)}build(t,n,r){const a=n.queryKey,o=n.queryHash??a1(a,n);let i=this.get(o);return i||(i=new Nie({client:t,queryKey:a,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(a)}),this.add(i)),i}add(t){B(this,Jn).has(t.queryHash)||(B(this,Jn).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=B(this,Jn).get(t.queryHash);n&&(t.destroy(),n===t&&B(this,Jn).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Mt.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return B(this,Jn).get(t)}getAll(){return[...B(this,Jn).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>B2(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>B2(t,r)):n}notify(t){Mt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){Mt.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Mt.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Jn=new WeakMap,J2),er,$t,lo,tr,Jr,e5,Die=(e5=class extends xO{constructor(t){super();me(this,tr);me(this,er);me(this,$t);me(this,lo);this.mutationId=t.mutationId,ae(this,$t,t.mutationCache),ae(this,er,[]),this.state=t.state||Lie(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){B(this,er).includes(t)||(B(this,er).push(t),this.clearGcTimeout(),B(this,$t).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){ae(this,er,B(this,er).filter(n=>n!==t)),this.scheduleGc(),B(this,$t).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){B(this,er).length||(this.state.status==="pending"?this.scheduleGc():B(this,$t).remove(this))}continue(){var t;return((t=B(this,lo))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var o,i,s,l,u,f,c,p,d,h,m,g,v,y,x,P,w,S,O,_;const n=()=>{wt(this,tr,Jr).call(this,{type:"continue"})};ae(this,lo,gO({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(A,j)=>{wt(this,tr,Jr).call(this,{type:"failed",failureCount:A,error:j})},onPause:()=>{wt(this,tr,Jr).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>B(this,$t).canRun(this)}));const r=this.state.status==="pending",a=!B(this,lo).canStart();try{if(r)n();else{wt(this,tr,Jr).call(this,{type:"pending",variables:t,isPaused:a}),await((i=(o=B(this,$t).config).onMutate)==null?void 0:i.call(o,t,this));const j=await((l=(s=this.options).onMutate)==null?void 0:l.call(s,t));j!==this.state.context&&wt(this,tr,Jr).call(this,{type:"pending",context:j,variables:t,isPaused:a})}const A=await B(this,lo).start();return await((f=(u=B(this,$t).config).onSuccess)==null?void 0:f.call(u,A,t,this.state.context,this)),await((p=(c=this.options).onSuccess)==null?void 0:p.call(c,A,t,this.state.context)),await((h=(d=B(this,$t).config).onSettled)==null?void 0:h.call(d,A,null,this.state.variables,this.state.context,this)),await((g=(m=this.options).onSettled)==null?void 0:g.call(m,A,null,t,this.state.context)),wt(this,tr,Jr).call(this,{type:"success",data:A}),A}catch(A){try{throw await((y=(v=B(this,$t).config).onError)==null?void 0:y.call(v,A,t,this.state.context,this)),await((P=(x=this.options).onError)==null?void 0:P.call(x,A,t,this.state.context)),await((S=(w=B(this,$t).config).onSettled)==null?void 0:S.call(w,void 0,A,this.state.variables,this.state.context,this)),await((_=(O=this.options).onSettled)==null?void 0:_.call(O,void 0,A,t,this.state.context)),A}finally{wt(this,tr,Jr).call(this,{type:"error",error:A})}}finally{B(this,$t).runNext(this)}}},er=new WeakMap,$t=new WeakMap,lo=new WeakMap,tr=new WeakSet,Jr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),Mt.batch(()=>{B(this,er).forEach(r=>{r.onMutationUpdate(t)}),B(this,$t).notify({mutation:this,type:"updated",action:t})})},e5);function Lie(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Or,jn,Ou,t5,Fie=(t5=class extends Bd{constructor(t={}){super();me(this,Or);me(this,jn);me(this,Ou);this.config=t,ae(this,Or,new Set),ae(this,jn,new Map),ae(this,Ou,0)}build(t,n,r){const a=new Die({mutationCache:this,mutationId:++zu(this,Ou)._,options:t.defaultMutationOptions(n),state:r});return this.add(a),a}add(t){B(this,Or).add(t);const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n);r?r.push(t):B(this,jn).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(B(this,Or).delete(t)){const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n);if(r)if(r.length>1){const a=r.indexOf(t);a!==-1&&r.splice(a,1)}else r[0]===t&&B(this,jn).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=kc(t);if(typeof n=="string"){const r=B(this,jn).get(n),a=r==null?void 0:r.find(o=>o.state.status==="pending");return!a||a===t}else return!0}runNext(t){var r;const n=kc(t);if(typeof n=="string"){const a=(r=B(this,jn).get(n))==null?void 0:r.find(o=>o!==t&&o.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Mt.batch(()=>{B(this,Or).forEach(t=>{this.notify({type:"removed",mutation:t})}),B(this,Or).clear(),B(this,jn).clear()})}getAll(){return Array.from(B(this,Or))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>H2(n,r))}findAll(t={}){return this.getAll().filter(n=>H2(t,n))}notify(t){Mt.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return Mt.batch(()=>Promise.all(t.map(n=>n.continue().catch(En))))}},Or=new WeakMap,jn=new WeakMap,Ou=new WeakMap,t5);function kc(e){var t;return(t=e.options.scope)==null?void 0:t.id}function W2(e){return{onFetch:(t,n)=>{var f,c,p,d,h;const r=t.options,a=(p=(c=(f=t.fetchOptions)==null?void 0:f.meta)==null?void 0:c.fetchMore)==null?void 0:p.direction,o=((d=t.state.data)==null?void 0:d.pages)||[],i=((h=t.state.data)==null?void 0:h.pageParams)||[];let s={pages:[],pageParams:[]},l=0;const u=async()=>{let m=!1;const g=x=>{Object.defineProperty(x,"signal",{enumerable:!0,get:()=>(t.signal.aborted?m=!0:t.signal.addEventListener("abort",()=>{m=!0}),t.signal)})},v=mO(t.options,t.fetchOptions),y=async(x,P,w)=>{if(m)return Promise.reject();if(P==null&&x.pages.length)return Promise.resolve(x);const O=(()=>{const E={client:t.client,queryKey:t.queryKey,pageParam:P,direction:w?"backward":"forward",meta:t.options.meta};return g(E),E})(),_=await v(O),{maxPages:A}=t.options,j=w?_ie:kie;return{pages:j(x.pages,_,A),pageParams:j(x.pageParams,P,A)}};if(a&&o.length){const x=a==="backward",P=x?zie:q2,w={pages:o,pageParams:i},S=P(r,w);s=await y(w,S,x)}else{const x=e??o.length;do{const P=l===0?i[0]??r.initialPageParam:q2(r,s);if(l>0&&P==null)break;s=await y(s,P),l++}while(l<x)}return s};t.options.persister?t.fetchFn=()=>{var m,g;return(g=(m=t.options).persister)==null?void 0:g.call(m,u,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=u}}}function q2(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function zie(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var We,la,ua,Si,Oi,ca,ki,_i,n5,Bie=(n5=class{constructor(e={}){me(this,We);me(this,la);me(this,ua);me(this,Si);me(this,Oi);me(this,ca);me(this,ki);me(this,_i);ae(this,We,e.queryCache||new Iie),ae(this,la,e.mutationCache||new Fie),ae(this,ua,e.defaultOptions||{}),ae(this,Si,new Map),ae(this,Oi,new Map),ae(this,ca,0)}mount(){zu(this,ca)._++,B(this,ca)===1&&(ae(this,ki,hO.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onFocus())})),ae(this,_i,Op.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onOnline())})))}unmount(){var e,t;zu(this,ca)._--,B(this,ca)===0&&((e=B(this,ki))==null||e.call(this),ae(this,ki,void 0),(t=B(this,_i))==null||t.call(this),ae(this,_i,void 0))}isFetching(e){return B(this,We).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return B(this,la).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=B(this,We).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Ly(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return B(this,We).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),a=B(this,We).get(r.queryHash),o=a==null?void 0:a.state.data,i=xie(t,o);if(i!==void 0)return B(this,We).build(this,r).setData(i,{...n,manual:!0})}setQueriesData(e,t,n){return Mt.batch(()=>B(this,We).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=B(this,We);Mt.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=B(this,We);return Mt.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=Mt.batch(()=>B(this,We).findAll(e).map(a=>a.cancel(n)));return Promise.all(r).then(En).catch(En)}invalidateQueries(e,t={}){return Mt.batch(()=>(B(this,We).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=Mt.batch(()=>B(this,We).findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let o=a.fetch(void 0,n);return n.throwOnError||(o=o.catch(En)),a.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(En)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=B(this,We).build(this,t);return n.isStaleByTime(Ly(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(En).catch(En)}fetchInfiniteQuery(e){return e.behavior=W2(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(En).catch(En)}ensureInfiniteQueryData(e){return e.behavior=W2(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return Op.isOnline()?B(this,la).resumePausedMutations():Promise.resolve()}getQueryCache(){return B(this,We)}getMutationCache(){return B(this,la)}getDefaultOptions(){return B(this,ua)}setDefaultOptions(e){ae(this,ua,e)}setQueryDefaults(e,t){B(this,Si).set(bu(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...B(this,Si).values()],n={};return t.forEach(r=>{Pu(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){B(this,Oi).set(bu(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...B(this,Oi).values()],n={};return t.forEach(r=>{Pu(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...B(this,ua).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=a1(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===o1&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...B(this,ua).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){B(this,We).clear(),B(this,la).clear()}},We=new WeakMap,la=new WeakMap,ua=new WeakMap,Si=new WeakMap,Oi=new WeakMap,ca=new WeakMap,ki=new WeakMap,_i=new WeakMap,n5),Hie=k.createContext(void 0),Gie=({client:e,children:t})=>(k.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),b.jsx(Hie.Provider,{value:e,children:t})),[Gd,mse]=ps("Tooltip",[Up]),i1=Up(),wO="TooltipProvider",Uie=700,V2="tooltip.open",[Wie,bO]=Gd(wO),PO=e=>{const{__scopeTooltip:t,delayDuration:n=Uie,skipDelayDuration:r=300,disableHoverableContent:a=!1,children:o}=e,i=k.useRef(!0),s=k.useRef(!1),l=k.useRef(0);return k.useEffect(()=>{const u=l.current;return()=>window.clearTimeout(u)},[]),b.jsx(Wie,{scope:t,isOpenDelayedRef:i,delayDuration:n,onOpen:k.useCallback(()=>{window.clearTimeout(l.current),i.current=!1},[]),onClose:k.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(()=>i.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:k.useCallback(u=>{s.current=u},[]),disableHoverableContent:a,children:o})};PO.displayName=wO;var SO="Tooltip",[hse,Ud]=Gd(SO),zy="TooltipTrigger",qie=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=Ud(zy,n),o=bO(zy,n),i=i1(n),s=k.useRef(null),l=Ye(t,s,a.onTriggerChange),u=k.useRef(!1),f=k.useRef(!1),c=k.useCallback(()=>u.current=!1,[]);return k.useEffect(()=>()=>document.removeEventListener("pointerup",c),[c]),b.jsx(G6,{asChild:!0,...i,children:b.jsx(Ee.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:l,onPointerMove:pe(e.onPointerMove,p=>{p.pointerType!=="touch"&&!f.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),f.current=!0)}),onPointerLeave:pe(e.onPointerLeave,()=>{a.onTriggerLeave(),f.current=!1}),onPointerDown:pe(e.onPointerDown,()=>{a.open&&a.onClose(),u.current=!0,document.addEventListener("pointerup",c,{once:!0})}),onFocus:pe(e.onFocus,()=>{u.current||a.onOpen()}),onBlur:pe(e.onBlur,a.onClose),onClick:pe(e.onClick,a.onClose)})})});qie.displayName=zy;var Vie="TooltipPortal",[vse,Kie]=Gd(Vie,{forceMount:void 0}),ss="TooltipContent",OO=k.forwardRef((e,t)=>{const n=Kie(ss,e.__scopeTooltip),{forceMount:r=n.forceMount,side:a="top",...o}=e,i=Ud(ss,e.__scopeTooltip);return b.jsx(t1,{present:r||i.open,children:i.disableHoverableContent?b.jsx(kO,{side:a,...o,ref:t}):b.jsx(Xie,{side:a,...o,ref:t})})}),Xie=k.forwardRef((e,t)=>{const n=Ud(ss,e.__scopeTooltip),r=bO(ss,e.__scopeTooltip),a=k.useRef(null),o=Ye(t,a),[i,s]=k.useState(null),{trigger:l,onClose:u}=n,f=a.current,{onPointerInTransitChange:c}=r,p=k.useCallback(()=>{s(null),c(!1)},[c]),d=k.useCallback((h,m)=>{const g=h.currentTarget,v={x:h.clientX,y:h.clientY},y=ese(v,g.getBoundingClientRect()),x=tse(v,y),P=nse(m.getBoundingClientRect()),w=ase([...x,...P]);s(w),c(!0)},[c]);return k.useEffect(()=>()=>p(),[p]),k.useEffect(()=>{if(l&&f){const h=g=>d(g,f),m=g=>d(g,l);return l.addEventListener("pointerleave",h),f.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",h),f.removeEventListener("pointerleave",m)}}},[l,f,d,p]),k.useEffect(()=>{if(i){const h=m=>{const g=m.target,v={x:m.clientX,y:m.clientY},y=(l==null?void 0:l.contains(g))||(f==null?void 0:f.contains(g)),x=!rse(v,i);y?p():x&&(p(),u())};return document.addEventListener("pointermove",h),()=>document.removeEventListener("pointermove",h)}},[l,f,i,u,p]),b.jsx(kO,{...e,ref:o})}),[Yie,Qie]=Gd(SO,{isInside:!1}),Zie=iA("TooltipContent"),kO=k.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:i,...s}=e,l=Ud(ss,n),u=i1(n),{onClose:f}=l;return k.useEffect(()=>(document.addEventListener(V2,f),()=>document.removeEventListener(V2,f)),[f]),k.useEffect(()=>{if(l.trigger){const c=p=>{const d=p.target;d!=null&&d.contains(l.trigger)&&f()};return window.addEventListener("scroll",c,{capture:!0}),()=>window.removeEventListener("scroll",c,{capture:!0})}},[l.trigger,f]),b.jsx(I0,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:c=>c.preventDefault(),onDismiss:f,children:b.jsxs(U6,{"data-state":l.stateAttribute,...u,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[b.jsx(Zie,{children:r}),b.jsx(Yie,{scope:n,isInside:!0,children:b.jsx(qC,{id:l.contentId,role:"tooltip",children:a||r})})]})})});OO.displayName=ss;var _O="TooltipArrow",Jie=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=i1(n);return Qie(_O,n).isInside?null:b.jsx(W6,{...a,...r,ref:t})});Jie.displayName=_O;function ese(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(n,r,a,o)){case o:return"left";case a:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function tse(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function nse(e){const{top:t,right:n,bottom:r,left:a}=e;return[{x:a,y:t},{x:n,y:t},{x:n,y:r},{x:a,y:r}]}function rse(e,t){const{x:n,y:r}=e;let a=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){const s=t[o],l=t[i],u=s.x,f=s.y,c=l.x,p=l.y;f>r!=p>r&&n<(c-u)*(r-f)/(p-f)+u&&(a=!a)}return a}function ase(e){const t=e.slice();return t.sort((n,r)=>n.x<r.x?-1:n.x>r.x?1:n.y<r.y?-1:n.y>r.y?1:0),ose(t)}function ose(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r<e.length;r++){const a=e[r];for(;t.length>=2;){const o=t[t.length-1],i=t[t.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))t.pop();else break}t.push(a)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const a=e[r];for(;n.length>=2;){const o=n[n.length-1],i=n[n.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))n.pop();else break}n.push(a)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var ise=PO,AO=OO;const sse=ise,lse=k.forwardRef(({className:e,sideOffset:t=4,...n},r)=>b.jsx(AO,{ref:r,sideOffset:t,className:Oe("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n}));lse.displayName=AO.displayName;const use=e=>{const t=k.useRef(null),n=k.useRef(null),r=k.useRef(null);return k.useEffect(()=>{if(t.current){try{const a=t.current.attachShadow({mode:"open"});n.current=a;const o=document.createElement("div");o.id="shadow-root",o.className="benchmark-dashboard",a.appendChild(o),pO.getAllCSS().then(i=>{const s=document.createElement("style");s.textContent=i,a.insertBefore(s,o);const l=Gc.createRoot(o);r.current=l,l.render(b.jsx(C.StrictMode,{children:b.jsx(Gie,{client:new Bie,children:b.jsx(sse,{children:b.jsx(gie,{...e})})})}))}).catch(i=>{console.error("Failed to inject CSS into Shadow DOM:",i)})}catch(a){console.error("Failed to create Shadow DOM:",a)}return()=>{r.current&&r.current.unmount()}}},[]),b.jsx("div",{ref:t,style:{width:"100%",minHeight:"400px"}})},cse=`*, ::before, ::after {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-gradient-from-position:  ;
+  --tw-gradient-via-position:  ;
+  --tw-gradient-to-position:  ;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+  --tw-contain-size:  ;
+  --tw-contain-layout:  ;
+  --tw-contain-paint:  ;
+  --tw-contain-style:  ;
+}
+
+::backdrop {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-gradient-from-position:  ;
+  --tw-gradient-via-position:  ;
+  --tw-gradient-to-position:  ;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+  --tw-contain-size:  ;
+  --tw-contain-layout:  ;
+  --tw-contain-paint:  ;
+  --tw-contain-style:  ;
+}
+
+:root {
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 84% 4.9%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+  --sidebar-background: 0 0% 98%;
+  --sidebar-foreground: 240 5.3% 26.1%;
+  --sidebar-primary: 240 5.9% 10%;
+  --sidebar-primary-foreground: 0 0% 98%;
+  --sidebar-accent: 240 4.8% 95.9%;
+  --sidebar-accent-foreground: 240 5.9% 10%;
+  --sidebar-border: 220 13% 91%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+body {
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 84% 4.9%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+  --sidebar-background: 0 0% 98%;
+  --sidebar-foreground: 240 5.3% 26.1%;
+  --sidebar-primary: 240 5.9% 10%;
+  --sidebar-primary-foreground: 0 0% 98%;
+  --sidebar-accent: 240 4.8% 95.9%;
+  --sidebar-accent-foreground: 240 5.9% 10%;
+  --sidebar-border: 220 13% 91%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+.dark, body.dark {
+  --background: 222.2 84% 4.9%;
+  --foreground: 210 40% 98%;
+  --card: 222.2 84% 4.9%;
+  --card-foreground: 210 40% 98%;
+  --popover: 222.2 84% 4.9%;
+  --popover-foreground: 210 40% 98%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 217.2 32.6% 17.5%;
+  --secondary-foreground: 210 40% 98%;
+  --muted: 217.2 32.6% 17.5%;
+  --muted-foreground: 215 20.2% 65.1%;
+  --accent: 217.2 32.6% 17.5%;
+  --accent-foreground: 210 40% 98%;
+  --destructive: 0 62.8% 30.6%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 217.2 32.6% 17.5%;
+  --input: 217.2 32.6% 17.5%;
+  --ring: 212.7 26.8% 83.9%;
+  --sidebar-background: 240 5.9% 10%;
+  --sidebar-foreground: 240 4.8% 95.9%;
+  --sidebar-primary: 224.3 76.3% 48%;
+  --sidebar-primary-foreground: 0 0% 100%;
+  --sidebar-accent: 240 3.7% 15.9%;
+  --sidebar-accent-foreground: 240 4.8% 95.9%;
+  --sidebar-border: 240 3.7% 15.9%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+* {
+  border-color: hsl(var(--border));
+}
+
+body {
+  background-color: hsl(var(--background));
+  color: hsl(var(--foreground));
+}
+
+.container {
+  width: 100%;
+  margin-right: auto;
+  margin-left: auto;
+  padding-right: 2rem;
+  padding-left: 2rem;
+}
+
+@media (min-width: 1400px) {
+  .container {
+    max-width: 1400px;
+  }
+}
+
+/* Radix popper content wrapper styling - these elements are rendered via React portals */
+
+[data-radix-popper-content-wrapper] {
+  /* Ensure high z-index for proper layering */
+  z-index: 9999 !important;
+  /* Apply CSS variables that should be inherited from the document */
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --border: 214.3 31.8% 91.4%;
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+}
+
+/* Dark mode support for portals */
+
+.dark [data-radix-popper-content-wrapper],
+  body.dark [data-radix-popper-content-wrapper] {
+  --popover: 222.2 84% 4.9%;
+  --popover-foreground: 210 40% 98%;
+  --border: 217.2 32.6% 17.5%;
+  --background: 222.2 84% 4.9%;
+  --foreground: 210 40% 98%;
+  --muted: 217.2 32.6% 17.5%;
+  --muted-foreground: 215 20.2% 65.1%;
+  --accent: 217.2 32.6% 17.5%;
+  --accent-foreground: 210 40% 98%;
+  --destructive: 0 62.8% 30.6%;
+  --destructive-foreground: 210 40% 98%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 217.2 32.6% 17.5%;
+  --secondary-foreground: 210 40% 98%;
+  --ring: 212.7 26.8% 83.9%;
+}
+
+/* Ensure portal content gets proper styling */
+
+[data-radix-popper-content-wrapper] .bg-popover {
+  background-color: hsl(var(--popover)) !important;
+}
+
+[data-radix-popper-content-wrapper] .text-popover-foreground {
+  color: hsl(var(--popover-foreground)) !important;
+}
+
+[data-radix-popper-content-wrapper] .border {
+  border-color: hsl(var(--border)) !important;
+}
+
+[data-radix-popper-content-wrapper] .shadow-md {
+  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+}
+
+[data-radix-popper-content-wrapper] .rounded-md {
+  border-radius: calc(var(--radius) - 2px) !important;
+}
+
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0;
+}
+
+.not-sr-only {
+  position: static;
+  width: auto;
+  height: auto;
+  padding: 0;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+  white-space: normal;
+}
+
+.pointer-events-none {
+  pointer-events: none;
+}
+
+.pointer-events-auto {
+  pointer-events: auto;
+}
+
+.visible {
+  visibility: visible;
+}
+
+.invisible {
+  visibility: hidden;
+}
+
+.static {
+  position: static;
+}
+
+.fixed {
+  position: fixed;
+}
+
+.absolute {
+  position: absolute;
+}
+
+.relative {
+  position: relative;
+}
+
+.sticky {
+  position: sticky;
+}
+
+.inset-0 {
+  inset: 0px;
+}
+
+.inset-x-0 {
+  left: 0px;
+  right: 0px;
+}
+
+.inset-y-0 {
+  top: 0px;
+  bottom: 0px;
+}
+
+.-bottom-12 {
+  bottom: -3rem;
+}
+
+.-left-12 {
+  left: -3rem;
+}
+
+.-right-12 {
+  right: -3rem;
+}
+
+.-top-12 {
+  top: -3rem;
+}
+
+.bottom-0 {
+  bottom: 0px;
+}
+
+.bottom-8 {
+  bottom: 2rem;
+}
+
+.left-0 {
+  left: 0px;
+}
+
+.left-1 {
+  left: 0.25rem;
+}
+
+.left-1\\/2 {
+  left: 50%;
+}
+
+.left-2 {
+  left: 0.5rem;
+}
+
+.left-4 {
+  left: 1rem;
+}
+
+.left-\\[50\\%\\] {
+  left: 50%;
+}
+
+.right-0 {
+  right: 0px;
+}
+
+.right-1 {
+  right: 0.25rem;
+}
+
+.right-2 {
+  right: 0.5rem;
+}
+
+.right-3 {
+  right: 0.75rem;
+}
+
+.right-4 {
+  right: 1rem;
+}
+
+.top-0 {
+  top: 0px;
+}
+
+.top-1\\.5 {
+  top: 0.375rem;
+}
+
+.top-1\\/2 {
+  top: 50%;
+}
+
+.top-2 {
+  top: 0.5rem;
+}
+
+.top-3\\.5 {
+  top: 0.875rem;
+}
+
+.top-4 {
+  top: 1rem;
+}
+
+.top-\\[1px\\] {
+  top: 1px;
+}
+
+.top-\\[50\\%\\] {
+  top: 50%;
+}
+
+.top-\\[60\\%\\] {
+  top: 60%;
+}
+
+.top-full {
+  top: 100%;
+}
+
+.z-10 {
+  z-index: 10;
+}
+
+.z-20 {
+  z-index: 20;
+}
+
+.z-50 {
+  z-index: 50;
+}
+
+.z-\\[100\\] {
+  z-index: 100;
+}
+
+.z-\\[1\\] {
+  z-index: 1;
+}
+
+.m-0 {
+  margin: 0px;
+}
+
+.m-1 {
+  margin: 0.25rem;
+}
+
+.m-2 {
+  margin: 0.5rem;
+}
+
+.m-4 {
+  margin: 1rem;
+}
+
+.m-6 {
+  margin: 1.5rem;
+}
+
+.m-8 {
+  margin: 2rem;
+}
+
+.-mx-1 {
+  margin-left: -0.25rem;
+  margin-right: -0.25rem;
+}
+
+.mx-2 {
+  margin-left: 0.5rem;
+  margin-right: 0.5rem;
+}
+
+.mx-3\\.5 {
+  margin-left: 0.875rem;
+  margin-right: 0.875rem;
+}
+
+.mx-auto {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.my-0\\.5 {
+  margin-top: 0.125rem;
+  margin-bottom: 0.125rem;
+}
+
+.my-1 {
+  margin-top: 0.25rem;
+  margin-bottom: 0.25rem;
+}
+
+.-ml-4 {
+  margin-left: -1rem;
+}
+
+.-mt-4 {
+  margin-top: -1rem;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem;
+}
+
+.mb-10 {
+  margin-bottom: 2.5rem;
+}
+
+.mb-12 {
+  margin-bottom: 3rem;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem;
+}
+
+.mb-3 {
+  margin-bottom: 0.75rem;
+}
+
+.mb-4 {
+  margin-bottom: 1rem;
+}
+
+.mb-5 {
+  margin-bottom: 1.25rem;
+}
+
+.mb-6 {
+  margin-bottom: 1.5rem;
+}
+
+.mb-8 {
+  margin-bottom: 2rem;
+}
+
+.ml-1 {
+  margin-left: 0.25rem;
+}
+
+.ml-3 {
+  margin-left: 0.75rem;
+}
+
+.ml-auto {
+  margin-left: auto;
+}
+
+.mr-2 {
+  margin-right: 0.5rem;
+}
+
+.mr-3 {
+  margin-right: 0.75rem;
+}
+
+.mr-4 {
+  margin-right: 1rem;
+}
+
+.mt-1 {
+  margin-top: 0.25rem;
+}
+
+.mt-1\\.5 {
+  margin-top: 0.375rem;
+}
+
+.mt-2 {
+  margin-top: 0.5rem;
+}
+
+.mt-24 {
+  margin-top: 6rem;
+}
+
+.mt-4 {
+  margin-top: 1rem;
+}
+
+.mt-5 {
+  margin-top: 1.25rem;
+}
+
+.mt-auto {
+  margin-top: auto;
+}
+
+.block {
+  display: block;
+}
+
+.inline-block {
+  display: inline-block;
+}
+
+.inline {
+  display: inline;
+}
+
+.flex {
+  display: flex;
+}
+
+.inline-flex {
+  display: inline-flex;
+}
+
+.table {
+  display: table;
+}
+
+.grid {
+  display: grid;
+}
+
+.hidden {
+  display: none;
+}
+
+.aspect-square {
+  aspect-ratio: 1 / 1;
+}
+
+.aspect-video {
+  aspect-ratio: 16 / 9;
+}
+
+.size-4 {
+  width: 1rem;
+  height: 1rem;
+}
+
+.h-1\\.5 {
+  height: 0.375rem;
+}
+
+.h-10 {
+  height: 2.5rem;
+}
+
+.h-11 {
+  height: 2.75rem;
+}
+
+.h-12 {
+  height: 3rem;
+}
+
+.h-2 {
+  height: 0.5rem;
+}
+
+.h-2\\.5 {
+  height: 0.625rem;
+}
+
+.h-3 {
+  height: 0.75rem;
+}
+
+.h-3\\.5 {
+  height: 0.875rem;
+}
+
+.h-4 {
+  height: 1rem;
+}
+
+.h-5 {
+  height: 1.25rem;
+}
+
+.h-6 {
+  height: 1.5rem;
+}
+
+.h-7 {
+  height: 1.75rem;
+}
+
+.h-8 {
+  height: 2rem;
+}
+
+.h-9 {
+  height: 2.25rem;
+}
+
+.h-\\[1px\\] {
+  height: 1px;
+}
+
+.h-\\[var\\(--radix-navigation-menu-viewport-height\\)\\] {
+  height: var(--radix-navigation-menu-viewport-height);
+}
+
+.h-\\[var\\(--radix-select-trigger-height\\)\\] {
+  height: var(--radix-select-trigger-height);
+}
+
+.h-auto {
+  height: auto;
+}
+
+.h-full {
+  height: 100%;
+}
+
+.h-px {
+  height: 1px;
+}
+
+.h-svh {
+  height: 100svh;
+}
+
+.max-h-96 {
+  max-height: 24rem;
+}
+
+.max-h-\\[300px\\] {
+  max-height: 300px;
+}
+
+.max-h-screen {
+  max-height: 100vh;
+}
+
+.min-h-0 {
+  min-height: 0px;
+}
+
+.min-h-\\[400px\\] {
+  min-height: 400px;
+}
+
+.min-h-\\[80px\\] {
+  min-height: 80px;
+}
+
+.min-h-full {
+  min-height: 100%;
+}
+
+.min-h-svh {
+  min-height: 100svh;
+}
+
+.w-0 {
+  width: 0px;
+}
+
+.w-1 {
+  width: 0.25rem;
+}
+
+.w-10 {
+  width: 2.5rem;
+}
+
+.w-11 {
+  width: 2.75rem;
+}
+
+.w-12 {
+  width: 3rem;
+}
+
+.w-2 {
+  width: 0.5rem;
+}
+
+.w-2\\.5 {
+  width: 0.625rem;
+}
+
+.w-3 {
+  width: 0.75rem;
+}
+
+.w-3\\.5 {
+  width: 0.875rem;
+}
+
+.w-3\\/4 {
+  width: 75%;
+}
+
+.w-32 {
+  width: 8rem;
+}
+
+.w-4 {
+  width: 1rem;
+}
+
+.w-5 {
+  width: 1.25rem;
+}
+
+.w-6 {
+  width: 1.5rem;
+}
+
+.w-64 {
+  width: 16rem;
+}
+
+.w-7 {
+  width: 1.75rem;
+}
+
+.w-72 {
+  width: 18rem;
+}
+
+.w-8 {
+  width: 2rem;
+}
+
+.w-9 {
+  width: 2.25rem;
+}
+
+.w-\\[--sidebar-width\\] {
+  width: var(--sidebar-width);
+}
+
+.w-\\[100px\\] {
+  width: 100px;
+}
+
+.w-\\[1px\\] {
+  width: 1px;
+}
+
+.w-auto {
+  width: auto;
+}
+
+.w-full {
+  width: 100%;
+}
+
+.w-max {
+  width: -moz-max-content;
+  width: max-content;
+}
+
+.w-px {
+  width: 1px;
+}
+
+.min-w-0 {
+  min-width: 0px;
+}
+
+.min-w-5 {
+  min-width: 1.25rem;
+}
+
+.min-w-\\[12rem\\] {
+  min-width: 12rem;
+}
+
+.min-w-\\[8rem\\] {
+  min-width: 8rem;
+}
+
+.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {
+  min-width: var(--radix-select-trigger-width);
+}
+
+.max-w-4xl {
+  max-width: 56rem;
+}
+
+.max-w-7xl {
+  max-width: 80rem;
+}
+
+.max-w-\\[--skeleton-width\\] {
+  max-width: var(--skeleton-width);
+}
+
+.max-w-lg {
+  max-width: 32rem;
+}
+
+.max-w-max {
+  max-width: -moz-max-content;
+  max-width: max-content;
+}
+
+.max-w-none {
+  max-width: none;
+}
+
+.max-w-sm {
+  max-width: 24rem;
+}
+
+.max-w-xs {
+  max-width: 20rem;
+}
+
+.flex-1 {
+  flex: 1 1 0%;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0;
+}
+
+.shrink-0 {
+  flex-shrink: 0;
+}
+
+.flex-grow {
+  flex-grow: 1;
+}
+
+.grow {
+  flex-grow: 1;
+}
+
+.grow-0 {
+  flex-grow: 0;
+}
+
+.basis-full {
+  flex-basis: 100%;
+}
+
+.caption-bottom {
+  caption-side: bottom;
+}
+
+.border-collapse {
+  border-collapse: collapse;
+}
+
+.-translate-x-1\\/2 {
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-px {
+  --tw-translate-x: -1px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\\/2 {
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-\\[-50\\%\\] {
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-px {
+  --tw-translate-x: 1px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-\\[-50\\%\\] {
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-45 {
+  --tw-rotate: 45deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-90 {
+  --tw-rotate: 90deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.transform {
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes pulse {
+  50% {
+    opacity: .5;
+  }
+}
+
+.animate-pulse {
+  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+
+@keyframes spin {
+  to {
+    transform: rotate(360deg);
+  }
+}
+
+.animate-spin {
+  animation: spin 1s linear infinite;
+}
+
+.cursor-default {
+  cursor: default;
+}
+
+.cursor-pointer {
+  cursor: pointer;
+}
+
+.touch-none {
+  touch-action: none;
+}
+
+.select-none {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+}
+
+.list-none {
+  list-style-type: none;
+}
+
+.grid-cols-1 {
+  grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+
+.grid-cols-2 {
+  grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+.grid-cols-3 {
+  grid-template-columns: repeat(3, minmax(0, 1fr));
+}
+
+.flex-row {
+  flex-direction: row;
+}
+
+.flex-col {
+  flex-direction: column;
+}
+
+.flex-col-reverse {
+  flex-direction: column-reverse;
+}
+
+.flex-wrap {
+  flex-wrap: wrap;
+}
+
+.items-start {
+  align-items: flex-start;
+}
+
+.items-end {
+  align-items: flex-end;
+}
+
+.items-center {
+  align-items: center;
+}
+
+.items-stretch {
+  align-items: stretch;
+}
+
+.justify-start {
+  justify-content: flex-start;
+}
+
+.justify-center {
+  justify-content: center;
+}
+
+.justify-between {
+  justify-content: space-between;
+}
+
+.gap-1 {
+  gap: 0.25rem;
+}
+
+.gap-1\\.5 {
+  gap: 0.375rem;
+}
+
+.gap-2 {
+  gap: 0.5rem;
+}
+
+.gap-3 {
+  gap: 0.75rem;
+}
+
+.gap-4 {
+  gap: 1rem;
+}
+
+.gap-6 {
+  gap: 1.5rem;
+}
+
+.space-x-1 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.25rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-3 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-4 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(1rem * var(--tw-space-x-reverse));
+  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-y-0 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-1 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
+
+.overflow-auto {
+  overflow: auto;
+}
+
+.overflow-hidden {
+  overflow: hidden;
+}
+
+.overflow-x-auto {
+  overflow-x: auto;
+}
+
+.overflow-y-auto {
+  overflow-y: auto;
+}
+
+.overflow-x-hidden {
+  overflow-x: hidden;
+}
+
+.truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.whitespace-nowrap {
+  white-space: nowrap;
+}
+
+.whitespace-pre-wrap {
+  white-space: pre-wrap;
+}
+
+.break-words {
+  overflow-wrap: break-word;
+}
+
+.rounded {
+  border-radius: 0.25rem;
+}
+
+.rounded-2xl {
+  border-radius: 1rem;
+}
+
+.rounded-\\[2px\\] {
+  border-radius: 2px;
+}
+
+.rounded-\\[inherit\\] {
+  border-radius: inherit;
+}
+
+.rounded-full {
+  border-radius: 9999px;
+}
+
+.rounded-lg {
+  border-radius: var(--radius);
+}
+
+.rounded-md {
+  border-radius: calc(var(--radius) - 2px);
+}
+
+.rounded-none {
+  border-radius: 0px;
+}
+
+.rounded-sm {
+  border-radius: calc(var(--radius) - 4px);
+}
+
+.rounded-xl {
+  border-radius: 0.75rem;
+}
+
+.rounded-t-\\[10px\\] {
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+}
+
+.rounded-t-lg {
+  border-top-left-radius: var(--radius);
+  border-top-right-radius: var(--radius);
+}
+
+.rounded-tl-sm {
+  border-top-left-radius: calc(var(--radius) - 4px);
+}
+
+.border {
+  border-width: 1px;
+}
+
+.border-2 {
+  border-width: 2px;
+}
+
+.border-\\[1\\.5px\\] {
+  border-width: 1.5px;
+}
+
+.border-y {
+  border-top-width: 1px;
+  border-bottom-width: 1px;
+}
+
+.border-b {
+  border-bottom-width: 1px;
+}
+
+.border-b-2 {
+  border-bottom-width: 2px;
+}
+
+.border-l {
+  border-left-width: 1px;
+}
+
+.border-r {
+  border-right-width: 1px;
+}
+
+.border-t {
+  border-top-width: 1px;
+}
+
+.border-dashed {
+  border-style: dashed;
+}
+
+.border-\\[--color-border\\] {
+  border-color: var(--color-border);
+}
+
+.border-blue-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));
+}
+
+.border-blue-600 {
+  --tw-border-opacity: 1;
+  border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));
+}
+
+.border-border\\/50 {
+  border-color: hsl(var(--border) / 0.5);
+}
+
+.border-destructive {
+  border-color: hsl(var(--destructive));
+}
+
+.border-destructive\\/50 {
+  border-color: hsl(var(--destructive) / 0.5);
+}
+
+.border-gray-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-200\\/30 {
+  border-color: rgb(229 231 235 / 0.3);
+}
+
+.border-gray-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-700 {
+  --tw-border-opacity: 1;
+  border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
+}
+
+.border-input {
+  border-color: hsl(var(--input));
+}
+
+.border-primary {
+  border-color: hsl(var(--primary));
+}
+
+.border-purple-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));
+}
+
+.border-purple-600 {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 51 234 / var(--tw-border-opacity, 1));
+}
+
+.border-red-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));
+}
+
+.border-red-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));
+}
+
+.border-sidebar-border {
+  border-color: hsl(var(--sidebar-border));
+}
+
+.border-transparent {
+  border-color: transparent;
+}
+
+.border-l-transparent {
+  border-left-color: transparent;
+}
+
+.border-t-transparent {
+  border-top-color: transparent;
+}
+
+.bg-\\[--color-bg\\] {
+  background-color: var(--color-bg);
+}
+
+.bg-accent {
+  background-color: hsl(var(--accent));
+}
+
+.bg-background {
+  background-color: hsl(var(--background));
+}
+
+.bg-black\\/80 {
+  background-color: rgb(0 0 0 / 0.8);
+}
+
+.bg-blue-50\\/50 {
+  background-color: rgb(239 246 255 / 0.5);
+}
+
+.bg-blue-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
+}
+
+.bg-border {
+  background-color: hsl(var(--border));
+}
+
+.bg-card {
+  background-color: hsl(var(--card));
+}
+
+.bg-destructive {
+  background-color: hsl(var(--destructive));
+}
+
+.bg-foreground {
+  background-color: hsl(var(--foreground));
+}
+
+.bg-gray-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-700 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-800 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.bg-indigo-600\\/40 {
+  background-color: rgb(79 70 229 / 0.4);
+}
+
+.bg-muted {
+  background-color: hsl(var(--muted));
+}
+
+.bg-muted\\/30 {
+  background-color: hsl(var(--muted) / 0.3);
+}
+
+.bg-muted\\/50 {
+  background-color: hsl(var(--muted) / 0.5);
+}
+
+.bg-popover {
+  background-color: hsl(var(--popover));
+}
+
+.bg-primary {
+  background-color: hsl(var(--primary));
+}
+
+.bg-red-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
+}
+
+.bg-red-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
+}
+
+.bg-secondary {
+  background-color: hsl(var(--secondary));
+}
+
+.bg-sidebar {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.bg-sidebar-border {
+  background-color: hsl(var(--sidebar-border));
+}
+
+.bg-transparent {
+  background-color: transparent;
+}
+
+.bg-white {
+  --tw-bg-opacity: 1;
+  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gradient-to-r {
+  background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.from-blue-50 {
+  --tw-gradient-from: #eff6ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-blue-50\\/50 {
+  --tw-gradient-from: rgb(239 246 255 / 0.5) var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-indigo-100 {
+  --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-100 {
+  --tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-50\\/50 {
+  --tw-gradient-from: rgb(250 245 255 / 0.5) var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-600 {
+  --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.to-blue-100 {
+  --tw-gradient-to: #dbeafe var(--tw-gradient-to-position);
+}
+
+.to-indigo-100 {
+  --tw-gradient-to: #e0e7ff var(--tw-gradient-to-position);
+}
+
+.to-indigo-50 {
+  --tw-gradient-to: #eef2ff var(--tw-gradient-to-position);
+}
+
+.to-indigo-50\\/50 {
+  --tw-gradient-to: rgb(238 242 255 / 0.5) var(--tw-gradient-to-position);
+}
+
+.to-indigo-600 {
+  --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position);
+}
+
+.fill-current {
+  fill: currentColor;
+}
+
+.p-0 {
+  padding: 0px;
+}
+
+.p-1 {
+  padding: 0.25rem;
+}
+
+.p-2 {
+  padding: 0.5rem;
+}
+
+.p-3 {
+  padding: 0.75rem;
+}
+
+.p-4 {
+  padding: 1rem;
+}
+
+.p-5 {
+  padding: 1.25rem;
+}
+
+.p-6 {
+  padding: 1.5rem;
+}
+
+.p-8 {
+  padding: 2rem;
+}
+
+.p-\\[1px\\] {
+  padding: 1px;
+}
+
+.px-1 {
+  padding-left: 0.25rem;
+  padding-right: 0.25rem;
+}
+
+.px-2 {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.px-2\\.5 {
+  padding-left: 0.625rem;
+  padding-right: 0.625rem;
+}
+
+.px-3 {
+  padding-left: 0.75rem;
+  padding-right: 0.75rem;
+}
+
+.px-4 {
+  padding-left: 1rem;
+  padding-right: 1rem;
+}
+
+.px-5 {
+  padding-left: 1.25rem;
+  padding-right: 1.25rem;
+}
+
+.px-6 {
+  padding-left: 1.5rem;
+  padding-right: 1.5rem;
+}
+
+.px-8 {
+  padding-left: 2rem;
+  padding-right: 2rem;
+}
+
+.py-0\\.5 {
+  padding-top: 0.125rem;
+  padding-bottom: 0.125rem;
+}
+
+.py-1 {
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+}
+
+.py-1\\.5 {
+  padding-top: 0.375rem;
+  padding-bottom: 0.375rem;
+}
+
+.py-12 {
+  padding-top: 3rem;
+  padding-bottom: 3rem;
+}
+
+.py-2 {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
+
+.py-3 {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.py-4 {
+  padding-top: 1rem;
+  padding-bottom: 1rem;
+}
+
+.py-6 {
+  padding-top: 1.5rem;
+  padding-bottom: 1.5rem;
+}
+
+.py-8 {
+  padding-top: 2rem;
+  padding-bottom: 2rem;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem;
+}
+
+.pb-3 {
+  padding-bottom: 0.75rem;
+}
+
+.pb-4 {
+  padding-bottom: 1rem;
+}
+
+.pb-6 {
+  padding-bottom: 1.5rem;
+}
+
+.pl-2\\.5 {
+  padding-left: 0.625rem;
+}
+
+.pl-4 {
+  padding-left: 1rem;
+}
+
+.pl-8 {
+  padding-left: 2rem;
+}
+
+.pr-2 {
+  padding-right: 0.5rem;
+}
+
+.pr-2\\.5 {
+  padding-right: 0.625rem;
+}
+
+.pr-8 {
+  padding-right: 2rem;
+}
+
+.pt-0 {
+  padding-top: 0px;
+}
+
+.pt-1 {
+  padding-top: 0.25rem;
+}
+
+.pt-3 {
+  padding-top: 0.75rem;
+}
+
+.pt-4 {
+  padding-top: 1rem;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.align-middle {
+  vertical-align: middle;
+}
+
+.font-mono {
+  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+}
+
+.text-2xl {
+  font-size: 1.5rem;
+  line-height: 2rem;
+}
+
+.text-3xl {
+  font-size: 1.875rem;
+  line-height: 2.25rem;
+}
+
+.text-\\[0\\.8rem\\] {
+  font-size: 0.8rem;
+}
+
+.text-base {
+  font-size: 1rem;
+  line-height: 1.5rem;
+}
+
+.text-lg {
+  font-size: 1.125rem;
+  line-height: 1.75rem;
+}
+
+.text-sm {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.text-xl {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+}
+
+.text-xs {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.font-bold {
+  font-weight: 700;
+}
+
+.font-medium {
+  font-weight: 500;
+}
+
+.font-normal {
+  font-weight: 400;
+}
+
+.font-semibold {
+  font-weight: 600;
+}
+
+.capitalize {
+  text-transform: capitalize;
+}
+
+.tabular-nums {
+  --tw-numeric-spacing: tabular-nums;
+  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.leading-none {
+  line-height: 1;
+}
+
+.leading-relaxed {
+  line-height: 1.625;
+}
+
+.tracking-tight {
+  letter-spacing: -0.025em;
+}
+
+.tracking-widest {
+  letter-spacing: 0.1em;
+}
+
+.text-accent-foreground {
+  color: hsl(var(--accent-foreground));
+}
+
+.text-blue-600 {
+  --tw-text-opacity: 1;
+  color: rgb(37 99 235 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-700 {
+  --tw-text-opacity: 1;
+  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-800 {
+  --tw-text-opacity: 1;
+  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
+}
+
+.text-card-foreground {
+  color: hsl(var(--card-foreground));
+}
+
+.text-current {
+  color: currentColor;
+}
+
+.text-destructive {
+  color: hsl(var(--destructive));
+}
+
+.text-destructive-foreground {
+  color: hsl(var(--destructive-foreground));
+}
+
+.text-foreground {
+  color: hsl(var(--foreground));
+}
+
+.text-foreground\\/50 {
+  color: hsl(var(--foreground) / 0.5);
+}
+
+.text-gray-300 {
+  --tw-text-opacity: 1;
+  color: rgb(209 213 219 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-400 {
+  --tw-text-opacity: 1;
+  color: rgb(156 163 175 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-500 {
+  --tw-text-opacity: 1;
+  color: rgb(107 114 128 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-600 {
+  --tw-text-opacity: 1;
+  color: rgb(75 85 99 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-700 {
+  --tw-text-opacity: 1;
+  color: rgb(55 65 81 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-800 {
+  --tw-text-opacity: 1;
+  color: rgb(31 41 55 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-900 {
+  --tw-text-opacity: 1;
+  color: rgb(17 24 39 / var(--tw-text-opacity, 1));
+}
+
+.text-green-600 {
+  --tw-text-opacity: 1;
+  color: rgb(22 163 74 / var(--tw-text-opacity, 1));
+}
+
+.text-green-700 {
+  --tw-text-opacity: 1;
+  color: rgb(21 128 61 / var(--tw-text-opacity, 1));
+}
+
+.text-indigo-600 {
+  --tw-text-opacity: 1;
+  color: rgb(79 70 229 / var(--tw-text-opacity, 1));
+}
+
+.text-muted-foreground {
+  color: hsl(var(--muted-foreground));
+}
+
+.text-popover-foreground {
+  color: hsl(var(--popover-foreground));
+}
+
+.text-primary {
+  color: hsl(var(--primary));
+}
+
+.text-primary-foreground {
+  color: hsl(var(--primary-foreground));
+}
+
+.text-purple-100 {
+  --tw-text-opacity: 1;
+  color: rgb(243 232 255 / var(--tw-text-opacity, 1));
+}
+
+.text-purple-600 {
+  --tw-text-opacity: 1;
+  color: rgb(147 51 234 / var(--tw-text-opacity, 1));
+}
+
+.text-red-500 {
+  --tw-text-opacity: 1;
+  color: rgb(239 68 68 / var(--tw-text-opacity, 1));
+}
+
+.text-red-600 {
+  --tw-text-opacity: 1;
+  color: rgb(220 38 38 / var(--tw-text-opacity, 1));
+}
+
+.text-red-700 {
+  --tw-text-opacity: 1;
+  color: rgb(185 28 28 / var(--tw-text-opacity, 1));
+}
+
+.text-red-800 {
+  --tw-text-opacity: 1;
+  color: rgb(153 27 27 / var(--tw-text-opacity, 1));
+}
+
+.text-secondary-foreground {
+  color: hsl(var(--secondary-foreground));
+}
+
+.text-sidebar-foreground {
+  color: hsl(var(--sidebar-foreground));
+}
+
+.text-sidebar-foreground\\/70 {
+  color: hsl(var(--sidebar-foreground) / 0.7);
+}
+
+.text-white {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.underline-offset-4 {
+  text-underline-offset: 4px;
+}
+
+.antialiased {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.opacity-0 {
+  opacity: 0;
+}
+
+.opacity-50 {
+  opacity: 0.5;
+}
+
+.opacity-60 {
+  opacity: 0.6;
+}
+
+.opacity-70 {
+  opacity: 0.7;
+}
+
+.opacity-90 {
+  opacity: 0.9;
+}
+
+.shadow {
+  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\] {
+  --tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));
+  --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-md {
+  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-none {
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-sm {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-xl {
+  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.outline-none {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.outline {
+  outline-style: solid;
+}
+
+.ring-0 {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-2 {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-ring {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.ring-sidebar-ring {
+  --tw-ring-color: hsl(var(--sidebar-ring));
+}
+
+.ring-offset-background {
+  --tw-ring-offset-color: hsl(var(--background));
+}
+
+.grayscale {
+  --tw-grayscale: grayscale(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);
+}
+
+.filter {
+  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.transition {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[left\\2c right\\2c width\\] {
+  transition-property: left,right,width;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[margin\\2c opa\\] {
+  transition-property: margin,opa;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[width\\2c height\\2c padding\\] {
+  transition-property: width,height,padding;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[width\\] {
+  transition-property: width;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-all {
+  transition-property: all;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-colors {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-opacity {
+  transition-property: opacity;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-shadow {
+  transition-property: box-shadow;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-transform {
+  transition-property: transform;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.duration-1000 {
+  transition-duration: 1000ms;
+}
+
+.duration-200 {
+  transition-duration: 200ms;
+}
+
+.ease-in-out {
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.ease-linear {
+  transition-timing-function: linear;
+}
+
+@keyframes enter {
+  from {
+    opacity: var(--tw-enter-opacity, 1);
+    transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));
+  }
+}
+
+@keyframes exit {
+  to {
+    opacity: var(--tw-exit-opacity, 1);
+    transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));
+  }
+}
+
+.animate-in {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.fade-in-0 {
+  --tw-enter-opacity: 0;
+}
+
+.fade-in-80 {
+  --tw-enter-opacity: 0.8;
+}
+
+.zoom-in-95 {
+  --tw-enter-scale: .95;
+}
+
+.duration-1000 {
+  animation-duration: 1000ms;
+}
+
+.duration-200 {
+  animation-duration: 200ms;
+}
+
+.ease-in-out {
+  animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.ease-linear {
+  animation-timing-function: linear;
+}
+
+/* Definition of the design system. All colors, gradients, fonts, etc should be defined here. */
+
+/* Global styles for Radix UI portals rendered outside Shadow DOM */
+
+[data-radix-popper-content-wrapper] .hover\\:shadow-md:hover {
+  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+}
+
+[data-radix-popper-content-wrapper] .group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:border {
+  border-color: hsl(var(--border)) !important;
+}
+
+.file\\:border-0::file-selector-button {
+  border-width: 0px;
+}
+
+.file\\:bg-transparent::file-selector-button {
+  background-color: transparent;
+}
+
+.file\\:text-sm::file-selector-button {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.file\\:font-medium::file-selector-button {
+  font-weight: 500;
+}
+
+.file\\:text-foreground::file-selector-button {
+  color: hsl(var(--foreground));
+}
+
+.placeholder\\:text-muted-foreground::-moz-placeholder {
+  color: hsl(var(--muted-foreground));
+}
+
+.placeholder\\:text-muted-foreground::placeholder {
+  color: hsl(var(--muted-foreground));
+}
+
+.after\\:absolute::after {
+  content: var(--tw-content);
+  position: absolute;
+}
+
+.after\\:-inset-2::after {
+  content: var(--tw-content);
+  inset: -0.5rem;
+}
+
+.after\\:inset-y-0::after {
+  content: var(--tw-content);
+  top: 0px;
+  bottom: 0px;
+}
+
+.after\\:left-1\\/2::after {
+  content: var(--tw-content);
+  left: 50%;
+}
+
+.after\\:w-1::after {
+  content: var(--tw-content);
+  width: 0.25rem;
+}
+
+.after\\:w-\\[2px\\]::after {
+  content: var(--tw-content);
+  width: 2px;
+}
+
+.after\\:-translate-x-1\\/2::after {
+  content: var(--tw-content);
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.first\\:rounded-l-md:first-child {
+  border-top-left-radius: calc(var(--radius) - 2px);
+  border-bottom-left-radius: calc(var(--radius) - 2px);
+}
+
+.first\\:border-l:first-child {
+  border-left-width: 1px;
+}
+
+.last\\:rounded-r-md:last-child {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.focus-within\\:relative:focus-within {
+  position: relative;
+}
+
+.focus-within\\:z-20:focus-within {
+  z-index: 20;
+}
+
+.hover\\:bg-accent:hover {
+  background-color: hsl(var(--accent));
+}
+
+.hover\\:bg-blue-700:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-destructive\\/80:hover {
+  background-color: hsl(var(--destructive) / 0.8);
+}
+
+.hover\\:bg-destructive\\/90:hover {
+  background-color: hsl(var(--destructive) / 0.9);
+}
+
+.hover\\:bg-gray-50:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-gray-700:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-muted:hover {
+  background-color: hsl(var(--muted));
+}
+
+.hover\\:bg-muted\\/50:hover {
+  background-color: hsl(var(--muted) / 0.5);
+}
+
+.hover\\:bg-primary:hover {
+  background-color: hsl(var(--primary));
+}
+
+.hover\\:bg-primary\\/80:hover {
+  background-color: hsl(var(--primary) / 0.8);
+}
+
+.hover\\:bg-primary\\/90:hover {
+  background-color: hsl(var(--primary) / 0.9);
+}
+
+.hover\\:bg-red-100:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-secondary:hover {
+  background-color: hsl(var(--secondary));
+}
+
+.hover\\:bg-secondary\\/80:hover {
+  background-color: hsl(var(--secondary) / 0.8);
+}
+
+.hover\\:bg-sidebar-accent:hover {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.hover\\:text-accent-foreground:hover {
+  color: hsl(var(--accent-foreground));
+}
+
+.hover\\:text-blue-800:hover {
+  --tw-text-opacity: 1;
+  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
+}
+
+.hover\\:text-foreground:hover {
+  color: hsl(var(--foreground));
+}
+
+.hover\\:text-muted-foreground:hover {
+  color: hsl(var(--muted-foreground));
+}
+
+.hover\\:text-primary-foreground:hover {
+  color: hsl(var(--primary-foreground));
+}
+
+.hover\\:text-sidebar-accent-foreground:hover {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.hover\\:underline:hover {
+  text-decoration-line: underline;
+}
+
+.hover\\:opacity-100:hover {
+  opacity: 1;
+}
+
+.hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\]:hover {
+  --tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));
+  --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:shadow-md:hover {
+  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:shadow-sm:hover {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:after\\:bg-sidebar-border:hover::after {
+  content: var(--tw-content);
+  background-color: hsl(var(--sidebar-border));
+}
+
+.focus\\:bg-accent:focus {
+  background-color: hsl(var(--accent));
+}
+
+.focus\\:bg-primary:focus {
+  background-color: hsl(var(--primary));
+}
+
+.focus\\:text-accent-foreground:focus {
+  color: hsl(var(--accent-foreground));
+}
+
+.focus\\:text-primary-foreground:focus {
+  color: hsl(var(--primary-foreground));
+}
+
+.focus\\:opacity-100:focus {
+  opacity: 1;
+}
+
+.focus\\:outline-none:focus {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.focus\\:ring-2:focus {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus\\:ring-ring:focus {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.focus\\:ring-offset-2:focus {
+  --tw-ring-offset-width: 2px;
+}
+
+.focus-visible\\:outline-none:focus-visible {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.focus-visible\\:ring-1:focus-visible {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus-visible\\:ring-2:focus-visible {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus-visible\\:ring-ring:focus-visible {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.focus-visible\\:ring-sidebar-ring:focus-visible {
+  --tw-ring-color: hsl(var(--sidebar-ring));
+}
+
+.focus-visible\\:ring-offset-1:focus-visible {
+  --tw-ring-offset-width: 1px;
+}
+
+.focus-visible\\:ring-offset-2:focus-visible {
+  --tw-ring-offset-width: 2px;
+}
+
+.focus-visible\\:ring-offset-background:focus-visible {
+  --tw-ring-offset-color: hsl(var(--background));
+}
+
+.active\\:bg-sidebar-accent:active {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.active\\:text-sidebar-accent-foreground:active {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.disabled\\:pointer-events-none:disabled {
+  pointer-events: none;
+}
+
+.disabled\\:cursor-not-allowed:disabled {
+  cursor: not-allowed;
+}
+
+.disabled\\:opacity-50:disabled {
+  opacity: 0.5;
+}
+
+.group\\/menu-item:focus-within .group-focus-within\\/menu-item\\:opacity-100 {
+  opacity: 1;
+}
+
+.group\\/menu-item:hover .group-hover\\/menu-item\\:opacity-100 {
+  opacity: 1;
+}
+
+.group:hover .group-hover\\:opacity-100 {
+  opacity: 1;
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:border-muted\\/40 {
+  border-color: hsl(var(--muted) / 0.4);
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:border-border {
+  border-color: hsl(var(--border));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:bg-muted {
+  background-color: hsl(var(--muted));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:bg-primary {
+  background-color: hsl(var(--primary));
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:bg-background {
+  background-color: hsl(var(--background));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:text-red-300 {
+  --tw-text-opacity: 1;
+  color: rgb(252 165 165 / var(--tw-text-opacity, 1));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:text-muted-foreground {
+  color: hsl(var(--muted-foreground));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:text-primary-foreground {
+  color: hsl(var(--primary-foreground));
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:text-foreground {
+  color: hsl(var(--foreground));
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:border-destructive\\/30:hover {
+  border-color: hsl(var(--destructive) / 0.3);
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:bg-destructive:hover {
+  background-color: hsl(var(--destructive));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:text-destructive-foreground:hover {
+  color: hsl(var(--destructive-foreground));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:text-red-50:hover {
+  --tw-text-opacity: 1;
+  color: rgb(254 242 242 / var(--tw-text-opacity, 1));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:focus\\:ring-destructive:focus {
+  --tw-ring-color: hsl(var(--destructive));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:focus\\:ring-red-400:focus {
+  --tw-ring-opacity: 1;
+  --tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:focus\\:ring-offset-red-600:focus {
+  --tw-ring-offset-color: #dc2626;
+}
+
+.peer\\/menu-button:hover ~ .peer-hover\\/menu-button\\:text-sidebar-accent-foreground {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {
+  cursor: not-allowed;
+}
+
+.peer:disabled ~ .peer-disabled\\:opacity-70 {
+  opacity: 0.7;
+}
+
+.has-\\[\\[data-variant\\=inset\\]\\]\\:bg-sidebar:has([data-variant=inset]) {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.has-\\[\\:disabled\\]\\:opacity-50:has(:disabled) {
+  opacity: 0.5;
+}
+
+.group\\/menu-item:has([data-sidebar=menu-action]) .group-has-\\[\\[data-sidebar\\=menu-action\\]\\]\\/menu-item\\:pr-8 {
+  padding-right: 2rem;
+}
+
+.aria-disabled\\:pointer-events-none[aria-disabled="true"] {
+  pointer-events: none;
+}
+
+.aria-disabled\\:opacity-50[aria-disabled="true"] {
+  opacity: 0.5;
+}
+
+.aria-selected\\:bg-accent[aria-selected="true"] {
+  background-color: hsl(var(--accent));
+}
+
+.aria-selected\\:bg-accent\\/50[aria-selected="true"] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.aria-selected\\:text-accent-foreground[aria-selected="true"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.aria-selected\\:text-muted-foreground[aria-selected="true"] {
+  color: hsl(var(--muted-foreground));
+}
+
+.aria-selected\\:opacity-100[aria-selected="true"] {
+  opacity: 1;
+}
+
+.aria-selected\\:opacity-30[aria-selected="true"] {
+  opacity: 0.3;
+}
+
+.data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled="true"] {
+  pointer-events: none;
+}
+
+.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {
+  pointer-events: none;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:h-px[data-panel-group-direction="vertical"] {
+  height: 1px;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:w-full[data-panel-group-direction="vertical"] {
+  width: 100%;
+}
+
+.data-\\[side\\=bottom\\]\\:translate-y-1[data-side="bottom"] {
+  --tw-translate-y: 0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[side\\=left\\]\\:-translate-x-1[data-side="left"] {
+  --tw-translate-x: -0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[side\\=right\\]\\:translate-x-1[data-side="right"] {
+  --tw-translate-x: 0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[side\\=top\\]\\:-translate-y-1[data-side="top"] {
+  --tw-translate-y: -0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[state\\=checked\\]\\:translate-x-5[data-state="checked"] {
+  --tw-translate-x: 1.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state="unchecked"] {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[swipe\\=cancel\\]\\:translate-x-0[data-swipe="cancel"] {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[swipe\\=end\\]\\:translate-x-\\[var\\(--radix-toast-swipe-end-x\\)\\][data-swipe="end"] {
+  --tw-translate-x: var(--radix-toast-swipe-end-x);
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[swipe\\=move\\]\\:translate-x-\\[var\\(--radix-toast-swipe-move-x\\)\\][data-swipe="move"] {
+  --tw-translate-x: var(--radix-toast-swipe-move-x);
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes accordion-up {
+  from {
+    height: var(--radix-accordion-content-height);
+  }
+
+  to {
+    height: 0;
+  }
+}
+
+.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state="closed"] {
+  animation: accordion-up 0.2s ease-out;
+}
+
+@keyframes accordion-down {
+  from {
+    height: 0;
+  }
+
+  to {
+    height: var(--radix-accordion-content-height);
+  }
+}
+
+.data-\\[state\\=open\\]\\:animate-accordion-down[data-state="open"] {
+  animation: accordion-down 0.2s ease-out;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:flex-col[data-panel-group-direction="vertical"] {
+  flex-direction: column;
+}
+
+.data-\\[state\\=active\\]\\:border-b-2[data-state="active"] {
+  border-bottom-width: 2px;
+}
+
+.data-\\[state\\=active\\]\\:border-purple-600[data-state="active"] {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 51 234 / var(--tw-border-opacity, 1));
+}
+
+.data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active="true"] {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.data-\\[active\\]\\:bg-accent\\/50[data-active] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.data-\\[selected\\=\\'true\\'\\]\\:bg-accent[data-selected='true'] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\\[state\\=active\\]\\:bg-background[data-state="active"] {
+  background-color: hsl(var(--background));
+}
+
+.data-\\[state\\=checked\\]\\:bg-primary[data-state="checked"] {
+  background-color: hsl(var(--primary));
+}
+
+.data-\\[state\\=on\\]\\:bg-accent[data-state="on"] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\\[state\\=open\\]\\:bg-accent[data-state="open"] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\\[state\\=open\\]\\:bg-accent\\/50[data-state="open"] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.data-\\[state\\=open\\]\\:bg-secondary[data-state="open"] {
+  background-color: hsl(var(--secondary));
+}
+
+.data-\\[state\\=selected\\]\\:bg-muted[data-state="selected"] {
+  background-color: hsl(var(--muted));
+}
+
+.data-\\[state\\=unchecked\\]\\:bg-input[data-state="unchecked"] {
+  background-color: hsl(var(--input));
+}
+
+.data-\\[state\\=active\\]\\:bg-gradient-to-r[data-state="active"] {
+  background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.data-\\[state\\=active\\]\\:from-purple-600[data-state="active"] {
+  --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.data-\\[state\\=active\\]\\:to-indigo-600[data-state="active"] {
+  --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position);
+}
+
+.data-\\[active\\=true\\]\\:font-medium[data-active="true"] {
+  font-weight: 500;
+}
+
+.data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active="true"] {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.data-\\[selected\\=true\\]\\:text-accent-foreground[data-selected="true"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\\[state\\=active\\]\\:text-foreground[data-state="active"] {
+  color: hsl(var(--foreground));
+}
+
+.data-\\[state\\=active\\]\\:text-white[data-state="active"] {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state="checked"] {
+  color: hsl(var(--primary-foreground));
+}
+
+.data-\\[state\\=on\\]\\:text-accent-foreground[data-state="on"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\\[state\\=open\\]\\:text-accent-foreground[data-state="open"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\\[state\\=open\\]\\:text-muted-foreground[data-state="open"] {
+  color: hsl(var(--muted-foreground));
+}
+
+.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled="true"] {
+  opacity: 0.5;
+}
+
+.data-\\[disabled\\]\\:opacity-50[data-disabled] {
+  opacity: 0.5;
+}
+
+.data-\\[state\\=open\\]\\:opacity-100[data-state="open"] {
+  opacity: 1;
+}
+
+.data-\\[state\\=active\\]\\:shadow-lg[data-state="active"] {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.data-\\[state\\=active\\]\\:shadow-sm[data-state="active"] {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.data-\\[swipe\\=move\\]\\:transition-none[data-swipe="move"] {
+  transition-property: none;
+}
+
+.data-\\[state\\=closed\\]\\:duration-300[data-state="closed"] {
+  transition-duration: 300ms;
+}
+
+.data-\\[state\\=open\\]\\:duration-500[data-state="open"] {
+  transition-duration: 500ms;
+}
+
+.data-\\[motion\\^\\=from-\\]\\:animate-in[data-motion^="from-"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\\[state\\=open\\]\\:animate-in[data-state="open"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\\[state\\=visible\\]\\:animate-in[data-state="visible"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\\[motion\\^\\=to-\\]\\:animate-out[data-motion^="to-"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[state\\=closed\\]\\:animate-out[data-state="closed"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[state\\=hidden\\]\\:animate-out[data-state="hidden"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[swipe\\=end\\]\\:animate-out[data-swipe="end"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[motion\\^\\=from-\\]\\:fade-in[data-motion^="from-"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\\[motion\\^\\=to-\\]\\:fade-out[data-motion^="to-"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\\[state\\=closed\\]\\:fade-out-0[data-state="closed"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\\[state\\=closed\\]\\:fade-out-80[data-state="closed"] {
+  --tw-exit-opacity: 0.8;
+}
+
+.data-\\[state\\=hidden\\]\\:fade-out[data-state="hidden"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\\[state\\=open\\]\\:fade-in-0[data-state="open"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\\[state\\=visible\\]\\:fade-in[data-state="visible"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\\[state\\=closed\\]\\:zoom-out-95[data-state="closed"] {
+  --tw-exit-scale: .95;
+}
+
+.data-\\[state\\=open\\]\\:zoom-in-90[data-state="open"] {
+  --tw-enter-scale: .9;
+}
+
+.data-\\[state\\=open\\]\\:zoom-in-95[data-state="open"] {
+  --tw-enter-scale: .95;
+}
+
+.data-\\[motion\\=from-end\\]\\:slide-in-from-right-52[data-motion="from-end"] {
+  --tw-enter-translate-x: 13rem;
+}
+
+.data-\\[motion\\=from-start\\]\\:slide-in-from-left-52[data-motion="from-start"] {
+  --tw-enter-translate-x: -13rem;
+}
+
+.data-\\[motion\\=to-end\\]\\:slide-out-to-right-52[data-motion="to-end"] {
+  --tw-exit-translate-x: 13rem;
+}
+
+.data-\\[motion\\=to-start\\]\\:slide-out-to-left-52[data-motion="to-start"] {
+  --tw-exit-translate-x: -13rem;
+}
+
+.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side="bottom"] {
+  --tw-enter-translate-y: -0.5rem;
+}
+
+.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side="left"] {
+  --tw-enter-translate-x: 0.5rem;
+}
+
+.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side="right"] {
+  --tw-enter-translate-x: -0.5rem;
+}
+
+.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side="top"] {
+  --tw-enter-translate-y: 0.5rem;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state="closed"] {
+  --tw-exit-translate-y: 100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state="closed"] {
+  --tw-exit-translate-x: -100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state="closed"] {
+  --tw-exit-translate-x: -50%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state="closed"] {
+  --tw-exit-translate-x: 100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-right-full[data-state="closed"] {
+  --tw-exit-translate-x: 100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state="closed"] {
+  --tw-exit-translate-y: -100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state="closed"] {
+  --tw-exit-translate-y: -48%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state="open"] {
+  --tw-enter-translate-y: 100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-left[data-state="open"] {
+  --tw-enter-translate-x: -100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state="open"] {
+  --tw-enter-translate-x: -50%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-right[data-state="open"] {
+  --tw-enter-translate-x: 100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-top[data-state="open"] {
+  --tw-enter-translate-y: -100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state="open"] {
+  --tw-enter-translate-y: -48%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-top-full[data-state="open"] {
+  --tw-enter-translate-y: -100%;
+}
+
+.data-\\[state\\=closed\\]\\:duration-300[data-state="closed"] {
+  animation-duration: 300ms;
+}
+
+.data-\\[state\\=open\\]\\:duration-500[data-state="open"] {
+  animation-duration: 500ms;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:left-0[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  left: 0px;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:h-1[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  height: 0.25rem;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:w-full[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  width: 100%;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:-translate-y-1\\/2[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:translate-x-0[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent:hover[data-state="open"] {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground:hover[data-state="open"] {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {
+  left: calc(var(--sidebar-width) * -1);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {
+  right: calc(var(--sidebar-width) * -1);
+}
+
+.group[data-side="left"] .group-data-\\[side\\=left\\]\\:-right-4 {
+  right: -1rem;
+}
+
+.group[data-side="right"] .group-data-\\[side\\=right\\]\\:left-0 {
+  left: 0px;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:-mt-8 {
+  margin-top: -2rem;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:hidden {
+  display: none;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:\\!size-8 {
+  width: 2rem !important;
+  height: 2rem !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:w-\\[--sidebar-width-icon\\] {
+  width: var(--sidebar-width-icon);
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)\\)\\] {
+  width: calc(var(--sidebar-width-icon) + 1rem);
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)_\\+2px\\)\\] {
+  width: calc(var(--sidebar-width-icon) + 1rem + 2px);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:w-0 {
+  width: 0px;
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0 {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-side="right"] .group-data-\\[side\\=right\\]\\:rotate-180 {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-state="open"] .group-data-\\[state\\=open\\]\\:rotate-180 {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden {
+  overflow: hidden;
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:rounded-lg {
+  border-radius: var(--radius);
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:border {
+  border-width: 1px;
+}
+
+.group[data-side="left"] .group-data-\\[side\\=left\\]\\:border-r {
+  border-right-width: 1px;
+}
+
+.group[data-side="right"] .group-data-\\[side\\=right\\]\\:border-l {
+  border-left-width: 1px;
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:border-sidebar-border {
+  border-color: hsl(var(--sidebar-border));
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:\\!p-0 {
+  padding: 0px !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:\\!p-2 {
+  padding: 0.5rem !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:opacity-0 {
+  opacity: 0;
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:shadow {
+  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full::after {
+  content: var(--tw-content);
+  left: 100%;
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:hover\\:bg-sidebar:hover {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.peer\\/menu-button[data-size="default"] ~ .peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5 {
+  top: 0.375rem;
+}
+
+.peer\\/menu-button[data-size="lg"] ~ .peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5 {
+  top: 0.625rem;
+}
+
+.peer\\/menu-button[data-size="sm"] ~ .peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1 {
+  top: 0.25rem;
+}
+
+.peer[data-variant="inset"] ~ .peer-data-\\[variant\\=inset\\]\\:min-h-\\[calc\\(100svh-theme\\(spacing\\.4\\)\\)\\] {
+  min-height: calc(100svh - 1rem);
+}
+
+.peer\\/menu-button[data-active="true"] ~ .peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.dark\\:border-destructive:is(.dark *) {
+  border-color: hsl(var(--destructive));
+}
+
+.dark\\:border-gray-700:is(.dark *) {
+  --tw-border-opacity: 1;
+  border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
+}
+
+.dark\\:bg-gray-800:is(.dark *) {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.dark\\:text-gray-300:is(.dark *) {
+  --tw-text-opacity: 1;
+  color: rgb(209 213 219 / var(--tw-text-opacity, 1));
+}
+
+.dark\\:hover\\:bg-gray-700:hover:is(.dark *) {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+@media (min-width: 640px) {
+  .sm\\:bottom-0 {
+    bottom: 0px;
+  }
+
+  .sm\\:right-0 {
+    right: 0px;
+  }
+
+  .sm\\:top-auto {
+    top: auto;
+  }
+
+  .sm\\:mt-0 {
+    margin-top: 0px;
+  }
+
+  .sm\\:inline {
+    display: inline;
+  }
+
+  .sm\\:flex {
+    display: flex;
+  }
+
+  .sm\\:max-w-sm {
+    max-width: 24rem;
+  }
+
+  .sm\\:flex-row {
+    flex-direction: row;
+  }
+
+  .sm\\:flex-col {
+    flex-direction: column;
+  }
+
+  .sm\\:items-center {
+    align-items: center;
+  }
+
+  .sm\\:justify-end {
+    justify-content: flex-end;
+  }
+
+  .sm\\:gap-2\\.5 {
+    gap: 0.625rem;
+  }
+
+  .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+    margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(1rem * var(--tw-space-x-reverse));
+    margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-y-reverse: 0;
+    margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+    margin-bottom: calc(0px * var(--tw-space-y-reverse));
+  }
+
+  .sm\\:rounded-lg {
+    border-radius: var(--radius);
+  }
+
+  .sm\\:px-6 {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+
+  .sm\\:text-left {
+    text-align: left;
+  }
+
+  .sm\\:text-base {
+    font-size: 1rem;
+    line-height: 1.5rem;
+  }
+
+  .data-\\[state\\=open\\]\\:sm\\:slide-in-from-bottom-full[data-state="open"] {
+    --tw-enter-translate-y: 100%;
+  }
+}
+
+@media (min-width: 768px) {
+  .md\\:absolute {
+    position: absolute;
+  }
+
+  .md\\:block {
+    display: block;
+  }
+
+  .md\\:flex {
+    display: flex;
+  }
+
+  .md\\:w-\\[var\\(--radix-navigation-menu-viewport-width\\)\\] {
+    width: var(--radix-navigation-menu-viewport-width);
+  }
+
+  .md\\:w-auto {
+    width: auto;
+  }
+
+  .md\\:max-w-\\[420px\\] {
+    max-width: 420px;
+  }
+
+  .md\\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .md\\:grid-cols-4 {
+    grid-template-columns: repeat(4, minmax(0, 1fr));
+  }
+
+  .md\\:text-sm {
+    font-size: 0.875rem;
+    line-height: 1.25rem;
+  }
+
+  .md\\:opacity-0 {
+    opacity: 0;
+  }
+
+  .after\\:md\\:hidden::after {
+    content: var(--tw-content);
+    display: none;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:m-2 {
+    margin: 0.5rem;
+  }
+
+  .peer[data-state="collapsed"][data-variant="inset"] ~ .md\\:peer-data-\\[state\\=collapsed\\]\\:peer-data-\\[variant\\=inset\\]\\:ml-2 {
+    margin-left: 0.5rem;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:ml-0 {
+    margin-left: 0px;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl {
+    border-radius: 0.75rem;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:shadow {
+    --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+    --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+  }
+}
+
+@media (min-width: 1024px) {
+  .lg\\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .lg\\:px-8 {
+    padding-left: 2rem;
+    padding-right: 2rem;
+  }
+}
+
+.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {
+  background-color: hsl(var(--accent));
+}
+
+.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {
+  border-top-left-radius: calc(var(--radius) - 2px);
+  border-bottom-left-radius: calc(var(--radius) - 2px);
+}
+
+.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.\\[\\&\\:has\\(\\[aria-selected\\]\\.day-outside\\)\\]\\:bg-accent\\/50:has([aria-selected].day-outside) {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.\\[\\&\\:has\\(\\[aria-selected\\]\\.day-range-end\\)\\]\\:rounded-r-md:has([aria-selected].day-range-end) {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=checkbox]) {
+  padding-right: 0px;
+}
+
+.\\[\\&\\>button\\]\\:hidden>button {
+  display: none;
+}
+
+.\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.\\[\\&\\>span\\]\\:line-clamp-1>span {
+  overflow: hidden;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 1;
+}
+
+.\\[\\&\\>svg\\+div\\]\\:translate-y-\\[-3px\\]>svg+div {
+  --tw-translate-y: -3px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\\[\\&\\>svg\\]\\:absolute>svg {
+  position: absolute;
+}
+
+.\\[\\&\\>svg\\]\\:left-4>svg {
+  left: 1rem;
+}
+
+.\\[\\&\\>svg\\]\\:top-4>svg {
+  top: 1rem;
+}
+
+.\\[\\&\\>svg\\]\\:size-3\\.5>svg {
+  width: 0.875rem;
+  height: 0.875rem;
+}
+
+.\\[\\&\\>svg\\]\\:size-4>svg {
+  width: 1rem;
+  height: 1rem;
+}
+
+.\\[\\&\\>svg\\]\\:h-2\\.5>svg {
+  height: 0.625rem;
+}
+
+.\\[\\&\\>svg\\]\\:h-3>svg {
+  height: 0.75rem;
+}
+
+.\\[\\&\\>svg\\]\\:w-2\\.5>svg {
+  width: 0.625rem;
+}
+
+.\\[\\&\\>svg\\]\\:w-3>svg {
+  width: 0.75rem;
+}
+
+.\\[\\&\\>svg\\]\\:shrink-0>svg {
+  flex-shrink: 0;
+}
+
+.\\[\\&\\>svg\\]\\:text-destructive>svg {
+  color: hsl(var(--destructive));
+}
+
+.\\[\\&\\>svg\\]\\:text-foreground>svg {
+  color: hsl(var(--foreground));
+}
+
+.\\[\\&\\>svg\\]\\:text-muted-foreground>svg {
+  color: hsl(var(--muted-foreground));
+}
+
+.\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground>svg {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.\\[\\&\\>svg\\~\\*\\]\\:pl-7>svg~* {
+  padding-left: 1.75rem;
+}
+
+.\\[\\&\\>tr\\]\\:last\\:border-b-0:last-child>tr {
+  border-bottom-width: 0px;
+}
+
+.\\[\\&\\[data-panel-group-direction\\=vertical\\]\\>div\\]\\:rotate-90[data-panel-group-direction=vertical]>div {
+  --tw-rotate: 90deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground .recharts-cartesian-axis-tick text {
+  fill: hsl(var(--muted-foreground));
+}
+
+.\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 .recharts-cartesian-grid line[stroke='#ccc'] {
+  stroke: hsl(var(--border) / 0.5);
+}
+
+.\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border .recharts-curve.recharts-tooltip-cursor {
+  stroke: hsl(var(--border));
+}
+
+.\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-dot[stroke='#fff'] {
+  stroke: transparent;
+}
+
+.\\[\\&_\\.recharts-layer\\]\\:outline-none .recharts-layer {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-polar-grid [stroke='#ccc'] {
+  stroke: hsl(var(--border));
+}
+
+.\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted .recharts-radial-bar-background-sector {
+  fill: hsl(var(--muted));
+}
+
+.\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted .recharts-rectangle.recharts-tooltip-cursor {
+  fill: hsl(var(--muted));
+}
+
+.\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-reference-line [stroke='#ccc'] {
+  stroke: hsl(var(--border));
+}
+
+.\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-sector[stroke='#fff'] {
+  stroke: transparent;
+}
+
+.\\[\\&_\\.recharts-sector\\]\\:outline-none .recharts-sector {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\\[\\&_\\.recharts-surface\\]\\:outline-none .recharts-surface {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {
+  padding-top: 0.375rem;
+  padding-bottom: 0.375rem;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {
+  font-weight: 500;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {
+  color: hsl(var(--muted-foreground));
+}
+
+.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {
+  padding-top: 0px;
+}
+
+.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {
+  height: 1.25rem;
+}
+
+.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {
+  width: 1.25rem;
+}
+
+.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {
+  height: 3rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {
+  height: 1.25rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {
+  width: 1.25rem;
+}
+
+.\\[\\&_p\\]\\:leading-relaxed p {
+  line-height: 1.625;
+}
+
+.\\[\\&_svg\\]\\:pointer-events-none svg {
+  pointer-events: none;
+}
+
+.\\[\\&_svg\\]\\:size-4 svg {
+  width: 1rem;
+  height: 1rem;
+}
+
+.\\[\\&_svg\\]\\:shrink-0 svg {
+  flex-shrink: 0;
+}
+
+.\\[\\&_tr\\:last-child\\]\\:border-0 tr:last-child {
+  border-width: 0px;
+}
+
+.\\[\\&_tr\\]\\:border-b tr {
+  border-bottom-width: 1px;
+}
+
+[data-side=left][data-collapsible=offcanvas] .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2 {
+  right: -0.5rem;
+}
+
+[data-side=left][data-state=collapsed] .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize {
+  cursor: e-resize;
+}
+
+[data-side=left] .\\[\\[data-side\\=left\\]_\\&\\]\\:cursor-w-resize {
+  cursor: w-resize;
+}
+
+[data-side=right][data-collapsible=offcanvas] .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2 {
+  left: -0.5rem;
+}
+
+[data-side=right][data-state=collapsed] .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize {
+  cursor: w-resize;
+}
+
+[data-side=right] .\\[\\[data-side\\=right\\]_\\&\\]\\:cursor-e-resize {
+  cursor: e-resize;
+}
+`;window.__BENCHMARK_CSS__=cse;function s1(){try{if(typeof window>"u")return;const e=document.querySelectorAll('[data-react-component="benchmark-dashboard"]');if(e.length===0)return;e.forEach((t,n)=>{var r;try{const a=t;if(a.dataset.reactInitialized==="true")return;const o={apiBase:a.dataset.apiBase,initialVersion:a.dataset.version,theme:a.dataset.theme||"light",containerClassName:a.dataset.containerClass||"",containerId:`benchmark-dashboard-${n}`,features:{header:a.dataset.showHeader==="true",versionSelector:a.dataset.showVersionSelector!=="false",summaryCards:a.dataset.showSummaryCards!=="false",tabs:((r=a.dataset.tabs)==null?void 0:r.split(",").map(s=>s.trim()))||["overview","latency","resources"]}};Gc.createRoot(a).render(b.jsx(C.StrictMode,{children:b.jsx(use,{...o})})),a.dataset.reactInitialized="true"}catch(a){console.error(`Error initializing benchmark dashboard ${n+1}:`,a)}})}catch(e){console.error("Error in benchmark dashboard initialization:",e)}}function K2(){setTimeout(()=>{s1()},100)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",K2):K2();window.addEventListener("load",()=>{setTimeout(s1,200)});window.initializeBenchmarkDashboardShadow=s1;
diff --git a/site/static/js/hugo-benchmark-dashboard.js b/site/static/js/hugo-benchmark-dashboard.js
new file mode 100644
index 000000000..d61681ff9
--- /dev/null
+++ b/site/static/js/hugo-benchmark-dashboard.js
@@ -0,0 +1,4923 @@
+var lO=Object.defineProperty;var Yg=e=>{throw TypeError(e)};var uO=(e,t,n)=>t in e?lO(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Qg=(e,t,n)=>uO(e,typeof t!="symbol"?t+"":t,n),Nd=(e,t,n)=>t.has(e)||Yg("Cannot "+n);var B=(e,t,n)=>(Nd(e,t,"read from private field"),n?n.call(e):t.get(e)),me=(e,t,n)=>t.has(e)?Yg("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),ne=(e,t,n,r)=>(Nd(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),gt=(e,t,n)=>(Nd(e,t,"access private method"),n);var Nu=(e,t,n,r)=>({set _(a){ne(e,t,a,n)},get _(){return B(e,t,r)}});function cO(e,t){for(var n=0;n<t.length;n++){const r=t[n];if(typeof r!="string"&&!Array.isArray(r)){for(const a in r)if(a!=="default"&&!(a in e)){const o=Object.getOwnPropertyDescriptor(r,a);o&&Object.defineProperty(e,a,o.get?o:{enumerable:!0,get:()=>r[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var Mu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function _e(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var B2={exports:{}},yf={},H2={exports:{}},ce={};/**
+ * @license React
+ * react.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var yu=Symbol.for("react.element"),pO=Symbol.for("react.portal"),fO=Symbol.for("react.fragment"),dO=Symbol.for("react.strict_mode"),mO=Symbol.for("react.profiler"),hO=Symbol.for("react.provider"),vO=Symbol.for("react.context"),yO=Symbol.for("react.forward_ref"),gO=Symbol.for("react.suspense"),xO=Symbol.for("react.memo"),wO=Symbol.for("react.lazy"),Zg=Symbol.iterator;function bO(e){return e===null||typeof e!="object"?null:(e=Zg&&e[Zg]||e["@@iterator"],typeof e=="function"?e:null)}var G2={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},U2=Object.assign,W2={};function ns(e,t,n){this.props=e,this.context=t,this.refs=W2,this.updater=n||G2}ns.prototype.isReactComponent={};ns.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};ns.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function q2(){}q2.prototype=ns.prototype;function kv(e,t,n){this.props=e,this.context=t,this.refs=W2,this.updater=n||G2}var Cv=kv.prototype=new q2;Cv.constructor=kv;U2(Cv,ns.prototype);Cv.isPureReactComponent=!0;var Jg=Array.isArray,V2=Object.prototype.hasOwnProperty,_v={current:null},K2={key:!0,ref:!0,__self:!0,__source:!0};function X2(e,t,n){var r,a={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)V2.call(t,r)&&!K2.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(s===1)a.children=n;else if(1<s){for(var l=Array(s),u=0;u<s;u++)l[u]=arguments[u+2];a.children=l}if(e&&e.defaultProps)for(r in s=e.defaultProps,s)a[r]===void 0&&(a[r]=s[r]);return{$$typeof:yu,type:e,key:o,ref:i,props:a,_owner:_v.current}}function SO(e,t){return{$$typeof:yu,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function Av(e){return typeof e=="object"&&e!==null&&e.$$typeof===yu}function PO(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var e1=/\/+/g;function Md(e,t){return typeof e=="object"&&e!==null&&e.key!=null?PO(""+e.key):t.toString(36)}function xc(e,t,n,r,a){var o=typeof e;(o==="undefined"||o==="boolean")&&(e=null);var i=!1;if(e===null)i=!0;else switch(o){case"string":case"number":i=!0;break;case"object":switch(e.$$typeof){case yu:case pO:i=!0}}if(i)return i=e,a=a(i),e=r===""?"."+Md(i,0):r,Jg(a)?(n="",e!=null&&(n=e.replace(e1,"$&/")+"/"),xc(a,t,n,"",function(u){return u})):a!=null&&(Av(a)&&(a=SO(a,n+(!a.key||i&&i.key===a.key?"":(""+a.key).replace(e1,"$&/")+"/")+e)),t.push(a)),1;if(i=0,r=r===""?".":r+":",Jg(e))for(var s=0;s<e.length;s++){o=e[s];var l=r+Md(o,s);i+=xc(o,t,n,l,a)}else if(l=bO(e),typeof l=="function")for(e=l.call(e),s=0;!(o=e.next()).done;)o=o.value,l=r+Md(o,s++),i+=xc(o,t,n,l,a);else if(o==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return i}function Ru(e,t,n){if(e==null)return e;var r=[],a=0;return xc(e,r,"","",function(o){return t.call(n,o,a++)}),r}function OO(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var Dt={current:null},wc={transition:null},kO={ReactCurrentDispatcher:Dt,ReactCurrentBatchConfig:wc,ReactCurrentOwner:_v};function Y2(){throw Error("act(...) is not supported in production builds of React.")}ce.Children={map:Ru,forEach:function(e,t,n){Ru(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return Ru(e,function(){t++}),t},toArray:function(e){return Ru(e,function(t){return t})||[]},only:function(e){if(!Av(e))throw Error("React.Children.only expected to receive a single React element child.");return e}};ce.Component=ns;ce.Fragment=fO;ce.Profiler=mO;ce.PureComponent=kv;ce.StrictMode=dO;ce.Suspense=gO;ce.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=kO;ce.act=Y2;ce.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var r=U2({},e.props),a=e.key,o=e.ref,i=e._owner;if(t!=null){if(t.ref!==void 0&&(o=t.ref,i=_v.current),t.key!==void 0&&(a=""+t.key),e.type&&e.type.defaultProps)var s=e.type.defaultProps;for(l in t)V2.call(t,l)&&!K2.hasOwnProperty(l)&&(r[l]=t[l]===void 0&&s!==void 0?s[l]:t[l])}var l=arguments.length-2;if(l===1)r.children=n;else if(1<l){s=Array(l);for(var u=0;u<l;u++)s[u]=arguments[u+2];r.children=s}return{$$typeof:yu,type:e.type,key:a,ref:o,props:r,_owner:i}};ce.createContext=function(e){return e={$$typeof:vO,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:hO,_context:e},e.Consumer=e};ce.createElement=X2;ce.createFactory=function(e){var t=X2.bind(null,e);return t.type=e,t};ce.createRef=function(){return{current:null}};ce.forwardRef=function(e){return{$$typeof:yO,render:e}};ce.isValidElement=Av;ce.lazy=function(e){return{$$typeof:wO,_payload:{_status:-1,_result:e},_init:OO}};ce.memo=function(e,t){return{$$typeof:xO,type:e,compare:t===void 0?null:t}};ce.startTransition=function(e){var t=wc.transition;wc.transition={};try{e()}finally{wc.transition=t}};ce.unstable_act=Y2;ce.useCallback=function(e,t){return Dt.current.useCallback(e,t)};ce.useContext=function(e){return Dt.current.useContext(e)};ce.useDebugValue=function(){};ce.useDeferredValue=function(e){return Dt.current.useDeferredValue(e)};ce.useEffect=function(e,t){return Dt.current.useEffect(e,t)};ce.useId=function(){return Dt.current.useId()};ce.useImperativeHandle=function(e,t,n){return Dt.current.useImperativeHandle(e,t,n)};ce.useInsertionEffect=function(e,t){return Dt.current.useInsertionEffect(e,t)};ce.useLayoutEffect=function(e,t){return Dt.current.useLayoutEffect(e,t)};ce.useMemo=function(e,t){return Dt.current.useMemo(e,t)};ce.useReducer=function(e,t,n){return Dt.current.useReducer(e,t,n)};ce.useRef=function(e){return Dt.current.useRef(e)};ce.useState=function(e){return Dt.current.useState(e)};ce.useSyncExternalStore=function(e,t,n){return Dt.current.useSyncExternalStore(e,t,n)};ce.useTransition=function(){return Dt.current.useTransition()};ce.version="18.3.1";H2.exports=ce;var k=H2.exports;const E=_e(k),Q2=cO({__proto__:null,default:E},[k]);/**
+ * @license React
+ * react-jsx-runtime.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var CO=k,_O=Symbol.for("react.element"),AO=Symbol.for("react.fragment"),EO=Object.prototype.hasOwnProperty,TO=CO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,jO={key:!0,ref:!0,__self:!0,__source:!0};function Z2(e,t,n){var r,a={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)EO.call(t,r)&&!jO.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)a[r]===void 0&&(a[r]=t[r]);return{$$typeof:_O,type:e,key:o,ref:i,props:a,_owner:TO.current}}yf.Fragment=AO;yf.jsx=Z2;yf.jsxs=Z2;B2.exports=yf;var b=B2.exports,Ic={},J2={exports:{}},an={},e5={exports:{}},t5={};/**
+ * @license React
+ * scheduler.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */(function(e){function t($,D){var H=$.length;$.push(D);e:for(;0<H;){var W=H-1>>>1,G=$[W];if(0<a(G,D))$[W]=D,$[H]=G,H=W;else break e}}function n($){return $.length===0?null:$[0]}function r($){if($.length===0)return null;var D=$[0],H=$.pop();if(H!==D){$[0]=H;e:for(var W=0,G=$.length,Z=G>>>1;W<Z;){var re=2*(W+1)-1,ve=$[re],be=re+1,J=$[be];if(0>a(ve,H))be<G&&0>a(J,ve)?($[W]=J,$[be]=H,W=be):($[W]=ve,$[re]=H,W=re);else if(be<G&&0>a(J,H))$[W]=J,$[be]=H,W=be;else break e}}return D}function a($,D){var H=$.sortIndex-D.sortIndex;return H!==0?H:$.id-D.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,s=i.now();e.unstable_now=function(){return i.now()-s}}var l=[],u=[],p=1,c=null,f=3,d=!1,h=!1,m=!1,g=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,y=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function x($){for(var D=n(u);D!==null;){if(D.callback===null)r(u);else if(D.startTime<=$)r(u),D.sortIndex=D.expirationTime,t(l,D);else break;D=n(u)}}function S($){if(m=!1,x($),!h)if(n(l)!==null)h=!0,R(w);else{var D=n(u);D!==null&&L(S,D.startTime-$)}}function w($,D){h=!1,m&&(m=!1,v(C),C=-1),d=!0;var H=f;try{for(x(D),c=n(l);c!==null&&(!(c.expirationTime>D)||$&&!A());){var W=c.callback;if(typeof W=="function"){c.callback=null,f=c.priorityLevel;var G=W(c.expirationTime<=D);D=e.unstable_now(),typeof G=="function"?c.callback=G:c===n(l)&&r(l),x(D)}else r(l);c=n(l)}if(c!==null)var Z=!0;else{var re=n(u);re!==null&&L(S,re.startTime-D),Z=!1}return Z}finally{c=null,f=H,d=!1}}var P=!1,O=null,C=-1,_=5,T=-1;function A(){return!(e.unstable_now()-T<_)}function j(){if(O!==null){var $=e.unstable_now();T=$;var D=!0;try{D=O(!0,$)}finally{D?N():(P=!1,O=null)}}else P=!1}var N;if(typeof y=="function")N=function(){y(j)};else if(typeof MessageChannel<"u"){var M=new MessageChannel,I=M.port2;M.port1.onmessage=j,N=function(){I.postMessage(null)}}else N=function(){g(j,0)};function R($){O=$,P||(P=!0,N())}function L($,D){C=g(function(){$(e.unstable_now())},D)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function($){$.callback=null},e.unstable_continueExecution=function(){h||d||(h=!0,R(w))},e.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"):_=0<$?Math.floor(1e3/$):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_getFirstCallbackNode=function(){return n(l)},e.unstable_next=function($){switch(f){case 1:case 2:case 3:var D=3;break;default:D=f}var H=f;f=D;try{return $()}finally{f=H}},e.unstable_pauseExecution=function(){},e.unstable_requestPaint=function(){},e.unstable_runWithPriority=function($,D){switch($){case 1:case 2:case 3:case 4:case 5:break;default:$=3}var H=f;f=$;try{return D()}finally{f=H}},e.unstable_scheduleCallback=function($,D,H){var W=e.unstable_now();switch(typeof H=="object"&&H!==null?(H=H.delay,H=typeof H=="number"&&0<H?W+H:W):H=W,$){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=H+G,$={id:p++,callback:D,priorityLevel:$,startTime:H,expirationTime:G,sortIndex:-1},H>W?($.sortIndex=H,t(u,$),n(l)===null&&$===n(u)&&(m?(v(C),C=-1):m=!0,L(S,H-W))):($.sortIndex=G,t(l,$),h||d||(h=!0,R(w))),$},e.unstable_shouldYield=A,e.unstable_wrapCallback=function($){var D=f;return function(){var H=f;f=D;try{return $.apply(this,arguments)}finally{f=H}}}})(t5);e5.exports=t5;var $O=e5.exports;/**
+ * @license React
+ * react-dom.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var NO=k,rn=$O;function U(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var n5=new Set,pl={};function Oo(e,t){Pi(e,t),Pi(e+"Capture",t)}function Pi(e,t){for(pl[e]=t,e=0;e<t.length;e++)n5.add(t[e])}var Nr=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),qm=Object.prototype.hasOwnProperty,MO=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,t1={},n1={};function RO(e){return qm.call(n1,e)?!0:qm.call(t1,e)?!1:MO.test(e)?n1[e]=!0:(t1[e]=!0,!1)}function IO(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function DO(e,t,n,r){if(t===null||typeof t>"u"||IO(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Lt(e,t,n,r,a,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var yt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){yt[e]=new Lt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];yt[t]=new Lt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){yt[e]=new Lt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){yt[e]=new Lt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){yt[e]=new Lt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){yt[e]=new Lt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){yt[e]=new Lt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){yt[e]=new Lt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){yt[e]=new Lt(e,5,!1,e.toLowerCase(),null,!1,!1)});var Ev=/[\-:]([a-z])/g;function Tv(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(Ev,Tv);yt[t]=new Lt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(Ev,Tv);yt[t]=new Lt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(Ev,Tv);yt[t]=new Lt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){yt[e]=new Lt(e,1,!1,e.toLowerCase(),null,!1,!1)});yt.xlinkHref=new Lt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){yt[e]=new Lt(e,1,!1,e.toLowerCase(),null,!0,!0)});function jv(e,t,n,r){var a=yt.hasOwnProperty(t)?yt[t]:null;(a!==null?a.type!==0:r||!(2<t.length)||t[0]!=="o"&&t[0]!=="O"||t[1]!=="n"&&t[1]!=="N")&&(DO(t,n,a,r)&&(n=null),r||a===null?RO(t)&&(n===null?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=n===null?a.type===3?!1:"":n:(t=a.attributeName,r=a.attributeNamespace,n===null?e.removeAttribute(t):(a=a.type,n=a===3||a===4&&n===!0?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}var Hr=NO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Iu=Symbol.for("react.element"),Fo=Symbol.for("react.portal"),zo=Symbol.for("react.fragment"),$v=Symbol.for("react.strict_mode"),Vm=Symbol.for("react.profiler"),r5=Symbol.for("react.provider"),a5=Symbol.for("react.context"),Nv=Symbol.for("react.forward_ref"),Km=Symbol.for("react.suspense"),Xm=Symbol.for("react.suspense_list"),Mv=Symbol.for("react.memo"),Zr=Symbol.for("react.lazy"),o5=Symbol.for("react.offscreen"),r1=Symbol.iterator;function ks(e){return e===null||typeof e!="object"?null:(e=r1&&e[r1]||e["@@iterator"],typeof e=="function"?e:null)}var Ue=Object.assign,Rd;function Ws(e){if(Rd===void 0)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);Rd=t&&t[1]||""}return`
+`+Rd+e}var Id=!1;function Dd(e,t){if(!e||Id)return"";Id=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(t,[])}catch(u){var r=u}Reflect.construct(e,[],t)}else{try{t.call()}catch(u){r=u}e.call(t.prototype)}else{try{throw Error()}catch(u){r=u}e()}}catch(u){if(u&&r&&typeof u.stack=="string"){for(var a=u.stack.split(`
+`),o=r.stack.split(`
+`),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(i!==1||s!==1)do if(i--,s--,0>s||a[i]!==o[s]){var l=`
+`+a[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}while(1<=i&&0<=s);break}}}finally{Id=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Ws(e):""}function LO(e){switch(e.tag){case 5:return Ws(e.type);case 16:return Ws("Lazy");case 13:return Ws("Suspense");case 19:return Ws("SuspenseList");case 0:case 2:case 15:return e=Dd(e.type,!1),e;case 11:return e=Dd(e.type.render,!1),e;case 1:return e=Dd(e.type,!0),e;default:return""}}function Ym(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case zo:return"Fragment";case Fo:return"Portal";case Vm:return"Profiler";case $v:return"StrictMode";case Km:return"Suspense";case Xm:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case a5:return(e.displayName||"Context")+".Consumer";case r5:return(e._context.displayName||"Context")+".Provider";case Nv:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Mv:return t=e.displayName||null,t!==null?t:Ym(e.type)||"Memo";case Zr:t=e._payload,e=e._init;try{return Ym(e(t))}catch{}}return null}function FO(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Ym(t);case 8:return t===$v?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function Sa(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function i5(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function zO(e){var t=i5(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Du(e){e._valueTracker||(e._valueTracker=zO(e))}function s5(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=i5(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Dc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function Qm(e,t){var n=t.checked;return Ue({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function a1(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=Sa(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function l5(e,t){t=t.checked,t!=null&&jv(e,"checked",t,!1)}function Zm(e,t){l5(e,t);var n=Sa(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Jm(e,t.type,n):t.hasOwnProperty("defaultValue")&&Jm(e,t.type,Sa(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function o1(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Jm(e,t,n){(t!=="number"||Dc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var qs=Array.isArray;function ei(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Sa(n),t=null,a=0;a<e.length;a++){if(e[a].value===n){e[a].selected=!0,r&&(e[a].defaultSelected=!0);return}t!==null||e[a].disabled||(t=e[a])}t!==null&&(t.selected=!0)}}function eh(e,t){if(t.dangerouslySetInnerHTML!=null)throw Error(U(91));return Ue({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function i1(e,t){var n=t.value;if(n==null){if(n=t.children,t=t.defaultValue,n!=null){if(t!=null)throw Error(U(92));if(qs(n)){if(1<n.length)throw Error(U(93));n=n[0]}t=n}t==null&&(t=""),n=t}e._wrapperState={initialValue:Sa(n)}}function u5(e,t){var n=Sa(t.value),r=Sa(t.defaultValue);n!=null&&(n=""+n,n!==e.value&&(e.value=n),t.defaultValue==null&&e.defaultValue!==n&&(e.defaultValue=n)),r!=null&&(e.defaultValue=""+r)}function s1(e){var t=e.textContent;t===e._wrapperState.initialValue&&t!==""&&t!==null&&(e.value=t)}function c5(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function th(e,t){return e==null||e==="http://www.w3.org/1999/xhtml"?c5(t):e==="http://www.w3.org/2000/svg"&&t==="foreignObject"?"http://www.w3.org/1999/xhtml":e}var Lu,p5=function(e){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(t,n,r,a){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,a)})}:e}(function(e,t){if(e.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in e)e.innerHTML=t;else{for(Lu=Lu||document.createElement("div"),Lu.innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=Lu.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function fl(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Qs={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},BO=["Webkit","ms","Moz","O"];Object.keys(Qs).forEach(function(e){BO.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Qs[t]=Qs[e]})});function f5(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Qs.hasOwnProperty(e)&&Qs[e]?(""+t).trim():t+"px"}function d5(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,a=f5(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}var HO=Ue({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function nh(e,t){if(t){if(HO[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(U(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(U(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(U(61))}if(t.style!=null&&typeof t.style!="object")throw Error(U(62))}}function rh(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var ah=null;function Rv(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var oh=null,ti=null,ni=null;function l1(e){if(e=wu(e)){if(typeof oh!="function")throw Error(U(280));var t=e.stateNode;t&&(t=Sf(t),oh(e.stateNode,e.type,t))}}function m5(e){ti?ni?ni.push(e):ni=[e]:ti=e}function h5(){if(ti){var e=ti,t=ni;if(ni=ti=null,l1(e),t)for(e=0;e<t.length;e++)l1(t[e])}}function v5(e,t){return e(t)}function y5(){}var Ld=!1;function g5(e,t,n){if(Ld)return e(t,n);Ld=!0;try{return v5(e,t,n)}finally{Ld=!1,(ti!==null||ni!==null)&&(y5(),h5())}}function dl(e,t){var n=e.stateNode;if(n===null)return null;var r=Sf(n);if(r===null)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(e=e.type,r=!(e==="button"||e==="input"||e==="select"||e==="textarea")),e=!r;break e;default:e=!1}if(e)return null;if(n&&typeof n!="function")throw Error(U(231,t,typeof n));return n}var ih=!1;if(Nr)try{var Cs={};Object.defineProperty(Cs,"passive",{get:function(){ih=!0}}),window.addEventListener("test",Cs,Cs),window.removeEventListener("test",Cs,Cs)}catch{ih=!1}function GO(e,t,n,r,a,o,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(p){this.onError(p)}}var Zs=!1,Lc=null,Fc=!1,sh=null,UO={onError:function(e){Zs=!0,Lc=e}};function WO(e,t,n,r,a,o,i,s,l){Zs=!1,Lc=null,GO.apply(UO,arguments)}function qO(e,t,n,r,a,o,i,s,l){if(WO.apply(this,arguments),Zs){if(Zs){var u=Lc;Zs=!1,Lc=null}else throw Error(U(198));Fc||(Fc=!0,sh=u)}}function ko(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do t=e,t.flags&4098&&(n=t.return),e=t.return;while(e)}return t.tag===3?n:null}function x5(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function u1(e){if(ko(e)!==e)throw Error(U(188))}function VO(e){var t=e.alternate;if(!t){if(t=ko(e),t===null)throw Error(U(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var o=a.alternate;if(o===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===o.child){for(o=a.child;o;){if(o===n)return u1(a),e;if(o===r)return u1(a),t;o=o.sibling}throw Error(U(188))}if(n.return!==r.return)n=a,r=o;else{for(var i=!1,s=a.child;s;){if(s===n){i=!0,n=a,r=o;break}if(s===r){i=!0,r=a,n=o;break}s=s.sibling}if(!i){for(s=o.child;s;){if(s===n){i=!0,n=o,r=a;break}if(s===r){i=!0,r=o,n=a;break}s=s.sibling}if(!i)throw Error(U(189))}}if(n.alternate!==r)throw Error(U(190))}if(n.tag!==3)throw Error(U(188));return n.stateNode.current===n?e:t}function w5(e){return e=VO(e),e!==null?b5(e):null}function b5(e){if(e.tag===5||e.tag===6)return e;for(e=e.child;e!==null;){var t=b5(e);if(t!==null)return t;e=e.sibling}return null}var S5=rn.unstable_scheduleCallback,c1=rn.unstable_cancelCallback,KO=rn.unstable_shouldYield,XO=rn.unstable_requestPaint,Xe=rn.unstable_now,YO=rn.unstable_getCurrentPriorityLevel,Iv=rn.unstable_ImmediatePriority,P5=rn.unstable_UserBlockingPriority,zc=rn.unstable_NormalPriority,QO=rn.unstable_LowPriority,O5=rn.unstable_IdlePriority,gf=null,sr=null;function ZO(e){if(sr&&typeof sr.onCommitFiberRoot=="function")try{sr.onCommitFiberRoot(gf,e,void 0,(e.current.flags&128)===128)}catch{}}var Bn=Math.clz32?Math.clz32:tk,JO=Math.log,ek=Math.LN2;function tk(e){return e>>>=0,e===0?32:31-(JO(e)/ek|0)|0}var Fu=64,zu=4194304;function Vs(e){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: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 e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Bc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var s=i&~a;s!==0?r=Vs(s):(o&=i,o!==0&&(r=Vs(o)))}else i=n&~a,i!==0?r=Vs(i):o!==0&&(r=Vs(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&a)&&(a=r&-r,o=t&-t,a>=o||a===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0<t;)n=31-Bn(t),a=1<<n,r|=e[n],t&=~a;return r}function nk(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64: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:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function rk(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-Bn(o),s=1<<i,l=a[i];l===-1?(!(s&n)||s&r)&&(a[i]=nk(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}function lh(e){return e=e.pendingLanes&-1073741825,e!==0?e:e&1073741824?1073741824:0}function k5(){var e=Fu;return Fu<<=1,!(Fu&4194240)&&(Fu=64),e}function Fd(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function gu(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Bn(t),e[t]=n}function ak(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-Bn(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}function Dv(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-Bn(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var Oe=0;function C5(e){return e&=-e,1<e?4<e?e&268435455?16:536870912:4:1}var _5,Lv,A5,E5,T5,uh=!1,Bu=[],da=null,ma=null,ha=null,ml=new Map,hl=new Map,ta=[],ok="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function p1(e,t){switch(e){case"focusin":case"focusout":da=null;break;case"dragenter":case"dragleave":ma=null;break;case"mouseover":case"mouseout":ha=null;break;case"pointerover":case"pointerout":ml.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":hl.delete(t.pointerId)}}function _s(e,t,n,r,a,o){return e===null||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},t!==null&&(t=wu(t),t!==null&&Lv(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,a!==null&&t.indexOf(a)===-1&&t.push(a),e)}function ik(e,t,n,r,a){switch(t){case"focusin":return da=_s(da,e,t,n,r,a),!0;case"dragenter":return ma=_s(ma,e,t,n,r,a),!0;case"mouseover":return ha=_s(ha,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return ml.set(o,_s(ml.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,hl.set(o,_s(hl.get(o)||null,e,t,n,r,a)),!0}return!1}function j5(e){var t=qa(e.target);if(t!==null){var n=ko(t);if(n!==null){if(t=n.tag,t===13){if(t=x5(n),t!==null){e.blockedOn=t,T5(e.priority,function(){A5(n)});return}}else if(t===3&&n.stateNode.current.memoizedState.isDehydrated){e.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}e.blockedOn=null}function bc(e){if(e.blockedOn!==null)return!1;for(var t=e.targetContainers;0<t.length;){var n=ch(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(n===null){n=e.nativeEvent;var r=new n.constructor(n.type,n);ah=r,n.target.dispatchEvent(r),ah=null}else return t=wu(n),t!==null&&Lv(t),e.blockedOn=n,!1;t.shift()}return!0}function f1(e,t,n){bc(e)&&n.delete(t)}function sk(){uh=!1,da!==null&&bc(da)&&(da=null),ma!==null&&bc(ma)&&(ma=null),ha!==null&&bc(ha)&&(ha=null),ml.forEach(f1),hl.forEach(f1)}function As(e,t){e.blockedOn===t&&(e.blockedOn=null,uh||(uh=!0,rn.unstable_scheduleCallback(rn.unstable_NormalPriority,sk)))}function vl(e){function t(a){return As(a,e)}if(0<Bu.length){As(Bu[0],e);for(var n=1;n<Bu.length;n++){var r=Bu[n];r.blockedOn===e&&(r.blockedOn=null)}}for(da!==null&&As(da,e),ma!==null&&As(ma,e),ha!==null&&As(ha,e),ml.forEach(t),hl.forEach(t),n=0;n<ta.length;n++)r=ta[n],r.blockedOn===e&&(r.blockedOn=null);for(;0<ta.length&&(n=ta[0],n.blockedOn===null);)j5(n),n.blockedOn===null&&ta.shift()}var ri=Hr.ReactCurrentBatchConfig,Hc=!0;function lk(e,t,n,r){var a=Oe,o=ri.transition;ri.transition=null;try{Oe=1,Fv(e,t,n,r)}finally{Oe=a,ri.transition=o}}function uk(e,t,n,r){var a=Oe,o=ri.transition;ri.transition=null;try{Oe=4,Fv(e,t,n,r)}finally{Oe=a,ri.transition=o}}function Fv(e,t,n,r){if(Hc){var a=ch(e,t,n,r);if(a===null)Xd(e,t,r,Gc,n),p1(e,r);else if(ik(a,e,t,n,r))r.stopPropagation();else if(p1(e,r),t&4&&-1<ok.indexOf(e)){for(;a!==null;){var o=wu(a);if(o!==null&&_5(o),o=ch(e,t,n,r),o===null&&Xd(e,t,r,Gc,n),o===a)break;a=o}a!==null&&r.stopPropagation()}else Xd(e,t,r,null,n)}}var Gc=null;function ch(e,t,n,r){if(Gc=null,e=Rv(r),e=qa(e),e!==null)if(t=ko(e),t===null)e=null;else if(n=t.tag,n===13){if(e=x5(t),e!==null)return e;e=null}else if(n===3){if(t.stateNode.current.memoizedState.isDehydrated)return t.tag===3?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Gc=e,null}function $5(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(YO()){case Iv:return 1;case P5:return 4;case zc:case QO:return 16;case O5:return 536870912;default:return 16}default:return 16}}var ua=null,zv=null,Sc=null;function N5(){if(Sc)return Sc;var e,t=zv,n=t.length,r,a="value"in ua?ua.value:ua.textContent,o=a.length;for(e=0;e<n&&t[e]===a[e];e++);var i=n-e;for(r=1;r<=i&&t[n-r]===a[o-r];r++);return Sc=a.slice(e,1<r?1-r:void 0)}function Pc(e){var t=e.keyCode;return"charCode"in e?(e=e.charCode,e===0&&t===13&&(e=13)):e=t,e===10&&(e=13),32<=e||e===13?e:0}function Hu(){return!0}function d1(){return!1}function on(e){function t(n,r,a,o,i){this._reactName=n,this._targetInst=a,this.type=r,this.nativeEvent=o,this.target=i,this.currentTarget=null;for(var s in e)e.hasOwnProperty(s)&&(n=e[s],this[s]=n?n(o):o[s]);return this.isDefaultPrevented=(o.defaultPrevented!=null?o.defaultPrevented:o.returnValue===!1)?Hu:d1,this.isPropagationStopped=d1,this}return Ue(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Hu)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Hu)},persist:function(){},isPersistent:Hu}),t}var rs={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Bv=on(rs),xu=Ue({},rs,{view:0,detail:0}),ck=on(xu),zd,Bd,Es,xf=Ue({},xu,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Hv,button:0,buttons:0,relatedTarget:function(e){return e.relatedTarget===void 0?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==Es&&(Es&&e.type==="mousemove"?(zd=e.screenX-Es.screenX,Bd=e.screenY-Es.screenY):Bd=zd=0,Es=e),zd)},movementY:function(e){return"movementY"in e?e.movementY:Bd}}),m1=on(xf),pk=Ue({},xf,{dataTransfer:0}),fk=on(pk),dk=Ue({},xu,{relatedTarget:0}),Hd=on(dk),mk=Ue({},rs,{animationName:0,elapsedTime:0,pseudoElement:0}),hk=on(mk),vk=Ue({},rs,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),yk=on(vk),gk=Ue({},rs,{data:0}),h1=on(gk),xk={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},wk={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},bk={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Sk(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):(e=bk[e])?!!t[e]:!1}function Hv(){return Sk}var Pk=Ue({},xu,{key:function(e){if(e.key){var t=xk[e.key]||e.key;if(t!=="Unidentified")return t}return e.type==="keypress"?(e=Pc(e),e===13?"Enter":String.fromCharCode(e)):e.type==="keydown"||e.type==="keyup"?wk[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Hv,charCode:function(e){return e.type==="keypress"?Pc(e):0},keyCode:function(e){return e.type==="keydown"||e.type==="keyup"?e.keyCode:0},which:function(e){return e.type==="keypress"?Pc(e):e.type==="keydown"||e.type==="keyup"?e.keyCode:0}}),Ok=on(Pk),kk=Ue({},xf,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),v1=on(kk),Ck=Ue({},xu,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Hv}),_k=on(Ck),Ak=Ue({},rs,{propertyName:0,elapsedTime:0,pseudoElement:0}),Ek=on(Ak),Tk=Ue({},xf,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jk=on(Tk),$k=[9,13,27,32],Gv=Nr&&"CompositionEvent"in window,Js=null;Nr&&"documentMode"in document&&(Js=document.documentMode);var Nk=Nr&&"TextEvent"in window&&!Js,M5=Nr&&(!Gv||Js&&8<Js&&11>=Js),y1=" ",g1=!1;function R5(e,t){switch(e){case"keyup":return $k.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function I5(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Bo=!1;function Mk(e,t){switch(e){case"compositionend":return I5(t);case"keypress":return t.which!==32?null:(g1=!0,y1);case"textInput":return e=t.data,e===y1&&g1?null:e;default:return null}}function Rk(e,t){if(Bo)return e==="compositionend"||!Gv&&R5(e,t)?(e=N5(),Sc=zv=ua=null,Bo=!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.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return M5&&t.locale!=="ko"?null:t.data;default:return null}}var Ik={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function x1(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t==="input"?!!Ik[e.type]:t==="textarea"}function D5(e,t,n,r){m5(r),t=Uc(t,"onChange"),0<t.length&&(n=new Bv("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var el=null,yl=null;function Dk(e){K5(e,0)}function wf(e){var t=Uo(e);if(s5(t))return e}function Lk(e,t){if(e==="change")return t}var L5=!1;if(Nr){var Gd;if(Nr){var Ud="oninput"in document;if(!Ud){var w1=document.createElement("div");w1.setAttribute("oninput","return;"),Ud=typeof w1.oninput=="function"}Gd=Ud}else Gd=!1;L5=Gd&&(!document.documentMode||9<document.documentMode)}function b1(){el&&(el.detachEvent("onpropertychange",F5),yl=el=null)}function F5(e){if(e.propertyName==="value"&&wf(yl)){var t=[];D5(t,yl,e,Rv(e)),g5(Dk,t)}}function Fk(e,t,n){e==="focusin"?(b1(),el=t,yl=n,el.attachEvent("onpropertychange",F5)):e==="focusout"&&b1()}function zk(e){if(e==="selectionchange"||e==="keyup"||e==="keydown")return wf(yl)}function Bk(e,t){if(e==="click")return wf(t)}function Hk(e,t){if(e==="input"||e==="change")return wf(t)}function Gk(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Gn=typeof Object.is=="function"?Object.is:Gk;function gl(e,t){if(Gn(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!qm.call(t,a)||!Gn(e[a],t[a]))return!1}return!0}function S1(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function P1(e,t){var n=S1(e);e=0;for(var r;n;){if(n.nodeType===3){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=S1(n)}}function z5(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?z5(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function B5(){for(var e=window,t=Dc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Dc(e.document)}return t}function Uv(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")}function Uk(e){var t=B5(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&z5(n.ownerDocument.documentElement,n)){if(r!==null&&Uv(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=r.end===void 0?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=P1(n,o);var i=P1(n,r);a&&i&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<t.length;n++)e=t[n],e.element.scrollLeft=e.left,e.element.scrollTop=e.top}}var Wk=Nr&&"documentMode"in document&&11>=document.documentMode,Ho=null,ph=null,tl=null,fh=!1;function O1(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;fh||Ho==null||Ho!==Dc(r)||(r=Ho,"selectionStart"in r&&Uv(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),tl&&gl(tl,r)||(tl=r,r=Uc(ph,"onSelect"),0<r.length&&(t=new Bv("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=Ho)))}function Gu(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Go={animationend:Gu("Animation","AnimationEnd"),animationiteration:Gu("Animation","AnimationIteration"),animationstart:Gu("Animation","AnimationStart"),transitionend:Gu("Transition","TransitionEnd")},Wd={},H5={};Nr&&(H5=document.createElement("div").style,"AnimationEvent"in window||(delete Go.animationend.animation,delete Go.animationiteration.animation,delete Go.animationstart.animation),"TransitionEvent"in window||delete Go.transitionend.transition);function bf(e){if(Wd[e])return Wd[e];if(!Go[e])return e;var t=Go[e],n;for(n in t)if(t.hasOwnProperty(n)&&n in H5)return Wd[e]=t[n];return e}var G5=bf("animationend"),U5=bf("animationiteration"),W5=bf("animationstart"),q5=bf("transitionend"),V5=new Map,k1="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function _a(e,t){V5.set(e,t),Oo(t,[e])}for(var qd=0;qd<k1.length;qd++){var Vd=k1[qd],qk=Vd.toLowerCase(),Vk=Vd[0].toUpperCase()+Vd.slice(1);_a(qk,"on"+Vk)}_a(G5,"onAnimationEnd");_a(U5,"onAnimationIteration");_a(W5,"onAnimationStart");_a("dblclick","onDoubleClick");_a("focusin","onFocus");_a("focusout","onBlur");_a(q5,"onTransitionEnd");Pi("onMouseEnter",["mouseout","mouseover"]);Pi("onMouseLeave",["mouseout","mouseover"]);Pi("onPointerEnter",["pointerout","pointerover"]);Pi("onPointerLeave",["pointerout","pointerover"]);Oo("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));Oo("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));Oo("onBeforeInput",["compositionend","keypress","textInput","paste"]);Oo("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));Oo("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));Oo("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ks="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Kk=new Set("cancel close invalid load scroll toggle".split(" ").concat(Ks));function C1(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,qO(r,t,void 0,e),e.currentTarget=null}function K5(e,t){t=(t&4)!==0;for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,u=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;C1(a,s,u),o=l}else for(i=0;i<r.length;i++){if(s=r[i],l=s.instance,u=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;C1(a,s,u),o=l}}}if(Fc)throw e=sh,Fc=!1,sh=null,e}function Ie(e,t){var n=t[yh];n===void 0&&(n=t[yh]=new Set);var r=e+"__bubble";n.has(r)||(X5(t,e,2,!1),n.add(r))}function Kd(e,t,n){var r=0;t&&(r|=4),X5(n,e,r,t)}var Uu="_reactListening"+Math.random().toString(36).slice(2);function xl(e){if(!e[Uu]){e[Uu]=!0,n5.forEach(function(n){n!=="selectionchange"&&(Kk.has(n)||Kd(n,!1,e),Kd(n,!0,e))});var t=e.nodeType===9?e:e.ownerDocument;t===null||t[Uu]||(t[Uu]=!0,Kd("selectionchange",!1,t))}}function X5(e,t,n,r){switch($5(t)){case 1:var a=lk;break;case 4:a=uk;break;default:a=Fv}n=a.bind(null,t,n,e),a=void 0,!ih||t!=="touchstart"&&t!=="touchmove"&&t!=="wheel"||(a=!0),r?a!==void 0?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):a!==void 0?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Xd(e,t,n,r,a){var o=r;if(!(t&1)&&!(t&2)&&r!==null)e:for(;;){if(r===null)return;var i=r.tag;if(i===3||i===4){var s=r.stateNode.containerInfo;if(s===a||s.nodeType===8&&s.parentNode===a)break;if(i===4)for(i=r.return;i!==null;){var l=i.tag;if((l===3||l===4)&&(l=i.stateNode.containerInfo,l===a||l.nodeType===8&&l.parentNode===a))return;i=i.return}for(;s!==null;){if(i=qa(s),i===null)return;if(l=i.tag,l===5||l===6){r=o=i;continue e}s=s.parentNode}}r=r.return}g5(function(){var u=o,p=Rv(n),c=[];e:{var f=V5.get(e);if(f!==void 0){var d=Bv,h=e;switch(e){case"keypress":if(Pc(n)===0)break e;case"keydown":case"keyup":d=Ok;break;case"focusin":h="focus",d=Hd;break;case"focusout":h="blur",d=Hd;break;case"beforeblur":case"afterblur":d=Hd;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":d=m1;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":d=fk;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":d=_k;break;case G5:case U5:case W5:d=hk;break;case q5:d=Ek;break;case"scroll":d=ck;break;case"wheel":d=jk;break;case"copy":case"cut":case"paste":d=yk;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":d=v1}var m=(t&4)!==0,g=!m&&e==="scroll",v=m?f!==null?f+"Capture":null:f;m=[];for(var y=u,x;y!==null;){x=y;var S=x.stateNode;if(x.tag===5&&S!==null&&(x=S,v!==null&&(S=dl(y,v),S!=null&&m.push(wl(y,S,x)))),g)break;y=y.return}0<m.length&&(f=new d(f,h,null,n,p),c.push({event:f,listeners:m}))}}if(!(t&7)){e:{if(f=e==="mouseover"||e==="pointerover",d=e==="mouseout"||e==="pointerout",f&&n!==ah&&(h=n.relatedTarget||n.fromElement)&&(qa(h)||h[Mr]))break e;if((d||f)&&(f=p.window===p?p:(f=p.ownerDocument)?f.defaultView||f.parentWindow:window,d?(h=n.relatedTarget||n.toElement,d=u,h=h?qa(h):null,h!==null&&(g=ko(h),h!==g||h.tag!==5&&h.tag!==6)&&(h=null)):(d=null,h=u),d!==h)){if(m=m1,S="onMouseLeave",v="onMouseEnter",y="mouse",(e==="pointerout"||e==="pointerover")&&(m=v1,S="onPointerLeave",v="onPointerEnter",y="pointer"),g=d==null?f:Uo(d),x=h==null?f:Uo(h),f=new m(S,y+"leave",d,n,p),f.target=g,f.relatedTarget=x,S=null,qa(p)===u&&(m=new m(v,y+"enter",h,n,p),m.target=x,m.relatedTarget=g,S=m),g=S,d&&h)t:{for(m=d,v=h,y=0,x=m;x;x=jo(x))y++;for(x=0,S=v;S;S=jo(S))x++;for(;0<y-x;)m=jo(m),y--;for(;0<x-y;)v=jo(v),x--;for(;y--;){if(m===v||v!==null&&m===v.alternate)break t;m=jo(m),v=jo(v)}m=null}else m=null;d!==null&&_1(c,f,d,m,!1),h!==null&&g!==null&&_1(c,g,h,m,!0)}}e:{if(f=u?Uo(u):window,d=f.nodeName&&f.nodeName.toLowerCase(),d==="select"||d==="input"&&f.type==="file")var w=Lk;else if(x1(f))if(L5)w=Hk;else{w=zk;var P=Fk}else(d=f.nodeName)&&d.toLowerCase()==="input"&&(f.type==="checkbox"||f.type==="radio")&&(w=Bk);if(w&&(w=w(e,u))){D5(c,w,n,p);break e}P&&P(e,f,u),e==="focusout"&&(P=f._wrapperState)&&P.controlled&&f.type==="number"&&Jm(f,"number",f.value)}switch(P=u?Uo(u):window,e){case"focusin":(x1(P)||P.contentEditable==="true")&&(Ho=P,ph=u,tl=null);break;case"focusout":tl=ph=Ho=null;break;case"mousedown":fh=!0;break;case"contextmenu":case"mouseup":case"dragend":fh=!1,O1(c,n,p);break;case"selectionchange":if(Wk)break;case"keydown":case"keyup":O1(c,n,p)}var O;if(Gv)e:{switch(e){case"compositionstart":var C="onCompositionStart";break e;case"compositionend":C="onCompositionEnd";break e;case"compositionupdate":C="onCompositionUpdate";break e}C=void 0}else Bo?R5(e,n)&&(C="onCompositionEnd"):e==="keydown"&&n.keyCode===229&&(C="onCompositionStart");C&&(M5&&n.locale!=="ko"&&(Bo||C!=="onCompositionStart"?C==="onCompositionEnd"&&Bo&&(O=N5()):(ua=p,zv="value"in ua?ua.value:ua.textContent,Bo=!0)),P=Uc(u,C),0<P.length&&(C=new h1(C,e,null,n,p),c.push({event:C,listeners:P}),O?C.data=O:(O=I5(n),O!==null&&(C.data=O)))),(O=Nk?Mk(e,n):Rk(e,n))&&(u=Uc(u,"onBeforeInput"),0<u.length&&(p=new h1("onBeforeInput","beforeinput",null,n,p),c.push({event:p,listeners:u}),p.data=O))}K5(c,t)})}function wl(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Uc(e,t){for(var n=t+"Capture",r=[];e!==null;){var a=e,o=a.stateNode;a.tag===5&&o!==null&&(a=o,o=dl(e,n),o!=null&&r.unshift(wl(e,o,a)),o=dl(e,t),o!=null&&r.push(wl(e,o,a))),e=e.return}return r}function jo(e){if(e===null)return null;do e=e.return;while(e&&e.tag!==5);return e||null}function _1(e,t,n,r,a){for(var o=t._reactName,i=[];n!==null&&n!==r;){var s=n,l=s.alternate,u=s.stateNode;if(l!==null&&l===r)break;s.tag===5&&u!==null&&(s=u,a?(l=dl(n,o),l!=null&&i.unshift(wl(n,l,s))):a||(l=dl(n,o),l!=null&&i.push(wl(n,l,s)))),n=n.return}i.length!==0&&e.push({event:t,listeners:i})}var Xk=/\r\n?/g,Yk=/\u0000|\uFFFD/g;function A1(e){return(typeof e=="string"?e:""+e).replace(Xk,`
+`).replace(Yk,"")}function Wu(e,t,n){if(t=A1(t),A1(e)!==t&&n)throw Error(U(425))}function Wc(){}var dh=null,mh=null;function hh(e,t){return e==="textarea"||e==="noscript"||typeof t.children=="string"||typeof t.children=="number"||typeof t.dangerouslySetInnerHTML=="object"&&t.dangerouslySetInnerHTML!==null&&t.dangerouslySetInnerHTML.__html!=null}var vh=typeof setTimeout=="function"?setTimeout:void 0,Qk=typeof clearTimeout=="function"?clearTimeout:void 0,E1=typeof Promise=="function"?Promise:void 0,Zk=typeof queueMicrotask=="function"?queueMicrotask:typeof E1<"u"?function(e){return E1.resolve(null).then(e).catch(Jk)}:vh;function Jk(e){setTimeout(function(){throw e})}function Yd(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&a.nodeType===8)if(n=a.data,n==="/$"){if(r===0){e.removeChild(a),vl(t);return}r--}else n!=="$"&&n!=="$?"&&n!=="$!"||r++;n=a}while(n);vl(t)}function va(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t==="$"||t==="$!"||t==="$?")break;if(t==="/$")return null}}return e}function T1(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="$"||n==="$!"||n==="$?"){if(t===0)return e;t--}else n==="/$"&&t++}e=e.previousSibling}return null}var as=Math.random().toString(36).slice(2),er="__reactFiber$"+as,bl="__reactProps$"+as,Mr="__reactContainer$"+as,yh="__reactEvents$"+as,eC="__reactListeners$"+as,tC="__reactHandles$"+as;function qa(e){var t=e[er];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Mr]||n[er]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=T1(e);e!==null;){if(n=e[er])return n;e=T1(e)}return t}e=n,n=e.parentNode}return null}function wu(e){return e=e[er]||e[Mr],!e||e.tag!==5&&e.tag!==6&&e.tag!==13&&e.tag!==3?null:e}function Uo(e){if(e.tag===5||e.tag===6)return e.stateNode;throw Error(U(33))}function Sf(e){return e[bl]||null}var gh=[],Wo=-1;function Aa(e){return{current:e}}function Fe(e){0>Wo||(e.current=gh[Wo],gh[Wo]=null,Wo--)}function je(e,t){Wo++,gh[Wo]=e.current,e.current=t}var Pa={},At=Aa(Pa),Gt=Aa(!1),co=Pa;function Oi(e,t){var n=e.type.contextTypes;if(!n)return Pa;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function Ut(e){return e=e.childContextTypes,e!=null}function qc(){Fe(Gt),Fe(At)}function j1(e,t,n){if(At.current!==Pa)throw Error(U(168));je(At,t),je(Gt,n)}function Y5(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(U(108,FO(e)||"Unknown",a));return Ue({},n,r)}function Vc(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Pa,co=At.current,je(At,e),je(Gt,Gt.current),!0}function $1(e,t,n){var r=e.stateNode;if(!r)throw Error(U(169));n?(e=Y5(e,t,co),r.__reactInternalMemoizedMergedChildContext=e,Fe(Gt),Fe(At),je(At,e)):Fe(Gt),je(Gt,n)}var br=null,Pf=!1,Qd=!1;function Q5(e){br===null?br=[e]:br.push(e)}function nC(e){Pf=!0,Q5(e)}function Ea(){if(!Qd&&br!==null){Qd=!0;var e=0,t=Oe;try{var n=br;for(Oe=1;e<n.length;e++){var r=n[e];do r=r(!0);while(r!==null)}br=null,Pf=!1}catch(a){throw br!==null&&(br=br.slice(e+1)),S5(Iv,Ea),a}finally{Oe=t,Qd=!1}}return null}var qo=[],Vo=0,Kc=null,Xc=0,pn=[],fn=0,po=null,Pr=1,Or="";function Ba(e,t){qo[Vo++]=Xc,qo[Vo++]=Kc,Kc=e,Xc=t}function Z5(e,t,n){pn[fn++]=Pr,pn[fn++]=Or,pn[fn++]=po,po=e;var r=Pr;e=Or;var a=32-Bn(r)-1;r&=~(1<<a),n+=1;var o=32-Bn(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,Pr=1<<32-Bn(t)+a|n<<a|r,Or=o+e}else Pr=1<<o|n<<a|r,Or=e}function Wv(e){e.return!==null&&(Ba(e,1),Z5(e,1,0))}function qv(e){for(;e===Kc;)Kc=qo[--Vo],qo[Vo]=null,Xc=qo[--Vo],qo[Vo]=null;for(;e===po;)po=pn[--fn],pn[fn]=null,Or=pn[--fn],pn[fn]=null,Pr=pn[--fn],pn[fn]=null}var tn=null,Jt=null,ze=!1,Mn=null;function J5(e,t){var n=dn(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,t=e.deletions,t===null?(e.deletions=[n],e.flags|=16):t.push(n)}function N1(e,t){switch(e.tag){case 5:var n=e.type;return t=t.nodeType!==1||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t,t!==null?(e.stateNode=t,tn=e,Jt=va(t.firstChild),!0):!1;case 6:return t=e.pendingProps===""||t.nodeType!==3?null:t,t!==null?(e.stateNode=t,tn=e,Jt=null,!0):!1;case 13:return t=t.nodeType!==8?null:t,t!==null?(n=po!==null?{id:Pr,overflow:Or}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},n=dn(18,null,null,0),n.stateNode=t,n.return=e,e.child=n,tn=e,Jt=null,!0):!1;default:return!1}}function xh(e){return(e.mode&1)!==0&&(e.flags&128)===0}function wh(e){if(ze){var t=Jt;if(t){var n=t;if(!N1(e,t)){if(xh(e))throw Error(U(418));t=va(n.nextSibling);var r=tn;t&&N1(e,t)?J5(r,n):(e.flags=e.flags&-4097|2,ze=!1,tn=e)}}else{if(xh(e))throw Error(U(418));e.flags=e.flags&-4097|2,ze=!1,tn=e}}}function M1(e){for(e=e.return;e!==null&&e.tag!==5&&e.tag!==3&&e.tag!==13;)e=e.return;tn=e}function qu(e){if(e!==tn)return!1;if(!ze)return M1(e),ze=!0,!1;var t;if((t=e.tag!==3)&&!(t=e.tag!==5)&&(t=e.type,t=t!=="head"&&t!=="body"&&!hh(e.type,e.memoizedProps)),t&&(t=Jt)){if(xh(e))throw e9(),Error(U(418));for(;t;)J5(e,t),t=va(t.nextSibling)}if(M1(e),e.tag===13){if(e=e.memoizedState,e=e!==null?e.dehydrated:null,!e)throw Error(U(317));e:{for(e=e.nextSibling,t=0;e;){if(e.nodeType===8){var n=e.data;if(n==="/$"){if(t===0){Jt=va(e.nextSibling);break e}t--}else n!=="$"&&n!=="$!"&&n!=="$?"||t++}e=e.nextSibling}Jt=null}}else Jt=tn?va(e.stateNode.nextSibling):null;return!0}function e9(){for(var e=Jt;e;)e=va(e.nextSibling)}function ki(){Jt=tn=null,ze=!1}function Vv(e){Mn===null?Mn=[e]:Mn.push(e)}var rC=Hr.ReactCurrentBatchConfig;function Ts(e,t,n){if(e=n.ref,e!==null&&typeof e!="function"&&typeof e!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(U(309));var r=n.stateNode}if(!r)throw Error(U(147,e));var a=r,o=""+e;return t!==null&&t.ref!==null&&typeof t.ref=="function"&&t.ref._stringRef===o?t.ref:(t=function(i){var s=a.refs;i===null?delete s[o]:s[o]=i},t._stringRef=o,t)}if(typeof e!="string")throw Error(U(284));if(!n._owner)throw Error(U(290,e))}return e}function Vu(e,t){throw e=Object.prototype.toString.call(t),Error(U(31,e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function R1(e){var t=e._init;return t(e._payload)}function t9(e){function t(v,y){if(e){var x=v.deletions;x===null?(v.deletions=[y],v.flags|=16):x.push(y)}}function n(v,y){if(!e)return null;for(;y!==null;)t(v,y),y=y.sibling;return null}function r(v,y){for(v=new Map;y!==null;)y.key!==null?v.set(y.key,y):v.set(y.index,y),y=y.sibling;return v}function a(v,y){return v=wa(v,y),v.index=0,v.sibling=null,v}function o(v,y,x){return v.index=x,e?(x=v.alternate,x!==null?(x=x.index,x<y?(v.flags|=2,y):x):(v.flags|=2,y)):(v.flags|=1048576,y)}function i(v){return e&&v.alternate===null&&(v.flags|=2),v}function s(v,y,x,S){return y===null||y.tag!==6?(y=am(x,v.mode,S),y.return=v,y):(y=a(y,x),y.return=v,y)}function l(v,y,x,S){var w=x.type;return w===zo?p(v,y,x.props.children,S,x.key):y!==null&&(y.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===Zr&&R1(w)===y.type)?(S=a(y,x.props),S.ref=Ts(v,y,x),S.return=v,S):(S=Tc(x.type,x.key,x.props,null,v.mode,S),S.ref=Ts(v,y,x),S.return=v,S)}function u(v,y,x,S){return y===null||y.tag!==4||y.stateNode.containerInfo!==x.containerInfo||y.stateNode.implementation!==x.implementation?(y=om(x,v.mode,S),y.return=v,y):(y=a(y,x.children||[]),y.return=v,y)}function p(v,y,x,S,w){return y===null||y.tag!==7?(y=so(x,v.mode,S,w),y.return=v,y):(y=a(y,x),y.return=v,y)}function c(v,y,x){if(typeof y=="string"&&y!==""||typeof y=="number")return y=am(""+y,v.mode,x),y.return=v,y;if(typeof y=="object"&&y!==null){switch(y.$$typeof){case Iu:return x=Tc(y.type,y.key,y.props,null,v.mode,x),x.ref=Ts(v,null,y),x.return=v,x;case Fo:return y=om(y,v.mode,x),y.return=v,y;case Zr:var S=y._init;return c(v,S(y._payload),x)}if(qs(y)||ks(y))return y=so(y,v.mode,x,null),y.return=v,y;Vu(v,y)}return null}function f(v,y,x,S){var w=y!==null?y.key:null;if(typeof x=="string"&&x!==""||typeof x=="number")return w!==null?null:s(v,y,""+x,S);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case Iu:return x.key===w?l(v,y,x,S):null;case Fo:return x.key===w?u(v,y,x,S):null;case Zr:return w=x._init,f(v,y,w(x._payload),S)}if(qs(x)||ks(x))return w!==null?null:p(v,y,x,S,null);Vu(v,x)}return null}function d(v,y,x,S,w){if(typeof S=="string"&&S!==""||typeof S=="number")return v=v.get(x)||null,s(y,v,""+S,w);if(typeof S=="object"&&S!==null){switch(S.$$typeof){case Iu:return v=v.get(S.key===null?x:S.key)||null,l(y,v,S,w);case Fo:return v=v.get(S.key===null?x:S.key)||null,u(y,v,S,w);case Zr:var P=S._init;return d(v,y,x,P(S._payload),w)}if(qs(S)||ks(S))return v=v.get(x)||null,p(y,v,S,w,null);Vu(y,S)}return null}function h(v,y,x,S){for(var w=null,P=null,O=y,C=y=0,_=null;O!==null&&C<x.length;C++){O.index>C?(_=O,O=null):_=O.sibling;var T=f(v,O,x[C],S);if(T===null){O===null&&(O=_);break}e&&O&&T.alternate===null&&t(v,O),y=o(T,y,C),P===null?w=T:P.sibling=T,P=T,O=_}if(C===x.length)return n(v,O),ze&&Ba(v,C),w;if(O===null){for(;C<x.length;C++)O=c(v,x[C],S),O!==null&&(y=o(O,y,C),P===null?w=O:P.sibling=O,P=O);return ze&&Ba(v,C),w}for(O=r(v,O);C<x.length;C++)_=d(O,v,C,x[C],S),_!==null&&(e&&_.alternate!==null&&O.delete(_.key===null?C:_.key),y=o(_,y,C),P===null?w=_:P.sibling=_,P=_);return e&&O.forEach(function(A){return t(v,A)}),ze&&Ba(v,C),w}function m(v,y,x,S){var w=ks(x);if(typeof w!="function")throw Error(U(150));if(x=w.call(x),x==null)throw Error(U(151));for(var P=w=null,O=y,C=y=0,_=null,T=x.next();O!==null&&!T.done;C++,T=x.next()){O.index>C?(_=O,O=null):_=O.sibling;var A=f(v,O,T.value,S);if(A===null){O===null&&(O=_);break}e&&O&&A.alternate===null&&t(v,O),y=o(A,y,C),P===null?w=A:P.sibling=A,P=A,O=_}if(T.done)return n(v,O),ze&&Ba(v,C),w;if(O===null){for(;!T.done;C++,T=x.next())T=c(v,T.value,S),T!==null&&(y=o(T,y,C),P===null?w=T:P.sibling=T,P=T);return ze&&Ba(v,C),w}for(O=r(v,O);!T.done;C++,T=x.next())T=d(O,v,C,T.value,S),T!==null&&(e&&T.alternate!==null&&O.delete(T.key===null?C:T.key),y=o(T,y,C),P===null?w=T:P.sibling=T,P=T);return e&&O.forEach(function(j){return t(v,j)}),ze&&Ba(v,C),w}function g(v,y,x,S){if(typeof x=="object"&&x!==null&&x.type===zo&&x.key===null&&(x=x.props.children),typeof x=="object"&&x!==null){switch(x.$$typeof){case Iu:e:{for(var w=x.key,P=y;P!==null;){if(P.key===w){if(w=x.type,w===zo){if(P.tag===7){n(v,P.sibling),y=a(P,x.props.children),y.return=v,v=y;break e}}else if(P.elementType===w||typeof w=="object"&&w!==null&&w.$$typeof===Zr&&R1(w)===P.type){n(v,P.sibling),y=a(P,x.props),y.ref=Ts(v,P,x),y.return=v,v=y;break e}n(v,P);break}else t(v,P);P=P.sibling}x.type===zo?(y=so(x.props.children,v.mode,S,x.key),y.return=v,v=y):(S=Tc(x.type,x.key,x.props,null,v.mode,S),S.ref=Ts(v,y,x),S.return=v,v=S)}return i(v);case Fo:e:{for(P=x.key;y!==null;){if(y.key===P)if(y.tag===4&&y.stateNode.containerInfo===x.containerInfo&&y.stateNode.implementation===x.implementation){n(v,y.sibling),y=a(y,x.children||[]),y.return=v,v=y;break e}else{n(v,y);break}else t(v,y);y=y.sibling}y=om(x,v.mode,S),y.return=v,v=y}return i(v);case Zr:return P=x._init,g(v,y,P(x._payload),S)}if(qs(x))return h(v,y,x,S);if(ks(x))return m(v,y,x,S);Vu(v,x)}return typeof x=="string"&&x!==""||typeof x=="number"?(x=""+x,y!==null&&y.tag===6?(n(v,y.sibling),y=a(y,x),y.return=v,v=y):(n(v,y),y=am(x,v.mode,S),y.return=v,v=y),i(v)):n(v,y)}return g}var Ci=t9(!0),n9=t9(!1),Yc=Aa(null),Qc=null,Ko=null,Kv=null;function Xv(){Kv=Ko=Qc=null}function Yv(e){var t=Yc.current;Fe(Yc),e._currentValue=t}function bh(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function ai(e,t){Qc=e,Kv=Ko=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Bt=!0),e.firstContext=null)}function gn(e){var t=e._currentValue;if(Kv!==e)if(e={context:e,memoizedValue:t,next:null},Ko===null){if(Qc===null)throw Error(U(308));Ko=e,Qc.dependencies={lanes:0,firstContext:e}}else Ko=Ko.next=e;return t}var Va=null;function Qv(e){Va===null?Va=[e]:Va.push(e)}function r9(e,t,n,r){var a=t.interleaved;return a===null?(n.next=n,Qv(t)):(n.next=a.next,a.next=n),t.interleaved=n,Rr(e,r)}function Rr(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var Jr=!1;function Zv(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function a9(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ar(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function ya(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,de&2){var a=r.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Rr(e,n)}return a=r.interleaved,a===null?(t.next=t,Qv(r)):(t.next=a.next,a.next=t),r.interleaved=t,Rr(e,n)}function Oc(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Dv(e,n)}}function I1(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var a=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?a=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?a=o=t:o=o.next=t}else a=o=t;n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Zc(e,t,n,r){var a=e.updateQueue;Jr=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(s!==null){a.shared.pending=null;var l=s,u=l.next;l.next=null,i===null?o=u:i.next=u,i=l;var p=e.alternate;p!==null&&(p=p.updateQueue,s=p.lastBaseUpdate,s!==i&&(s===null?p.firstBaseUpdate=u:s.next=u,p.lastBaseUpdate=l))}if(o!==null){var c=a.baseState;i=0,p=u=l=null,s=o;do{var f=s.lane,d=s.eventTime;if((r&f)===f){p!==null&&(p=p.next={eventTime:d,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(f=t,d=n,m.tag){case 1:if(h=m.payload,typeof h=="function"){c=h.call(d,c,f);break e}c=h;break e;case 3:h.flags=h.flags&-65537|128;case 0:if(h=m.payload,f=typeof h=="function"?h.call(d,c,f):h,f==null)break e;c=Ue({},c,f);break e;case 2:Jr=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,f=a.effects,f===null?a.effects=[s]:f.push(s))}else d={eventTime:d,lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},p===null?(u=p=d,l=c):p=p.next=d,i|=f;if(s=s.next,s===null){if(s=a.shared.pending,s===null)break;f=s,s=f.next,f.next=null,a.lastBaseUpdate=f,a.shared.pending=null}}while(!0);if(p===null&&(l=c),a.baseState=l,a.firstBaseUpdate=u,a.lastBaseUpdate=p,t=a.shared.interleaved,t!==null){a=t;do i|=a.lane,a=a.next;while(a!==t)}else o===null&&(a.shared.lanes=0);mo|=i,e.lanes=i,e.memoizedState=c}}function D1(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(a!==null){if(r.callback=null,r=n,typeof a!="function")throw Error(U(191,a));a.call(r)}}}var bu={},lr=Aa(bu),Sl=Aa(bu),Pl=Aa(bu);function Ka(e){if(e===bu)throw Error(U(174));return e}function Jv(e,t){switch(je(Pl,t),je(Sl,e),je(lr,bu),e=t.nodeType,e){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:th(null,"");break;default:e=e===8?t.parentNode:t,t=e.namespaceURI||null,e=e.tagName,t=th(t,e)}Fe(lr),je(lr,t)}function _i(){Fe(lr),Fe(Sl),Fe(Pl)}function o9(e){Ka(Pl.current);var t=Ka(lr.current),n=th(t,e.type);t!==n&&(je(Sl,e),je(lr,n))}function ey(e){Sl.current===e&&(Fe(lr),Fe(Sl))}var He=Aa(0);function Jc(e){for(var t=e;t!==null;){if(t.tag===13){var n=t.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return t}else if(t.tag===19&&t.memoizedProps.revealOrder!==void 0){if(t.flags&128)return t}else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Zd=[];function ty(){for(var e=0;e<Zd.length;e++)Zd[e]._workInProgressVersionPrimary=null;Zd.length=0}var kc=Hr.ReactCurrentDispatcher,Jd=Hr.ReactCurrentBatchConfig,fo=0,Ge=null,rt=null,lt=null,ep=!1,nl=!1,Ol=0,aC=0;function xt(){throw Error(U(321))}function ny(e,t){if(t===null)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!Gn(e[n],t[n]))return!1;return!0}function ry(e,t,n,r,a,o){if(fo=o,Ge=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,kc.current=e===null||e.memoizedState===null?lC:uC,e=n(r,a),nl){o=0;do{if(nl=!1,Ol=0,25<=o)throw Error(U(301));o+=1,lt=rt=null,t.updateQueue=null,kc.current=cC,e=n(r,a)}while(nl)}if(kc.current=tp,t=rt!==null&&rt.next!==null,fo=0,lt=rt=Ge=null,ep=!1,t)throw Error(U(300));return e}function ay(){var e=Ol!==0;return Ol=0,e}function Xn(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return lt===null?Ge.memoizedState=lt=e:lt=lt.next=e,lt}function xn(){if(rt===null){var e=Ge.alternate;e=e!==null?e.memoizedState:null}else e=rt.next;var t=lt===null?Ge.memoizedState:lt.next;if(t!==null)lt=t,rt=e;else{if(e===null)throw Error(U(310));rt=e,e={memoizedState:rt.memoizedState,baseState:rt.baseState,baseQueue:rt.baseQueue,queue:rt.queue,next:null},lt===null?Ge.memoizedState=lt=e:lt=lt.next=e}return lt}function kl(e,t){return typeof t=="function"?t(e):t}function em(e){var t=xn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=rt,a=r.baseQueue,o=n.pending;if(o!==null){if(a!==null){var i=a.next;a.next=o.next,o.next=i}r.baseQueue=a=o,n.pending=null}if(a!==null){o=a.next,r=r.baseState;var s=i=null,l=null,u=o;do{var p=u.lane;if((fo&p)===p)l!==null&&(l=l.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var c={lane:p,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};l===null?(s=l=c,i=r):l=l.next=c,Ge.lanes|=p,mo|=p}u=u.next}while(u!==null&&u!==o);l===null?i=r:l.next=s,Gn(r,t.memoizedState)||(Bt=!0),t.memoizedState=r,t.baseState=i,t.baseQueue=l,n.lastRenderedState=r}if(e=n.interleaved,e!==null){a=e;do o=a.lane,Ge.lanes|=o,mo|=o,a=a.next;while(a!==e)}else a===null&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function tm(e){var t=xn(),n=t.queue;if(n===null)throw Error(U(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,o=t.memoizedState;if(a!==null){n.pending=null;var i=a=a.next;do o=e(o,i.action),i=i.next;while(i!==a);Gn(o,t.memoizedState)||(Bt=!0),t.memoizedState=o,t.baseQueue===null&&(t.baseState=o),n.lastRenderedState=o}return[o,r]}function i9(){}function s9(e,t){var n=Ge,r=xn(),a=t(),o=!Gn(r.memoizedState,a);if(o&&(r.memoizedState=a,Bt=!0),r=r.queue,oy(c9.bind(null,n,r,e),[e]),r.getSnapshot!==t||o||lt!==null&&lt.memoizedState.tag&1){if(n.flags|=2048,Cl(9,u9.bind(null,n,r,a,t),void 0,null),ut===null)throw Error(U(349));fo&30||l9(n,t,a)}return a}function l9(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.stores=[e]):(n=t.stores,n===null?t.stores=[e]:n.push(e))}function u9(e,t,n,r){t.value=n,t.getSnapshot=r,p9(t)&&f9(e)}function c9(e,t,n){return n(function(){p9(t)&&f9(e)})}function p9(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!Gn(e,n)}catch{return!0}}function f9(e){var t=Rr(e,1);t!==null&&Hn(t,e,1,-1)}function L1(e){var t=Xn();return typeof e=="function"&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:kl,lastRenderedState:e},t.queue=e,e=e.dispatch=sC.bind(null,Ge,e),[t.memoizedState,e]}function Cl(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},t=Ge.updateQueue,t===null?(t={lastEffect:null,stores:null},Ge.updateQueue=t,t.lastEffect=e.next=e):(n=t.lastEffect,n===null?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e)),e}function d9(){return xn().memoizedState}function Cc(e,t,n,r){var a=Xn();Ge.flags|=e,a.memoizedState=Cl(1|t,n,void 0,r===void 0?null:r)}function Of(e,t,n,r){var a=xn();r=r===void 0?null:r;var o=void 0;if(rt!==null){var i=rt.memoizedState;if(o=i.destroy,r!==null&&ny(r,i.deps)){a.memoizedState=Cl(t,n,o,r);return}}Ge.flags|=e,a.memoizedState=Cl(1|t,n,o,r)}function F1(e,t){return Cc(8390656,8,e,t)}function oy(e,t){return Of(2048,8,e,t)}function m9(e,t){return Of(4,2,e,t)}function h9(e,t){return Of(4,4,e,t)}function v9(e,t){if(typeof t=="function")return e=e(),t(e),function(){t(null)};if(t!=null)return e=e(),t.current=e,function(){t.current=null}}function y9(e,t,n){return n=n!=null?n.concat([e]):null,Of(4,4,v9.bind(null,t,e),n)}function iy(){}function g9(e,t){var n=xn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&ny(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function x9(e,t){var n=xn();t=t===void 0?null:t;var r=n.memoizedState;return r!==null&&t!==null&&ny(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function w9(e,t,n){return fo&21?(Gn(n,t)||(n=k5(),Ge.lanes|=n,mo|=n,e.baseState=!0),t):(e.baseState&&(e.baseState=!1,Bt=!0),e.memoizedState=n)}function oC(e,t){var n=Oe;Oe=n!==0&&4>n?n:4,e(!0);var r=Jd.transition;Jd.transition={};try{e(!1),t()}finally{Oe=n,Jd.transition=r}}function b9(){return xn().memoizedState}function iC(e,t,n){var r=xa(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},S9(e))P9(t,n);else if(n=r9(e,t,n,r),n!==null){var a=Rt();Hn(n,e,r,a),O9(n,t,r)}}function sC(e,t,n){var r=xa(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(S9(e))P9(t,a);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,Gn(s,i)){var l=t.interleaved;l===null?(a.next=a,Qv(t)):(a.next=l.next,l.next=a),t.interleaved=a;return}}catch{}finally{}n=r9(e,t,a,r),n!==null&&(a=Rt(),Hn(n,e,r,a),O9(n,t,r))}}function S9(e){var t=e.alternate;return e===Ge||t!==null&&t===Ge}function P9(e,t){nl=ep=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function O9(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Dv(e,n)}}var tp={readContext:gn,useCallback:xt,useContext:xt,useEffect:xt,useImperativeHandle:xt,useInsertionEffect:xt,useLayoutEffect:xt,useMemo:xt,useReducer:xt,useRef:xt,useState:xt,useDebugValue:xt,useDeferredValue:xt,useTransition:xt,useMutableSource:xt,useSyncExternalStore:xt,useId:xt,unstable_isNewReconciler:!1},lC={readContext:gn,useCallback:function(e,t){return Xn().memoizedState=[e,t===void 0?null:t],e},useContext:gn,useEffect:F1,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Cc(4194308,4,v9.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Cc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Cc(4,2,e,t)},useMemo:function(e,t){var n=Xn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Xn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=iC.bind(null,Ge,e),[r.memoizedState,e]},useRef:function(e){var t=Xn();return e={current:e},t.memoizedState=e},useState:L1,useDebugValue:iy,useDeferredValue:function(e){return Xn().memoizedState=e},useTransition:function(){var e=L1(!1),t=e[0];return e=oC.bind(null,e[1]),Xn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Ge,a=Xn();if(ze){if(n===void 0)throw Error(U(407));n=n()}else{if(n=t(),ut===null)throw Error(U(349));fo&30||l9(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,F1(c9.bind(null,r,o,e),[e]),r.flags|=2048,Cl(9,u9.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Xn(),t=ut.identifierPrefix;if(ze){var n=Or,r=Pr;n=(r&~(1<<32-Bn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=Ol++,0<n&&(t+="H"+n.toString(32)),t+=":"}else n=aC++,t=":"+t+"r"+n.toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},uC={readContext:gn,useCallback:g9,useContext:gn,useEffect:oy,useImperativeHandle:y9,useInsertionEffect:m9,useLayoutEffect:h9,useMemo:x9,useReducer:em,useRef:d9,useState:function(){return em(kl)},useDebugValue:iy,useDeferredValue:function(e){var t=xn();return w9(t,rt.memoizedState,e)},useTransition:function(){var e=em(kl)[0],t=xn().memoizedState;return[e,t]},useMutableSource:i9,useSyncExternalStore:s9,useId:b9,unstable_isNewReconciler:!1},cC={readContext:gn,useCallback:g9,useContext:gn,useEffect:oy,useImperativeHandle:y9,useInsertionEffect:m9,useLayoutEffect:h9,useMemo:x9,useReducer:tm,useRef:d9,useState:function(){return tm(kl)},useDebugValue:iy,useDeferredValue:function(e){var t=xn();return rt===null?t.memoizedState=e:w9(t,rt.memoizedState,e)},useTransition:function(){var e=tm(kl)[0],t=xn().memoizedState;return[e,t]},useMutableSource:i9,useSyncExternalStore:s9,useId:b9,unstable_isNewReconciler:!1};function _n(e,t){if(e&&e.defaultProps){t=Ue({},t),e=e.defaultProps;for(var n in e)t[n]===void 0&&(t[n]=e[n]);return t}return t}function Sh(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:Ue({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}var kf={isMounted:function(e){return(e=e._reactInternals)?ko(e)===e:!1},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=Rt(),a=xa(e),o=Ar(r,a);o.payload=t,n!=null&&(o.callback=n),t=ya(e,o,a),t!==null&&(Hn(t,e,a,r),Oc(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=Rt(),a=xa(e),o=Ar(r,a);o.tag=1,o.payload=t,n!=null&&(o.callback=n),t=ya(e,o,a),t!==null&&(Hn(t,e,a,r),Oc(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=Rt(),r=xa(e),a=Ar(n,r);a.tag=2,t!=null&&(a.callback=t),t=ya(e,a,r),t!==null&&(Hn(t,e,r,n),Oc(t,e,r))}};function z1(e,t,n,r,a,o,i){return e=e.stateNode,typeof e.shouldComponentUpdate=="function"?e.shouldComponentUpdate(r,o,i):t.prototype&&t.prototype.isPureReactComponent?!gl(n,r)||!gl(a,o):!0}function k9(e,t,n){var r=!1,a=Pa,o=t.contextType;return typeof o=="object"&&o!==null?o=gn(o):(a=Ut(t)?co:At.current,r=t.contextTypes,o=(r=r!=null)?Oi(e,a):Pa),t=new t(n,o),e.memoizedState=t.state!==null&&t.state!==void 0?t.state:null,t.updater=kf,e.stateNode=t,t._reactInternals=e,r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function B1(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps=="function"&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps=="function"&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&kf.enqueueReplaceState(t,t.state,null)}function Ph(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs={},Zv(e);var o=t.contextType;typeof o=="object"&&o!==null?a.context=gn(o):(o=Ut(t)?co:At.current,a.context=Oi(e,o)),a.state=e.memoizedState,o=t.getDerivedStateFromProps,typeof o=="function"&&(Sh(e,t,o,n),a.state=e.memoizedState),typeof t.getDerivedStateFromProps=="function"||typeof a.getSnapshotBeforeUpdate=="function"||typeof a.UNSAFE_componentWillMount!="function"&&typeof a.componentWillMount!="function"||(t=a.state,typeof a.componentWillMount=="function"&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount=="function"&&a.UNSAFE_componentWillMount(),t!==a.state&&kf.enqueueReplaceState(a,a.state,null),Zc(e,n,a,r),a.state=e.memoizedState),typeof a.componentDidMount=="function"&&(e.flags|=4194308)}function Ai(e,t){try{var n="",r=t;do n+=LO(r),r=r.return;while(r);var a=n}catch(o){a=`
+Error generating stack: `+o.message+`
+`+o.stack}return{value:e,source:t,stack:a,digest:null}}function nm(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function Oh(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var pC=typeof WeakMap=="function"?WeakMap:Map;function C9(e,t,n){n=Ar(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){rp||(rp=!0,Mh=r),Oh(e,t)},n}function _9(e,t,n){n=Ar(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){Oh(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){Oh(e,t),typeof r!="function"&&(ga===null?ga=new Set([this]):ga.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function H1(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new pC;var a=new Set;r.set(t,a)}else a=r.get(t),a===void 0&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=kC.bind(null,e,t,n),t.then(e,e))}function G1(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function U1(e,t,n,r,a){return e.mode&1?(e.flags|=65536,e.lanes=a,e):(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=Ar(-1,1),t.tag=2,ya(n,t,1))),n.lanes|=1),e)}var fC=Hr.ReactCurrentOwner,Bt=!1;function jt(e,t,n,r){t.child=e===null?n9(t,null,n,r):Ci(t,e.child,n,r)}function W1(e,t,n,r,a){n=n.render;var o=t.ref;return ai(t,a),r=ry(e,t,n,r,o,a),n=ay(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Ir(e,t,a)):(ze&&n&&Wv(t),t.flags|=1,jt(e,t,r,a),t.child)}function q1(e,t,n,r,a){if(e===null){var o=n.type;return typeof o=="function"&&!my(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,A9(e,t,o,r,a)):(e=Tc(n.type,null,r,t,t.mode,a),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,!(e.lanes&a)){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:gl,n(i,r)&&e.ref===t.ref)return Ir(e,t,a)}return t.flags|=1,e=wa(o,r),e.ref=t.ref,e.return=t,t.child=e}function A9(e,t,n,r,a){if(e!==null){var o=e.memoizedProps;if(gl(o,r)&&e.ref===t.ref)if(Bt=!1,t.pendingProps=r=o,(e.lanes&a)!==0)e.flags&131072&&(Bt=!0);else return t.lanes=e.lanes,Ir(e,t,a)}return kh(e,t,n,r,a)}function E9(e,t,n){var r=t.pendingProps,a=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if(!(t.mode&1))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},je(Yo,Xt),Xt|=n;else{if(!(n&1073741824))return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,je(Yo,Xt),Xt|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,je(Yo,Xt),Xt|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,je(Yo,Xt),Xt|=r;return jt(e,t,a,n),t.child}function T9(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function kh(e,t,n,r,a){var o=Ut(n)?co:At.current;return o=Oi(t,o),ai(t,a),n=ry(e,t,n,r,o,a),r=ay(),e!==null&&!Bt?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Ir(e,t,a)):(ze&&r&&Wv(t),t.flags|=1,jt(e,t,n,a),t.child)}function V1(e,t,n,r,a){if(Ut(n)){var o=!0;Vc(t)}else o=!1;if(ai(t,a),t.stateNode===null)_c(e,t),k9(t,n,r),Ph(t,n,r,a),r=!0;else if(e===null){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,u=n.contextType;typeof u=="object"&&u!==null?u=gn(u):(u=Ut(n)?co:At.current,u=Oi(t,u));var p=n.getDerivedStateFromProps,c=typeof p=="function"||typeof i.getSnapshotBeforeUpdate=="function";c||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==r||l!==u)&&B1(t,i,r,u),Jr=!1;var f=t.memoizedState;i.state=f,Zc(t,r,i,a),l=t.memoizedState,s!==r||f!==l||Gt.current||Jr?(typeof p=="function"&&(Sh(t,n,p,r),l=t.memoizedState),(s=Jr||z1(t,n,s,r,f,l,u))?(c||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=u,r=s):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,a9(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:_n(t.type,s),i.props=u,c=t.pendingProps,f=i.context,l=n.contextType,typeof l=="object"&&l!==null?l=gn(l):(l=Ut(n)?co:At.current,l=Oi(t,l));var d=n.getDerivedStateFromProps;(p=typeof d=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(s!==c||f!==l)&&B1(t,i,r,l),Jr=!1,f=t.memoizedState,i.state=f,Zc(t,r,i,a);var h=t.memoizedState;s!==c||f!==h||Gt.current||Jr?(typeof d=="function"&&(Sh(t,n,d,r),h=t.memoizedState),(u=Jr||z1(t,n,u,r,f,h,l)||!1)?(p||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,h,l),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,h,l)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=u):(typeof i.componentDidUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Ch(e,t,n,r,o,a)}function Ch(e,t,n,r,a,o){T9(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return a&&$1(t,n,!1),Ir(e,t,o);r=t.stateNode,fC.current=t;var s=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=Ci(t,e.child,null,o),t.child=Ci(t,null,s,o)):jt(e,t,s,o),t.memoizedState=r.state,a&&$1(t,n,!0),t.child}function j9(e){var t=e.stateNode;t.pendingContext?j1(e,t.pendingContext,t.pendingContext!==t.context):t.context&&j1(e,t.context,!1),Jv(e,t.containerInfo)}function K1(e,t,n,r,a){return ki(),Vv(a),t.flags|=256,jt(e,t,n,r),t.child}var _h={dehydrated:null,treeContext:null,retryLane:0};function Ah(e){return{baseLanes:e,cachePool:null,transitions:null}}function $9(e,t,n){var r=t.pendingProps,a=He.current,o=!1,i=(t.flags&128)!==0,s;if((s=i)||(s=e!==null&&e.memoizedState===null?!1:(a&2)!==0),s?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(a|=1),je(He,a&1),e===null)return wh(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?(t.mode&1?e.data==="$!"?t.lanes=8:t.lanes=1073741824:t.lanes=1,null):(i=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},!(r&1)&&o!==null?(o.childLanes=0,o.pendingProps=i):o=Af(i,r,0,null),e=so(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=Ah(n),t.memoizedState=_h,e):sy(t,i));if(a=e.memoizedState,a!==null&&(s=a.dehydrated,s!==null))return dC(e,t,i,r,s,a,n);if(o){o=r.fallback,i=t.mode,a=e.child,s=a.sibling;var l={mode:"hidden",children:r.children};return!(i&1)&&t.child!==a?(r=t.child,r.childLanes=0,r.pendingProps=l,t.deletions=null):(r=wa(a,l),r.subtreeFlags=a.subtreeFlags&14680064),s!==null?o=wa(s,o):(o=so(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?Ah(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=_h,r}return o=e.child,e=o.sibling,r=wa(o,{mode:"visible",children:r.children}),!(t.mode&1)&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function sy(e,t){return t=Af({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Ku(e,t,n,r){return r!==null&&Vv(r),Ci(t,e.child,null,n),e=sy(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function dC(e,t,n,r,a,o,i){if(n)return t.flags&256?(t.flags&=-257,r=nm(Error(U(422))),Ku(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,a=t.mode,r=Af({mode:"visible",children:r.children},a,0,null),o=so(o,a,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,t.mode&1&&Ci(t,e.child,null,i),t.child.memoizedState=Ah(i),t.memoizedState=_h,o);if(!(t.mode&1))return Ku(e,t,i,null);if(a.data==="$!"){if(r=a.nextSibling&&a.nextSibling.dataset,r)var s=r.dgst;return r=s,o=Error(U(419)),r=nm(o,r,void 0),Ku(e,t,i,r)}if(s=(i&e.childLanes)!==0,Bt||s){if(r=ut,r!==null){switch(i&-i){case 4:a=2;break;case 16:a=8;break;case 64: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:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}a=a&(r.suspendedLanes|i)?0:a,a!==0&&a!==o.retryLane&&(o.retryLane=a,Rr(e,a),Hn(r,e,a,-1))}return dy(),r=nm(Error(U(421))),Ku(e,t,i,r)}return a.data==="$?"?(t.flags|=128,t.child=e.child,t=CC.bind(null,e),a._reactRetry=t,null):(e=o.treeContext,Jt=va(a.nextSibling),tn=t,ze=!0,Mn=null,e!==null&&(pn[fn++]=Pr,pn[fn++]=Or,pn[fn++]=po,Pr=e.id,Or=e.overflow,po=t),t=sy(t,r.children),t.flags|=4096,t)}function X1(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),bh(e.return,t,n)}function rm(e,t,n,r,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function N9(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(jt(e,t,r.children,n),r=He.current,r&2)r=r&1|2,t.flags|=128;else{if(e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&X1(e,n,t);else if(e.tag===19)X1(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(je(He,r),!(t.mode&1))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;n!==null;)e=n.alternate,e!==null&&Jc(e)===null&&(a=n),n=n.sibling;n=a,n===null?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),rm(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;a!==null;){if(e=a.alternate,e!==null&&Jc(e)===null){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}rm(t,!0,n,null,o);break;case"together":rm(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function _c(e,t){!(t.mode&1)&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Ir(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),mo|=t.lanes,!(n&t.childLanes))return null;if(e!==null&&t.child!==e.child)throw Error(U(153));if(t.child!==null){for(e=t.child,n=wa(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=wa(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function mC(e,t,n){switch(t.tag){case 3:j9(t),ki();break;case 5:o9(t);break;case 1:Ut(t.type)&&Vc(t);break;case 4:Jv(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;je(Yc,r._currentValue),r._currentValue=a;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(je(He,He.current&1),t.flags|=128,null):n&t.child.childLanes?$9(e,t,n):(je(He,He.current&1),e=Ir(e,t,n),e!==null?e.sibling:null);je(He,He.current&1);break;case 19:if(r=(n&t.childLanes)!==0,e.flags&128){if(r)return N9(e,t,n);t.flags|=128}if(a=t.memoizedState,a!==null&&(a.rendering=null,a.tail=null,a.lastEffect=null),je(He,He.current),r)break;return null;case 22:case 23:return t.lanes=0,E9(e,t,n)}return Ir(e,t,n)}var M9,Eh,R9,I9;M9=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};Eh=function(){};R9=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Ka(lr.current);var o=null;switch(n){case"input":a=Qm(e,a),r=Qm(e,r),o=[];break;case"select":a=Ue({},a,{value:void 0}),r=Ue({},r,{value:void 0}),o=[];break;case"textarea":a=eh(e,a),r=eh(e,r),o=[];break;default:typeof a.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=Wc)}nh(n,r);var i;n=null;for(u in a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&a[u]!=null)if(u==="style"){var s=a[u];for(i in s)s.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else u!=="dangerouslySetInnerHTML"&&u!=="children"&&u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&u!=="autoFocus"&&(pl.hasOwnProperty(u)?o||(o=[]):(o=o||[]).push(u,null));for(u in r){var l=r[u];if(s=a!=null?a[u]:void 0,r.hasOwnProperty(u)&&l!==s&&(l!=null||s!=null))if(u==="style")if(s){for(i in s)!s.hasOwnProperty(i)||l&&l.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in l)l.hasOwnProperty(i)&&s[i]!==l[i]&&(n||(n={}),n[i]=l[i])}else n||(o||(o=[]),o.push(u,n)),n=l;else u==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,s=s?s.__html:void 0,l!=null&&s!==l&&(o=o||[]).push(u,l)):u==="children"?typeof l!="string"&&typeof l!="number"||(o=o||[]).push(u,""+l):u!=="suppressContentEditableWarning"&&u!=="suppressHydrationWarning"&&(pl.hasOwnProperty(u)?(l!=null&&u==="onScroll"&&Ie("scroll",e),o||s===l||(o=[])):(o=o||[]).push(u,l))}n&&(o=o||[]).push("style",n);var u=o;(t.updateQueue=u)&&(t.flags|=4)}};I9=function(e,t,n,r){n!==r&&(t.flags|=4)};function js(e,t){if(!ze)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function wt(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags&14680064,r|=a.flags&14680064,a.return=e,a=a.sibling;else for(a=e.child;a!==null;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function hC(e,t,n){var r=t.pendingProps;switch(qv(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return wt(t),null;case 1:return Ut(t.type)&&qc(),wt(t),null;case 3:return r=t.stateNode,_i(),Fe(Gt),Fe(At),ty(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(qu(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,Mn!==null&&(Dh(Mn),Mn=null))),Eh(e,t),wt(t),null;case 5:ey(t);var a=Ka(Pl.current);if(n=t.type,e!==null&&t.stateNode!=null)R9(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(U(166));return wt(t),null}if(e=Ka(lr.current),qu(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[er]=t,r[bl]=o,e=(t.mode&1)!==0,n){case"dialog":Ie("cancel",r),Ie("close",r);break;case"iframe":case"object":case"embed":Ie("load",r);break;case"video":case"audio":for(a=0;a<Ks.length;a++)Ie(Ks[a],r);break;case"source":Ie("error",r);break;case"img":case"image":case"link":Ie("error",r),Ie("load",r);break;case"details":Ie("toggle",r);break;case"input":a1(r,o),Ie("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!o.multiple},Ie("invalid",r);break;case"textarea":i1(r,o),Ie("invalid",r)}nh(n,o),a=null;for(var i in o)if(o.hasOwnProperty(i)){var s=o[i];i==="children"?typeof s=="string"?r.textContent!==s&&(o.suppressHydrationWarning!==!0&&Wu(r.textContent,s,e),a=["children",s]):typeof s=="number"&&r.textContent!==""+s&&(o.suppressHydrationWarning!==!0&&Wu(r.textContent,s,e),a=["children",""+s]):pl.hasOwnProperty(i)&&s!=null&&i==="onScroll"&&Ie("scroll",r)}switch(n){case"input":Du(r),o1(r,o,!0);break;case"textarea":Du(r),s1(r);break;case"select":case"option":break;default:typeof o.onClick=="function"&&(r.onclick=Wc)}r=a,t.updateQueue=r,r!==null&&(t.flags|=4)}else{i=a.nodeType===9?a:a.ownerDocument,e==="http://www.w3.org/1999/xhtml"&&(e=c5(n)),e==="http://www.w3.org/1999/xhtml"?n==="script"?(e=i.createElement("div"),e.innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[er]=t,e[bl]=r,M9(e,t,!1,!1),t.stateNode=e;e:{switch(i=rh(n,r),n){case"dialog":Ie("cancel",e),Ie("close",e),a=r;break;case"iframe":case"object":case"embed":Ie("load",e),a=r;break;case"video":case"audio":for(a=0;a<Ks.length;a++)Ie(Ks[a],e);a=r;break;case"source":Ie("error",e),a=r;break;case"img":case"image":case"link":Ie("error",e),Ie("load",e),a=r;break;case"details":Ie("toggle",e),a=r;break;case"input":a1(e,r),a=Qm(e,r),Ie("invalid",e);break;case"option":a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=Ue({},r,{value:void 0}),Ie("invalid",e);break;case"textarea":i1(e,r),a=eh(e,r),Ie("invalid",e);break;default:a=r}nh(n,a),s=a;for(o in s)if(s.hasOwnProperty(o)){var l=s[o];o==="style"?d5(e,l):o==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&p5(e,l)):o==="children"?typeof l=="string"?(n!=="textarea"||l!=="")&&fl(e,l):typeof l=="number"&&fl(e,""+l):o!=="suppressContentEditableWarning"&&o!=="suppressHydrationWarning"&&o!=="autoFocus"&&(pl.hasOwnProperty(o)?l!=null&&o==="onScroll"&&Ie("scroll",e):l!=null&&jv(e,o,l,i))}switch(n){case"input":Du(e),o1(e,r,!1);break;case"textarea":Du(e),s1(e);break;case"option":r.value!=null&&e.setAttribute("value",""+Sa(r.value));break;case"select":e.multiple=!!r.multiple,o=r.value,o!=null?ei(e,!!r.multiple,o,!1):r.defaultValue!=null&&ei(e,!!r.multiple,r.defaultValue,!0);break;default:typeof a.onClick=="function"&&(e.onclick=Wc)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}t.ref!==null&&(t.flags|=512,t.flags|=2097152)}return wt(t),null;case 6:if(e&&t.stateNode!=null)I9(e,t,e.memoizedProps,r);else{if(typeof r!="string"&&t.stateNode===null)throw Error(U(166));if(n=Ka(Pl.current),Ka(lr.current),qu(t)){if(r=t.stateNode,n=t.memoizedProps,r[er]=t,(o=r.nodeValue!==n)&&(e=tn,e!==null))switch(e.tag){case 3:Wu(r.nodeValue,n,(e.mode&1)!==0);break;case 5:e.memoizedProps.suppressHydrationWarning!==!0&&Wu(r.nodeValue,n,(e.mode&1)!==0)}o&&(t.flags|=4)}else r=(n.nodeType===9?n:n.ownerDocument).createTextNode(r),r[er]=t,t.stateNode=r}return wt(t),null;case 13:if(Fe(He),r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(ze&&Jt!==null&&t.mode&1&&!(t.flags&128))e9(),ki(),t.flags|=98560,o=!1;else if(o=qu(t),r!==null&&r.dehydrated!==null){if(e===null){if(!o)throw Error(U(318));if(o=t.memoizedState,o=o!==null?o.dehydrated:null,!o)throw Error(U(317));o[er]=t}else ki(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;wt(t),o=!1}else Mn!==null&&(Dh(Mn),Mn=null),o=!0;if(!o)return t.flags&65536?t:null}return t.flags&128?(t.lanes=n,t):(r=r!==null,r!==(e!==null&&e.memoizedState!==null)&&r&&(t.child.flags|=8192,t.mode&1&&(e===null||He.current&1?at===0&&(at=3):dy())),t.updateQueue!==null&&(t.flags|=4),wt(t),null);case 4:return _i(),Eh(e,t),e===null&&xl(t.stateNode.containerInfo),wt(t),null;case 10:return Yv(t.type._context),wt(t),null;case 17:return Ut(t.type)&&qc(),wt(t),null;case 19:if(Fe(He),o=t.memoizedState,o===null)return wt(t),null;if(r=(t.flags&128)!==0,i=o.rendering,i===null)if(r)js(o,!1);else{if(at!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(i=Jc(e),i!==null){for(t.flags|=128,js(o,!1),r=i.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;n!==null;)o=n,e=r,o.flags&=14680066,i=o.alternate,i===null?(o.childLanes=0,o.lanes=e,o.child=null,o.subtreeFlags=0,o.memoizedProps=null,o.memoizedState=null,o.updateQueue=null,o.dependencies=null,o.stateNode=null):(o.childLanes=i.childLanes,o.lanes=i.lanes,o.child=i.child,o.subtreeFlags=0,o.deletions=null,o.memoizedProps=i.memoizedProps,o.memoizedState=i.memoizedState,o.updateQueue=i.updateQueue,o.type=i.type,e=i.dependencies,o.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return je(He,He.current&1|2),t.child}e=e.sibling}o.tail!==null&&Xe()>Ei&&(t.flags|=128,r=!0,js(o,!1),t.lanes=4194304)}else{if(!r)if(e=Jc(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),js(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!ze)return wt(t),null}else 2*Xe()-o.renderingStartTime>Ei&&n!==1073741824&&(t.flags|=128,r=!0,js(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Xe(),t.sibling=null,n=He.current,je(He,r?n&1|2:n&1),t):(wt(t),null);case 22:case 23:return fy(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Xt&1073741824&&(wt(t),t.subtreeFlags&6&&(t.flags|=8192)):wt(t),null;case 24:return null;case 25:return null}throw Error(U(156,t.tag))}function vC(e,t){switch(qv(t),t.tag){case 1:return Ut(t.type)&&qc(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return _i(),Fe(Gt),Fe(At),ty(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return ey(t),null;case 13:if(Fe(He),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(U(340));ki()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Fe(He),null;case 4:return _i(),null;case 10:return Yv(t.type._context),null;case 22:case 23:return fy(),null;case 24:return null;default:return null}}var Xu=!1,Ot=!1,yC=typeof WeakSet=="function"?WeakSet:Set,Y=null;function Xo(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){qe(e,t,r)}else n.current=null}function Th(e,t,n){try{n()}catch(r){qe(e,t,r)}}var Y1=!1;function gC(e,t){if(dh=Hc,e=B5(),Uv(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,s=-1,l=-1,u=0,p=0,c=e,f=null;t:for(;;){for(var d;c!==n||a!==0&&c.nodeType!==3||(s=i+a),c!==o||r!==0&&c.nodeType!==3||(l=i+r),c.nodeType===3&&(i+=c.nodeValue.length),(d=c.firstChild)!==null;)f=c,c=d;for(;;){if(c===e)break t;if(f===n&&++u===a&&(s=i),f===o&&++p===r&&(l=i),(d=c.nextSibling)!==null)break;c=f,f=c.parentNode}c=d}n=s===-1||l===-1?null:{start:s,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(mh={focusedElem:e,selectionRange:n},Hc=!1,Y=t;Y!==null;)if(t=Y,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Y=e;else for(;Y!==null;){t=Y;try{var h=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(h!==null){var m=h.memoizedProps,g=h.memoizedState,v=t.stateNode,y=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:_n(t.type,m),g);v.__reactInternalSnapshotBeforeUpdate=y}break;case 3:var x=t.stateNode.containerInfo;x.nodeType===1?x.textContent="":x.nodeType===9&&x.documentElement&&x.removeChild(x.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(U(163))}}catch(S){qe(t,t.return,S)}if(e=t.sibling,e!==null){e.return=t.return,Y=e;break}Y=t.return}return h=Y1,Y1=!1,h}function rl(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,o!==void 0&&Th(t,n,o)}a=a.next}while(a!==r)}}function Cf(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function jh(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function D9(e){var t=e.alternate;t!==null&&(e.alternate=null,D9(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[er],delete t[bl],delete t[yh],delete t[eC],delete t[tC])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function L9(e){return e.tag===5||e.tag===3||e.tag===4}function Q1(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||L9(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.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 $h(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Wc));else if(r!==4&&(e=e.child,e!==null))for($h(e,t,n),e=e.sibling;e!==null;)$h(e,t,n),e=e.sibling}function Nh(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Nh(e,t,n),e=e.sibling;e!==null;)Nh(e,t,n),e=e.sibling}var ft=null,jn=!1;function qr(e,t,n){for(n=n.child;n!==null;)F9(e,t,n),n=n.sibling}function F9(e,t,n){if(sr&&typeof sr.onCommitFiberUnmount=="function")try{sr.onCommitFiberUnmount(gf,n)}catch{}switch(n.tag){case 5:Ot||Xo(n,t);case 6:var r=ft,a=jn;ft=null,qr(e,t,n),ft=r,jn=a,ft!==null&&(jn?(e=ft,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ft.removeChild(n.stateNode));break;case 18:ft!==null&&(jn?(e=ft,n=n.stateNode,e.nodeType===8?Yd(e.parentNode,n):e.nodeType===1&&Yd(e,n),vl(e)):Yd(ft,n.stateNode));break;case 4:r=ft,a=jn,ft=n.stateNode.containerInfo,jn=!0,qr(e,t,n),ft=r,jn=a;break;case 0:case 11:case 14:case 15:if(!Ot&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Th(n,t,i),a=a.next}while(a!==r)}qr(e,t,n);break;case 1:if(!Ot&&(Xo(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){qe(n,t,s)}qr(e,t,n);break;case 21:qr(e,t,n);break;case 22:n.mode&1?(Ot=(r=Ot)||n.memoizedState!==null,qr(e,t,n),Ot=r):qr(e,t,n);break;default:qr(e,t,n)}}function Z1(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new yC),t.forEach(function(r){var a=_C.bind(null,e,r);n.has(r)||(n.add(r),r.then(a,a))})}}function On(e,t){var n=t.deletions;if(n!==null)for(var r=0;r<n.length;r++){var a=n[r];try{var o=e,i=t,s=i;e:for(;s!==null;){switch(s.tag){case 5:ft=s.stateNode,jn=!1;break e;case 3:ft=s.stateNode.containerInfo,jn=!0;break e;case 4:ft=s.stateNode.containerInfo,jn=!0;break e}s=s.return}if(ft===null)throw Error(U(160));F9(o,i,a),ft=null,jn=!1;var l=a.alternate;l!==null&&(l.return=null),a.return=null}catch(u){qe(a,t,u)}}if(t.subtreeFlags&12854)for(t=t.child;t!==null;)z9(t,e),t=t.sibling}function z9(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(On(t,e),Kn(e),r&4){try{rl(3,e,e.return),Cf(3,e)}catch(m){qe(e,e.return,m)}try{rl(5,e,e.return)}catch(m){qe(e,e.return,m)}}break;case 1:On(t,e),Kn(e),r&512&&n!==null&&Xo(n,n.return);break;case 5:if(On(t,e),Kn(e),r&512&&n!==null&&Xo(n,n.return),e.flags&32){var a=e.stateNode;try{fl(a,"")}catch(m){qe(e,e.return,m)}}if(r&4&&(a=e.stateNode,a!=null)){var o=e.memoizedProps,i=n!==null?n.memoizedProps:o,s=e.type,l=e.updateQueue;if(e.updateQueue=null,l!==null)try{s==="input"&&o.type==="radio"&&o.name!=null&&l5(a,o),rh(s,i);var u=rh(s,o);for(i=0;i<l.length;i+=2){var p=l[i],c=l[i+1];p==="style"?d5(a,c):p==="dangerouslySetInnerHTML"?p5(a,c):p==="children"?fl(a,c):jv(a,p,c,u)}switch(s){case"input":Zm(a,o);break;case"textarea":u5(a,o);break;case"select":var f=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!o.multiple;var d=o.value;d!=null?ei(a,!!o.multiple,d,!1):f!==!!o.multiple&&(o.defaultValue!=null?ei(a,!!o.multiple,o.defaultValue,!0):ei(a,!!o.multiple,o.multiple?[]:"",!1))}a[bl]=o}catch(m){qe(e,e.return,m)}}break;case 6:if(On(t,e),Kn(e),r&4){if(e.stateNode===null)throw Error(U(162));a=e.stateNode,o=e.memoizedProps;try{a.nodeValue=o}catch(m){qe(e,e.return,m)}}break;case 3:if(On(t,e),Kn(e),r&4&&n!==null&&n.memoizedState.isDehydrated)try{vl(t.containerInfo)}catch(m){qe(e,e.return,m)}break;case 4:On(t,e),Kn(e);break;case 13:On(t,e),Kn(e),a=e.child,a.flags&8192&&(o=a.memoizedState!==null,a.stateNode.isHidden=o,!o||a.alternate!==null&&a.alternate.memoizedState!==null||(cy=Xe())),r&4&&Z1(e);break;case 22:if(p=n!==null&&n.memoizedState!==null,e.mode&1?(Ot=(u=Ot)||p,On(t,e),Ot=u):On(t,e),Kn(e),r&8192){if(u=e.memoizedState!==null,(e.stateNode.isHidden=u)&&!p&&e.mode&1)for(Y=e,p=e.child;p!==null;){for(c=Y=p;Y!==null;){switch(f=Y,d=f.child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:Xo(f,f.return);var h=f.stateNode;if(typeof h.componentWillUnmount=="function"){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(m){qe(r,n,m)}}break;case 5:Xo(f,f.return);break;case 22:if(f.memoizedState!==null){ex(c);continue}}d!==null?(d.return=f,Y=d):ex(c)}p=p.sibling}e:for(p=null,c=e;;){if(c.tag===5){if(p===null){p=c;try{a=c.stateNode,u?(o=a.style,typeof o.setProperty=="function"?o.setProperty("display","none","important"):o.display="none"):(s=c.stateNode,l=c.memoizedProps.style,i=l!=null&&l.hasOwnProperty("display")?l.display:null,s.style.display=f5("display",i))}catch(m){qe(e,e.return,m)}}}else if(c.tag===6){if(p===null)try{c.stateNode.nodeValue=u?"":c.memoizedProps}catch(m){qe(e,e.return,m)}}else if((c.tag!==22&&c.tag!==23||c.memoizedState===null||c===e)&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===e)break e;for(;c.sibling===null;){if(c.return===null||c.return===e)break e;p===c&&(p=null),c=c.return}p===c&&(p=null),c.sibling.return=c.return,c=c.sibling}}break;case 19:On(t,e),Kn(e),r&4&&Z1(e);break;case 21:break;default:On(t,e),Kn(e)}}function Kn(e){var t=e.flags;if(t&2){try{e:{for(var n=e.return;n!==null;){if(L9(n)){var r=n;break e}n=n.return}throw Error(U(160))}switch(r.tag){case 5:var a=r.stateNode;r.flags&32&&(fl(a,""),r.flags&=-33);var o=Q1(e);Nh(e,o,a);break;case 3:case 4:var i=r.stateNode.containerInfo,s=Q1(e);$h(e,s,i);break;default:throw Error(U(161))}}catch(l){qe(e,e.return,l)}e.flags&=-3}t&4096&&(e.flags&=-4097)}function xC(e,t,n){Y=e,B9(e)}function B9(e,t,n){for(var r=(e.mode&1)!==0;Y!==null;){var a=Y,o=a.child;if(a.tag===22&&r){var i=a.memoizedState!==null||Xu;if(!i){var s=a.alternate,l=s!==null&&s.memoizedState!==null||Ot;s=Xu;var u=Ot;if(Xu=i,(Ot=l)&&!u)for(Y=a;Y!==null;)i=Y,l=i.child,i.tag===22&&i.memoizedState!==null?tx(a):l!==null?(l.return=i,Y=l):tx(a);for(;o!==null;)Y=o,B9(o),o=o.sibling;Y=a,Xu=s,Ot=u}J1(e)}else a.subtreeFlags&8772&&o!==null?(o.return=a,Y=o):J1(e)}}function J1(e){for(;Y!==null;){var t=Y;if(t.flags&8772){var n=t.alternate;try{if(t.flags&8772)switch(t.tag){case 0:case 11:case 15:Ot||Cf(5,t);break;case 1:var r=t.stateNode;if(t.flags&4&&!Ot)if(n===null)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:_n(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var o=t.updateQueue;o!==null&&D1(t,o,r);break;case 3:var i=t.updateQueue;if(i!==null){if(n=null,t.child!==null)switch(t.child.tag){case 5:n=t.child.stateNode;break;case 1:n=t.child.stateNode}D1(t,i,n)}break;case 5:var s=t.stateNode;if(n===null&&t.flags&4){n=s;var l=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(t.memoizedState===null){var u=t.alternate;if(u!==null){var p=u.memoizedState;if(p!==null){var c=p.dehydrated;c!==null&&vl(c)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(U(163))}Ot||t.flags&512&&jh(t)}catch(f){qe(t,t.return,f)}}if(t===e){Y=null;break}if(n=t.sibling,n!==null){n.return=t.return,Y=n;break}Y=t.return}}function ex(e){for(;Y!==null;){var t=Y;if(t===e){Y=null;break}var n=t.sibling;if(n!==null){n.return=t.return,Y=n;break}Y=t.return}}function tx(e){for(;Y!==null;){var t=Y;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{Cf(4,t)}catch(l){qe(t,n,l)}break;case 1:var r=t.stateNode;if(typeof r.componentDidMount=="function"){var a=t.return;try{r.componentDidMount()}catch(l){qe(t,a,l)}}var o=t.return;try{jh(t)}catch(l){qe(t,o,l)}break;case 5:var i=t.return;try{jh(t)}catch(l){qe(t,i,l)}}}catch(l){qe(t,t.return,l)}if(t===e){Y=null;break}var s=t.sibling;if(s!==null){s.return=t.return,Y=s;break}Y=t.return}}var wC=Math.ceil,np=Hr.ReactCurrentDispatcher,ly=Hr.ReactCurrentOwner,hn=Hr.ReactCurrentBatchConfig,de=0,ut=null,Je=null,vt=0,Xt=0,Yo=Aa(0),at=0,_l=null,mo=0,_f=0,uy=0,al=null,Ft=null,cy=0,Ei=1/0,wr=null,rp=!1,Mh=null,ga=null,Yu=!1,ca=null,ap=0,ol=0,Rh=null,Ac=-1,Ec=0;function Rt(){return de&6?Xe():Ac!==-1?Ac:Ac=Xe()}function xa(e){return e.mode&1?de&2&&vt!==0?vt&-vt:rC.transition!==null?(Ec===0&&(Ec=k5()),Ec):(e=Oe,e!==0||(e=window.event,e=e===void 0?16:$5(e.type)),e):1}function Hn(e,t,n,r){if(50<ol)throw ol=0,Rh=null,Error(U(185));gu(e,n,r),(!(de&2)||e!==ut)&&(e===ut&&(!(de&2)&&(_f|=n),at===4&&na(e,vt)),Wt(e,r),n===1&&de===0&&!(t.mode&1)&&(Ei=Xe()+500,Pf&&Ea()))}function Wt(e,t){var n=e.callbackNode;rk(e,t);var r=Bc(e,e===ut?vt:0);if(r===0)n!==null&&c1(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(n!=null&&c1(n),t===1)e.tag===0?nC(nx.bind(null,e)):Q5(nx.bind(null,e)),Zk(function(){!(de&6)&&Ea()}),n=null;else{switch(C5(r)){case 1:n=Iv;break;case 4:n=P5;break;case 16:n=zc;break;case 536870912:n=O5;break;default:n=zc}n=X9(n,H9.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function H9(e,t){if(Ac=-1,Ec=0,de&6)throw Error(U(327));var n=e.callbackNode;if(oi()&&e.callbackNode!==n)return null;var r=Bc(e,e===ut?vt:0);if(r===0)return null;if(r&30||r&e.expiredLanes||t)t=op(e,r);else{t=r;var a=de;de|=2;var o=U9();(ut!==e||vt!==t)&&(wr=null,Ei=Xe()+500,io(e,t));do try{PC();break}catch(s){G9(e,s)}while(!0);Xv(),np.current=o,de=a,Je!==null?t=0:(ut=null,vt=0,t=at)}if(t!==0){if(t===2&&(a=lh(e),a!==0&&(r=a,t=Ih(e,a))),t===1)throw n=_l,io(e,0),na(e,r),Wt(e,Xe()),n;if(t===6)na(e,r);else{if(a=e.current.alternate,!(r&30)&&!bC(a)&&(t=op(e,r),t===2&&(o=lh(e),o!==0&&(r=o,t=Ih(e,o))),t===1))throw n=_l,io(e,0),na(e,r),Wt(e,Xe()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(U(345));case 2:Ha(e,Ft,wr);break;case 3:if(na(e,r),(r&130023424)===r&&(t=cy+500-Xe(),10<t)){if(Bc(e,0)!==0)break;if(a=e.suspendedLanes,(a&r)!==r){Rt(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=vh(Ha.bind(null,e,Ft,wr),t);break}Ha(e,Ft,wr);break;case 4:if(na(e,r),(r&4194240)===r)break;for(t=e.eventTimes,a=-1;0<r;){var i=31-Bn(r);o=1<<i,i=t[i],i>a&&(a=i),r&=~o}if(r=a,r=Xe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*wC(r/1960))-r,10<r){e.timeoutHandle=vh(Ha.bind(null,e,Ft,wr),r);break}Ha(e,Ft,wr);break;case 5:Ha(e,Ft,wr);break;default:throw Error(U(329))}}}return Wt(e,Xe()),e.callbackNode===n?H9.bind(null,e):null}function Ih(e,t){var n=al;return e.current.memoizedState.isDehydrated&&(io(e,t).flags|=256),e=op(e,t),e!==2&&(t=Ft,Ft=n,t!==null&&Dh(t)),e}function Dh(e){Ft===null?Ft=e:Ft.push.apply(Ft,e)}function bC(e){for(var t=e;;){if(t.flags&16384){var n=t.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!Gn(o(),a))return!1}catch{return!1}}}if(n=t.child,t.subtreeFlags&16384&&n!==null)n.return=t,t=n;else{if(t===e)break;for(;t.sibling===null;){if(t.return===null||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}function na(e,t){for(t&=~uy,t&=~_f,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Bn(t),r=1<<n;e[n]=-1,t&=~r}}function nx(e){if(de&6)throw Error(U(327));oi();var t=Bc(e,0);if(!(t&1))return Wt(e,Xe()),null;var n=op(e,t);if(e.tag!==0&&n===2){var r=lh(e);r!==0&&(t=r,n=Ih(e,r))}if(n===1)throw n=_l,io(e,0),na(e,t),Wt(e,Xe()),n;if(n===6)throw Error(U(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,Ha(e,Ft,wr),Wt(e,Xe()),null}function py(e,t){var n=de;de|=1;try{return e(t)}finally{de=n,de===0&&(Ei=Xe()+500,Pf&&Ea())}}function ho(e){ca!==null&&ca.tag===0&&!(de&6)&&oi();var t=de;de|=1;var n=hn.transition,r=Oe;try{if(hn.transition=null,Oe=1,e)return e()}finally{Oe=r,hn.transition=n,de=t,!(de&6)&&Ea()}}function fy(){Xt=Yo.current,Fe(Yo)}function io(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(n!==-1&&(e.timeoutHandle=-1,Qk(n)),Je!==null)for(n=Je.return;n!==null;){var r=n;switch(qv(r),r.tag){case 1:r=r.type.childContextTypes,r!=null&&qc();break;case 3:_i(),Fe(Gt),Fe(At),ty();break;case 5:ey(r);break;case 4:_i();break;case 13:Fe(He);break;case 19:Fe(He);break;case 10:Yv(r.type._context);break;case 22:case 23:fy()}n=n.return}if(ut=e,Je=e=wa(e.current,null),vt=Xt=t,at=0,_l=null,uy=_f=mo=0,Ft=al=null,Va!==null){for(t=0;t<Va.length;t++)if(n=Va[t],r=n.interleaved,r!==null){n.interleaved=null;var a=r.next,o=n.pending;if(o!==null){var i=o.next;o.next=a,r.next=i}n.pending=r}Va=null}return e}function G9(e,t){do{var n=Je;try{if(Xv(),kc.current=tp,ep){for(var r=Ge.memoizedState;r!==null;){var a=r.queue;a!==null&&(a.pending=null),r=r.next}ep=!1}if(fo=0,lt=rt=Ge=null,nl=!1,Ol=0,ly.current=null,n===null||n.return===null){at=1,_l=t,Je=null;break}e:{var o=e,i=n.return,s=n,l=t;if(t=vt,s.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){var u=l,p=s,c=p.tag;if(!(p.mode&1)&&(c===0||c===11||c===15)){var f=p.alternate;f?(p.updateQueue=f.updateQueue,p.memoizedState=f.memoizedState,p.lanes=f.lanes):(p.updateQueue=null,p.memoizedState=null)}var d=G1(i);if(d!==null){d.flags&=-257,U1(d,i,s,o,t),d.mode&1&&H1(o,u,t),t=d,l=u;var h=t.updateQueue;if(h===null){var m=new Set;m.add(l),t.updateQueue=m}else h.add(l);break e}else{if(!(t&1)){H1(o,u,t),dy();break e}l=Error(U(426))}}else if(ze&&s.mode&1){var g=G1(i);if(g!==null){!(g.flags&65536)&&(g.flags|=256),U1(g,i,s,o,t),Vv(Ai(l,s));break e}}o=l=Ai(l,s),at!==4&&(at=2),al===null?al=[o]:al.push(o),o=i;do{switch(o.tag){case 3:o.flags|=65536,t&=-t,o.lanes|=t;var v=C9(o,l,t);I1(o,v);break e;case 1:s=l;var y=o.type,x=o.stateNode;if(!(o.flags&128)&&(typeof y.getDerivedStateFromError=="function"||x!==null&&typeof x.componentDidCatch=="function"&&(ga===null||!ga.has(x)))){o.flags|=65536,t&=-t,o.lanes|=t;var S=_9(o,s,t);I1(o,S);break e}}o=o.return}while(o!==null)}q9(n)}catch(w){t=w,Je===n&&n!==null&&(Je=n=n.return);continue}break}while(!0)}function U9(){var e=np.current;return np.current=tp,e===null?tp:e}function dy(){(at===0||at===3||at===2)&&(at=4),ut===null||!(mo&268435455)&&!(_f&268435455)||na(ut,vt)}function op(e,t){var n=de;de|=2;var r=U9();(ut!==e||vt!==t)&&(wr=null,io(e,t));do try{SC();break}catch(a){G9(e,a)}while(!0);if(Xv(),de=n,np.current=r,Je!==null)throw Error(U(261));return ut=null,vt=0,at}function SC(){for(;Je!==null;)W9(Je)}function PC(){for(;Je!==null&&!KO();)W9(Je)}function W9(e){var t=K9(e.alternate,e,Xt);e.memoizedProps=e.pendingProps,t===null?q9(e):Je=t,ly.current=null}function q9(e){var t=e;do{var n=t.alternate;if(e=t.return,t.flags&32768){if(n=vC(n,t),n!==null){n.flags&=32767,Je=n;return}if(e!==null)e.flags|=32768,e.subtreeFlags=0,e.deletions=null;else{at=6,Je=null;return}}else if(n=hC(n,t,Xt),n!==null){Je=n;return}if(t=t.sibling,t!==null){Je=t;return}Je=t=e}while(t!==null);at===0&&(at=5)}function Ha(e,t,n){var r=Oe,a=hn.transition;try{hn.transition=null,Oe=1,OC(e,t,n,r)}finally{hn.transition=a,Oe=r}return null}function OC(e,t,n,r){do oi();while(ca!==null);if(de&6)throw Error(U(327));n=e.finishedWork;var a=e.finishedLanes;if(n===null)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(U(177));e.callbackNode=null,e.callbackPriority=0;var o=n.lanes|n.childLanes;if(ak(e,o),e===ut&&(Je=ut=null,vt=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||Yu||(Yu=!0,X9(zc,function(){return oi(),null})),o=(n.flags&15990)!==0,n.subtreeFlags&15990||o){o=hn.transition,hn.transition=null;var i=Oe;Oe=1;var s=de;de|=4,ly.current=null,gC(e,n),z9(n,e),Uk(mh),Hc=!!dh,mh=dh=null,e.current=n,xC(n),XO(),de=s,Oe=i,hn.transition=o}else e.current=n;if(Yu&&(Yu=!1,ca=e,ap=a),o=e.pendingLanes,o===0&&(ga=null),ZO(n.stateNode),Wt(e,Xe()),t!==null)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(rp)throw rp=!1,e=Mh,Mh=null,e;return ap&1&&e.tag!==0&&oi(),o=e.pendingLanes,o&1?e===Rh?ol++:(ol=0,Rh=e):ol=0,Ea(),null}function oi(){if(ca!==null){var e=C5(ap),t=hn.transition,n=Oe;try{if(hn.transition=null,Oe=16>e?16:e,ca===null)var r=!1;else{if(e=ca,ca=null,ap=0,de&6)throw Error(U(331));var a=de;for(de|=4,Y=e.current;Y!==null;){var o=Y,i=o.child;if(Y.flags&16){var s=o.deletions;if(s!==null){for(var l=0;l<s.length;l++){var u=s[l];for(Y=u;Y!==null;){var p=Y;switch(p.tag){case 0:case 11:case 15:rl(8,p,o)}var c=p.child;if(c!==null)c.return=p,Y=c;else for(;Y!==null;){p=Y;var f=p.sibling,d=p.return;if(D9(p),p===u){Y=null;break}if(f!==null){f.return=d,Y=f;break}Y=d}}}var h=o.alternate;if(h!==null){var m=h.child;if(m!==null){h.child=null;do{var g=m.sibling;m.sibling=null,m=g}while(m!==null)}}Y=o}}if(o.subtreeFlags&2064&&i!==null)i.return=o,Y=i;else e:for(;Y!==null;){if(o=Y,o.flags&2048)switch(o.tag){case 0:case 11:case 15:rl(9,o,o.return)}var v=o.sibling;if(v!==null){v.return=o.return,Y=v;break e}Y=o.return}}var y=e.current;for(Y=y;Y!==null;){i=Y;var x=i.child;if(i.subtreeFlags&2064&&x!==null)x.return=i,Y=x;else e:for(i=y;Y!==null;){if(s=Y,s.flags&2048)try{switch(s.tag){case 0:case 11:case 15:Cf(9,s)}}catch(w){qe(s,s.return,w)}if(s===i){Y=null;break e}var S=s.sibling;if(S!==null){S.return=s.return,Y=S;break e}Y=s.return}}if(de=a,Ea(),sr&&typeof sr.onPostCommitFiberRoot=="function")try{sr.onPostCommitFiberRoot(gf,e)}catch{}r=!0}return r}finally{Oe=n,hn.transition=t}}return!1}function rx(e,t,n){t=Ai(n,t),t=C9(e,t,1),e=ya(e,t,1),t=Rt(),e!==null&&(gu(e,1,t),Wt(e,t))}function qe(e,t,n){if(e.tag===3)rx(e,e,n);else for(;t!==null;){if(t.tag===3){rx(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError=="function"||typeof r.componentDidCatch=="function"&&(ga===null||!ga.has(r))){e=Ai(n,e),e=_9(t,e,1),t=ya(t,e,1),e=Rt(),t!==null&&(gu(t,1,e),Wt(t,e));break}}t=t.return}}function kC(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),t=Rt(),e.pingedLanes|=e.suspendedLanes&n,ut===e&&(vt&n)===n&&(at===4||at===3&&(vt&130023424)===vt&&500>Xe()-cy?io(e,0):uy|=n),Wt(e,t)}function V9(e,t){t===0&&(e.mode&1?(t=zu,zu<<=1,!(zu&130023424)&&(zu=4194304)):t=1);var n=Rt();e=Rr(e,t),e!==null&&(gu(e,t,n),Wt(e,n))}function CC(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),V9(e,n)}function _C(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(U(314))}r!==null&&r.delete(t),V9(e,n)}var K9;K9=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Gt.current)Bt=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Bt=!1,mC(e,t,n);Bt=!!(e.flags&131072)}else Bt=!1,ze&&t.flags&1048576&&Z5(t,Xc,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;_c(e,t),e=t.pendingProps;var a=Oi(t,At.current);ai(t,n),a=ry(null,t,r,e,a,n);var o=ay();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Ut(r)?(o=!0,Vc(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,Zv(t),a.updater=kf,t.stateNode=a,a._reactInternals=t,Ph(t,r,e,n),t=Ch(null,t,r,!0,o,n)):(t.tag=0,ze&&o&&Wv(t),jt(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(_c(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=EC(r),e=_n(r,e),a){case 0:t=kh(null,t,r,e,n);break e;case 1:t=V1(null,t,r,e,n);break e;case 11:t=W1(null,t,r,e,n);break e;case 14:t=q1(null,t,r,_n(r.type,e),n);break e}throw Error(U(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:_n(r,a),kh(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:_n(r,a),V1(e,t,r,a,n);case 3:e:{if(j9(t),e===null)throw Error(U(387));r=t.pendingProps,o=t.memoizedState,a=o.element,a9(e,t),Zc(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=Ai(Error(U(423)),t),t=K1(e,t,r,n,a);break e}else if(r!==a){a=Ai(Error(U(424)),t),t=K1(e,t,r,n,a);break e}else for(Jt=va(t.stateNode.containerInfo.firstChild),tn=t,ze=!0,Mn=null,n=n9(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ki(),r===a){t=Ir(e,t,n);break e}jt(e,t,r,n)}t=t.child}return t;case 5:return o9(t),e===null&&wh(t),r=t.type,a=t.pendingProps,o=e!==null?e.memoizedProps:null,i=a.children,hh(r,a)?i=null:o!==null&&hh(r,o)&&(t.flags|=32),T9(e,t),jt(e,t,i,n),t.child;case 6:return e===null&&wh(t),null;case 13:return $9(e,t,n);case 4:return Jv(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Ci(t,null,r,n):jt(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:_n(r,a),W1(e,t,r,a,n);case 7:return jt(e,t,t.pendingProps,n),t.child;case 8:return jt(e,t,t.pendingProps.children,n),t.child;case 12:return jt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,i=a.value,je(Yc,r._currentValue),r._currentValue=i,o!==null)if(Gn(o.value,i)){if(o.children===a.children&&!Gt.current){t=Ir(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){i=o.child;for(var l=s.firstContext;l!==null;){if(l.context===r){if(o.tag===1){l=Ar(-1,n&-n),l.tag=2;var u=o.updateQueue;if(u!==null){u=u.shared;var p=u.pending;p===null?l.next=l:(l.next=p.next,p.next=l),u.pending=l}}o.lanes|=n,l=o.alternate,l!==null&&(l.lanes|=n),bh(o.return,n,t),s.lanes|=n;break}l=l.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(U(341));i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),bh(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}jt(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,ai(t,n),a=gn(a),r=r(a),t.flags|=1,jt(e,t,r,n),t.child;case 14:return r=t.type,a=_n(r,t.pendingProps),a=_n(r.type,a),q1(e,t,r,a,n);case 15:return A9(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:_n(r,a),_c(e,t),t.tag=1,Ut(r)?(e=!0,Vc(t)):e=!1,ai(t,n),k9(t,r,a),Ph(t,r,a,n),Ch(null,t,r,!0,e,n);case 19:return N9(e,t,n);case 22:return E9(e,t,n)}throw Error(U(156,t.tag))};function X9(e,t){return S5(e,t)}function AC(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function dn(e,t,n,r){return new AC(e,t,n,r)}function my(e){return e=e.prototype,!(!e||!e.isReactComponent)}function EC(e){if(typeof e=="function")return my(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Nv)return 11;if(e===Mv)return 14}return 2}function wa(e,t){var n=e.alternate;return n===null?(n=dn(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Tc(e,t,n,r,a,o){var i=2;if(r=e,typeof e=="function")my(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case zo:return so(n.children,a,o,t);case $v:i=8,a|=8;break;case Vm:return e=dn(12,n,t,a|2),e.elementType=Vm,e.lanes=o,e;case Km:return e=dn(13,n,t,a),e.elementType=Km,e.lanes=o,e;case Xm:return e=dn(19,n,t,a),e.elementType=Xm,e.lanes=o,e;case o5:return Af(n,a,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case r5:i=10;break e;case a5:i=9;break e;case Nv:i=11;break e;case Mv:i=14;break e;case Zr:i=16,r=null;break e}throw Error(U(130,e==null?e:typeof e,""))}return t=dn(i,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function so(e,t,n,r){return e=dn(7,e,r,t),e.lanes=n,e}function Af(e,t,n,r){return e=dn(22,e,r,t),e.elementType=o5,e.lanes=n,e.stateNode={isHidden:!1},e}function am(e,t,n){return e=dn(6,e,null,t),e.lanes=n,e}function om(e,t,n){return t=dn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function TC(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Fd(0),this.expirationTimes=Fd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Fd(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function hy(e,t,n,r,a,o,i,s,l){return e=new TC(e,t,n,s,l),t===1?(t=1,o===!0&&(t|=8)):t=0,o=dn(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Zv(o),e}function jC(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:Fo,key:r==null?null:""+r,children:e,containerInfo:t,implementation:n}}function Y9(e){if(!e)return Pa;e=e._reactInternals;e:{if(ko(e)!==e||e.tag!==1)throw Error(U(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Ut(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(t!==null);throw Error(U(171))}if(e.tag===1){var n=e.type;if(Ut(n))return Y5(e,n,t)}return t}function Q9(e,t,n,r,a,o,i,s,l){return e=hy(n,r,!0,e,a,o,i,s,l),e.context=Y9(null),n=e.current,r=Rt(),a=xa(n),o=Ar(r,a),o.callback=t??null,ya(n,o,a),e.current.lanes=a,gu(e,a,r),Wt(e,r),e}function Ef(e,t,n,r){var a=t.current,o=Rt(),i=xa(a);return n=Y9(n),t.context===null?t.context=n:t.pendingContext=n,t=Ar(o,i),t.payload={element:e},r=r===void 0?null:r,r!==null&&(t.callback=r),e=ya(a,t,i),e!==null&&(Hn(e,a,i,o),Oc(e,a,i)),i}function ip(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 5:return e.child.stateNode;default:return e.child.stateNode}}function ax(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n<t?n:t}}function vy(e,t){ax(e,t),(e=e.alternate)&&ax(e,t)}function $C(){return null}var Z9=typeof reportError=="function"?reportError:function(e){console.error(e)};function yy(e){this._internalRoot=e}Tf.prototype.render=yy.prototype.render=function(e){var t=this._internalRoot;if(t===null)throw Error(U(409));Ef(e,t,null,null)};Tf.prototype.unmount=yy.prototype.unmount=function(){var e=this._internalRoot;if(e!==null){this._internalRoot=null;var t=e.containerInfo;ho(function(){Ef(null,e,null,null)}),t[Mr]=null}};function Tf(e){this._internalRoot=e}Tf.prototype.unstable_scheduleHydration=function(e){if(e){var t=E5();e={blockedOn:null,target:e,priority:t};for(var n=0;n<ta.length&&t!==0&&t<ta[n].priority;n++);ta.splice(n,0,e),n===0&&j5(e)}};function gy(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function jf(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11&&(e.nodeType!==8||e.nodeValue!==" react-mount-point-unstable "))}function ox(){}function NC(e,t,n,r,a){if(a){if(typeof r=="function"){var o=r;r=function(){var u=ip(i);o.call(u)}}var i=Q9(t,r,e,0,null,!1,!1,"",ox);return e._reactRootContainer=i,e[Mr]=i.current,xl(e.nodeType===8?e.parentNode:e),ho(),i}for(;a=e.lastChild;)e.removeChild(a);if(typeof r=="function"){var s=r;r=function(){var u=ip(l);s.call(u)}}var l=hy(e,0,!1,null,null,!1,!1,"",ox);return e._reactRootContainer=l,e[Mr]=l.current,xl(e.nodeType===8?e.parentNode:e),ho(function(){Ef(t,l,n,r)}),l}function $f(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if(typeof a=="function"){var s=a;a=function(){var l=ip(i);s.call(l)}}Ef(t,i,e,a)}else i=NC(n,t,e,a,r);return ip(i)}_5=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=Vs(t.pendingLanes);n!==0&&(Dv(t,n|1),Wt(t,Xe()),!(de&6)&&(Ei=Xe()+500,Ea()))}break;case 13:ho(function(){var r=Rr(e,1);if(r!==null){var a=Rt();Hn(r,e,1,a)}}),vy(e,1)}};Lv=function(e){if(e.tag===13){var t=Rr(e,134217728);if(t!==null){var n=Rt();Hn(t,e,134217728,n)}vy(e,134217728)}};A5=function(e){if(e.tag===13){var t=xa(e),n=Rr(e,t);if(n!==null){var r=Rt();Hn(n,e,t,r)}vy(e,t)}};E5=function(){return Oe};T5=function(e,t){var n=Oe;try{return Oe=e,t()}finally{Oe=n}};oh=function(e,t,n){switch(t){case"input":if(Zm(e,n),t=n.name,n.type==="radio"&&t!=null){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=Sf(r);if(!a)throw Error(U(90));s5(r),Zm(r,a)}}}break;case"textarea":u5(e,n);break;case"select":t=n.value,t!=null&&ei(e,!!n.multiple,t,!1)}};v5=py;y5=ho;var MC={usingClientEntryPoint:!1,Events:[wu,Uo,Sf,m5,h5,py]},$s={findFiberByHostInstance:qa,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},RC={bundleType:$s.bundleType,version:$s.version,rendererPackageName:$s.rendererPackageName,rendererConfig:$s.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Hr.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return e=w5(e),e===null?null:e.stateNode},findFiberByHostInstance:$s.findFiberByHostInstance||$C,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Qu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Qu.isDisabled&&Qu.supportsFiber)try{gf=Qu.inject(RC),sr=Qu}catch{}}an.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=MC;an.createPortal=function(e,t){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!gy(t))throw Error(U(200));return jC(e,t,null,n)};an.createRoot=function(e,t){if(!gy(e))throw Error(U(299));var n=!1,r="",a=Z9;return t!=null&&(t.unstable_strictMode===!0&&(n=!0),t.identifierPrefix!==void 0&&(r=t.identifierPrefix),t.onRecoverableError!==void 0&&(a=t.onRecoverableError)),t=hy(e,1,!1,null,null,n,!1,r,a),e[Mr]=t.current,xl(e.nodeType===8?e.parentNode:e),new yy(t)};an.findDOMNode=function(e){if(e==null)return null;if(e.nodeType===1)return e;var t=e._reactInternals;if(t===void 0)throw typeof e.render=="function"?Error(U(188)):(e=Object.keys(e).join(","),Error(U(268,e)));return e=w5(t),e=e===null?null:e.stateNode,e};an.flushSync=function(e){return ho(e)};an.hydrate=function(e,t,n){if(!jf(t))throw Error(U(200));return $f(null,e,t,!0,n)};an.hydrateRoot=function(e,t,n){if(!gy(e))throw Error(U(405));var r=n!=null&&n.hydratedSources||null,a=!1,o="",i=Z9;if(n!=null&&(n.unstable_strictMode===!0&&(a=!0),n.identifierPrefix!==void 0&&(o=n.identifierPrefix),n.onRecoverableError!==void 0&&(i=n.onRecoverableError)),t=Q9(t,null,e,1,n??null,a,!1,o,i),e[Mr]=t.current,xl(e),r)for(e=0;e<r.length;e++)n=r[e],a=n._getVersion,a=a(n._source),t.mutableSourceEagerHydrationData==null?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Tf(t)};an.render=function(e,t,n){if(!jf(t))throw Error(U(200));return $f(null,e,t,!1,n)};an.unmountComponentAtNode=function(e){if(!jf(e))throw Error(U(40));return e._reactRootContainer?(ho(function(){$f(null,null,e,!1,function(){e._reactRootContainer=null,e[Mr]=null})}),!0):!1};an.unstable_batchedUpdates=py;an.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!jf(n))throw Error(U(200));if(e==null||e._reactInternals===void 0)throw Error(U(38));return $f(e,t,n,!1,r)};an.version="18.3.1-next-f1338f8080-20240426";function J9(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(J9)}catch(e){console.error(e)}}J9(),J2.exports=an;var os=J2.exports;const IC=_e(os);var ix=os;Ic.createRoot=ix.createRoot,Ic.hydrateRoot=ix.hydrateRoot;function sx(e,[t,n]){return Math.min(n,Math.max(t,e))}function fe(e,t,{checkForDefaultPrevented:n=!0}={}){return function(a){if(e==null||e(a),n===!1||!a.defaultPrevented)return t==null?void 0:t(a)}}function is(e,t=[]){let n=[];function r(o,i){const s=k.createContext(i),l=n.length;n=[...n,i];const u=c=>{var v;const{scope:f,children:d,...h}=c,m=((v=f==null?void 0:f[e])==null?void 0:v[l])||s,g=k.useMemo(()=>h,Object.values(h));return b.jsx(m.Provider,{value:g,children:d})};u.displayName=o+"Provider";function p(c,f){var m;const d=((m=f==null?void 0:f[e])==null?void 0:m[l])||s,h=k.useContext(d);if(h)return h;if(i!==void 0)return i;throw new Error(`\`${c}\` must be used within \`${o}\``)}return[u,p]}const a=()=>{const o=n.map(i=>k.createContext(i));return function(s){const l=(s==null?void 0:s[e])||o;return k.useMemo(()=>({[`__scope${e}`]:{...s,[e]:l}}),[s,l])}};return a.scopeName=e,[r,DC(a,...t)]}function DC(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(o){const i=r.reduce((s,{useScope:l,scopeName:u})=>{const c=l(o)[`__scope${u}`];return{...s,...c}},{});return k.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}function lx(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function e6(...e){return t=>{let n=!1;const r=e.map(a=>{const o=lx(a,t);return!n&&typeof o=="function"&&(n=!0),o});if(n)return()=>{for(let a=0;a<r.length;a++){const o=r[a];typeof o=="function"?o():lx(e[a],null)}}}}function Ye(...e){return k.useCallback(e6(...e),e)}function Al(e){const t=FC(e),n=k.forwardRef((r,a)=>{const{children:o,...i}=r,s=k.Children.toArray(o),l=s.find(BC);if(l){const u=l.props.children,p=s.map(c=>c===l?k.Children.count(u)>1?k.Children.only(null):k.isValidElement(u)?u.props.children:null:c);return b.jsx(t,{...i,ref:a,children:k.isValidElement(u)?k.cloneElement(u,void 0,p):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}var LC=Al("Slot");function FC(e){const t=k.forwardRef((n,r)=>{const{children:a,...o}=n;if(k.isValidElement(a)){const i=GC(a),s=HC(o,a.props);return a.type!==k.Fragment&&(s.ref=r?e6(r,i):i),k.cloneElement(a,s)}return k.Children.count(a)>1?k.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var t6=Symbol("radix.slottable");function zC(e){const t=({children:n})=>b.jsx(b.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=t6,t}function BC(e){return k.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===t6}function HC(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const l=o(...s);return a(...s),l}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function GC(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function n6(e){const t=e+"CollectionProvider",[n,r]=is(t),[a,o]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=m=>{const{scope:g,children:v}=m,y=E.useRef(null),x=E.useRef(new Map).current;return b.jsx(a,{scope:g,itemMap:x,collectionRef:y,children:v})};i.displayName=t;const s=e+"CollectionSlot",l=Al(s),u=E.forwardRef((m,g)=>{const{scope:v,children:y}=m,x=o(s,v),S=Ye(g,x.collectionRef);return b.jsx(l,{ref:S,children:y})});u.displayName=s;const p=e+"CollectionItemSlot",c="data-radix-collection-item",f=Al(p),d=E.forwardRef((m,g)=>{const{scope:v,children:y,...x}=m,S=E.useRef(null),w=Ye(g,S),P=o(p,v);return E.useEffect(()=>(P.itemMap.set(S,{ref:S,...x}),()=>void P.itemMap.delete(S))),b.jsx(f,{[c]:"",ref:w,children:y})});d.displayName=p;function h(m){const g=o(e+"CollectionConsumer",m);return E.useCallback(()=>{const y=g.collectionRef.current;if(!y)return[];const x=Array.from(y.querySelectorAll(`[${c}]`));return Array.from(g.itemMap.values()).sort((P,O)=>x.indexOf(P.ref.current)-x.indexOf(O.ref.current))},[g.collectionRef,g.itemMap])}return[{Provider:i,Slot:u,ItemSlot:d},h,r]}var UC=k.createContext(void 0);function xy(e){const t=k.useContext(UC);return e||t||"ltr"}var WC=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ae=WC.reduce((e,t)=>{const n=Al(`Primitive.${t}`),r=k.forwardRef((a,o)=>{const{asChild:i,...s}=a,l=i?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(l,{...s,ref:o})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function qC(e,t){e&&os.flushSync(()=>e.dispatchEvent(t))}function Oa(e){const t=k.useRef(e);return k.useEffect(()=>{t.current=e}),k.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function VC(e,t=globalThis==null?void 0:globalThis.document){const n=Oa(e);k.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var KC="DismissableLayer",Lh="dismissableLayer.update",XC="dismissableLayer.pointerDownOutside",YC="dismissableLayer.focusOutside",ux,r6=k.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),wy=k.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:i,onDismiss:s,...l}=e,u=k.useContext(r6),[p,c]=k.useState(null),f=(p==null?void 0:p.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,d]=k.useState({}),h=Ye(t,O=>c(O)),m=Array.from(u.layers),[g]=[...u.layersWithOutsidePointerEventsDisabled].slice(-1),v=m.indexOf(g),y=p?m.indexOf(p):-1,x=u.layersWithOutsidePointerEventsDisabled.size>0,S=y>=v,w=JC(O=>{const C=O.target,_=[...u.branches].some(T=>T.contains(C));!S||_||(a==null||a(O),i==null||i(O),O.defaultPrevented||s==null||s())},f),P=e_(O=>{const C=O.target;[...u.branches].some(T=>T.contains(C))||(o==null||o(O),i==null||i(O),O.defaultPrevented||s==null||s())},f);return VC(O=>{y===u.layers.size-1&&(r==null||r(O),!O.defaultPrevented&&s&&(O.preventDefault(),s()))},f),k.useEffect(()=>{if(p)return n&&(u.layersWithOutsidePointerEventsDisabled.size===0&&(ux=f.body.style.pointerEvents,f.body.style.pointerEvents="none"),u.layersWithOutsidePointerEventsDisabled.add(p)),u.layers.add(p),cx(),()=>{n&&u.layersWithOutsidePointerEventsDisabled.size===1&&(f.body.style.pointerEvents=ux)}},[p,f,n,u]),k.useEffect(()=>()=>{p&&(u.layers.delete(p),u.layersWithOutsidePointerEventsDisabled.delete(p),cx())},[p,u]),k.useEffect(()=>{const O=()=>d({});return document.addEventListener(Lh,O),()=>document.removeEventListener(Lh,O)},[]),b.jsx(Ae.div,{...l,ref:h,style:{pointerEvents:x?S?"auto":"none":void 0,...e.style},onFocusCapture:fe(e.onFocusCapture,P.onFocusCapture),onBlurCapture:fe(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:fe(e.onPointerDownCapture,w.onPointerDownCapture)})});wy.displayName=KC;var QC="DismissableLayerBranch",ZC=k.forwardRef((e,t)=>{const n=k.useContext(r6),r=k.useRef(null),a=Ye(t,r);return k.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),b.jsx(Ae.div,{...e,ref:a})});ZC.displayName=QC;function JC(e,t=globalThis==null?void 0:globalThis.document){const n=Oa(e),r=k.useRef(!1),a=k.useRef(()=>{});return k.useEffect(()=>{const o=s=>{if(s.target&&!r.current){let l=function(){a6(XC,n,u,{discrete:!0})};const u={originalEvent:s};s.pointerType==="touch"?(t.removeEventListener("click",a.current),a.current=l,t.addEventListener("click",a.current,{once:!0})):l()}else t.removeEventListener("click",a.current);r.current=!1},i=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(i),t.removeEventListener("pointerdown",o),t.removeEventListener("click",a.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function e_(e,t=globalThis==null?void 0:globalThis.document){const n=Oa(e),r=k.useRef(!1);return k.useEffect(()=>{const a=o=>{o.target&&!r.current&&a6(YC,n,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",a),()=>t.removeEventListener("focusin",a)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function cx(){const e=new CustomEvent(Lh);document.dispatchEvent(e)}function a6(e,t,n,{discrete:r}){const a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),r?qC(a,o):a.dispatchEvent(o)}var im=0;function t_(){k.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??px()),document.body.insertAdjacentElement("beforeend",e[1]??px()),im++,()=>{im===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),im--}},[])}function px(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var sm="focusScope.autoFocusOnMount",lm="focusScope.autoFocusOnUnmount",fx={bubbles:!1,cancelable:!0},n_="FocusScope",o6=k.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:o,...i}=e,[s,l]=k.useState(null),u=Oa(a),p=Oa(o),c=k.useRef(null),f=Ye(t,m=>l(m)),d=k.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;k.useEffect(()=>{if(r){let m=function(x){if(d.paused||!s)return;const S=x.target;s.contains(S)?c.current=S:Xr(c.current,{select:!0})},g=function(x){if(d.paused||!s)return;const S=x.relatedTarget;S!==null&&(s.contains(S)||Xr(c.current,{select:!0}))},v=function(x){if(document.activeElement===document.body)for(const w of x)w.removedNodes.length>0&&Xr(s)};document.addEventListener("focusin",m),document.addEventListener("focusout",g);const y=new MutationObserver(v);return s&&y.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",g),y.disconnect()}}},[r,s,d.paused]),k.useEffect(()=>{if(s){mx.add(d);const m=document.activeElement;if(!s.contains(m)){const v=new CustomEvent(sm,fx);s.addEventListener(sm,u),s.dispatchEvent(v),v.defaultPrevented||(r_(l_(i6(s)),{select:!0}),document.activeElement===m&&Xr(s))}return()=>{s.removeEventListener(sm,u),setTimeout(()=>{const v=new CustomEvent(lm,fx);s.addEventListener(lm,p),s.dispatchEvent(v),v.defaultPrevented||Xr(m??document.body,{select:!0}),s.removeEventListener(lm,p),mx.remove(d)},0)}}},[s,u,p,d]);const h=k.useCallback(m=>{if(!n&&!r||d.paused)return;const g=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,v=document.activeElement;if(g&&v){const y=m.currentTarget,[x,S]=a_(y);x&&S?!m.shiftKey&&v===S?(m.preventDefault(),n&&Xr(x,{select:!0})):m.shiftKey&&v===x&&(m.preventDefault(),n&&Xr(S,{select:!0})):v===y&&m.preventDefault()}},[n,r,d.paused]);return b.jsx(Ae.div,{tabIndex:-1,...i,ref:f,onKeyDown:h})});o6.displayName=n_;function r_(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Xr(r,{select:t}),document.activeElement!==n)return}function a_(e){const t=i6(e),n=dx(t,e),r=dx(t.reverse(),e);return[n,r]}function i6(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function dx(e,t){for(const n of e)if(!o_(n,{upTo:t}))return n}function o_(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function i_(e){return e instanceof HTMLInputElement&&"select"in e}function Xr(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&i_(e)&&t&&e.select()}}var mx=s_();function s_(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=hx(e,t),e.unshift(t)},remove(t){var n;e=hx(e,t),(n=e[0])==null||n.resume()}}}function hx(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function l_(e){return e.filter(t=>t.tagName!=="A")}var Et=globalThis!=null&&globalThis.document?k.useLayoutEffect:()=>{},u_=Q2[" useId ".trim().toString()]||(()=>{}),c_=0;function Su(e){const[t,n]=k.useState(u_());return Et(()=>{n(r=>r??String(c_++))},[e]),t?`radix-${t}`:""}const p_=["top","right","bottom","left"],ka=Math.min,Qt=Math.max,sp=Math.round,Zu=Math.floor,ur=e=>({x:e,y:e}),f_={left:"right",right:"left",bottom:"top",top:"bottom"},d_={start:"end",end:"start"};function Fh(e,t,n){return Qt(e,ka(t,n))}function Dr(e,t){return typeof e=="function"?e(t):e}function Lr(e){return e.split("-")[0]}function ss(e){return e.split("-")[1]}function by(e){return e==="x"?"y":"x"}function Sy(e){return e==="y"?"height":"width"}function nr(e){return["top","bottom"].includes(Lr(e))?"y":"x"}function Py(e){return by(nr(e))}function m_(e,t,n){n===void 0&&(n=!1);const r=ss(e),a=Py(e),o=Sy(a);let i=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=lp(i)),[i,lp(i)]}function h_(e){const t=lp(e);return[zh(e),t,zh(t)]}function zh(e){return e.replace(/start|end/g,t=>d_[t])}function v_(e,t,n){const r=["left","right"],a=["right","left"],o=["top","bottom"],i=["bottom","top"];switch(e){case"top":case"bottom":return n?t?a:r:t?r:a;case"left":case"right":return t?o:i;default:return[]}}function y_(e,t,n,r){const a=ss(e);let o=v_(Lr(e),n==="start",r);return a&&(o=o.map(i=>i+"-"+a),t&&(o=o.concat(o.map(zh)))),o}function lp(e){return e.replace(/left|right|bottom|top/g,t=>f_[t])}function g_(e){return{top:0,right:0,bottom:0,left:0,...e}}function s6(e){return typeof e!="number"?g_(e):{top:e,right:e,bottom:e,left:e}}function up(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function vx(e,t,n){let{reference:r,floating:a}=e;const o=nr(t),i=Py(t),s=Sy(i),l=Lr(t),u=o==="y",p=r.x+r.width/2-a.width/2,c=r.y+r.height/2-a.height/2,f=r[s]/2-a[s]/2;let d;switch(l){case"top":d={x:p,y:r.y-a.height};break;case"bottom":d={x:p,y:r.y+r.height};break;case"right":d={x:r.x+r.width,y:c};break;case"left":d={x:r.x-a.width,y:c};break;default:d={x:r.x,y:r.y}}switch(ss(t)){case"start":d[i]-=f*(n&&u?-1:1);break;case"end":d[i]+=f*(n&&u?-1:1);break}return d}const x_=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:o=[],platform:i}=n,s=o.filter(Boolean),l=await(i.isRTL==null?void 0:i.isRTL(t));let u=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:p,y:c}=vx(u,r,l),f=r,d={},h=0;for(let m=0;m<s.length;m++){const{name:g,fn:v}=s[m],{x:y,y:x,data:S,reset:w}=await v({x:p,y:c,initialPlacement:r,placement:f,strategy:a,middlewareData:d,rects:u,platform:i,elements:{reference:e,floating:t}});p=y??p,c=x??c,d={...d,[g]:{...d[g],...S}},w&&h<=50&&(h++,typeof w=="object"&&(w.placement&&(f=w.placement),w.rects&&(u=w.rects===!0?await i.getElementRects({reference:e,floating:t,strategy:a}):w.rects),{x:p,y:c}=vx(u,f,l)),m=-1)}return{x:p,y:c,placement:f,strategy:a,middlewareData:d}};async function El(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:o,rects:i,elements:s,strategy:l}=e,{boundary:u="clippingAncestors",rootBoundary:p="viewport",elementContext:c="floating",altBoundary:f=!1,padding:d=0}=Dr(t,e),h=s6(d),g=s[f?c==="floating"?"reference":"floating":c],v=up(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(g)))==null||n?g:g.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:u,rootBoundary:p,strategy:l})),y=c==="floating"?{x:r,y:a,width:i.floating.width,height:i.floating.height}:i.reference,x=await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),S=await(o.isElement==null?void 0:o.isElement(x))?await(o.getScale==null?void 0:o.getScale(x))||{x:1,y:1}:{x:1,y:1},w=up(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:y,offsetParent:x,strategy:l}):y);return{top:(v.top-w.top+h.top)/S.y,bottom:(w.bottom-v.bottom+h.bottom)/S.y,left:(v.left-w.left+h.left)/S.x,right:(w.right-v.right+h.right)/S.x}}const w_=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:o,platform:i,elements:s,middlewareData:l}=t,{element:u,padding:p=0}=Dr(e,t)||{};if(u==null)return{};const c=s6(p),f={x:n,y:r},d=Py(a),h=Sy(d),m=await i.getDimensions(u),g=d==="y",v=g?"top":"left",y=g?"bottom":"right",x=g?"clientHeight":"clientWidth",S=o.reference[h]+o.reference[d]-f[d]-o.floating[h],w=f[d]-o.reference[d],P=await(i.getOffsetParent==null?void 0:i.getOffsetParent(u));let O=P?P[x]:0;(!O||!await(i.isElement==null?void 0:i.isElement(P)))&&(O=s.floating[x]||o.floating[h]);const C=S/2-w/2,_=O/2-m[h]/2-1,T=ka(c[v],_),A=ka(c[y],_),j=T,N=O-m[h]-A,M=O/2-m[h]/2+C,I=Fh(j,M,N),R=!l.arrow&&ss(a)!=null&&M!==I&&o.reference[h]/2-(M<j?T:A)-m[h]/2<0,L=R?M<j?M-j:M-N:0;return{[d]:f[d]+L,data:{[d]:I,centerOffset:M-I-L,...R&&{alignmentOffset:L}},reset:R}}}),b_=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:a,middlewareData:o,rects:i,initialPlacement:s,platform:l,elements:u}=t,{mainAxis:p=!0,crossAxis:c=!0,fallbackPlacements:f,fallbackStrategy:d="bestFit",fallbackAxisSideDirection:h="none",flipAlignment:m=!0,...g}=Dr(e,t);if((n=o.arrow)!=null&&n.alignmentOffset)return{};const v=Lr(a),y=nr(s),x=Lr(s)===s,S=await(l.isRTL==null?void 0:l.isRTL(u.floating)),w=f||(x||!m?[lp(s)]:h_(s)),P=h!=="none";!f&&P&&w.push(...y_(s,m,h,S));const O=[s,...w],C=await El(t,g),_=[];let T=((r=o.flip)==null?void 0:r.overflows)||[];if(p&&_.push(C[v]),c){const M=m_(a,i,S);_.push(C[M[0]],C[M[1]])}if(T=[...T,{placement:a,overflows:_}],!_.every(M=>M<=0)){var A,j;const M=(((A=o.flip)==null?void 0:A.index)||0)+1,I=O[M];if(I&&(!(c==="alignment"?y!==nr(I):!1)||T.every($=>$.overflows[0]>0&&nr($.placement)===y)))return{data:{index:M,overflows:T},reset:{placement:I}};let R=(j=T.filter(L=>L.overflows[0]<=0).sort((L,$)=>L.overflows[1]-$.overflows[1])[0])==null?void 0:j.placement;if(!R)switch(d){case"bestFit":{var N;const L=(N=T.filter($=>{if(P){const D=nr($.placement);return D===y||D==="y"}return!0}).map($=>[$.placement,$.overflows.filter(D=>D>0).reduce((D,H)=>D+H,0)]).sort(($,D)=>$[1]-D[1])[0])==null?void 0:N[0];L&&(R=L);break}case"initialPlacement":R=s;break}if(a!==R)return{reset:{placement:R}}}return{}}}};function yx(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function gx(e){return p_.some(t=>e[t]>=0)}const S_=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n}=t,{strategy:r="referenceHidden",...a}=Dr(e,t);switch(r){case"referenceHidden":{const o=await El(t,{...a,elementContext:"reference"}),i=yx(o,n.reference);return{data:{referenceHiddenOffsets:i,referenceHidden:gx(i)}}}case"escaped":{const o=await El(t,{...a,altBoundary:!0}),i=yx(o,n.floating);return{data:{escapedOffsets:i,escaped:gx(i)}}}default:return{}}}}};async function P_(e,t){const{placement:n,platform:r,elements:a}=e,o=await(r.isRTL==null?void 0:r.isRTL(a.floating)),i=Lr(n),s=ss(n),l=nr(n)==="y",u=["left","top"].includes(i)?-1:1,p=o&&l?-1:1,c=Dr(t,e);let{mainAxis:f,crossAxis:d,alignmentAxis:h}=typeof c=="number"?{mainAxis:c,crossAxis:0,alignmentAxis:null}:{mainAxis:c.mainAxis||0,crossAxis:c.crossAxis||0,alignmentAxis:c.alignmentAxis};return s&&typeof h=="number"&&(d=s==="end"?h*-1:h),l?{x:d*p,y:f*u}:{x:f*u,y:d*p}}const O_=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:o,placement:i,middlewareData:s}=t,l=await P_(t,e);return i===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:a+l.x,y:o+l.y,data:{...l,placement:i}}}}},k_=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a}=t,{mainAxis:o=!0,crossAxis:i=!1,limiter:s={fn:g=>{let{x:v,y}=g;return{x:v,y}}},...l}=Dr(e,t),u={x:n,y:r},p=await El(t,l),c=nr(Lr(a)),f=by(c);let d=u[f],h=u[c];if(o){const g=f==="y"?"top":"left",v=f==="y"?"bottom":"right",y=d+p[g],x=d-p[v];d=Fh(y,d,x)}if(i){const g=c==="y"?"top":"left",v=c==="y"?"bottom":"right",y=h+p[g],x=h-p[v];h=Fh(y,h,x)}const m=s.fn({...t,[f]:d,[c]:h});return{...m,data:{x:m.x-n,y:m.y-r,enabled:{[f]:o,[c]:i}}}}}},C_=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:a,rects:o,middlewareData:i}=t,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=Dr(e,t),p={x:n,y:r},c=nr(a),f=by(c);let d=p[f],h=p[c];const m=Dr(s,t),g=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const x=f==="y"?"height":"width",S=o.reference[f]-o.floating[x]+g.mainAxis,w=o.reference[f]+o.reference[x]-g.mainAxis;d<S?d=S:d>w&&(d=w)}if(u){var v,y;const x=f==="y"?"width":"height",S=["top","left"].includes(Lr(a)),w=o.reference[c]-o.floating[x]+(S&&((v=i.offset)==null?void 0:v[c])||0)+(S?0:g.crossAxis),P=o.reference[c]+o.reference[x]+(S?0:((y=i.offset)==null?void 0:y[c])||0)-(S?g.crossAxis:0);h<w?h=w:h>P&&(h=P)}return{[f]:d,[c]:h}}}},__=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:a,rects:o,platform:i,elements:s}=t,{apply:l=()=>{},...u}=Dr(e,t),p=await El(t,u),c=Lr(a),f=ss(a),d=nr(a)==="y",{width:h,height:m}=o.floating;let g,v;c==="top"||c==="bottom"?(g=c,v=f===(await(i.isRTL==null?void 0:i.isRTL(s.floating))?"start":"end")?"left":"right"):(v=c,g=f==="end"?"top":"bottom");const y=m-p.top-p.bottom,x=h-p.left-p.right,S=ka(m-p[g],y),w=ka(h-p[v],x),P=!t.middlewareData.shift;let O=S,C=w;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(C=x),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(O=y),P&&!f){const T=Qt(p.left,0),A=Qt(p.right,0),j=Qt(p.top,0),N=Qt(p.bottom,0);d?C=h-2*(T!==0||A!==0?T+A:Qt(p.left,p.right)):O=m-2*(j!==0||N!==0?j+N:Qt(p.top,p.bottom))}await l({...t,availableWidth:C,availableHeight:O});const _=await i.getDimensions(s.floating);return h!==_.width||m!==_.height?{reset:{rects:!0}}:{}}}};function Nf(){return typeof window<"u"}function ls(e){return l6(e)?(e.nodeName||"").toLowerCase():"#document"}function nn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function hr(e){var t;return(t=(l6(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function l6(e){return Nf()?e instanceof Node||e instanceof nn(e).Node:!1}function Un(e){return Nf()?e instanceof Element||e instanceof nn(e).Element:!1}function fr(e){return Nf()?e instanceof HTMLElement||e instanceof nn(e).HTMLElement:!1}function xx(e){return!Nf()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof nn(e).ShadowRoot}function Pu(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=Wn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&!["inline","contents"].includes(a)}function A_(e){return["table","td","th"].includes(ls(e))}function Mf(e){return[":popover-open",":modal"].some(t=>{try{return e.matches(t)}catch{return!1}})}function Oy(e){const t=ky(),n=Un(e)?Wn(e):e;return["transform","translate","scale","rotate","perspective"].some(r=>n[r]?n[r]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!t&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!t&&(n.filter?n.filter!=="none":!1)||["transform","translate","scale","rotate","perspective","filter"].some(r=>(n.willChange||"").includes(r))||["paint","layout","strict","content"].some(r=>(n.contain||"").includes(r))}function E_(e){let t=Ca(e);for(;fr(t)&&!Ti(t);){if(Oy(t))return t;if(Mf(t))return null;t=Ca(t)}return null}function ky(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}function Ti(e){return["html","body","#document"].includes(ls(e))}function Wn(e){return nn(e).getComputedStyle(e)}function Rf(e){return Un(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ca(e){if(ls(e)==="html")return e;const t=e.assignedSlot||e.parentNode||xx(e)&&e.host||hr(e);return xx(t)?t.host:t}function u6(e){const t=Ca(e);return Ti(t)?e.ownerDocument?e.ownerDocument.body:e.body:fr(t)&&Pu(t)?t:u6(t)}function Tl(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=u6(e),o=a===((r=e.ownerDocument)==null?void 0:r.body),i=nn(a);if(o){const s=Bh(i);return t.concat(i,i.visualViewport||[],Pu(a)?a:[],s&&n?Tl(s):[])}return t.concat(a,Tl(a,[],n))}function Bh(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function c6(e){const t=Wn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=fr(e),o=a?e.offsetWidth:n,i=a?e.offsetHeight:r,s=sp(n)!==o||sp(r)!==i;return s&&(n=o,r=i),{width:n,height:r,$:s}}function Cy(e){return Un(e)?e:e.contextElement}function ii(e){const t=Cy(e);if(!fr(t))return ur(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:o}=c6(t);let i=(o?sp(n.width):n.width)/r,s=(o?sp(n.height):n.height)/a;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const T_=ur(0);function p6(e){const t=nn(e);return!ky()||!t.visualViewport?T_:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function j_(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==nn(e)?!1:t}function vo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),o=Cy(e);let i=ur(1);t&&(r?Un(r)&&(i=ii(r)):i=ii(e));const s=j_(o,n,r)?p6(o):ur(0);let l=(a.left+s.x)/i.x,u=(a.top+s.y)/i.y,p=a.width/i.x,c=a.height/i.y;if(o){const f=nn(o),d=r&&Un(r)?nn(r):r;let h=f,m=Bh(h);for(;m&&r&&d!==h;){const g=ii(m),v=m.getBoundingClientRect(),y=Wn(m),x=v.left+(m.clientLeft+parseFloat(y.paddingLeft))*g.x,S=v.top+(m.clientTop+parseFloat(y.paddingTop))*g.y;l*=g.x,u*=g.y,p*=g.x,c*=g.y,l+=x,u+=S,h=nn(m),m=Bh(h)}}return up({width:p,height:c,x:l,y:u})}function _y(e,t){const n=Rf(e).scrollLeft;return t?t.left+n:vo(hr(e)).left+n}function f6(e,t,n){n===void 0&&(n=!1);const r=e.getBoundingClientRect(),a=r.left+t.scrollLeft-(n?0:_y(e,r)),o=r.top+t.scrollTop;return{x:a,y:o}}function $_(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const o=a==="fixed",i=hr(r),s=t?Mf(t.floating):!1;if(r===i||s&&o)return n;let l={scrollLeft:0,scrollTop:0},u=ur(1);const p=ur(0),c=fr(r);if((c||!c&&!o)&&((ls(r)!=="body"||Pu(i))&&(l=Rf(r)),fr(r))){const d=vo(r);u=ii(r),p.x=d.x+r.clientLeft,p.y=d.y+r.clientTop}const f=i&&!c&&!o?f6(i,l,!0):ur(0);return{width:n.width*u.x,height:n.height*u.y,x:n.x*u.x-l.scrollLeft*u.x+p.x+f.x,y:n.y*u.y-l.scrollTop*u.y+p.y+f.y}}function N_(e){return Array.from(e.getClientRects())}function M_(e){const t=hr(e),n=Rf(e),r=e.ownerDocument.body,a=Qt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=Qt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+_y(e);const s=-n.scrollTop;return Wn(r).direction==="rtl"&&(i+=Qt(t.clientWidth,r.clientWidth)-a),{width:a,height:o,x:i,y:s}}function R_(e,t){const n=nn(e),r=hr(e),a=n.visualViewport;let o=r.clientWidth,i=r.clientHeight,s=0,l=0;if(a){o=a.width,i=a.height;const u=ky();(!u||u&&t==="fixed")&&(s=a.offsetLeft,l=a.offsetTop)}return{width:o,height:i,x:s,y:l}}function I_(e,t){const n=vo(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=fr(e)?ii(e):ur(1),i=e.clientWidth*o.x,s=e.clientHeight*o.y,l=a*o.x,u=r*o.y;return{width:i,height:s,x:l,y:u}}function wx(e,t,n){let r;if(t==="viewport")r=R_(e,n);else if(t==="document")r=M_(hr(e));else if(Un(t))r=I_(t,n);else{const a=p6(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return up(r)}function d6(e,t){const n=Ca(e);return n===t||!Un(n)||Ti(n)?!1:Wn(n).position==="fixed"||d6(n,t)}function D_(e,t){const n=t.get(e);if(n)return n;let r=Tl(e,[],!1).filter(s=>Un(s)&&ls(s)!=="body"),a=null;const o=Wn(e).position==="fixed";let i=o?Ca(e):e;for(;Un(i)&&!Ti(i);){const s=Wn(i),l=Oy(i);!l&&s.position==="fixed"&&(a=null),(o?!l&&!a:!l&&s.position==="static"&&!!a&&["absolute","fixed"].includes(a.position)||Pu(i)&&!l&&d6(e,i))?r=r.filter(p=>p!==i):a=s,i=Ca(i)}return t.set(e,r),r}function L_(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const i=[...n==="clippingAncestors"?Mf(t)?[]:D_(t,this._c):[].concat(n),r],s=i[0],l=i.reduce((u,p)=>{const c=wx(t,p,a);return u.top=Qt(c.top,u.top),u.right=ka(c.right,u.right),u.bottom=ka(c.bottom,u.bottom),u.left=Qt(c.left,u.left),u},wx(t,s,a));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function F_(e){const{width:t,height:n}=c6(e);return{width:t,height:n}}function z_(e,t,n){const r=fr(t),a=hr(t),o=n==="fixed",i=vo(e,!0,o,t);let s={scrollLeft:0,scrollTop:0};const l=ur(0);function u(){l.x=_y(a)}if(r||!r&&!o)if((ls(t)!=="body"||Pu(a))&&(s=Rf(t)),r){const d=vo(t,!0,o,t);l.x=d.x+t.clientLeft,l.y=d.y+t.clientTop}else a&&u();o&&!r&&a&&u();const p=a&&!r&&!o?f6(a,s):ur(0),c=i.left+s.scrollLeft-l.x-p.x,f=i.top+s.scrollTop-l.y-p.y;return{x:c,y:f,width:i.width,height:i.height}}function um(e){return Wn(e).position==="static"}function bx(e,t){if(!fr(e)||Wn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return hr(e)===n&&(n=n.ownerDocument.body),n}function m6(e,t){const n=nn(e);if(Mf(e))return n;if(!fr(e)){let a=Ca(e);for(;a&&!Ti(a);){if(Un(a)&&!um(a))return a;a=Ca(a)}return n}let r=bx(e,t);for(;r&&A_(r)&&um(r);)r=bx(r,t);return r&&Ti(r)&&um(r)&&!Oy(r)?n:r||E_(e)||n}const B_=async function(e){const t=this.getOffsetParent||m6,n=this.getDimensions,r=await n(e.floating);return{reference:z_(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function H_(e){return Wn(e).direction==="rtl"}const G_={convertOffsetParentRelativeRectToViewportRelativeRect:$_,getDocumentElement:hr,getClippingRect:L_,getOffsetParent:m6,getElementRects:B_,getClientRects:N_,getDimensions:F_,getScale:ii,isElement:Un,isRTL:H_};function h6(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function U_(e,t){let n=null,r;const a=hr(e);function o(){var s;clearTimeout(r),(s=n)==null||s.disconnect(),n=null}function i(s,l){s===void 0&&(s=!1),l===void 0&&(l=1),o();const u=e.getBoundingClientRect(),{left:p,top:c,width:f,height:d}=u;if(s||t(),!f||!d)return;const h=Zu(c),m=Zu(a.clientWidth-(p+f)),g=Zu(a.clientHeight-(c+d)),v=Zu(p),x={rootMargin:-h+"px "+-m+"px "+-g+"px "+-v+"px",threshold:Qt(0,ka(1,l))||1};let S=!0;function w(P){const O=P[0].intersectionRatio;if(O!==l){if(!S)return i();O?i(!1,O):r=setTimeout(()=>{i(!1,1e-7)},1e3)}O===1&&!h6(u,e.getBoundingClientRect())&&i(),S=!1}try{n=new IntersectionObserver(w,{...x,root:a.ownerDocument})}catch{n=new IntersectionObserver(w,x)}n.observe(e)}return i(!0),o}function W_(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,u=Cy(e),p=a||o?[...u?Tl(u):[],...Tl(t)]:[];p.forEach(v=>{a&&v.addEventListener("scroll",n,{passive:!0}),o&&v.addEventListener("resize",n)});const c=u&&s?U_(u,n):null;let f=-1,d=null;i&&(d=new ResizeObserver(v=>{let[y]=v;y&&y.target===u&&d&&(d.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var x;(x=d)==null||x.observe(t)})),n()}),u&&!l&&d.observe(u),d.observe(t));let h,m=l?vo(e):null;l&&g();function g(){const v=vo(e);m&&!h6(m,v)&&n(),m=v,h=requestAnimationFrame(g)}return n(),()=>{var v;p.forEach(y=>{a&&y.removeEventListener("scroll",n),o&&y.removeEventListener("resize",n)}),c==null||c(),(v=d)==null||v.disconnect(),d=null,l&&cancelAnimationFrame(h)}}const q_=O_,V_=k_,K_=b_,X_=__,Y_=S_,Sx=w_,Q_=C_,Z_=(e,t,n)=>{const r=new Map,a={platform:G_,...n},o={...a.platform,_c:r};return x_(e,t,{...a,platform:o})};var J_=typeof document<"u",eA=function(){},jc=J_?k.useLayoutEffect:eA;function cp(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!cp(e[r],t[r]))return!1;return!0}if(a=Object.keys(e),n=a.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,a[r]))return!1;for(r=n;r--!==0;){const o=a[r];if(!(o==="_owner"&&e.$$typeof)&&!cp(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function v6(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Px(e,t){const n=v6(e);return Math.round(t*n)/n}function cm(e){const t=k.useRef(e);return jc(()=>{t.current=e}),t}function tA(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:l,open:u}=e,[p,c]=k.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[f,d]=k.useState(r);cp(f,r)||d(r);const[h,m]=k.useState(null),[g,v]=k.useState(null),y=k.useCallback($=>{$!==P.current&&(P.current=$,m($))},[]),x=k.useCallback($=>{$!==O.current&&(O.current=$,v($))},[]),S=o||h,w=i||g,P=k.useRef(null),O=k.useRef(null),C=k.useRef(p),_=l!=null,T=cm(l),A=cm(a),j=cm(u),N=k.useCallback(()=>{if(!P.current||!O.current)return;const $={placement:t,strategy:n,middleware:f};A.current&&($.platform=A.current),Z_(P.current,O.current,$).then(D=>{const H={...D,isPositioned:j.current!==!1};M.current&&!cp(C.current,H)&&(C.current=H,os.flushSync(()=>{c(H)}))})},[f,t,n,A,j]);jc(()=>{u===!1&&C.current.isPositioned&&(C.current.isPositioned=!1,c($=>({...$,isPositioned:!1})))},[u]);const M=k.useRef(!1);jc(()=>(M.current=!0,()=>{M.current=!1}),[]),jc(()=>{if(S&&(P.current=S),w&&(O.current=w),S&&w){if(T.current)return T.current(S,w,N);N()}},[S,w,N,T,_]);const I=k.useMemo(()=>({reference:P,floating:O,setReference:y,setFloating:x}),[y,x]),R=k.useMemo(()=>({reference:S,floating:w}),[S,w]),L=k.useMemo(()=>{const $={position:n,left:0,top:0};if(!R.floating)return $;const D=Px(R.floating,p.x),H=Px(R.floating,p.y);return s?{...$,transform:"translate("+D+"px, "+H+"px)",...v6(R.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:D,top:H}},[n,s,R.floating,p.x,p.y]);return k.useMemo(()=>({...p,update:N,refs:I,elements:R,floatingStyles:L}),[p,N,I,R,L])}const nA=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:a}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Sx({element:r.current,padding:a}).fn(n):{}:r?Sx({element:r,padding:a}).fn(n):{}}}},rA=(e,t)=>({...q_(e),options:[e,t]}),aA=(e,t)=>({...V_(e),options:[e,t]}),oA=(e,t)=>({...Q_(e),options:[e,t]}),iA=(e,t)=>({...K_(e),options:[e,t]}),sA=(e,t)=>({...X_(e),options:[e,t]}),lA=(e,t)=>({...Y_(e),options:[e,t]}),uA=(e,t)=>({...nA(e),options:[e,t]});var cA="Arrow",y6=k.forwardRef((e,t)=>{const{children:n,width:r=10,height:a=5,...o}=e;return b.jsx(Ae.svg,{...o,ref:t,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:b.jsx("polygon",{points:"0,0 30,0 15,10"})})});y6.displayName=cA;var pA=y6;function fA(e){const[t,n]=k.useState(void 0);return Et(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const o=a[0];let i,s;if("borderBoxSize"in o){const l=o.borderBoxSize,u=Array.isArray(l)?l[0]:l;i=u.inlineSize,s=u.blockSize}else i=e.offsetWidth,s=e.offsetHeight;n({width:i,height:s})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var Ay="Popper",[g6,If]=is(Ay),[dA,x6]=g6(Ay),w6=e=>{const{__scopePopper:t,children:n}=e,[r,a]=k.useState(null);return b.jsx(dA,{scope:t,anchor:r,onAnchorChange:a,children:n})};w6.displayName=Ay;var b6="PopperAnchor",S6=k.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...a}=e,o=x6(b6,n),i=k.useRef(null),s=Ye(t,i);return k.useEffect(()=>{o.onAnchorChange((r==null?void 0:r.current)||i.current)}),r?null:b.jsx(Ae.div,{...a,ref:s})});S6.displayName=b6;var Ey="PopperContent",[mA,hA]=g6(Ey),P6=k.forwardRef((e,t)=>{var J,se,q,K,X,F;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:o="center",alignOffset:i=0,arrowPadding:s=0,avoidCollisions:l=!0,collisionBoundary:u=[],collisionPadding:p=0,sticky:c="partial",hideWhenDetached:f=!1,updatePositionStrategy:d="optimized",onPlaced:h,...m}=e,g=x6(Ey,n),[v,y]=k.useState(null),x=Ye(t,pe=>y(pe)),[S,w]=k.useState(null),P=fA(S),O=(P==null?void 0:P.width)??0,C=(P==null?void 0:P.height)??0,_=r+(o!=="center"?"-"+o:""),T=typeof p=="number"?p:{top:0,right:0,bottom:0,left:0,...p},A=Array.isArray(u)?u:[u],j=A.length>0,N={padding:T,boundary:A.filter(yA),altBoundary:j},{refs:M,floatingStyles:I,placement:R,isPositioned:L,middlewareData:$}=tA({strategy:"fixed",placement:_,whileElementsMounted:(...pe)=>W_(...pe,{animationFrame:d==="always"}),elements:{reference:g.anchor},middleware:[rA({mainAxis:a+C,alignmentAxis:i}),l&&aA({mainAxis:!0,crossAxis:!1,limiter:c==="partial"?oA():void 0,...N}),l&&iA({...N}),sA({...N,apply:({elements:pe,rects:te,availableWidth:Ne,availableHeight:Me})=>{const{width:Qe,height:Vn}=te.reference,Pn=pe.floating.style;Pn.setProperty("--radix-popper-available-width",`${Ne}px`),Pn.setProperty("--radix-popper-available-height",`${Me}px`),Pn.setProperty("--radix-popper-anchor-width",`${Qe}px`),Pn.setProperty("--radix-popper-anchor-height",`${Vn}px`)}}),S&&uA({element:S,padding:s}),gA({arrowWidth:O,arrowHeight:C}),f&&lA({strategy:"referenceHidden",...N})]}),[D,H]=C6(R),W=Oa(h);Et(()=>{L&&(W==null||W())},[L,W]);const G=(J=$.arrow)==null?void 0:J.x,Z=(se=$.arrow)==null?void 0:se.y,re=((q=$.arrow)==null?void 0:q.centerOffset)!==0,[ve,be]=k.useState();return Et(()=>{v&&be(window.getComputedStyle(v).zIndex)},[v]),b.jsx("div",{ref:M.setFloating,"data-radix-popper-content-wrapper":"",style:{...I,transform:L?I.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ve,"--radix-popper-transform-origin":[(K=$.transformOrigin)==null?void 0:K.x,(X=$.transformOrigin)==null?void 0:X.y].join(" "),...((F=$.hide)==null?void 0:F.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:b.jsx(mA,{scope:n,placedSide:D,onArrowChange:w,arrowX:G,arrowY:Z,shouldHideArrow:re,children:b.jsx(Ae.div,{"data-side":D,"data-align":H,...m,ref:x,style:{...m.style,animation:L?void 0:"none"}})})})});P6.displayName=Ey;var O6="PopperArrow",vA={top:"bottom",right:"left",bottom:"top",left:"right"},k6=k.forwardRef(function(t,n){const{__scopePopper:r,...a}=t,o=hA(O6,r),i=vA[o.placedSide];return b.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:b.jsx(pA,{...a,ref:n,style:{...a.style,display:"block"}})})});k6.displayName=O6;function yA(e){return e!==null}var gA=e=>({name:"transformOrigin",options:e,fn(t){var g,v,y;const{placement:n,rects:r,middlewareData:a}=t,i=((g=a.arrow)==null?void 0:g.centerOffset)!==0,s=i?0:e.arrowWidth,l=i?0:e.arrowHeight,[u,p]=C6(n),c={start:"0%",center:"50%",end:"100%"}[p],f=(((v=a.arrow)==null?void 0:v.x)??0)+s/2,d=(((y=a.arrow)==null?void 0:y.y)??0)+l/2;let h="",m="";return u==="bottom"?(h=i?c:`${f}px`,m=`${-l}px`):u==="top"?(h=i?c:`${f}px`,m=`${r.floating.height+l}px`):u==="right"?(h=`${-l}px`,m=i?c:`${d}px`):u==="left"&&(h=`${r.floating.width+l}px`,m=i?c:`${d}px`),{data:{x:h,y:m}}}});function C6(e){const[t,n="center"]=e.split("-");return[t,n]}var xA=w6,_6=S6,A6=P6,E6=k6,wA="Portal",T6=k.forwardRef((e,t)=>{var s;const{container:n,...r}=e,[a,o]=k.useState(!1);Et(()=>o(!0),[]);const i=n||a&&((s=globalThis==null?void 0:globalThis.document)==null?void 0:s.body);return i?IC.createPortal(b.jsx(Ae.div,{...r,ref:t}),i):null});T6.displayName=wA;var bA=Q2[" useInsertionEffect ".trim().toString()]||Et;function pp({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[a,o,i]=SA({defaultProp:t,onChange:n}),s=e!==void 0,l=s?e:a;{const p=k.useRef(e!==void 0);k.useEffect(()=>{const c=p.current;c!==s&&console.warn(`${r} is changing from ${c?"controlled":"uncontrolled"} to ${s?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),p.current=s},[s,r])}const u=k.useCallback(p=>{var c;if(s){const f=PA(p)?p(e):p;f!==e&&((c=i.current)==null||c.call(i,f))}else o(p)},[s,e,o,i]);return[l,u]}function SA({defaultProp:e,onChange:t}){const[n,r]=k.useState(e),a=k.useRef(n),o=k.useRef(t);return bA(()=>{o.current=t},[t]),k.useEffect(()=>{var i;a.current!==n&&((i=o.current)==null||i.call(o,n),a.current=n)},[n,a]),[n,r,o]}function PA(e){return typeof e=="function"}function OA(e){const t=k.useRef({value:e,previous:e});return k.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var j6=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),kA="VisuallyHidden",$6=k.forwardRef((e,t)=>b.jsx(Ae.span,{...e,ref:t,style:{...j6,...e.style}}));$6.displayName=kA;var CA=$6,_A=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},$o=new WeakMap,Ju=new WeakMap,ec={},pm=0,N6=function(e){return e&&(e.host||N6(e.parentNode))},AA=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=N6(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},EA=function(e,t,n,r){var a=AA(t,Array.isArray(e)?e:[e]);ec[n]||(ec[n]=new WeakMap);var o=ec[n],i=[],s=new Set,l=new Set(a),u=function(c){!c||s.has(c)||(s.add(c),u(c.parentNode))};a.forEach(u);var p=function(c){!c||l.has(c)||Array.prototype.forEach.call(c.children,function(f){if(s.has(f))p(f);else try{var d=f.getAttribute(r),h=d!==null&&d!=="false",m=($o.get(f)||0)+1,g=(o.get(f)||0)+1;$o.set(f,m),o.set(f,g),i.push(f),m===1&&h&&Ju.set(f,!0),g===1&&f.setAttribute(n,"true"),h||f.setAttribute(r,"true")}catch(v){console.error("aria-hidden: cannot operate on ",f,v)}})};return p(t),s.clear(),pm++,function(){i.forEach(function(c){var f=$o.get(c)-1,d=o.get(c)-1;$o.set(c,f),o.set(c,d),f||(Ju.has(c)||c.removeAttribute(r),Ju.delete(c)),d||c.removeAttribute(n)}),pm--,pm||($o=new WeakMap,$o=new WeakMap,Ju=new WeakMap,ec={})}},TA=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),a=_A(e);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),EA(r,a,n,"aria-hidden")):function(){return null}},tr=function(){return tr=Object.assign||function(t){for(var n,r=1,a=arguments.length;r<a;r++){n=arguments[r];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},tr.apply(this,arguments)};function M6(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n}function jA(e,t,n){if(n||arguments.length===2)for(var r=0,a=t.length,o;r<a;r++)(o||!(r in t))&&(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}var $c="right-scroll-bar-position",Nc="width-before-scroll-bar",$A="with-scroll-bars-hidden",NA="--removed-body-scroll-bar-size";function fm(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function MA(e,t){var n=k.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var a=n.value;a!==r&&(n.value=r,n.callback(r,a))}}}})[0];return n.callback=t,n.facade}var RA=typeof window<"u"?k.useLayoutEffect:k.useEffect,Ox=new WeakMap;function IA(e,t){var n=MA(null,function(r){return e.forEach(function(a){return fm(a,r)})});return RA(function(){var r=Ox.get(n);if(r){var a=new Set(r),o=new Set(e),i=n.current;a.forEach(function(s){o.has(s)||fm(s,null)}),o.forEach(function(s){a.has(s)||fm(s,i)})}Ox.set(n,e)},[e]),n}function DA(e){return e}function LA(e,t){t===void 0&&(t=DA);var n=[],r=!1,a={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(o){var i=t(o,r);return n.push(i),function(){n=n.filter(function(s){return s!==i})}},assignSyncMedium:function(o){for(r=!0;n.length;){var i=n;n=[],i.forEach(o)}n={push:function(s){return o(s)},filter:function(){return n}}},assignMedium:function(o){r=!0;var i=[];if(n.length){var s=n;n=[],s.forEach(o),i=n}var l=function(){var p=i;i=[],p.forEach(o)},u=function(){return Promise.resolve().then(l)};u(),n={push:function(p){i.push(p),u()},filter:function(p){return i=i.filter(p),n}}}};return a}function FA(e){e===void 0&&(e={});var t=LA(null);return t.options=tr({async:!0,ssr:!1},e),t}var R6=function(e){var t=e.sideCar,n=M6(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return k.createElement(r,tr({},n))};R6.isSideCarExport=!0;function zA(e,t){return e.useMedium(t),R6}var I6=FA(),dm=function(){},Df=k.forwardRef(function(e,t){var n=k.useRef(null),r=k.useState({onScrollCapture:dm,onWheelCapture:dm,onTouchMoveCapture:dm}),a=r[0],o=r[1],i=e.forwardProps,s=e.children,l=e.className,u=e.removeScrollBar,p=e.enabled,c=e.shards,f=e.sideCar,d=e.noRelative,h=e.noIsolation,m=e.inert,g=e.allowPinchZoom,v=e.as,y=v===void 0?"div":v,x=e.gapMode,S=M6(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),w=f,P=IA([n,t]),O=tr(tr({},S),a);return k.createElement(k.Fragment,null,p&&k.createElement(w,{sideCar:I6,removeScrollBar:u,shards:c,noRelative:d,noIsolation:h,inert:m,setCallbacks:o,allowPinchZoom:!!g,lockRef:n,gapMode:x}),i?k.cloneElement(k.Children.only(s),tr(tr({},O),{ref:P})):k.createElement(y,tr({},O,{className:l,ref:P}),s))});Df.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};Df.classNames={fullWidth:Nc,zeroRight:$c};var BA=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function HA(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=BA();return t&&e.setAttribute("nonce",t),e}function GA(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function UA(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var WA=function(){var e=0,t=null;return{add:function(n){e==0&&(t=HA())&&(GA(t,n),UA(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},qA=function(){var e=WA();return function(t,n){k.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},D6=function(){var e=qA(),t=function(n){var r=n.styles,a=n.dynamic;return e(r,a),null};return t},VA={left:0,top:0,right:0,gap:0},mm=function(e){return parseInt(e||"",10)||0},KA=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],a=t[e==="padding"?"paddingRight":"marginRight"];return[mm(n),mm(r),mm(a)]},XA=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return VA;var t=KA(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},YA=D6(),si="data-scroll-locked",QA=function(e,t,n,r){var a=e.left,o=e.top,i=e.right,s=e.gap;return n===void 0&&(n="margin"),`
+  .`.concat($A,` {
+   overflow: hidden `).concat(r,`;
+   padding-right: `).concat(s,"px ").concat(r,`;
+  }
+  body[`).concat(si,`] {
+    overflow: hidden `).concat(r,`;
+    overscroll-behavior: contain;
+    `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&`
+    padding-left: `.concat(a,`px;
+    padding-top: `).concat(o,`px;
+    padding-right: `).concat(i,`px;
+    margin-left:0;
+    margin-top:0;
+    margin-right: `).concat(s,"px ").concat(r,`;
+    `),n==="padding"&&"padding-right: ".concat(s,"px ").concat(r,";")].filter(Boolean).join(""),`
+  }
+  
+  .`).concat($c,` {
+    right: `).concat(s,"px ").concat(r,`;
+  }
+  
+  .`).concat(Nc,` {
+    margin-right: `).concat(s,"px ").concat(r,`;
+  }
+  
+  .`).concat($c," .").concat($c,` {
+    right: 0 `).concat(r,`;
+  }
+  
+  .`).concat(Nc," .").concat(Nc,` {
+    margin-right: 0 `).concat(r,`;
+  }
+  
+  body[`).concat(si,`] {
+    `).concat(NA,": ").concat(s,`px;
+  }
+`)},kx=function(){var e=parseInt(document.body.getAttribute(si)||"0",10);return isFinite(e)?e:0},ZA=function(){k.useEffect(function(){return document.body.setAttribute(si,(kx()+1).toString()),function(){var e=kx()-1;e<=0?document.body.removeAttribute(si):document.body.setAttribute(si,e.toString())}},[])},JA=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,a=r===void 0?"margin":r;ZA();var o=k.useMemo(function(){return XA(a)},[a]);return k.createElement(YA,{styles:QA(o,!t,a,n?"":"!important")})},Hh=!1;if(typeof window<"u")try{var tc=Object.defineProperty({},"passive",{get:function(){return Hh=!0,!0}});window.addEventListener("test",tc,tc),window.removeEventListener("test",tc,tc)}catch{Hh=!1}var No=Hh?{passive:!1}:!1,eE=function(e){return e.tagName==="TEXTAREA"},L6=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!eE(e)&&n[t]==="visible")},tE=function(e){return L6(e,"overflowY")},nE=function(e){return L6(e,"overflowX")},Cx=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=F6(e,r);if(a){var o=z6(e,r),i=o[1],s=o[2];if(i>s)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},rE=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},aE=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},F6=function(e,t){return e==="v"?tE(t):nE(t)},z6=function(e,t){return e==="v"?rE(t):aE(t)},oE=function(e,t){return e==="h"&&t==="rtl"?-1:1},iE=function(e,t,n,r,a){var o=oE(e,window.getComputedStyle(t).direction),i=o*r,s=n.target,l=t.contains(s),u=!1,p=i>0,c=0,f=0;do{if(!s)break;var d=z6(e,s),h=d[0],m=d[1],g=d[2],v=m-g-o*h;(h||v)&&F6(e,s)&&(c+=v,f+=h);var y=s.parentNode;s=y&&y.nodeType===Node.DOCUMENT_FRAGMENT_NODE?y.host:y}while(!l&&s!==document.body||l&&(t.contains(s)||t===s));return(p&&Math.abs(c)<1||!p&&Math.abs(f)<1)&&(u=!0),u},nc=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},_x=function(e){return[e.deltaX,e.deltaY]},Ax=function(e){return e&&"current"in e?e.current:e},sE=function(e,t){return e[0]===t[0]&&e[1]===t[1]},lE=function(e){return`
+  .block-interactivity-`.concat(e,` {pointer-events: none;}
+  .allow-interactivity-`).concat(e,` {pointer-events: all;}
+`)},uE=0,Mo=[];function cE(e){var t=k.useRef([]),n=k.useRef([0,0]),r=k.useRef(),a=k.useState(uE++)[0],o=k.useState(D6)[0],i=k.useRef(e);k.useEffect(function(){i.current=e},[e]),k.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var m=jA([e.lockRef.current],(e.shards||[]).map(Ax),!0).filter(Boolean);return m.forEach(function(g){return g.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),m.forEach(function(g){return g.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var s=k.useCallback(function(m,g){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!i.current.allowPinchZoom;var v=nc(m),y=n.current,x="deltaX"in m?m.deltaX:y[0]-v[0],S="deltaY"in m?m.deltaY:y[1]-v[1],w,P=m.target,O=Math.abs(x)>Math.abs(S)?"h":"v";if("touches"in m&&O==="h"&&P.type==="range")return!1;var C=Cx(O,P);if(!C)return!0;if(C?w=O:(w=O==="v"?"h":"v",C=Cx(O,P)),!C)return!1;if(!r.current&&"changedTouches"in m&&(x||S)&&(r.current=w),!w)return!0;var _=r.current||w;return iE(_,g,m,_==="h"?x:S)},[]),l=k.useCallback(function(m){var g=m;if(!(!Mo.length||Mo[Mo.length-1]!==o)){var v="deltaY"in g?_x(g):nc(g),y=t.current.filter(function(w){return w.name===g.type&&(w.target===g.target||g.target===w.shadowParent)&&sE(w.delta,v)})[0];if(y&&y.should){g.cancelable&&g.preventDefault();return}if(!y){var x=(i.current.shards||[]).map(Ax).filter(Boolean).filter(function(w){return w.contains(g.target)}),S=x.length>0?s(g,x[0]):!i.current.noIsolation;S&&g.cancelable&&g.preventDefault()}}},[]),u=k.useCallback(function(m,g,v,y){var x={name:m,delta:g,target:v,should:y,shadowParent:pE(v)};t.current.push(x),setTimeout(function(){t.current=t.current.filter(function(S){return S!==x})},1)},[]),p=k.useCallback(function(m){n.current=nc(m),r.current=void 0},[]),c=k.useCallback(function(m){u(m.type,_x(m),m.target,s(m,e.lockRef.current))},[]),f=k.useCallback(function(m){u(m.type,nc(m),m.target,s(m,e.lockRef.current))},[]);k.useEffect(function(){return Mo.push(o),e.setCallbacks({onScrollCapture:c,onWheelCapture:c,onTouchMoveCapture:f}),document.addEventListener("wheel",l,No),document.addEventListener("touchmove",l,No),document.addEventListener("touchstart",p,No),function(){Mo=Mo.filter(function(m){return m!==o}),document.removeEventListener("wheel",l,No),document.removeEventListener("touchmove",l,No),document.removeEventListener("touchstart",p,No)}},[]);var d=e.removeScrollBar,h=e.inert;return k.createElement(k.Fragment,null,h?k.createElement(o,{styles:lE(a)}):null,d?k.createElement(JA,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function pE(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const fE=zA(I6,cE);var B6=k.forwardRef(function(e,t){return k.createElement(Df,tr({},e,{ref:t,sideCar:fE}))});B6.classNames=Df.classNames;var dE=[" ","Enter","ArrowUp","ArrowDown"],mE=[" ","Enter"],yo="Select",[Lf,Ff,hE]=n6(yo),[us,_ie]=is(yo,[hE,If]),zf=If(),[vE,Ta]=us(yo),[yE,gE]=us(yo),H6=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:o,value:i,defaultValue:s,onValueChange:l,dir:u,name:p,autoComplete:c,disabled:f,required:d,form:h}=e,m=zf(t),[g,v]=k.useState(null),[y,x]=k.useState(null),[S,w]=k.useState(!1),P=xy(u),[O,C]=pp({prop:r,defaultProp:a??!1,onChange:o,caller:yo}),[_,T]=pp({prop:i,defaultProp:s,onChange:l,caller:yo}),A=k.useRef(null),j=g?h||!!g.closest("form"):!0,[N,M]=k.useState(new Set),I=Array.from(N).map(R=>R.props.value).join(";");return b.jsx(xA,{...m,children:b.jsxs(vE,{required:d,scope:t,trigger:g,onTriggerChange:v,valueNode:y,onValueNodeChange:x,valueNodeHasChildren:S,onValueNodeHasChildrenChange:w,contentId:Su(),value:_,onValueChange:T,open:O,onOpenChange:C,dir:P,triggerPointerDownPosRef:A,disabled:f,children:[b.jsx(Lf.Provider,{scope:t,children:b.jsx(yE,{scope:e.__scopeSelect,onNativeOptionAdd:k.useCallback(R=>{M(L=>new Set(L).add(R))},[]),onNativeOptionRemove:k.useCallback(R=>{M(L=>{const $=new Set(L);return $.delete(R),$})},[]),children:n})}),j?b.jsxs(f4,{"aria-hidden":!0,required:d,tabIndex:-1,name:p,autoComplete:c,value:_,onChange:R=>T(R.target.value),disabled:f,form:h,children:[_===void 0?b.jsx("option",{value:""}):null,Array.from(N)]},I):null]})})};H6.displayName=yo;var G6="SelectTrigger",U6=k.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...a}=e,o=zf(n),i=Ta(G6,n),s=i.disabled||r,l=Ye(t,i.onTriggerChange),u=Ff(n),p=k.useRef("touch"),[c,f,d]=m4(m=>{const g=u().filter(x=>!x.disabled),v=g.find(x=>x.value===i.value),y=h4(g,m,v);y!==void 0&&i.onValueChange(y.value)}),h=m=>{s||(i.onOpenChange(!0),d()),m&&(i.triggerPointerDownPosRef.current={x:Math.round(m.pageX),y:Math.round(m.pageY)})};return b.jsx(_6,{asChild:!0,...o,children:b.jsx(Ae.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":d4(i.value)?"":void 0,...a,ref:l,onClick:fe(a.onClick,m=>{m.currentTarget.focus(),p.current!=="mouse"&&h(m)}),onPointerDown:fe(a.onPointerDown,m=>{p.current=m.pointerType;const g=m.target;g.hasPointerCapture(m.pointerId)&&g.releasePointerCapture(m.pointerId),m.button===0&&m.ctrlKey===!1&&m.pointerType==="mouse"&&(h(m),m.preventDefault())}),onKeyDown:fe(a.onKeyDown,m=>{const g=c.current!=="";!(m.ctrlKey||m.altKey||m.metaKey)&&m.key.length===1&&f(m.key),!(g&&m.key===" ")&&dE.includes(m.key)&&(h(),m.preventDefault())})})})});U6.displayName=G6;var W6="SelectValue",q6=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,children:o,placeholder:i="",...s}=e,l=Ta(W6,n),{onValueNodeHasChildrenChange:u}=l,p=o!==void 0,c=Ye(t,l.onValueNodeChange);return Et(()=>{u(p)},[u,p]),b.jsx(Ae.span,{...s,ref:c,style:{pointerEvents:"none"},children:d4(l.value)?b.jsx(b.Fragment,{children:i}):o})});q6.displayName=W6;var xE="SelectIcon",V6=k.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...a}=e;return b.jsx(Ae.span,{"aria-hidden":!0,...a,ref:t,children:r||"▼"})});V6.displayName=xE;var wE="SelectPortal",K6=e=>b.jsx(T6,{asChild:!0,...e});K6.displayName=wE;var go="SelectContent",X6=k.forwardRef((e,t)=>{const n=Ta(go,e.__scopeSelect),[r,a]=k.useState();if(Et(()=>{a(new DocumentFragment)},[]),!n.open){const o=r;return o?os.createPortal(b.jsx(Y6,{scope:e.__scopeSelect,children:b.jsx(Lf.Slot,{scope:e.__scopeSelect,children:b.jsx("div",{children:e.children})})}),o):null}return b.jsx(Q6,{...e,ref:t})});X6.displayName=go;var Cn=10,[Y6,ja]=us(go),bE="SelectContentImpl",SE=Al("SelectContent.RemoveScroll"),Q6=k.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:o,onPointerDownOutside:i,side:s,sideOffset:l,align:u,alignOffset:p,arrowPadding:c,collisionBoundary:f,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g,...v}=e,y=Ta(go,n),[x,S]=k.useState(null),[w,P]=k.useState(null),O=Ye(t,J=>S(J)),[C,_]=k.useState(null),[T,A]=k.useState(null),j=Ff(n),[N,M]=k.useState(!1),I=k.useRef(!1);k.useEffect(()=>{if(x)return TA(x)},[x]),t_();const R=k.useCallback(J=>{const[se,...q]=j().map(F=>F.ref.current),[K]=q.slice(-1),X=document.activeElement;for(const F of J)if(F===X||(F==null||F.scrollIntoView({block:"nearest"}),F===se&&w&&(w.scrollTop=0),F===K&&w&&(w.scrollTop=w.scrollHeight),F==null||F.focus(),document.activeElement!==X))return},[j,w]),L=k.useCallback(()=>R([C,x]),[R,C,x]);k.useEffect(()=>{N&&L()},[N,L]);const{onOpenChange:$,triggerPointerDownPosRef:D}=y;k.useEffect(()=>{if(x){let J={x:0,y:0};const se=K=>{var X,F;J={x:Math.abs(Math.round(K.pageX)-(((X=D.current)==null?void 0:X.x)??0)),y:Math.abs(Math.round(K.pageY)-(((F=D.current)==null?void 0:F.y)??0))}},q=K=>{J.x<=10&&J.y<=10?K.preventDefault():x.contains(K.target)||$(!1),document.removeEventListener("pointermove",se),D.current=null};return D.current!==null&&(document.addEventListener("pointermove",se),document.addEventListener("pointerup",q,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",se),document.removeEventListener("pointerup",q,{capture:!0})}}},[x,$,D]),k.useEffect(()=>{const J=()=>$(!1);return window.addEventListener("blur",J),window.addEventListener("resize",J),()=>{window.removeEventListener("blur",J),window.removeEventListener("resize",J)}},[$]);const[H,W]=m4(J=>{const se=j().filter(X=>!X.disabled),q=se.find(X=>X.ref.current===document.activeElement),K=h4(se,J,q);K&&setTimeout(()=>K.ref.current.focus())}),G=k.useCallback((J,se,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===se||K)&&(_(J),K&&(I.current=!0))},[y.value]),Z=k.useCallback(()=>x==null?void 0:x.focus(),[x]),re=k.useCallback((J,se,q)=>{const K=!I.current&&!q;(y.value!==void 0&&y.value===se||K)&&A(J)},[y.value]),ve=r==="popper"?Gh:Z6,be=ve===Gh?{side:s,sideOffset:l,align:u,alignOffset:p,arrowPadding:c,collisionBoundary:f,collisionPadding:d,sticky:h,hideWhenDetached:m,avoidCollisions:g}:{};return b.jsx(Y6,{scope:n,content:x,viewport:w,onViewportChange:P,itemRefCallback:G,selectedItem:C,onItemLeave:Z,itemTextRefCallback:re,focusSelectedItem:L,selectedItemText:T,position:r,isPositioned:N,searchRef:H,children:b.jsx(B6,{as:SE,allowPinchZoom:!0,children:b.jsx(o6,{asChild:!0,trapped:y.open,onMountAutoFocus:J=>{J.preventDefault()},onUnmountAutoFocus:fe(a,J=>{var se;(se=y.trigger)==null||se.focus({preventScroll:!0}),J.preventDefault()}),children:b.jsx(wy,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:J=>J.preventDefault(),onDismiss:()=>y.onOpenChange(!1),children:b.jsx(ve,{role:"listbox",id:y.contentId,"data-state":y.open?"open":"closed",dir:y.dir,onContextMenu:J=>J.preventDefault(),...v,...be,onPlaced:()=>M(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:fe(v.onKeyDown,J=>{const se=J.ctrlKey||J.altKey||J.metaKey;if(J.key==="Tab"&&J.preventDefault(),!se&&J.key.length===1&&W(J.key),["ArrowUp","ArrowDown","Home","End"].includes(J.key)){let K=j().filter(X=>!X.disabled).map(X=>X.ref.current);if(["ArrowUp","End"].includes(J.key)&&(K=K.slice().reverse()),["ArrowUp","ArrowDown"].includes(J.key)){const X=J.target,F=K.indexOf(X);K=K.slice(F+1)}setTimeout(()=>R(K)),J.preventDefault()}})})})})})})});Q6.displayName=bE;var PE="SelectItemAlignedPosition",Z6=k.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...a}=e,o=Ta(go,n),i=ja(go,n),[s,l]=k.useState(null),[u,p]=k.useState(null),c=Ye(t,O=>p(O)),f=Ff(n),d=k.useRef(!1),h=k.useRef(!0),{viewport:m,selectedItem:g,selectedItemText:v,focusSelectedItem:y}=i,x=k.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&u&&m&&g&&v){const O=o.trigger.getBoundingClientRect(),C=u.getBoundingClientRect(),_=o.valueNode.getBoundingClientRect(),T=v.getBoundingClientRect();if(o.dir!=="rtl"){const X=T.left-C.left,F=_.left-X,pe=O.left-F,te=O.width+pe,Ne=Math.max(te,C.width),Me=window.innerWidth-Cn,Qe=sx(F,[Cn,Math.max(Cn,Me-Ne)]);s.style.minWidth=te+"px",s.style.left=Qe+"px"}else{const X=C.right-T.right,F=window.innerWidth-_.right-X,pe=window.innerWidth-O.right-F,te=O.width+pe,Ne=Math.max(te,C.width),Me=window.innerWidth-Cn,Qe=sx(F,[Cn,Math.max(Cn,Me-Ne)]);s.style.minWidth=te+"px",s.style.right=Qe+"px"}const A=f(),j=window.innerHeight-Cn*2,N=m.scrollHeight,M=window.getComputedStyle(u),I=parseInt(M.borderTopWidth,10),R=parseInt(M.paddingTop,10),L=parseInt(M.borderBottomWidth,10),$=parseInt(M.paddingBottom,10),D=I+R+N+$+L,H=Math.min(g.offsetHeight*5,D),W=window.getComputedStyle(m),G=parseInt(W.paddingTop,10),Z=parseInt(W.paddingBottom,10),re=O.top+O.height/2-Cn,ve=j-re,be=g.offsetHeight/2,J=g.offsetTop+be,se=I+R+J,q=D-se;if(se<=re){const X=A.length>0&&g===A[A.length-1].ref.current;s.style.bottom="0px";const F=u.clientHeight-m.offsetTop-m.offsetHeight,pe=Math.max(ve,be+(X?Z:0)+F+L),te=se+pe;s.style.height=te+"px"}else{const X=A.length>0&&g===A[0].ref.current;s.style.top="0px";const pe=Math.max(re,I+m.offsetTop+(X?G:0)+be)+q;s.style.height=pe+"px",m.scrollTop=se-re+m.offsetTop}s.style.margin=`${Cn}px 0`,s.style.minHeight=H+"px",s.style.maxHeight=j+"px",r==null||r(),requestAnimationFrame(()=>d.current=!0)}},[f,o.trigger,o.valueNode,s,u,m,g,v,o.dir,r]);Et(()=>x(),[x]);const[S,w]=k.useState();Et(()=>{u&&w(window.getComputedStyle(u).zIndex)},[u]);const P=k.useCallback(O=>{O&&h.current===!0&&(x(),y==null||y(),h.current=!1)},[x,y]);return b.jsx(kE,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:d,onScrollButtonChange:P,children:b.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:S},children:b.jsx(Ae.div,{...a,ref:c,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});Z6.displayName=PE;var OE="SelectPopperPosition",Gh=k.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=Cn,...o}=e,i=zf(n);return b.jsx(A6,{...i,...o,ref:t,align:r,collisionPadding:a,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Gh.displayName=OE;var[kE,Ty]=us(go,{}),Uh="SelectViewport",J6=k.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...a}=e,o=ja(Uh,n),i=Ty(Uh,n),s=Ye(t,o.onViewportChange),l=k.useRef(0);return b.jsxs(b.Fragment,{children:[b.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),b.jsx(Lf.Slot,{scope:n,children:b.jsx(Ae.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:fe(a.onScroll,u=>{const p=u.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:f}=i;if(f!=null&&f.current&&c){const d=Math.abs(l.current-p.scrollTop);if(d>0){const h=window.innerHeight-Cn*2,m=parseFloat(c.style.minHeight),g=parseFloat(c.style.height),v=Math.max(m,g);if(v<h){const y=v+d,x=Math.min(h,y),S=y-x;c.style.height=x+"px",c.style.bottom==="0px"&&(p.scrollTop=S>0?S:0,c.style.justifyContent="flex-end")}}}l.current=p.scrollTop})})})]})});J6.displayName=Uh;var e4="SelectGroup",[CE,_E]=us(e4),AE=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=Su();return b.jsx(CE,{scope:n,id:a,children:b.jsx(Ae.div,{role:"group","aria-labelledby":a,...r,ref:t})})});AE.displayName=e4;var t4="SelectLabel",n4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=_E(t4,n);return b.jsx(Ae.div,{id:a.id,...r,ref:t})});n4.displayName=t4;var fp="SelectItem",[EE,r4]=us(fp),a4=k.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:o,...i}=e,s=Ta(fp,n),l=ja(fp,n),u=s.value===r,[p,c]=k.useState(o??""),[f,d]=k.useState(!1),h=Ye(t,y=>{var x;return(x=l.itemRefCallback)==null?void 0:x.call(l,y,r,a)}),m=Su(),g=k.useRef("touch"),v=()=>{a||(s.onValueChange(r),s.onOpenChange(!1))};if(r==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return b.jsx(EE,{scope:n,value:r,disabled:a,textId:m,isSelected:u,onItemTextChange:k.useCallback(y=>{c(x=>x||((y==null?void 0:y.textContent)??"").trim())},[]),children:b.jsx(Lf.ItemSlot,{scope:n,value:r,disabled:a,textValue:p,children:b.jsx(Ae.div,{role:"option","aria-labelledby":m,"data-highlighted":f?"":void 0,"aria-selected":u&&f,"data-state":u?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...i,ref:h,onFocus:fe(i.onFocus,()=>d(!0)),onBlur:fe(i.onBlur,()=>d(!1)),onClick:fe(i.onClick,()=>{g.current!=="mouse"&&v()}),onPointerUp:fe(i.onPointerUp,()=>{g.current==="mouse"&&v()}),onPointerDown:fe(i.onPointerDown,y=>{g.current=y.pointerType}),onPointerMove:fe(i.onPointerMove,y=>{var x;g.current=y.pointerType,a?(x=l.onItemLeave)==null||x.call(l):g.current==="mouse"&&y.currentTarget.focus({preventScroll:!0})}),onPointerLeave:fe(i.onPointerLeave,y=>{var x;y.currentTarget===document.activeElement&&((x=l.onItemLeave)==null||x.call(l))}),onKeyDown:fe(i.onKeyDown,y=>{var S;((S=l.searchRef)==null?void 0:S.current)!==""&&y.key===" "||(mE.includes(y.key)&&v(),y.key===" "&&y.preventDefault())})})})})});a4.displayName=fp;var Xs="SelectItemText",o4=k.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,...o}=e,i=Ta(Xs,n),s=ja(Xs,n),l=r4(Xs,n),u=gE(Xs,n),[p,c]=k.useState(null),f=Ye(t,v=>c(v),l.onItemTextChange,v=>{var y;return(y=s.itemTextRefCallback)==null?void 0:y.call(s,v,l.value,l.disabled)}),d=p==null?void 0:p.textContent,h=k.useMemo(()=>b.jsx("option",{value:l.value,disabled:l.disabled,children:d},l.value),[l.disabled,l.value,d]),{onNativeOptionAdd:m,onNativeOptionRemove:g}=u;return Et(()=>(m(h),()=>g(h)),[m,g,h]),b.jsxs(b.Fragment,{children:[b.jsx(Ae.span,{id:l.textId,...o,ref:f}),l.isSelected&&i.valueNode&&!i.valueNodeHasChildren?os.createPortal(o.children,i.valueNode):null]})});o4.displayName=Xs;var i4="SelectItemIndicator",s4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return r4(i4,n).isSelected?b.jsx(Ae.span,{"aria-hidden":!0,...r,ref:t}):null});s4.displayName=i4;var Wh="SelectScrollUpButton",l4=k.forwardRef((e,t)=>{const n=ja(Wh,e.__scopeSelect),r=Ty(Wh,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return Et(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollTop>0;o(u)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(c4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop-l.offsetHeight)}}):null});l4.displayName=Wh;var qh="SelectScrollDownButton",u4=k.forwardRef((e,t)=>{const n=ja(qh,e.__scopeSelect),r=Ty(qh,e.__scopeSelect),[a,o]=k.useState(!1),i=Ye(t,r.onScrollButtonChange);return Et(()=>{if(n.viewport&&n.isPositioned){let s=function(){const u=l.scrollHeight-l.clientHeight,p=Math.ceil(l.scrollTop)<u;o(p)};const l=n.viewport;return s(),l.addEventListener("scroll",s),()=>l.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(c4,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:l}=n;s&&l&&(s.scrollTop=s.scrollTop+l.offsetHeight)}}):null});u4.displayName=qh;var c4=k.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=e,o=ja("SelectScrollButton",n),i=k.useRef(null),s=Ff(n),l=k.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return k.useEffect(()=>()=>l(),[l]),Et(()=>{var p;const u=s().find(c=>c.ref.current===document.activeElement);(p=u==null?void 0:u.ref.current)==null||p.scrollIntoView({block:"nearest"})},[s]),b.jsx(Ae.div,{"aria-hidden":!0,...a,ref:t,style:{flexShrink:0,...a.style},onPointerDown:fe(a.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(r,50))}),onPointerMove:fe(a.onPointerMove,()=>{var u;(u=o.onItemLeave)==null||u.call(o),i.current===null&&(i.current=window.setInterval(r,50))}),onPointerLeave:fe(a.onPointerLeave,()=>{l()})})}),TE="SelectSeparator",p4=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return b.jsx(Ae.div,{"aria-hidden":!0,...r,ref:t})});p4.displayName=TE;var Vh="SelectArrow",jE=k.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=zf(n),o=Ta(Vh,n),i=ja(Vh,n);return o.open&&i.position==="popper"?b.jsx(E6,{...a,...r,ref:t}):null});jE.displayName=Vh;var $E="SelectBubbleInput",f4=k.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const a=k.useRef(null),o=Ye(r,a),i=OA(t);return k.useEffect(()=>{const s=a.current;if(!s)return;const l=window.HTMLSelectElement.prototype,p=Object.getOwnPropertyDescriptor(l,"value").set;if(i!==t&&p){const c=new Event("change",{bubbles:!0});p.call(s,t),s.dispatchEvent(c)}},[i,t]),b.jsx(Ae.select,{...n,style:{...j6,...n.style},ref:o,defaultValue:t})});f4.displayName=$E;function d4(e){return e===""||e===void 0}function m4(e){const t=Oa(e),n=k.useRef(""),r=k.useRef(0),a=k.useCallback(i=>{const s=n.current+i;t(s),function l(u){n.current=u,window.clearTimeout(r.current),u!==""&&(r.current=window.setTimeout(()=>l(""),1e3))}(s)},[t]),o=k.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return k.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,o]}function h4(e,t,n){const a=t.length>1&&Array.from(t).every(u=>u===t[0])?t[0]:t,o=n?e.indexOf(n):-1;let i=NE(e,Math.max(o,0));a.length===1&&(i=i.filter(u=>u!==n));const l=i.find(u=>u.textValue.toLowerCase().startsWith(a.toLowerCase()));return l!==n?l:void 0}function NE(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ME=H6,v4=U6,RE=q6,IE=V6,DE=K6,y4=X6,LE=J6,g4=n4,x4=a4,FE=o4,zE=s4,w4=l4,b4=u4,S4=p4;/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const BE=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),P4=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */var HE={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.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const GE=k.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:a="",children:o,iconNode:i,...s},l)=>k.createElement("svg",{ref:l,...HE,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:P4("lucide",a),...s},[...i.map(([u,p])=>k.createElement(u,p)),...Array.isArray(o)?o:[o]]));/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const Ke=(e,t)=>{const n=k.forwardRef(({className:r,...a},o)=>k.createElement(GE,{ref:o,iconNode:t,className:P4(`lucide-${BE(e)}`,r),...a}));return n.displayName=`${e}`,n};/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const O4=Ke("Activity",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const UE=Ke("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const k4=Ke("ChartColumn",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const WE=Ke("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const C4=Ke("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const qE=Ke("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
+ * @license lucide-react v0.462.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=Ke("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const _4=Ke("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const A4=Ke("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const E4=Ke("Database",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const KE=Ke("ExternalLink",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const XE=Ke("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const T4=Ke("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const YE=Ke("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const QE=Ke("MemoryStick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const j4=Ke("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const $4=Ke("Server",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const ZE=Ke("Shield",[["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"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const JE=Ke("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const N4=Ke("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const eT=Ke("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/**
+ * @license lucide-react v0.462.0 - ISC
+ *
+ * This source code is licensed under the ISC license.
+ * See the LICENSE file in the root directory of this source tree.
+ */const tT=Ke("Zap",[["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"}]]);function M4(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=M4(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function ue(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=M4(e))&&(r&&(r+=" "),r+=t);return r}const jy="-",nT=e=>{const t=aT(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:i=>{const s=i.split(jy);return s[0]===""&&s.length!==1&&s.shift(),R4(s,t)||rT(i)},getConflictingClassGroupIds:(i,s)=>{const l=n[i]||[];return s&&r[i]?[...l,...r[i]]:l}}},R4=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?R4(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const o=e.join(jy);return(i=t.validators.find(({validator:s})=>s(o)))==null?void 0:i.classGroupId},Ex=/^\[(.+)\]$/,rT=e=>{if(Ex.test(e)){const t=Ex.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},aT=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return iT(Object.entries(e.classGroups),n).forEach(([o,i])=>{Kh(i,r,o,t)}),r},Kh=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?t:Tx(t,a);o.classGroupId=n;return}if(typeof a=="function"){if(oT(a)){Kh(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([o,i])=>{Kh(i,Tx(t,o),n,r)})})},Tx=(e,t)=>{let n=e;return t.split(jy).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},oT=e=>e.isThemeGetter,iT=(e,t)=>t?e.map(([n,r])=>{const a=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[t+i,s])):o);return[n,a]}):e,sT=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(o,i)=>{n.set(o,i),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let i=n.get(o);if(i!==void 0)return i;if((i=r.get(o))!==void 0)return a(o,i),i},set(o,i){n.has(o)?n.set(o,i):a(o,i)}}},I4="!",lT=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,a=t[0],o=t.length,i=s=>{const l=[];let u=0,p=0,c;for(let g=0;g<s.length;g++){let v=s[g];if(u===0){if(v===a&&(r||s.slice(g,g+o)===t)){l.push(s.slice(p,g)),p=g+o;continue}if(v==="/"){c=g;continue}}v==="["?u++:v==="]"&&u--}const f=l.length===0?s:s.substring(p),d=f.startsWith(I4),h=d?f.substring(1):f,m=c&&c>p?c-p:void 0;return{modifiers:l,hasImportantModifier:d,baseClassName:h,maybePostfixModifierPosition:m}};return n?s=>n({className:s,parseClassName:i}):i},uT=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},cT=e=>({cache:sT(e.cacheSize),parseClassName:lT(e),...nT(e)}),pT=/\s+/,fT=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a}=t,o=[],i=e.trim().split(pT);let s="";for(let l=i.length-1;l>=0;l-=1){const u=i[l],{modifiers:p,hasImportantModifier:c,baseClassName:f,maybePostfixModifierPosition:d}=n(u);let h=!!d,m=r(h?f.substring(0,d):f);if(!m){if(!h){s=u+(s.length>0?" "+s:s);continue}if(m=r(f),!m){s=u+(s.length>0?" "+s:s);continue}h=!1}const g=uT(p).join(":"),v=c?g+I4:g,y=v+m;if(o.includes(y))continue;o.push(y);const x=a(m,h);for(let S=0;S<x.length;++S){const w=x[S];o.push(v+w)}s=u+(s.length>0?" "+s:s)}return s};function dT(){let e=0,t,n,r="";for(;e<arguments.length;)(t=arguments[e++])&&(n=D4(t))&&(r&&(r+=" "),r+=n);return r}const D4=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=D4(e[r]))&&(n&&(n+=" "),n+=t);return n};function mT(e,...t){let n,r,a,o=i;function i(l){const u=t.reduce((p,c)=>c(p),e());return n=cT(u),r=n.cache.get,a=n.cache.set,o=s,s(l)}function s(l){const u=r(l);if(u)return u;const p=fT(l,n);return a(l,p),p}return function(){return o(dT.apply(null,arguments))}}const Re=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},L4=/^\[(?:([a-z-]+):)?(.+)\]$/i,hT=/^\d+\/\d+$/,vT=new Set(["px","full","screen"]),yT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,gT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,xT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,wT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,bT=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,yr=e=>li(e)||vT.has(e)||hT.test(e),Vr=e=>cs(e,"length",ET),li=e=>!!e&&!Number.isNaN(Number(e)),hm=e=>cs(e,"number",li),Ns=e=>!!e&&Number.isInteger(Number(e)),ST=e=>e.endsWith("%")&&li(e.slice(0,-1)),oe=e=>L4.test(e),Kr=e=>yT.test(e),PT=new Set(["length","size","percentage"]),OT=e=>cs(e,PT,F4),kT=e=>cs(e,"position",F4),CT=new Set(["image","url"]),_T=e=>cs(e,CT,jT),AT=e=>cs(e,"",TT),Ms=()=>!0,cs=(e,t,n)=>{const r=L4.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},ET=e=>gT.test(e)&&!xT.test(e),F4=()=>!1,TT=e=>wT.test(e),jT=e=>bT.test(e),$T=()=>{const e=Re("colors"),t=Re("spacing"),n=Re("blur"),r=Re("brightness"),a=Re("borderColor"),o=Re("borderRadius"),i=Re("borderSpacing"),s=Re("borderWidth"),l=Re("contrast"),u=Re("grayscale"),p=Re("hueRotate"),c=Re("invert"),f=Re("gap"),d=Re("gradientColorStops"),h=Re("gradientColorStopPositions"),m=Re("inset"),g=Re("margin"),v=Re("opacity"),y=Re("padding"),x=Re("saturate"),S=Re("scale"),w=Re("sepia"),P=Re("skew"),O=Re("space"),C=Re("translate"),_=()=>["auto","contain","none"],T=()=>["auto","hidden","clip","visible","scroll"],A=()=>["auto",oe,t],j=()=>[oe,t],N=()=>["",yr,Vr],M=()=>["auto",li,oe],I=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],R=()=>["solid","dashed","dotted","double","none"],L=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],$=()=>["start","end","center","between","around","evenly","stretch"],D=()=>["","0",oe],H=()=>["auto","avoid","all","avoid-page","page","left","right","column"],W=()=>[li,oe];return{cacheSize:500,separator:":",theme:{colors:[Ms],spacing:[yr,Vr],blur:["none","",Kr,oe],brightness:W(),borderColor:[e],borderRadius:["none","","full",Kr,oe],borderSpacing:j(),borderWidth:N(),contrast:W(),grayscale:D(),hueRotate:W(),invert:D(),gap:j(),gradientColorStops:[e],gradientColorStopPositions:[ST,Vr],inset:A(),margin:A(),opacity:W(),padding:j(),saturate:W(),scale:W(),sepia:D(),skew:W(),space:j(),translate:j()},classGroups:{aspect:[{aspect:["auto","square","video",oe]}],container:["container"],columns:[{columns:[Kr]}],"break-after":[{"break-after":H()}],"break-before":[{"break-before":H()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...I(),oe]}],overflow:[{overflow:T()}],"overflow-x":[{"overflow-x":T()}],"overflow-y":[{"overflow-y":T()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[m]}],"inset-x":[{"inset-x":[m]}],"inset-y":[{"inset-y":[m]}],start:[{start:[m]}],end:[{end:[m]}],top:[{top:[m]}],right:[{right:[m]}],bottom:[{bottom:[m]}],left:[{left:[m]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Ns,oe]}],basis:[{basis:A()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",oe]}],grow:[{grow:D()}],shrink:[{shrink:D()}],order:[{order:["first","last","none",Ns,oe]}],"grid-cols":[{"grid-cols":[Ms]}],"col-start-end":[{col:["auto",{span:["full",Ns,oe]},oe]}],"col-start":[{"col-start":M()}],"col-end":[{"col-end":M()}],"grid-rows":[{"grid-rows":[Ms]}],"row-start-end":[{row:["auto",{span:[Ns,oe]},oe]}],"row-start":[{"row-start":M()}],"row-end":[{"row-end":M()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",oe]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",oe]}],gap:[{gap:[f]}],"gap-x":[{"gap-x":[f]}],"gap-y":[{"gap-y":[f]}],"justify-content":[{justify:["normal",...$()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...$(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...$(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[y]}],px:[{px:[y]}],py:[{py:[y]}],ps:[{ps:[y]}],pe:[{pe:[y]}],pt:[{pt:[y]}],pr:[{pr:[y]}],pb:[{pb:[y]}],pl:[{pl:[y]}],m:[{m:[g]}],mx:[{mx:[g]}],my:[{my:[g]}],ms:[{ms:[g]}],me:[{me:[g]}],mt:[{mt:[g]}],mr:[{mr:[g]}],mb:[{mb:[g]}],ml:[{ml:[g]}],"space-x":[{"space-x":[O]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[O]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",oe,t]}],"min-w":[{"min-w":[oe,t,"min","max","fit"]}],"max-w":[{"max-w":[oe,t,"none","full","min","max","fit","prose",{screen:[Kr]},Kr]}],h:[{h:[oe,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[oe,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[oe,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[oe,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Kr,Vr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",hm]}],"font-family":[{font:[Ms]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",oe]}],"line-clamp":[{"line-clamp":["none",li,hm]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",yr,oe]}],"list-image":[{"list-image":["none",oe]}],"list-style-type":[{list:["none","disc","decimal",oe]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...R(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",yr,Vr]}],"underline-offset":[{"underline-offset":["auto",yr,oe]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:j()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",oe]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",oe]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...I(),kT]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",OT]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},_T]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[h]}],"gradient-via-pos":[{via:[h]}],"gradient-to-pos":[{to:[h]}],"gradient-from":[{from:[d]}],"gradient-via":[{via:[d]}],"gradient-to":[{to:[d]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[...R(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:R()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...R()]}],"outline-offset":[{"outline-offset":[yr,oe]}],"outline-w":[{outline:[yr,Vr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:N()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[yr,Vr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Kr,AT]}],"shadow-color":[{shadow:[Ms]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...L(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":L()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Kr,oe]}],grayscale:[{grayscale:[u]}],"hue-rotate":[{"hue-rotate":[p]}],invert:[{invert:[c]}],saturate:[{saturate:[x]}],sepia:[{sepia:[w]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[u]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p]}],"backdrop-invert":[{"backdrop-invert":[c]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[x]}],"backdrop-sepia":[{"backdrop-sepia":[w]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",oe]}],duration:[{duration:W()}],ease:[{ease:["linear","in","out","in-out",oe]}],delay:[{delay:W()}],animate:[{animate:["none","spin","ping","pulse","bounce",oe]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[S]}],"scale-x":[{"scale-x":[S]}],"scale-y":[{"scale-y":[S]}],rotate:[{rotate:[Ns,oe]}],"translate-x":[{"translate-x":[C]}],"translate-y":[{"translate-y":[C]}],"skew-x":[{"skew-x":[P]}],"skew-y":[{"skew-y":[P]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",oe]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",oe]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":j()}],"scroll-mx":[{"scroll-mx":j()}],"scroll-my":[{"scroll-my":j()}],"scroll-ms":[{"scroll-ms":j()}],"scroll-me":[{"scroll-me":j()}],"scroll-mt":[{"scroll-mt":j()}],"scroll-mr":[{"scroll-mr":j()}],"scroll-mb":[{"scroll-mb":j()}],"scroll-ml":[{"scroll-ml":j()}],"scroll-p":[{"scroll-p":j()}],"scroll-px":[{"scroll-px":j()}],"scroll-py":[{"scroll-py":j()}],"scroll-ps":[{"scroll-ps":j()}],"scroll-pe":[{"scroll-pe":j()}],"scroll-pt":[{"scroll-pt":j()}],"scroll-pr":[{"scroll-pr":j()}],"scroll-pb":[{"scroll-pb":j()}],"scroll-pl":[{"scroll-pl":j()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",oe]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[yr,Vr,hm]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},NT=mT($T);function Pe(...e){return NT(ue(e))}const MT=ME,RT=RE,z4=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(v4,{ref:r,className:Pe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,b.jsx(IE,{asChild:!0,children:b.jsx(C4,{className:"h-4 w-4 opacity-50"})})]}));z4.displayName=v4.displayName;const B4=k.forwardRef(({className:e,...t},n)=>b.jsx(w4,{ref:n,className:Pe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(qE,{className:"h-4 w-4"})}));B4.displayName=w4.displayName;const H4=k.forwardRef(({className:e,...t},n)=>b.jsx(b4,{ref:n,className:Pe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(C4,{className:"h-4 w-4"})}));H4.displayName=b4.displayName;const G4=k.forwardRef(({className:e,children:t,position:n="popper",...r},a)=>(k.useEffect(()=>{const o=()=>{document.querySelectorAll("[data-radix-popper-content-wrapper]").forEach(l=>{const u=l;u.style.setProperty("--popover","0 0% 100%"),u.style.setProperty("--popover-foreground","222.2 84% 4.9%"),u.style.setProperty("--border","214.3 31.8% 91.4%"),u.style.setProperty("--background","0 0% 100%"),u.style.setProperty("--foreground","222.2 84% 4.9%"),(document.documentElement.classList.contains("dark")||document.body.classList.contains("dark"))&&(u.style.setProperty("--popover","222.2 84% 4.9%"),u.style.setProperty("--popover-foreground","210 40% 98%"),u.style.setProperty("--border","217.2 32.6% 17.5%"),u.style.setProperty("--background","222.2 84% 4.9%"),u.style.setProperty("--foreground","210 40% 98%"))})};o();const i=setTimeout(o,100);return()=>clearTimeout(i)}),b.jsx(DE,{children:b.jsxs(y4,{ref:a,className:Pe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[b.jsx(B4,{}),b.jsx(LE,{className:Pe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),b.jsx(H4,{})]})})));G4.displayName=y4.displayName;const IT=k.forwardRef(({className:e,...t},n)=>b.jsx(g4,{ref:n,className:Pe("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));IT.displayName=g4.displayName;const U4=k.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(x4,{ref:r,className:Pe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(zE,{children:b.jsx(WE,{className:"h-4 w-4"})})}),b.jsx(FE,{children:t})]}));U4.displayName=x4.displayName;const DT=k.forwardRef(({className:e,...t},n)=>b.jsx(S4,{ref:n,className:Pe("-mx-1 my-1 h-px bg-muted",e),...t}));DT.displayName=S4.displayName;const jx=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,$x=ue,W4=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return $x(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:o}=t,i=Object.keys(a).map(u=>{const p=n==null?void 0:n[u],c=o==null?void 0:o[u];if(p===null)return null;const f=jx(p)||jx(c);return a[u][f]}),s=n&&Object.entries(n).reduce((u,p)=>{let[c,f]=p;return f===void 0||(u[c]=f),u},{}),l=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((u,p)=>{let{class:c,className:f,...d}=p;return Object.entries(d).every(h=>{let[m,g]=h;return Array.isArray(g)?g.includes({...o,...s}[m]):{...o,...s}[m]===g})?[...u,c,f]:u},[]);return $x(e,i,l,n==null?void 0:n.class,n==null?void 0:n.className)},LT=W4("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function FT({className:e,variant:t,...n}){return b.jsx("div",{className:Pe(LT({variant:t}),e),...n})}const zT=W4("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),dp=k.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},o)=>{const i=r?LC:"button";return b.jsx(i,{className:Pe(zT({variant:t,size:n,className:e})),ref:o,...a})});dp.displayName="Button";const BT=({selectedVersion:e,availableVersions:t,onVersionChange:n,metadata:r,onDownloadReport:a,onLatestDataLoaded:o})=>{const[i,s]=k.useState(!1),[l,u]=k.useState(null),[p,c]=k.useState(null),f=t.includes("latest")?t:["latest",...t],d=async()=>{s(!0),c(null);try{const S=await fetch("https://envoy-gateway-benchmark-report.netlify.app/api/benchmark/latest");if(!S.ok)throw new Error(`Failed to fetch latest data: ${S.statusText}`);const w=await S.json();if(w.success&&w.data)u(w.data),o&&(console.log("VersionSelector: Sending data to parent:",w.data),o(w.data));else throw new Error("Invalid API response format")}catch(S){const w=S instanceof Error?S.message:"Failed to fetch latest data";c(w),console.error("Error fetching latest benchmark data:",S),o&&o({error:w})}finally{s(!1)}};k.useEffect(()=>{e==="latest"?d():(u(null),c(null),s(!1))},[e]);const h=S=>{try{return new Date(S).toLocaleDateString()}catch{return S}},m=S=>S==="latest"&&l?`https://github.com/envoyproxy/gateway/releases/tag/${l.metadata.version}`:`https://github.com/envoyproxy/gateway/releases/tag/v${S}`,g=S=>S==="latest"&&l?`https://github.com/envoyproxy/gateway/releases/download/${l.metadata.version}/benchmark_report.zip`:`https://github.com/envoyproxy/gateway/releases/download/v${S}/benchmark_report.zip`,v=()=>{const S=m(e);window.open(S,"_blank","noopener,noreferrer")},y=()=>{const S=g(e);window.open(S,"_blank","noopener,noreferrer")},x=e==="latest"&&l?{version:l.metadata.version,runId:l.metadata.runId,date:l.metadata.date,environment:l.metadata.environment,description:l.metadata.description,gitCommit:l.metadata.gitCommit}:r;return b.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("label",{className:"text-sm font-medium text-gray-700",children:"Version:"}),b.jsxs(MT,{value:e,onValueChange:n,children:[b.jsx(z4,{className:"w-32",children:b.jsx(RT,{})}),b.jsx(G4,{children:f.map(S=>b.jsx(U4,{value:S,children:S==="latest"?b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{children:"Latest"}),e==="latest"&&i&&b.jsx(YE,{className:"h-3 w-3 animate-spin"})]}):`v${S}`},S))})]})]}),p&&e==="latest"&&b.jsx("div",{className:"text-xs text-red-600 bg-red-50 px-2 py-1 rounded",children:p}),x&&b.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-600",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(UE,{className:"h-3 w-3"}),b.jsx("span",{children:h(x.date)})]}),x.environment&&b.jsx(FT,{variant:"secondary",className:"text-xs",children:x.environment}),x.gitCommit&&b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(T4,{className:"h-3 w-3"}),b.jsx("span",{className:"font-mono",children:x.gitCommit.substring(0,7)})]}),x.description&&b.jsx("span",{className:"hidden sm:inline max-w-xs truncate",title:x.description,children:x.description})]}),b.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[b.jsxs(dp,{variant:"outline",size:"sm",onClick:v,className:"flex items-center gap-1 text-xs",disabled:e==="latest"&&i,children:[b.jsx(KE,{className:"h-3 w-3"}),"View Release"]}),b.jsxs(dp,{variant:"outline",size:"sm",onClick:y,className:"flex items-center gap-1 text-xs",disabled:e==="latest"&&i,children:[b.jsx(k4,{className:"h-3 w-3"}),"Download Benchmark"]})]})]})},ge=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));ge.displayName="Card";const Se=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("flex flex-col space-y-1.5 p-6",e),...t}));Se.displayName="CardHeader";const xe=k.forwardRef(({className:e,...t},n)=>b.jsx("h3",{ref:n,className:Pe("text-2xl font-semibold leading-none tracking-tight",e),...t}));xe.displayName="CardTitle";const en=k.forwardRef(({className:e,...t},n)=>b.jsx("p",{ref:n,className:Pe("text-sm text-muted-foreground",e),...t}));en.displayName="CardDescription";const we=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("p-6 pt-0",e),...t}));we.displayName="CardContent";const HT=k.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("flex items-center p-6 pt-0",e),...t}));HT.displayName="CardFooter";const GT=({performanceSummary:e,benchmarkResults:t})=>{const n=Math.round(Math.max(...t.map(i=>i.throughput))),r=Math.round(e.avgLatency/1e3),a=Math.round(Math.max(...t.map(i=>i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean))),o=e.maxRoutes;return b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-8",children:[b.jsxs(ge,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center",children:[b.jsx(O4,{className:"h-4 w-4 mr-2"}),"Max Throughput in Test"]})}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[n.toLocaleString()," RPS"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"Requests per second"})]})]}),b.jsxs(ge,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center",children:[b.jsx(A4,{className:"h-4 w-4 mr-2"}),"Mean Response Time"]})}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[r,"ms"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"End-to-end via Nighthawk"})]})]}),b.jsxs(ge,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center",children:[b.jsx(QE,{className:"h-4 w-4 mr-2"}),"Memory Usage"]})}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[a,"MB"]}),b.jsxs("p",{className:"text-purple-100 text-sm",children:["Peak at ",o," routes"]})]})]}),b.jsxs(ge,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center text",children:[b.jsx($4,{className:"h-4 w-4 mr-2"}),"Max Routes in Test"]})}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:o.toLocaleString()}),b.jsx("p",{className:"text-purple-100 text-sm",children:"HTTPRoutes tested"})]})]})]})};var UT=Array.isArray,qt=UT,WT=typeof Mu=="object"&&Mu&&Mu.Object===Object&&Mu,q4=WT,qT=q4,VT=typeof self=="object"&&self&&self.Object===Object&&self,KT=qT||VT||Function("return this")(),vr=KT,XT=vr,YT=XT.Symbol,Ou=YT,Nx=Ou,V4=Object.prototype,QT=V4.hasOwnProperty,ZT=V4.toString,Rs=Nx?Nx.toStringTag:void 0;function JT(e){var t=QT.call(e,Rs),n=e[Rs];try{e[Rs]=void 0;var r=!0}catch{}var a=ZT.call(e);return r&&(t?e[Rs]=n:delete e[Rs]),a}var ej=JT,tj=Object.prototype,nj=tj.toString;function rj(e){return nj.call(e)}var aj=rj,Mx=Ou,oj=ej,ij=aj,sj="[object Null]",lj="[object Undefined]",Rx=Mx?Mx.toStringTag:void 0;function uj(e){return e==null?e===void 0?lj:sj:Rx&&Rx in Object(e)?oj(e):ij(e)}var Gr=uj;function cj(e){return e!=null&&typeof e=="object"}var Ur=cj,pj=Gr,fj=Ur,dj="[object Symbol]";function mj(e){return typeof e=="symbol"||fj(e)&&pj(e)==dj}var ps=mj,hj=qt,vj=ps,yj=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,gj=/^\w*$/;function xj(e,t){if(hj(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||vj(e)?!0:gj.test(e)||!yj.test(e)||t!=null&&e in Object(t)}var $y=xj;function wj(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var $a=wj;const fs=_e($a);var bj=Gr,Sj=$a,Pj="[object AsyncFunction]",Oj="[object Function]",kj="[object GeneratorFunction]",Cj="[object Proxy]";function _j(e){if(!Sj(e))return!1;var t=bj(e);return t==Oj||t==kj||t==Pj||t==Cj}var Ny=_j;const ae=_e(Ny);var Aj=vr,Ej=Aj["__core-js_shared__"],Tj=Ej,vm=Tj,Ix=function(){var e=/[^.]+$/.exec(vm&&vm.keys&&vm.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function jj(e){return!!Ix&&Ix in e}var $j=jj,Nj=Function.prototype,Mj=Nj.toString;function Rj(e){if(e!=null){try{return Mj.call(e)}catch{}try{return e+""}catch{}}return""}var K4=Rj,Ij=Ny,Dj=$j,Lj=$a,Fj=K4,zj=/[\\^$.*+?()[\]{}|]/g,Bj=/^\[object .+?Constructor\]$/,Hj=Function.prototype,Gj=Object.prototype,Uj=Hj.toString,Wj=Gj.hasOwnProperty,qj=RegExp("^"+Uj.call(Wj).replace(zj,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Vj(e){if(!Lj(e)||Dj(e))return!1;var t=Ij(e)?qj:Bj;return t.test(Fj(e))}var Kj=Vj;function Xj(e,t){return e==null?void 0:e[t]}var Yj=Xj,Qj=Kj,Zj=Yj;function Jj(e,t){var n=Zj(e,t);return Qj(n)?n:void 0}var Co=Jj,e$=Co,t$=e$(Object,"create"),Bf=t$,Dx=Bf;function n$(){this.__data__=Dx?Dx(null):{},this.size=0}var r$=n$;function a$(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var o$=a$,i$=Bf,s$="__lodash_hash_undefined__",l$=Object.prototype,u$=l$.hasOwnProperty;function c$(e){var t=this.__data__;if(i$){var n=t[e];return n===s$?void 0:n}return u$.call(t,e)?t[e]:void 0}var p$=c$,f$=Bf,d$=Object.prototype,m$=d$.hasOwnProperty;function h$(e){var t=this.__data__;return f$?t[e]!==void 0:m$.call(t,e)}var v$=h$,y$=Bf,g$="__lodash_hash_undefined__";function x$(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=y$&&t===void 0?g$:t,this}var w$=x$,b$=r$,S$=o$,P$=p$,O$=v$,k$=w$;function ds(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}ds.prototype.clear=b$;ds.prototype.delete=S$;ds.prototype.get=P$;ds.prototype.has=O$;ds.prototype.set=k$;var C$=ds;function _$(){this.__data__=[],this.size=0}var A$=_$;function E$(e,t){return e===t||e!==e&&t!==t}var My=E$,T$=My;function j$(e,t){for(var n=e.length;n--;)if(T$(e[n][0],t))return n;return-1}var Hf=j$,$$=Hf,N$=Array.prototype,M$=N$.splice;function R$(e){var t=this.__data__,n=$$(t,e);if(n<0)return!1;var r=t.length-1;return n==r?t.pop():M$.call(t,n,1),--this.size,!0}var I$=R$,D$=Hf;function L$(e){var t=this.__data__,n=D$(t,e);return n<0?void 0:t[n][1]}var F$=L$,z$=Hf;function B$(e){return z$(this.__data__,e)>-1}var H$=B$,G$=Hf;function U$(e,t){var n=this.__data__,r=G$(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var W$=U$,q$=A$,V$=I$,K$=F$,X$=H$,Y$=W$;function ms(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}ms.prototype.clear=q$;ms.prototype.delete=V$;ms.prototype.get=K$;ms.prototype.has=X$;ms.prototype.set=Y$;var Gf=ms,Q$=Co,Z$=vr,J$=Q$(Z$,"Map"),Ry=J$,Lx=C$,eN=Gf,tN=Ry;function nN(){this.size=0,this.__data__={hash:new Lx,map:new(tN||eN),string:new Lx}}var rN=nN;function aN(e){var t=typeof e;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?e!=="__proto__":e===null}var oN=aN,iN=oN;function sN(e,t){var n=e.__data__;return iN(t)?n[typeof t=="string"?"string":"hash"]:n.map}var Uf=sN,lN=Uf;function uN(e){var t=lN(this,e).delete(e);return this.size-=t?1:0,t}var cN=uN,pN=Uf;function fN(e){return pN(this,e).get(e)}var dN=fN,mN=Uf;function hN(e){return mN(this,e).has(e)}var vN=hN,yN=Uf;function gN(e,t){var n=yN(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var xN=gN,wN=rN,bN=cN,SN=dN,PN=vN,ON=xN;function hs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}hs.prototype.clear=wN;hs.prototype.delete=bN;hs.prototype.get=SN;hs.prototype.has=PN;hs.prototype.set=ON;var Iy=hs,X4=Iy,kN="Expected a function";function Dy(e,t){if(typeof e!="function"||t!=null&&typeof t!="function")throw new TypeError(kN);var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],o=n.cache;if(o.has(a))return o.get(a);var i=e.apply(this,r);return n.cache=o.set(a,i)||o,i};return n.cache=new(Dy.Cache||X4),n}Dy.Cache=X4;var Y4=Dy;const CN=_e(Y4);var _N=Y4,AN=500;function EN(e){var t=_N(e,function(r){return n.size===AN&&n.clear(),r}),n=t.cache;return t}var TN=EN,jN=TN,$N=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,NN=/\\(\\)?/g,MN=jN(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(""),e.replace($N,function(n,r,a,o){t.push(a?o.replace(NN,"$1"):r||n)}),t}),RN=MN;function IN(e,t){for(var n=-1,r=e==null?0:e.length,a=Array(r);++n<r;)a[n]=t(e[n],n,e);return a}var Ly=IN,Fx=Ou,DN=Ly,LN=qt,FN=ps,zx=Fx?Fx.prototype:void 0,Bx=zx?zx.toString:void 0;function Q4(e){if(typeof e=="string")return e;if(LN(e))return DN(e,Q4)+"";if(FN(e))return Bx?Bx.call(e):"";var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var zN=Q4,BN=zN;function HN(e){return e==null?"":BN(e)}var Z4=HN,GN=qt,UN=$y,WN=RN,qN=Z4;function VN(e,t){return GN(e)?e:UN(e,t)?[e]:WN(qN(e))}var J4=VN,KN=ps;function XN(e){if(typeof e=="string"||KN(e))return e;var t=e+"";return t=="0"&&1/e==-1/0?"-0":t}var Wf=XN,YN=J4,QN=Wf;function ZN(e,t){t=YN(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[QN(t[n++])];return n&&n==r?e:void 0}var Fy=ZN,JN=Fy;function eM(e,t,n){var r=e==null?void 0:JN(e,t);return r===void 0?n:r}var e8=eM;const vn=_e(e8);function tM(e){return e==null}var nM=tM;const le=_e(nM);var rM=Gr,aM=qt,oM=Ur,iM="[object String]";function sM(e){return typeof e=="string"||!aM(e)&&oM(e)&&rM(e)==iM}var lM=sM;const xo=_e(lM);var t8={exports:{}},ke={};/**
+ * @license React
+ * react-is.production.min.js
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */var zy=Symbol.for("react.element"),By=Symbol.for("react.portal"),qf=Symbol.for("react.fragment"),Vf=Symbol.for("react.strict_mode"),Kf=Symbol.for("react.profiler"),Xf=Symbol.for("react.provider"),Yf=Symbol.for("react.context"),uM=Symbol.for("react.server_context"),Qf=Symbol.for("react.forward_ref"),Zf=Symbol.for("react.suspense"),Jf=Symbol.for("react.suspense_list"),ed=Symbol.for("react.memo"),td=Symbol.for("react.lazy"),cM=Symbol.for("react.offscreen"),n8;n8=Symbol.for("react.module.reference");function bn(e){if(typeof e=="object"&&e!==null){var t=e.$$typeof;switch(t){case zy:switch(e=e.type,e){case qf:case Kf:case Vf:case Zf:case Jf:return e;default:switch(e=e&&e.$$typeof,e){case uM:case Yf:case Qf:case td:case ed:case Xf:return e;default:return t}}case By:return t}}}ke.ContextConsumer=Yf;ke.ContextProvider=Xf;ke.Element=zy;ke.ForwardRef=Qf;ke.Fragment=qf;ke.Lazy=td;ke.Memo=ed;ke.Portal=By;ke.Profiler=Kf;ke.StrictMode=Vf;ke.Suspense=Zf;ke.SuspenseList=Jf;ke.isAsyncMode=function(){return!1};ke.isConcurrentMode=function(){return!1};ke.isContextConsumer=function(e){return bn(e)===Yf};ke.isContextProvider=function(e){return bn(e)===Xf};ke.isElement=function(e){return typeof e=="object"&&e!==null&&e.$$typeof===zy};ke.isForwardRef=function(e){return bn(e)===Qf};ke.isFragment=function(e){return bn(e)===qf};ke.isLazy=function(e){return bn(e)===td};ke.isMemo=function(e){return bn(e)===ed};ke.isPortal=function(e){return bn(e)===By};ke.isProfiler=function(e){return bn(e)===Kf};ke.isStrictMode=function(e){return bn(e)===Vf};ke.isSuspense=function(e){return bn(e)===Zf};ke.isSuspenseList=function(e){return bn(e)===Jf};ke.isValidElementType=function(e){return typeof e=="string"||typeof e=="function"||e===qf||e===Kf||e===Vf||e===Zf||e===Jf||e===cM||typeof e=="object"&&e!==null&&(e.$$typeof===td||e.$$typeof===ed||e.$$typeof===Xf||e.$$typeof===Yf||e.$$typeof===Qf||e.$$typeof===n8||e.getModuleId!==void 0)};ke.typeOf=bn;t8.exports=ke;var pM=t8.exports,fM=Gr,dM=Ur,mM="[object Number]";function hM(e){return typeof e=="number"||dM(e)&&fM(e)==mM}var r8=hM;const vM=_e(r8);var yM=r8;function gM(e){return yM(e)&&e!=+e}var xM=gM;const vs=_e(xM);var In=function(t){return t===0?0:t>0?1:-1},Xa=function(t){return xo(t)&&t.indexOf("%")===t.length-1},V=function(t){return vM(t)&&!vs(t)},wM=function(t){return le(t)},ot=function(t){return V(t)||xo(t)},bM=0,ys=function(t){var n=++bM;return"".concat(t||"").concat(n)},wo=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!V(t)&&!xo(t))return r;var o;if(Xa(t)){var i=t.indexOf("%");o=n*parseFloat(t.slice(0,i))/100}else o=+t;return vs(o)&&(o=r),a&&o>n&&(o=n),o},ra=function(t){if(!t)return null;var n=Object.keys(t);return n&&n.length?t[n[0]]:null},SM=function(t){if(!Array.isArray(t))return!1;for(var n=t.length,r={},a=0;a<n;a++)if(!r[t[a]])r[t[a]]=!0;else return!0;return!1},dt=function(t,n){return V(t)&&V(n)?function(r){return t+r*(n-t)}:function(){return n}};function mp(e,t,n){return!e||!e.length?null:e.find(function(r){return r&&(typeof t=="function"?t(r):vn(r,t))===n})}var PM=function(t,n){return V(t)&&V(n)?t-n:xo(t)&&xo(n)?t.localeCompare(n):t instanceof Date&&n instanceof Date?t.getTime()-n.getTime():String(t).localeCompare(String(n))};function ui(e,t){for(var n in e)if({}.hasOwnProperty.call(e,n)&&(!{}.hasOwnProperty.call(t,n)||e[n]!==t[n]))return!1;for(var r in t)if({}.hasOwnProperty.call(t,r)&&!{}.hasOwnProperty.call(e,r))return!1;return!0}function Xh(e){"@babel/helpers - typeof";return Xh=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xh(e)}var OM=["viewBox","children"],kM=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],Hx=["points","pathLength"],ym={svg:OM,polygon:Hx,polyline:Hx},Hy=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],hp=function(t,n){if(!t||typeof t=="function"||typeof t=="boolean")return null;var r=t;if(k.isValidElement(t)&&(r=t.props),!fs(r))return null;var a={};return Object.keys(r).forEach(function(o){Hy.includes(o)&&(a[o]=n||function(i){return r[o](r,i)})}),a},CM=function(t,n,r){return function(a){return t(n,r,a),null}},vp=function(t,n,r){if(!fs(t)||Xh(t)!=="object")return null;var a=null;return Object.keys(t).forEach(function(o){var i=t[o];Hy.includes(o)&&typeof i=="function"&&(a||(a={}),a[o]=CM(i,n,r))}),a},_M=["children"],AM=["children"];function Gx(e,t){if(e==null)return{};var n=EM(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Yh(e){"@babel/helpers - typeof";return Yh=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yh(e)}var Ux={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},Er=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},Wx=null,gm=null,Gy=function e(t){if(t===Wx&&Array.isArray(gm))return gm;var n=[];return k.Children.forEach(t,function(r){le(r)||(pM.isFragment(r)?n=n.concat(e(r.props.children)):n.push(r))}),gm=n,Wx=t,n};function yn(e,t){var n=[],r=[];return Array.isArray(t)?r=t.map(function(a){return Er(a)}):r=[Er(t)],Gy(e).forEach(function(a){var o=vn(a,"type.displayName")||vn(a,"type.name");r.indexOf(o)!==-1&&n.push(a)}),n}function Yt(e,t){var n=yn(e,t);return n&&n[0]}var qx=function(t){if(!t||!t.props)return!1;var n=t.props,r=n.width,a=n.height;return!(!V(r)||r<=0||!V(a)||a<=0)},TM=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],jM=function(t){return t&&t.type&&xo(t.type)&&TM.indexOf(t.type)>=0},a8=function(t){return t&&Yh(t)==="object"&&"clipDot"in t},$M=function(t,n,r,a){var o,i=(o=ym==null?void 0:ym[a])!==null&&o!==void 0?o:[];return n.startsWith("data-")||!ae(t)&&(a&&i.includes(n)||kM.includes(n))||r&&Hy.includes(n)},ie=function(t,n,r){if(!t||typeof t=="function"||typeof t=="boolean")return null;var a=t;if(k.isValidElement(t)&&(a=t.props),!fs(a))return null;var o={};return Object.keys(a).forEach(function(i){var s;$M((s=a)===null||s===void 0?void 0:s[i],i,n,r)&&(o[i]=a[i])}),o},Qh=function e(t,n){if(t===n)return!0;var r=k.Children.count(t);if(r!==k.Children.count(n))return!1;if(r===0)return!0;if(r===1)return Vx(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var a=0;a<r;a++){var o=t[a],i=n[a];if(Array.isArray(o)||Array.isArray(i)){if(!e(o,i))return!1}else if(!Vx(o,i))return!1}return!0},Vx=function(t,n){if(le(t)&&le(n))return!0;if(!le(t)&&!le(n)){var r=t.props||{},a=r.children,o=Gx(r,_M),i=n.props||{},s=i.children,l=Gx(i,AM);return a&&s?ui(o,l)&&Qh(a,s):!a&&!s?ui(o,l):!1}return!1},Kx=function(t,n){var r=[],a={};return Gy(t).forEach(function(o,i){if(jM(o))r.push(o);else if(o){var s=Er(o.type),l=n[s]||{},u=l.handler,p=l.once;if(u&&(!p||!a[s])){var c=u(o,s,i);r.push(c),a[s]=!0}}}),r},NM=function(t){var n=t&&t.type;return n&&Ux[n]?Ux[n]:null},MM=function(t,n){return Gy(n).indexOf(t)},RM=["children","width","height","viewBox","className","style","title","desc"];function Zh(){return Zh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zh.apply(this,arguments)}function IM(e,t){if(e==null)return{};var n=DM(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function DM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Jh(e){var t=e.children,n=e.width,r=e.height,a=e.viewBox,o=e.className,i=e.style,s=e.title,l=e.desc,u=IM(e,RM),p=a||{width:n,height:r,x:0,y:0},c=ue("recharts-surface",o);return E.createElement("svg",Zh({},ie(u,!0,"svg"),{className:c,width:n,height:r,style:i,viewBox:"".concat(p.x," ").concat(p.y," ").concat(p.width," ").concat(p.height)}),E.createElement("title",null,s),E.createElement("desc",null,l),t)}var LM=["children","className"];function e0(){return e0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},e0.apply(this,arguments)}function FM(e,t){if(e==null)return{};var n=zM(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var $e=E.forwardRef(function(e,t){var n=e.children,r=e.className,a=FM(e,LM),o=ue("recharts-layer",r);return E.createElement("g",e0({className:o},ie(a,!0),{ref:t}),n)}),Tr=function(t,n){for(var r=arguments.length,a=new Array(r>2?r-2:0),o=2;o<r;o++)a[o-2]=arguments[o]};function BM(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(a);++r<a;)o[r]=e[r+t];return o}var HM=BM,GM=HM;function UM(e,t,n){var r=e.length;return n=n===void 0?r:n,!t&&n>=r?e:GM(e,t,n)}var WM=UM,qM="\\ud800-\\udfff",VM="\\u0300-\\u036f",KM="\\ufe20-\\ufe2f",XM="\\u20d0-\\u20ff",YM=VM+KM+XM,QM="\\ufe0e\\ufe0f",ZM="\\u200d",JM=RegExp("["+ZM+qM+YM+QM+"]");function eR(e){return JM.test(e)}var o8=eR;function tR(e){return e.split("")}var nR=tR,i8="\\ud800-\\udfff",rR="\\u0300-\\u036f",aR="\\ufe20-\\ufe2f",oR="\\u20d0-\\u20ff",iR=rR+aR+oR,sR="\\ufe0e\\ufe0f",lR="["+i8+"]",t0="["+iR+"]",n0="\\ud83c[\\udffb-\\udfff]",uR="(?:"+t0+"|"+n0+")",s8="[^"+i8+"]",l8="(?:\\ud83c[\\udde6-\\uddff]){2}",u8="[\\ud800-\\udbff][\\udc00-\\udfff]",cR="\\u200d",c8=uR+"?",p8="["+sR+"]?",pR="(?:"+cR+"(?:"+[s8,l8,u8].join("|")+")"+p8+c8+")*",fR=p8+c8+pR,dR="(?:"+[s8+t0+"?",t0,l8,u8,lR].join("|")+")",mR=RegExp(n0+"(?="+n0+")|"+dR+fR,"g");function hR(e){return e.match(mR)||[]}var vR=hR,yR=nR,gR=o8,xR=vR;function wR(e){return gR(e)?xR(e):yR(e)}var bR=wR,SR=WM,PR=o8,OR=bR,kR=Z4;function CR(e){return function(t){t=kR(t);var n=PR(t)?OR(t):void 0,r=n?n[0]:t.charAt(0),a=n?SR(n,1).join(""):t.slice(1);return r[e]()+a}}var _R=CR,AR=_R,ER=AR("toUpperCase"),TR=ER;const nd=_e(TR);function Te(e){return function(){return e}}const f8=Math.cos,yp=Math.sin,qn=Math.sqrt,gp=Math.PI,rd=2*gp,r0=Math.PI,a0=2*r0,Ga=1e-6,jR=a0-Ga;function d8(e){this._+=e[0];for(let t=1,n=e.length;t<n;++t)this._+=arguments[t]+e[t]}function $R(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return d8;const n=10**t;return function(r){this._+=r[0];for(let a=1,o=r.length;a<o;++a)this._+=Math.round(arguments[a]*n)/n+r[a]}}class NR{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?d8:$R(t)}moveTo(t,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,n){this._append`L${this._x1=+t},${this._y1=+n}`}quadraticCurveTo(t,n,r,a){this._append`Q${+t},${+n},${this._x1=+r},${this._y1=+a}`}bezierCurveTo(t,n,r,a,o,i){this._append`C${+t},${+n},${+r},${+a},${this._x1=+o},${this._y1=+i}`}arcTo(t,n,r,a,o){if(t=+t,n=+n,r=+r,a=+a,o=+o,o<0)throw new Error(`negative radius: ${o}`);let i=this._x1,s=this._y1,l=r-t,u=a-n,p=i-t,c=s-n,f=p*p+c*c;if(this._x1===null)this._append`M${this._x1=t},${this._y1=n}`;else if(f>Ga)if(!(Math.abs(c*l-u*p)>Ga)||!o)this._append`L${this._x1=t},${this._y1=n}`;else{let d=r-i,h=a-s,m=l*l+u*u,g=d*d+h*h,v=Math.sqrt(m),y=Math.sqrt(f),x=o*Math.tan((r0-Math.acos((m+f-g)/(2*v*y)))/2),S=x/y,w=x/v;Math.abs(S-1)>Ga&&this._append`L${t+S*p},${n+S*c}`,this._append`A${o},${o},0,0,${+(c*d>p*h)},${this._x1=t+w*l},${this._y1=n+w*u}`}}arc(t,n,r,a,o,i){if(t=+t,n=+n,r=+r,i=!!i,r<0)throw new Error(`negative radius: ${r}`);let s=r*Math.cos(a),l=r*Math.sin(a),u=t+s,p=n+l,c=1^i,f=i?a-o:o-a;this._x1===null?this._append`M${u},${p}`:(Math.abs(this._x1-u)>Ga||Math.abs(this._y1-p)>Ga)&&this._append`L${u},${p}`,r&&(f<0&&(f=f%a0+a0),f>jR?this._append`A${r},${r},0,1,${c},${t-s},${n-l}A${r},${r},0,1,${c},${this._x1=u},${this._y1=p}`:f>Ga&&this._append`A${r},${r},0,${+(f>=r0)},${c},${this._x1=t+r*Math.cos(o)},${this._y1=n+r*Math.sin(o)}`)}rect(t,n,r,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+a}h${-r}Z`}toString(){return this._}}function Uy(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new NR(t)}function Wy(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function m8(e){this._context=e}m8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function ad(e){return new m8(e)}function h8(e){return e[0]}function v8(e){return e[1]}function y8(e,t){var n=Te(!0),r=null,a=ad,o=null,i=Uy(s);e=typeof e=="function"?e:e===void 0?h8:Te(e),t=typeof t=="function"?t:t===void 0?v8:Te(t);function s(l){var u,p=(l=Wy(l)).length,c,f=!1,d;for(r==null&&(o=a(d=i())),u=0;u<=p;++u)!(u<p&&n(c=l[u],u,l))===f&&((f=!f)?o.lineStart():o.lineEnd()),f&&o.point(+e(c,u,l),+t(c,u,l));if(d)return o=null,d+""||null}return s.x=function(l){return arguments.length?(e=typeof l=="function"?l:Te(+l),s):e},s.y=function(l){return arguments.length?(t=typeof l=="function"?l:Te(+l),s):t},s.defined=function(l){return arguments.length?(n=typeof l=="function"?l:Te(!!l),s):n},s.curve=function(l){return arguments.length?(a=l,r!=null&&(o=a(r)),s):a},s.context=function(l){return arguments.length?(l==null?r=o=null:o=a(r=l),s):r},s}function rc(e,t,n){var r=null,a=Te(!0),o=null,i=ad,s=null,l=Uy(u);e=typeof e=="function"?e:e===void 0?h8:Te(+e),t=typeof t=="function"?t:Te(t===void 0?0:+t),n=typeof n=="function"?n:n===void 0?v8:Te(+n);function u(c){var f,d,h,m=(c=Wy(c)).length,g,v=!1,y,x=new Array(m),S=new Array(m);for(o==null&&(s=i(y=l())),f=0;f<=m;++f){if(!(f<m&&a(g=c[f],f,c))===v)if(v=!v)d=f,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),h=f-1;h>=d;--h)s.point(x[h],S[h]);s.lineEnd(),s.areaEnd()}v&&(x[f]=+e(g,f,c),S[f]=+t(g,f,c),s.point(r?+r(g,f,c):x[f],n?+n(g,f,c):S[f]))}if(y)return s=null,y+""||null}function p(){return y8().defined(a).curve(i).context(o)}return u.x=function(c){return arguments.length?(e=typeof c=="function"?c:Te(+c),r=null,u):e},u.x0=function(c){return arguments.length?(e=typeof c=="function"?c:Te(+c),u):e},u.x1=function(c){return arguments.length?(r=c==null?null:typeof c=="function"?c:Te(+c),u):r},u.y=function(c){return arguments.length?(t=typeof c=="function"?c:Te(+c),n=null,u):t},u.y0=function(c){return arguments.length?(t=typeof c=="function"?c:Te(+c),u):t},u.y1=function(c){return arguments.length?(n=c==null?null:typeof c=="function"?c:Te(+c),u):n},u.lineX0=u.lineY0=function(){return p().x(e).y(t)},u.lineY1=function(){return p().x(e).y(n)},u.lineX1=function(){return p().x(r).y(t)},u.defined=function(c){return arguments.length?(a=typeof c=="function"?c:Te(!!c),u):a},u.curve=function(c){return arguments.length?(i=c,o!=null&&(s=i(o)),u):i},u.context=function(c){return arguments.length?(c==null?o=s=null:s=i(o=c),u):o},u}class g8{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n);break}}this._x0=t,this._y0=n}}function MR(e){return new g8(e,!0)}function RR(e){return new g8(e,!1)}const qy={draw(e,t){const n=qn(t/gp);e.moveTo(n,0),e.arc(0,0,n,0,rd)}},IR={draw(e,t){const n=qn(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},x8=qn(1/3),DR=x8*2,LR={draw(e,t){const n=qn(t/DR),r=n*x8;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},FR={draw(e,t){const n=qn(t),r=-n/2;e.rect(r,r,n,n)}},zR=.8908130915292852,w8=yp(gp/10)/yp(7*gp/10),BR=yp(rd/10)*w8,HR=-f8(rd/10)*w8,GR={draw(e,t){const n=qn(t*zR),r=BR*n,a=HR*n;e.moveTo(0,-n),e.lineTo(r,a);for(let o=1;o<5;++o){const i=rd*o/5,s=f8(i),l=yp(i);e.lineTo(l*n,-s*n),e.lineTo(s*r-l*a,l*r+s*a)}e.closePath()}},xm=qn(3),UR={draw(e,t){const n=-qn(t/(xm*3));e.moveTo(0,n*2),e.lineTo(-xm*n,-n),e.lineTo(xm*n,-n),e.closePath()}},sn=-.5,ln=qn(3)/2,o0=1/qn(12),WR=(o0/2+1)*3,qR={draw(e,t){const n=qn(t/WR),r=n/2,a=n*o0,o=r,i=n*o0+n,s=-o,l=i;e.moveTo(r,a),e.lineTo(o,i),e.lineTo(s,l),e.lineTo(sn*r-ln*a,ln*r+sn*a),e.lineTo(sn*o-ln*i,ln*o+sn*i),e.lineTo(sn*s-ln*l,ln*s+sn*l),e.lineTo(sn*r+ln*a,sn*a-ln*r),e.lineTo(sn*o+ln*i,sn*i-ln*o),e.lineTo(sn*s+ln*l,sn*l-ln*s),e.closePath()}};function VR(e,t){let n=null,r=Uy(a);e=typeof e=="function"?e:Te(e||qy),t=typeof t=="function"?t:Te(t===void 0?64:+t);function a(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return a.type=function(o){return arguments.length?(e=typeof o=="function"?o:Te(o),a):e},a.size=function(o){return arguments.length?(t=typeof o=="function"?o:Te(+o),a):t},a.context=function(o){return arguments.length?(n=o??null,a):n},a}function xp(){}function wp(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function b8(e){this._context=e}b8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:wp(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:wp(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function KR(e){return new b8(e)}function S8(e){this._context=e}S8.prototype={areaStart:xp,areaEnd:xp,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:wp(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function XR(e){return new S8(e)}function P8(e){this._context=e}P8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:wp(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function YR(e){return new P8(e)}function O8(e){this._context=e}O8.prototype={areaStart:xp,areaEnd:xp,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function QR(e){return new O8(e)}function Xx(e){return e<0?-1:1}function Yx(e,t,n){var r=e._x1-e._x0,a=t-e._x1,o=(e._y1-e._y0)/(r||a<0&&-0),i=(n-e._y1)/(a||r<0&&-0),s=(o*a+i*r)/(r+a);return(Xx(o)+Xx(i))*Math.min(Math.abs(o),Math.abs(i),.5*Math.abs(s))||0}function Qx(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function wm(e,t,n){var r=e._x0,a=e._y0,o=e._x1,i=e._y1,s=(o-r)/3;e._context.bezierCurveTo(r+s,a+s*t,o-s,i-s*n,o,i)}function bp(e){this._context=e}bp.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:wm(this,this._t0,Qx(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,wm(this,Qx(this,n=Yx(this,e,t)),n);break;default:wm(this,this._t0,n=Yx(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function k8(e){this._context=new C8(e)}(k8.prototype=Object.create(bp.prototype)).point=function(e,t){bp.prototype.point.call(this,t,e)};function C8(e){this._context=e}C8.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,o){this._context.bezierCurveTo(t,e,r,n,o,a)}};function ZR(e){return new bp(e)}function JR(e){return new k8(e)}function _8(e){this._context=e}_8.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=Zx(e),a=Zx(t),o=0,i=1;i<n;++o,++i)this._context.bezierCurveTo(r[0][o],a[0][o],r[1][o],a[1][o],e[i],t[i]);(this._line||this._line!==0&&n===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}};function Zx(e){var t,n=e.length-1,r,a=new Array(n),o=new Array(n),i=new Array(n);for(a[0]=0,o[0]=2,i[0]=e[0]+2*e[1],t=1;t<n-1;++t)a[t]=1,o[t]=4,i[t]=4*e[t]+2*e[t+1];for(a[n-1]=2,o[n-1]=7,i[n-1]=8*e[n-1]+e[n],t=1;t<n;++t)r=a[t]/o[t-1],o[t]-=r,i[t]-=r*i[t-1];for(a[n-1]=i[n-1]/o[n-1],t=n-2;t>=0;--t)a[t]=(i[t]-a[t+1])/o[t];for(o[n-1]=(e[n]+a[n-1])/2,t=0;t<n-1;++t)o[t]=2*e[t+1]-a[t+1];return[a,o]}function eI(e){return new _8(e)}function od(e,t){this._context=e,this._t=t}od.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}}this._x=e,this._y=t}};function tI(e){return new od(e,.5)}function nI(e){return new od(e,0)}function rI(e){return new od(e,1)}function ji(e,t){if((i=e.length)>1)for(var n=1,r,a,o=e[t[0]],i,s=o.length;n<i;++n)for(a=o,o=e[t[n]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(a[r][1])?a[r][0]:a[r][1]}function i0(e){for(var t=e.length,n=new Array(t);--t>=0;)n[t]=t;return n}function aI(e,t){return e[t]}function oI(e){const t=[];return t.key=e,t}function iI(){var e=Te([]),t=i0,n=ji,r=aI;function a(o){var i=Array.from(e.apply(this,arguments),oI),s,l=i.length,u=-1,p;for(const c of o)for(s=0,++u;s<l;++s)(i[s][u]=[0,+r(c,i[s].key,u,o)]).data=c;for(s=0,p=Wy(t(i));s<l;++s)i[p[s]].index=s;return n(i,p),i}return a.keys=function(o){return arguments.length?(e=typeof o=="function"?o:Te(Array.from(o)),a):e},a.value=function(o){return arguments.length?(r=typeof o=="function"?o:Te(+o),a):r},a.order=function(o){return arguments.length?(t=o==null?i0:typeof o=="function"?o:Te(Array.from(o)),a):t},a.offset=function(o){return arguments.length?(n=o??ji,a):n},a}function sI(e,t){if((r=e.length)>0){for(var n,r,a=0,o=e[0].length,i;a<o;++a){for(i=n=0;n<r;++n)i+=e[n][a][1]||0;if(i)for(n=0;n<r;++n)e[n][a][1]/=i}ji(e,t)}}function lI(e,t){if((a=e.length)>0){for(var n=0,r=e[t[0]],a,o=r.length;n<o;++n){for(var i=0,s=0;i<a;++i)s+=e[i][n][1]||0;r[n][1]+=r[n][0]=-s/2}ji(e,t)}}function uI(e,t){if(!(!((i=e.length)>0)||!((o=(a=e[t[0]]).length)>0))){for(var n=0,r=1,a,o,i;r<o;++r){for(var s=0,l=0,u=0;s<i;++s){for(var p=e[t[s]],c=p[r][1]||0,f=p[r-1][1]||0,d=(c-f)/2,h=0;h<s;++h){var m=e[t[h]],g=m[r][1]||0,v=m[r-1][1]||0;d+=g-v}l+=c,u+=d*c}a[r-1][1]+=a[r-1][0]=n,l&&(n-=u/l)}a[r-1][1]+=a[r-1][0]=n,ji(e,t)}}function jl(e){"@babel/helpers - typeof";return jl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jl(e)}var cI=["type","size","sizeType"];function s0(){return s0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s0.apply(this,arguments)}function Jx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function ew(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Jx(Object(n),!0).forEach(function(r){pI(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Jx(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function pI(e,t,n){return t=fI(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fI(e){var t=dI(e,"string");return jl(t)=="symbol"?t:t+""}function dI(e,t){if(jl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(jl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function mI(e,t){if(e==null)return{};var n=hI(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var A8={symbolCircle:qy,symbolCross:IR,symbolDiamond:LR,symbolSquare:FR,symbolStar:GR,symbolTriangle:UR,symbolWye:qR},vI=Math.PI/180,yI=function(t){var n="symbol".concat(nd(t));return A8[n]||qy},gI=function(t,n,r){if(n==="area")return t;switch(r){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var a=18*vI;return 1.25*t*t*(Math.tan(a)-Math.tan(a*2)*Math.pow(Math.tan(a),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},xI=function(t,n){A8["symbol".concat(nd(t))]=n},Vy=function(t){var n=t.type,r=n===void 0?"circle":n,a=t.size,o=a===void 0?64:a,i=t.sizeType,s=i===void 0?"area":i,l=mI(t,cI),u=ew(ew({},l),{},{type:r,size:o,sizeType:s}),p=function(){var g=yI(r),v=VR().type(g).size(gI(o,s,r));return v()},c=u.className,f=u.cx,d=u.cy,h=ie(u,!0);return f===+f&&d===+d&&o===+o?E.createElement("path",s0({},h,{className:ue("recharts-symbols",c),transform:"translate(".concat(f,", ").concat(d,")"),d:p()})):null};Vy.registerSymbol=xI;function $i(e){"@babel/helpers - typeof";return $i=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$i(e)}function l0(){return l0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l0.apply(this,arguments)}function tw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function wI(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?tw(Object(n),!0).forEach(function(r){$l(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):tw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function bI(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function SI(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,T8(r.key),r)}}function PI(e,t,n){return t&&SI(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function OI(e,t,n){return t=Sp(t),kI(e,E8()?Reflect.construct(t,n||[],Sp(e).constructor):t.apply(e,n))}function kI(e,t){if(t&&($i(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return CI(e)}function CI(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function E8(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(E8=function(){return!!e})()}function Sp(e){return Sp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Sp(e)}function _I(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u0(e,t)}function u0(e,t){return u0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},u0(e,t)}function $l(e,t,n){return t=T8(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function T8(e){var t=AI(e,"string");return $i(t)=="symbol"?t:t+""}function AI(e,t){if($i(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if($i(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var un=32,Ky=function(e){function t(){return bI(this,t),OI(this,t,arguments)}return _I(t,e),PI(t,[{key:"renderIcon",value:function(r){var a=this.props.inactiveColor,o=un/2,i=un/6,s=un/3,l=r.inactive?a:r.color;if(r.type==="plainline")return E.createElement("line",{strokeWidth:4,fill:"none",stroke:l,strokeDasharray:r.payload.strokeDasharray,x1:0,y1:o,x2:un,y2:o,className:"recharts-legend-icon"});if(r.type==="line")return E.createElement("path",{strokeWidth:4,fill:"none",stroke:l,d:"M0,".concat(o,"h").concat(s,`
+            A`).concat(i,",").concat(i,",0,1,1,").concat(2*s,",").concat(o,`
+            H`).concat(un,"M").concat(2*s,",").concat(o,`
+            A`).concat(i,",").concat(i,",0,1,1,").concat(s,",").concat(o),className:"recharts-legend-icon"});if(r.type==="rect")return E.createElement("path",{stroke:"none",fill:l,d:"M0,".concat(un/8,"h").concat(un,"v").concat(un*3/4,"h").concat(-un,"z"),className:"recharts-legend-icon"});if(E.isValidElement(r.legendIcon)){var u=wI({},r);return delete u.legendIcon,E.cloneElement(r.legendIcon,u)}return E.createElement(Vy,{fill:l,cx:o,cy:o,size:un,sizeType:"diameter",type:r.type})}},{key:"renderItems",value:function(){var r=this,a=this.props,o=a.payload,i=a.iconSize,s=a.layout,l=a.formatter,u=a.inactiveColor,p={x:0,y:0,width:un,height:un},c={display:s==="horizontal"?"inline-block":"block",marginRight:10},f={display:"inline-block",verticalAlign:"middle",marginRight:4};return o.map(function(d,h){var m=d.formatter||l,g=ue($l($l({"recharts-legend-item":!0},"legend-item-".concat(h),!0),"inactive",d.inactive));if(d.type==="none")return null;var v=ae(d.value)?null:d.value;Tr(!ae(d.value),`The name property is also required when using a function for the dataKey of a chart's cartesian components. Ex: <Bar name="Name of my Data"/>`);var y=d.inactive?u:d.color;return E.createElement("li",l0({className:g,style:c,key:"legend-item-".concat(h)},vp(r.props,d,h)),E.createElement(Jh,{width:i,height:i,viewBox:p,style:f},r.renderIcon(d)),E.createElement("span",{className:"recharts-legend-item-text",style:{color:y}},m?m(v,d,h):v))})}},{key:"render",value:function(){var r=this.props,a=r.payload,o=r.layout,i=r.align;if(!a||!a.length)return null;var s={padding:0,margin:0,textAlign:o==="horizontal"?i:"left"};return E.createElement("ul",{className:"recharts-default-legend",style:s},this.renderItems())}}])}(k.PureComponent);$l(Ky,"displayName","Legend");$l(Ky,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var EI=Gf;function TI(){this.__data__=new EI,this.size=0}var jI=TI;function $I(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var NI=$I;function MI(e){return this.__data__.get(e)}var RI=MI;function II(e){return this.__data__.has(e)}var DI=II,LI=Gf,FI=Ry,zI=Iy,BI=200;function HI(e,t){var n=this.__data__;if(n instanceof LI){var r=n.__data__;if(!FI||r.length<BI-1)return r.push([e,t]),this.size=++n.size,this;n=this.__data__=new zI(r)}return n.set(e,t),this.size=n.size,this}var GI=HI,UI=Gf,WI=jI,qI=NI,VI=RI,KI=DI,XI=GI;function gs(e){var t=this.__data__=new UI(e);this.size=t.size}gs.prototype.clear=WI;gs.prototype.delete=qI;gs.prototype.get=VI;gs.prototype.has=KI;gs.prototype.set=XI;var j8=gs,YI="__lodash_hash_undefined__";function QI(e){return this.__data__.set(e,YI),this}var ZI=QI;function JI(e){return this.__data__.has(e)}var eD=JI,tD=Iy,nD=ZI,rD=eD;function Pp(e){var t=-1,n=e==null?0:e.length;for(this.__data__=new tD;++t<n;)this.add(e[t])}Pp.prototype.add=Pp.prototype.push=nD;Pp.prototype.has=rD;var $8=Pp;function aD(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}var N8=aD;function oD(e,t){return e.has(t)}var M8=oD,iD=$8,sD=N8,lD=M8,uD=1,cD=2;function pD(e,t,n,r,a,o){var i=n&uD,s=e.length,l=t.length;if(s!=l&&!(i&&l>s))return!1;var u=o.get(e),p=o.get(t);if(u&&p)return u==t&&p==e;var c=-1,f=!0,d=n&cD?new iD:void 0;for(o.set(e,t),o.set(t,e);++c<s;){var h=e[c],m=t[c];if(r)var g=i?r(m,h,c,t,e,o):r(h,m,c,e,t,o);if(g!==void 0){if(g)continue;f=!1;break}if(d){if(!sD(t,function(v,y){if(!lD(d,y)&&(h===v||a(h,v,n,r,o)))return d.push(y)})){f=!1;break}}else if(!(h===m||a(h,m,n,r,o))){f=!1;break}}return o.delete(e),o.delete(t),f}var R8=pD,fD=vr,dD=fD.Uint8Array,mD=dD;function hD(e){var t=-1,n=Array(e.size);return e.forEach(function(r,a){n[++t]=[a,r]}),n}var vD=hD;function yD(e){var t=-1,n=Array(e.size);return e.forEach(function(r){n[++t]=r}),n}var Xy=yD,nw=Ou,rw=mD,gD=My,xD=R8,wD=vD,bD=Xy,SD=1,PD=2,OD="[object Boolean]",kD="[object Date]",CD="[object Error]",_D="[object Map]",AD="[object Number]",ED="[object RegExp]",TD="[object Set]",jD="[object String]",$D="[object Symbol]",ND="[object ArrayBuffer]",MD="[object DataView]",aw=nw?nw.prototype:void 0,bm=aw?aw.valueOf:void 0;function RD(e,t,n,r,a,o,i){switch(n){case MD:if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case ND:return!(e.byteLength!=t.byteLength||!o(new rw(e),new rw(t)));case OD:case kD:case AD:return gD(+e,+t);case CD:return e.name==t.name&&e.message==t.message;case ED:case jD:return e==t+"";case _D:var s=wD;case TD:var l=r&SD;if(s||(s=bD),e.size!=t.size&&!l)return!1;var u=i.get(e);if(u)return u==t;r|=PD,i.set(e,t);var p=xD(s(e),s(t),r,a,o,i);return i.delete(e),p;case $D:if(bm)return bm.call(e)==bm.call(t)}return!1}var ID=RD;function DD(e,t){for(var n=-1,r=t.length,a=e.length;++n<r;)e[a+n]=t[n];return e}var I8=DD,LD=I8,FD=qt;function zD(e,t,n){var r=t(e);return FD(e)?r:LD(r,n(e))}var BD=zD;function HD(e,t){for(var n=-1,r=e==null?0:e.length,a=0,o=[];++n<r;){var i=e[n];t(i,n,e)&&(o[a++]=i)}return o}var GD=HD;function UD(){return[]}var WD=UD,qD=GD,VD=WD,KD=Object.prototype,XD=KD.propertyIsEnumerable,ow=Object.getOwnPropertySymbols,YD=ow?function(e){return e==null?[]:(e=Object(e),qD(ow(e),function(t){return XD.call(e,t)}))}:VD,QD=YD;function ZD(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}var JD=ZD,eL=Gr,tL=Ur,nL="[object Arguments]";function rL(e){return tL(e)&&eL(e)==nL}var aL=rL,iw=aL,oL=Ur,D8=Object.prototype,iL=D8.hasOwnProperty,sL=D8.propertyIsEnumerable,lL=iw(function(){return arguments}())?iw:function(e){return oL(e)&&iL.call(e,"callee")&&!sL.call(e,"callee")},Yy=lL,Op={exports:{}};function uL(){return!1}var cL=uL;Op.exports;(function(e,t){var n=vr,r=cL,a=t&&!t.nodeType&&t,o=a&&!0&&e&&!e.nodeType&&e,i=o&&o.exports===a,s=i?n.Buffer:void 0,l=s?s.isBuffer:void 0,u=l||r;e.exports=u})(Op,Op.exports);var L8=Op.exports,pL=9007199254740991,fL=/^(?:0|[1-9]\d*)$/;function dL(e,t){var n=typeof e;return t=t??pL,!!t&&(n=="number"||n!="symbol"&&fL.test(e))&&e>-1&&e%1==0&&e<t}var Qy=dL,mL=9007199254740991;function hL(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=mL}var Zy=hL,vL=Gr,yL=Zy,gL=Ur,xL="[object Arguments]",wL="[object Array]",bL="[object Boolean]",SL="[object Date]",PL="[object Error]",OL="[object Function]",kL="[object Map]",CL="[object Number]",_L="[object Object]",AL="[object RegExp]",EL="[object Set]",TL="[object String]",jL="[object WeakMap]",$L="[object ArrayBuffer]",NL="[object DataView]",ML="[object Float32Array]",RL="[object Float64Array]",IL="[object Int8Array]",DL="[object Int16Array]",LL="[object Int32Array]",FL="[object Uint8Array]",zL="[object Uint8ClampedArray]",BL="[object Uint16Array]",HL="[object Uint32Array]",De={};De[ML]=De[RL]=De[IL]=De[DL]=De[LL]=De[FL]=De[zL]=De[BL]=De[HL]=!0;De[xL]=De[wL]=De[$L]=De[bL]=De[NL]=De[SL]=De[PL]=De[OL]=De[kL]=De[CL]=De[_L]=De[AL]=De[EL]=De[TL]=De[jL]=!1;function GL(e){return gL(e)&&yL(e.length)&&!!De[vL(e)]}var UL=GL;function WL(e){return function(t){return e(t)}}var F8=WL,kp={exports:{}};kp.exports;(function(e,t){var n=q4,r=t&&!t.nodeType&&t,a=r&&!0&&e&&!e.nodeType&&e,o=a&&a.exports===r,i=o&&n.process,s=function(){try{var l=a&&a.require&&a.require("util").types;return l||i&&i.binding&&i.binding("util")}catch{}}();e.exports=s})(kp,kp.exports);var qL=kp.exports,VL=UL,KL=F8,sw=qL,lw=sw&&sw.isTypedArray,XL=lw?KL(lw):VL,z8=XL,YL=JD,QL=Yy,ZL=qt,JL=L8,eF=Qy,tF=z8,nF=Object.prototype,rF=nF.hasOwnProperty;function aF(e,t){var n=ZL(e),r=!n&&QL(e),a=!n&&!r&&JL(e),o=!n&&!r&&!a&&tF(e),i=n||r||a||o,s=i?YL(e.length,String):[],l=s.length;for(var u in e)(t||rF.call(e,u))&&!(i&&(u=="length"||a&&(u=="offset"||u=="parent")||o&&(u=="buffer"||u=="byteLength"||u=="byteOffset")||eF(u,l)))&&s.push(u);return s}var oF=aF,iF=Object.prototype;function sF(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||iF;return e===n}var lF=sF;function uF(e,t){return function(n){return e(t(n))}}var B8=uF,cF=B8,pF=cF(Object.keys,Object),fF=pF,dF=lF,mF=fF,hF=Object.prototype,vF=hF.hasOwnProperty;function yF(e){if(!dF(e))return mF(e);var t=[];for(var n in Object(e))vF.call(e,n)&&n!="constructor"&&t.push(n);return t}var gF=yF,xF=Ny,wF=Zy;function bF(e){return e!=null&&wF(e.length)&&!xF(e)}var ku=bF,SF=oF,PF=gF,OF=ku;function kF(e){return OF(e)?SF(e):PF(e)}var id=kF,CF=BD,_F=QD,AF=id;function EF(e){return CF(e,AF,_F)}var TF=EF,uw=TF,jF=1,$F=Object.prototype,NF=$F.hasOwnProperty;function MF(e,t,n,r,a,o){var i=n&jF,s=uw(e),l=s.length,u=uw(t),p=u.length;if(l!=p&&!i)return!1;for(var c=l;c--;){var f=s[c];if(!(i?f in t:NF.call(t,f)))return!1}var d=o.get(e),h=o.get(t);if(d&&h)return d==t&&h==e;var m=!0;o.set(e,t),o.set(t,e);for(var g=i;++c<l;){f=s[c];var v=e[f],y=t[f];if(r)var x=i?r(y,v,f,t,e,o):r(v,y,f,e,t,o);if(!(x===void 0?v===y||a(v,y,n,r,o):x)){m=!1;break}g||(g=f=="constructor")}if(m&&!g){var S=e.constructor,w=t.constructor;S!=w&&"constructor"in e&&"constructor"in t&&!(typeof S=="function"&&S instanceof S&&typeof w=="function"&&w instanceof w)&&(m=!1)}return o.delete(e),o.delete(t),m}var RF=MF,IF=Co,DF=vr,LF=IF(DF,"DataView"),FF=LF,zF=Co,BF=vr,HF=zF(BF,"Promise"),GF=HF,UF=Co,WF=vr,qF=UF(WF,"Set"),H8=qF,VF=Co,KF=vr,XF=VF(KF,"WeakMap"),YF=XF,c0=FF,p0=Ry,f0=GF,d0=H8,m0=YF,G8=Gr,xs=K4,cw="[object Map]",QF="[object Object]",pw="[object Promise]",fw="[object Set]",dw="[object WeakMap]",mw="[object DataView]",ZF=xs(c0),JF=xs(p0),ez=xs(f0),tz=xs(d0),nz=xs(m0),Ua=G8;(c0&&Ua(new c0(new ArrayBuffer(1)))!=mw||p0&&Ua(new p0)!=cw||f0&&Ua(f0.resolve())!=pw||d0&&Ua(new d0)!=fw||m0&&Ua(new m0)!=dw)&&(Ua=function(e){var t=G8(e),n=t==QF?e.constructor:void 0,r=n?xs(n):"";if(r)switch(r){case ZF:return mw;case JF:return cw;case ez:return pw;case tz:return fw;case nz:return dw}return t});var rz=Ua,Sm=j8,az=R8,oz=ID,iz=RF,hw=rz,vw=qt,yw=L8,sz=z8,lz=1,gw="[object Arguments]",xw="[object Array]",ac="[object Object]",uz=Object.prototype,ww=uz.hasOwnProperty;function cz(e,t,n,r,a,o){var i=vw(e),s=vw(t),l=i?xw:hw(e),u=s?xw:hw(t);l=l==gw?ac:l,u=u==gw?ac:u;var p=l==ac,c=u==ac,f=l==u;if(f&&yw(e)){if(!yw(t))return!1;i=!0,p=!1}if(f&&!p)return o||(o=new Sm),i||sz(e)?az(e,t,n,r,a,o):oz(e,t,l,n,r,a,o);if(!(n&lz)){var d=p&&ww.call(e,"__wrapped__"),h=c&&ww.call(t,"__wrapped__");if(d||h){var m=d?e.value():e,g=h?t.value():t;return o||(o=new Sm),a(m,g,n,r,o)}}return f?(o||(o=new Sm),iz(e,t,n,r,a,o)):!1}var pz=cz,fz=pz,bw=Ur;function U8(e,t,n,r,a){return e===t?!0:e==null||t==null||!bw(e)&&!bw(t)?e!==e&&t!==t:fz(e,t,n,r,U8,a)}var Jy=U8,dz=j8,mz=Jy,hz=1,vz=2;function yz(e,t,n,r){var a=n.length,o=a,i=!r;if(e==null)return!o;for(e=Object(e);a--;){var s=n[a];if(i&&s[2]?s[1]!==e[s[0]]:!(s[0]in e))return!1}for(;++a<o;){s=n[a];var l=s[0],u=e[l],p=s[1];if(i&&s[2]){if(u===void 0&&!(l in e))return!1}else{var c=new dz;if(r)var f=r(u,p,l,e,t,c);if(!(f===void 0?mz(p,u,hz|vz,r,c):f))return!1}}return!0}var gz=yz,xz=$a;function wz(e){return e===e&&!xz(e)}var W8=wz,bz=W8,Sz=id;function Pz(e){for(var t=Sz(e),n=t.length;n--;){var r=t[n],a=e[r];t[n]=[r,a,bz(a)]}return t}var Oz=Pz;function kz(e,t){return function(n){return n==null?!1:n[e]===t&&(t!==void 0||e in Object(n))}}var q8=kz,Cz=gz,_z=Oz,Az=q8;function Ez(e){var t=_z(e);return t.length==1&&t[0][2]?Az(t[0][0],t[0][1]):function(n){return n===e||Cz(n,e,t)}}var Tz=Ez;function jz(e,t){return e!=null&&t in Object(e)}var $z=jz,Nz=J4,Mz=Yy,Rz=qt,Iz=Qy,Dz=Zy,Lz=Wf;function Fz(e,t,n){t=Nz(t,e);for(var r=-1,a=t.length,o=!1;++r<a;){var i=Lz(t[r]);if(!(o=e!=null&&n(e,i)))break;e=e[i]}return o||++r!=a?o:(a=e==null?0:e.length,!!a&&Dz(a)&&Iz(i,a)&&(Rz(e)||Mz(e)))}var zz=Fz,Bz=$z,Hz=zz;function Gz(e,t){return e!=null&&Hz(e,t,Bz)}var Uz=Gz,Wz=Jy,qz=e8,Vz=Uz,Kz=$y,Xz=W8,Yz=q8,Qz=Wf,Zz=1,Jz=2;function eB(e,t){return Kz(e)&&Xz(t)?Yz(Qz(e),t):function(n){var r=qz(n,e);return r===void 0&&r===t?Vz(n,e):Wz(t,r,Zz|Jz)}}var tB=eB;function nB(e){return e}var ws=nB;function rB(e){return function(t){return t==null?void 0:t[e]}}var aB=rB,oB=Fy;function iB(e){return function(t){return oB(t,e)}}var sB=iB,lB=aB,uB=sB,cB=$y,pB=Wf;function fB(e){return cB(e)?lB(pB(e)):uB(e)}var dB=fB,mB=Tz,hB=tB,vB=ws,yB=qt,gB=dB;function xB(e){return typeof e=="function"?e:e==null?vB:typeof e=="object"?yB(e)?hB(e[0],e[1]):mB(e):gB(e)}var Na=xB;function wB(e,t,n,r){for(var a=e.length,o=n+(r?1:-1);r?o--:++o<a;)if(t(e[o],o,e))return o;return-1}var V8=wB;function bB(e){return e!==e}var SB=bB;function PB(e,t,n){for(var r=n-1,a=e.length;++r<a;)if(e[r]===t)return r;return-1}var OB=PB,kB=V8,CB=SB,_B=OB;function AB(e,t,n){return t===t?_B(e,t,n):kB(e,CB,n)}var EB=AB,TB=EB;function jB(e,t){var n=e==null?0:e.length;return!!n&&TB(e,t,0)>-1}var $B=jB;function NB(e,t,n){for(var r=-1,a=e==null?0:e.length;++r<a;)if(n(t,e[r]))return!0;return!1}var MB=NB;function RB(){}var IB=RB,Pm=H8,DB=IB,LB=Xy,FB=1/0,zB=Pm&&1/LB(new Pm([,-0]))[1]==FB?function(e){return new Pm(e)}:DB,BB=zB,HB=$8,GB=$B,UB=MB,WB=M8,qB=BB,VB=Xy,KB=200;function XB(e,t,n){var r=-1,a=GB,o=e.length,i=!0,s=[],l=s;if(n)i=!1,a=UB;else if(o>=KB){var u=t?null:qB(e);if(u)return VB(u);i=!1,a=WB,l=new HB}else l=t?[]:s;e:for(;++r<o;){var p=e[r],c=t?t(p):p;if(p=n||p!==0?p:0,i&&c===c){for(var f=l.length;f--;)if(l[f]===c)continue e;t&&l.push(c),s.push(p)}else a(l,c,n)||(l!==s&&l.push(c),s.push(p))}return s}var YB=XB,QB=Na,ZB=YB;function JB(e,t){return e&&e.length?ZB(e,QB(t)):[]}var eH=JB;const Sw=_e(eH);function K8(e,t,n){return t===!0?Sw(e,n):ae(t)?Sw(e,t):e}function Ni(e){"@babel/helpers - typeof";return Ni=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ni(e)}var tH=["ref"];function Pw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function gr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Pw(Object(n),!0).forEach(function(r){sd(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Pw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function nH(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ow(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,Y8(r.key),r)}}function rH(e,t,n){return t&&Ow(e.prototype,t),n&&Ow(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function aH(e,t,n){return t=Cp(t),oH(e,X8()?Reflect.construct(t,n||[],Cp(e).constructor):t.apply(e,n))}function oH(e,t){if(t&&(Ni(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return iH(e)}function iH(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function X8(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(X8=function(){return!!e})()}function Cp(e){return Cp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Cp(e)}function sH(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h0(e,t)}function h0(e,t){return h0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},h0(e,t)}function sd(e,t,n){return t=Y8(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y8(e){var t=lH(e,"string");return Ni(t)=="symbol"?t:t+""}function lH(e,t){if(Ni(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ni(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function uH(e,t){if(e==null)return{};var n=cH(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function cH(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function pH(e){return e.value}function fH(e,t){if(E.isValidElement(e))return E.cloneElement(e,t);if(typeof e=="function")return E.createElement(e,t);t.ref;var n=uH(t,tH);return E.createElement(Ky,n)}var kw=1,ci=function(e){function t(){var n;nH(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=aH(this,t,[].concat(a)),sd(n,"lastBoundingBox",{width:-1,height:-1}),n}return sH(t,e),rH(t,[{key:"componentDidMount",value:function(){this.updateBBox()}},{key:"componentDidUpdate",value:function(){this.updateBBox()}},{key:"getBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();return r.height=this.wrapperNode.offsetHeight,r.width=this.wrapperNode.offsetWidth,r}return null}},{key:"updateBBox",value:function(){var r=this.props.onBBoxUpdate,a=this.getBBox();a?(Math.abs(a.width-this.lastBoundingBox.width)>kw||Math.abs(a.height-this.lastBoundingBox.height)>kw)&&(this.lastBoundingBox.width=a.width,this.lastBoundingBox.height=a.height,r&&r(a)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?gr({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var a=this.props,o=a.layout,i=a.align,s=a.verticalAlign,l=a.margin,u=a.chartWidth,p=a.chartHeight,c,f;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(i==="center"&&o==="vertical"){var d=this.getBBoxSnapshot();c={left:((u||0)-d.width)/2}}else c=i==="right"?{right:l&&l.right||0}:{left:l&&l.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(s==="middle"){var h=this.getBBoxSnapshot();f={top:((p||0)-h.height)/2}}else f=s==="bottom"?{bottom:l&&l.bottom||0}:{top:l&&l.top||0};return gr(gr({},c),f)}},{key:"render",value:function(){var r=this,a=this.props,o=a.content,i=a.width,s=a.height,l=a.wrapperStyle,u=a.payloadUniqBy,p=a.payload,c=gr(gr({position:"absolute",width:i||"auto",height:s||"auto"},this.getDefaultPosition(l)),l);return E.createElement("div",{className:"recharts-legend-wrapper",style:c,ref:function(d){r.wrapperNode=d}},fH(o,gr(gr({},this.props),{},{payload:K8(p,u,pH)})))}}],[{key:"getWithHeight",value:function(r,a){var o=gr(gr({},this.defaultProps),r.props),i=o.layout;return i==="vertical"&&V(r.props.height)?{height:r.props.height}:i==="horizontal"?{width:r.props.width||a}:null}}])}(k.PureComponent);sd(ci,"displayName","Legend");sd(ci,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var Cw=Ou,dH=Yy,mH=qt,_w=Cw?Cw.isConcatSpreadable:void 0;function hH(e){return mH(e)||dH(e)||!!(_w&&e&&e[_w])}var vH=hH,yH=I8,gH=vH;function Q8(e,t,n,r,a){var o=-1,i=e.length;for(n||(n=gH),a||(a=[]);++o<i;){var s=e[o];t>0&&n(s)?t>1?Q8(s,t-1,n,r,a):yH(a,s):r||(a[a.length]=s)}return a}var Z8=Q8;function xH(e){return function(t,n,r){for(var a=-1,o=Object(t),i=r(t),s=i.length;s--;){var l=i[e?s:++a];if(n(o[l],l,o)===!1)break}return t}}var wH=xH,bH=wH,SH=bH(),PH=SH,OH=PH,kH=id;function CH(e,t){return e&&OH(e,t,kH)}var J8=CH,_H=ku;function AH(e,t){return function(n,r){if(n==null)return n;if(!_H(n))return e(n,r);for(var a=n.length,o=t?a:-1,i=Object(n);(t?o--:++o<a)&&r(i[o],o,i)!==!1;);return n}}var EH=AH,TH=J8,jH=EH,$H=jH(TH),eg=$H,NH=eg,MH=ku;function RH(e,t){var n=-1,r=MH(e)?Array(e.length):[];return NH(e,function(a,o,i){r[++n]=t(a,o,i)}),r}var e7=RH;function IH(e,t){var n=e.length;for(e.sort(t);n--;)e[n]=e[n].value;return e}var DH=IH,Aw=ps;function LH(e,t){if(e!==t){var n=e!==void 0,r=e===null,a=e===e,o=Aw(e),i=t!==void 0,s=t===null,l=t===t,u=Aw(t);if(!s&&!u&&!o&&e>t||o&&i&&l&&!s&&!u||r&&i&&l||!n&&l||!a)return 1;if(!r&&!o&&!u&&e<t||u&&n&&a&&!r&&!o||s&&n&&a||!i&&a||!l)return-1}return 0}var FH=LH,zH=FH;function BH(e,t,n){for(var r=-1,a=e.criteria,o=t.criteria,i=a.length,s=n.length;++r<i;){var l=zH(a[r],o[r]);if(l){if(r>=s)return l;var u=n[r];return l*(u=="desc"?-1:1)}}return e.index-t.index}var HH=BH,Om=Ly,GH=Fy,UH=Na,WH=e7,qH=DH,VH=F8,KH=HH,XH=ws,YH=qt;function QH(e,t,n){t.length?t=Om(t,function(o){return YH(o)?function(i){return GH(i,o.length===1?o[0]:o)}:o}):t=[XH];var r=-1;t=Om(t,VH(UH));var a=WH(e,function(o,i,s){var l=Om(t,function(u){return u(o)});return{criteria:l,index:++r,value:o}});return qH(a,function(o,i){return KH(o,i,n)})}var ZH=QH;function JH(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var eG=JH,tG=eG,Ew=Math.max;function nG(e,t,n){return t=Ew(t===void 0?e.length-1:t,0),function(){for(var r=arguments,a=-1,o=Ew(r.length-t,0),i=Array(o);++a<o;)i[a]=r[t+a];a=-1;for(var s=Array(t+1);++a<t;)s[a]=r[a];return s[t]=n(i),tG(e,this,s)}}var rG=nG;function aG(e){return function(){return e}}var oG=aG,iG=Co,sG=function(){try{var e=iG(Object,"defineProperty");return e({},"",{}),e}catch{}}(),t7=sG,lG=oG,Tw=t7,uG=ws,cG=Tw?function(e,t){return Tw(e,"toString",{configurable:!0,enumerable:!1,value:lG(t),writable:!0})}:uG,pG=cG,fG=800,dG=16,mG=Date.now;function hG(e){var t=0,n=0;return function(){var r=mG(),a=dG-(r-n);if(n=r,a>0){if(++t>=fG)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var vG=hG,yG=pG,gG=vG,xG=gG(yG),wG=xG,bG=ws,SG=rG,PG=wG;function OG(e,t){return PG(SG(e,t,bG),e+"")}var kG=OG,CG=My,_G=ku,AG=Qy,EG=$a;function TG(e,t,n){if(!EG(n))return!1;var r=typeof t;return(r=="number"?_G(n)&&AG(t,n.length):r=="string"&&t in n)?CG(n[t],e):!1}var ld=TG,jG=Z8,$G=ZH,NG=kG,jw=ld,MG=NG(function(e,t){if(e==null)return[];var n=t.length;return n>1&&jw(e,t[0],t[1])?t=[]:n>2&&jw(t[0],t[1],t[2])&&(t=[t[0]]),$G(e,jG(t,1),[])}),RG=MG;const tg=_e(RG);function Nl(e){"@babel/helpers - typeof";return Nl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Nl(e)}function v0(){return v0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},v0.apply(this,arguments)}function IG(e,t){return zG(e)||FG(e,t)||LG(e,t)||DG()}function DG(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function LG(e,t){if(e){if(typeof e=="string")return $w(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return $w(e,t)}}function $w(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function FG(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function zG(e){if(Array.isArray(e))return e}function Nw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function km(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Nw(Object(n),!0).forEach(function(r){BG(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Nw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function BG(e,t,n){return t=HG(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function HG(e){var t=GG(e,"string");return Nl(t)=="symbol"?t:t+""}function GG(e,t){if(Nl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Nl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function UG(e){return Array.isArray(e)&&ot(e[0])&&ot(e[1])?e.join(" ~ "):e}var WG=function(t){var n=t.separator,r=n===void 0?" : ":n,a=t.contentStyle,o=a===void 0?{}:a,i=t.itemStyle,s=i===void 0?{}:i,l=t.labelStyle,u=l===void 0?{}:l,p=t.payload,c=t.formatter,f=t.itemSorter,d=t.wrapperClassName,h=t.labelClassName,m=t.label,g=t.labelFormatter,v=t.accessibilityLayer,y=v===void 0?!1:v,x=function(){if(p&&p.length){var j={padding:0,margin:0},N=(f?tg(p,f):p).map(function(M,I){if(M.type==="none")return null;var R=km({display:"block",paddingTop:4,paddingBottom:4,color:M.color||"#000"},s),L=M.formatter||c||UG,$=M.value,D=M.name,H=$,W=D;if(L&&H!=null&&W!=null){var G=L($,D,M,I,p);if(Array.isArray(G)){var Z=IG(G,2);H=Z[0],W=Z[1]}else H=G}return E.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(I),style:R},ot(W)?E.createElement("span",{className:"recharts-tooltip-item-name"},W):null,ot(W)?E.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,E.createElement("span",{className:"recharts-tooltip-item-value"},H),E.createElement("span",{className:"recharts-tooltip-item-unit"},M.unit||""))});return E.createElement("ul",{className:"recharts-tooltip-item-list",style:j},N)}return null},S=km({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},o),w=km({margin:0},u),P=!le(m),O=P?m:"",C=ue("recharts-default-tooltip",d),_=ue("recharts-tooltip-label",h);P&&g&&p!==void 0&&p!==null&&(O=g(m,p));var T=y?{role:"status","aria-live":"assertive"}:{};return E.createElement("div",v0({className:C,style:S},T),E.createElement("p",{className:_,style:w},E.isValidElement(O)?O:"".concat(O)),x())};function Ml(e){"@babel/helpers - typeof";return Ml=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ml(e)}function oc(e,t,n){return t=qG(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qG(e){var t=VG(e,"string");return Ml(t)=="symbol"?t:t+""}function VG(e,t){if(Ml(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ml(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Is="recharts-tooltip-wrapper",KG={visibility:"hidden"};function XG(e){var t=e.coordinate,n=e.translateX,r=e.translateY;return ue(Is,oc(oc(oc(oc({},"".concat(Is,"-right"),V(n)&&t&&V(t.x)&&n>=t.x),"".concat(Is,"-left"),V(n)&&t&&V(t.x)&&n<t.x),"".concat(Is,"-bottom"),V(r)&&t&&V(t.y)&&r>=t.y),"".concat(Is,"-top"),V(r)&&t&&V(t.y)&&r<t.y))}function Mw(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.key,a=e.offsetTopLeft,o=e.position,i=e.reverseDirection,s=e.tooltipDimension,l=e.viewBox,u=e.viewBoxDimension;if(o&&V(o[r]))return o[r];var p=n[r]-s-a,c=n[r]+a;if(t[r])return i[r]?p:c;if(i[r]){var f=p,d=l[r];return f<d?Math.max(c,l[r]):Math.max(p,l[r])}var h=c+s,m=l[r]+u;return h>m?Math.max(p,l[r]):Math.max(c,l[r])}function YG(e){var t=e.translateX,n=e.translateY,r=e.useTranslate3d;return{transform:r?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}function QG(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTopLeft,a=e.position,o=e.reverseDirection,i=e.tooltipBox,s=e.useTranslate3d,l=e.viewBox,u,p,c;return i.height>0&&i.width>0&&n?(p=Mw({allowEscapeViewBox:t,coordinate:n,key:"x",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.width,viewBox:l,viewBoxDimension:l.width}),c=Mw({allowEscapeViewBox:t,coordinate:n,key:"y",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.height,viewBox:l,viewBoxDimension:l.height}),u=YG({translateX:p,translateY:c,useTranslate3d:s})):u=KG,{cssProperties:u,cssClasses:XG({translateX:p,translateY:c,coordinate:n})}}function Mi(e){"@babel/helpers - typeof";return Mi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mi(e)}function Rw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Iw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Rw(Object(n),!0).forEach(function(r){g0(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Rw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ZG(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function JG(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r7(r.key),r)}}function eU(e,t,n){return t&&JG(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function tU(e,t,n){return t=_p(t),nU(e,n7()?Reflect.construct(t,n||[],_p(e).constructor):t.apply(e,n))}function nU(e,t){if(t&&(Mi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return rU(e)}function rU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function n7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(n7=function(){return!!e})()}function _p(e){return _p=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},_p(e)}function aU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y0(e,t)}function y0(e,t){return y0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},y0(e,t)}function g0(e,t,n){return t=r7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r7(e){var t=oU(e,"string");return Mi(t)=="symbol"?t:t+""}function oU(e,t){if(Mi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Mi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Dw=1,iU=function(e){function t(){var n;ZG(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=tU(this,t,[].concat(a)),g0(n,"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0},lastBoundingBox:{width:-1,height:-1}}),g0(n,"handleKeyDown",function(i){if(i.key==="Escape"){var s,l,u,p;n.setState({dismissed:!0,dismissedAtCoordinate:{x:(s=(l=n.props.coordinate)===null||l===void 0?void 0:l.x)!==null&&s!==void 0?s:0,y:(u=(p=n.props.coordinate)===null||p===void 0?void 0:p.y)!==null&&u!==void 0?u:0}})}}),n}return aU(t,e),eU(t,[{key:"updateBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var r=this.wrapperNode.getBoundingClientRect();(Math.abs(r.width-this.state.lastBoundingBox.width)>Dw||Math.abs(r.height-this.state.lastBoundingBox.height)>Dw)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,a;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.children,p=a.coordinate,c=a.hasPayload,f=a.isAnimationActive,d=a.offset,h=a.position,m=a.reverseDirection,g=a.useTranslate3d,v=a.viewBox,y=a.wrapperStyle,x=QG({allowEscapeViewBox:i,coordinate:p,offsetTopLeft:d,position:h,reverseDirection:m,tooltipBox:this.state.lastBoundingBox,useTranslate3d:g,viewBox:v}),S=x.cssClasses,w=x.cssProperties,P=Iw(Iw({transition:f&&o?"transform ".concat(s,"ms ").concat(l):void 0},w),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&c?"visible":"hidden",position:"absolute",top:0,left:0},y);return E.createElement("div",{tabIndex:-1,className:S,style:P,ref:function(C){r.wrapperNode=C}},u)}}])}(k.PureComponent),sU=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},_o={isSsr:sU()};function Ri(e){"@babel/helpers - typeof";return Ri=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ri(e)}function Lw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Fw(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Lw(Object(n),!0).forEach(function(r){ng(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function lU(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uU(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,o7(r.key),r)}}function cU(e,t,n){return t&&uU(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function pU(e,t,n){return t=Ap(t),fU(e,a7()?Reflect.construct(t,n||[],Ap(e).constructor):t.apply(e,n))}function fU(e,t){if(t&&(Ri(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return dU(e)}function dU(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a7(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(a7=function(){return!!e})()}function Ap(e){return Ap=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Ap(e)}function mU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&x0(e,t)}function x0(e,t){return x0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},x0(e,t)}function ng(e,t,n){return t=o7(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o7(e){var t=hU(e,"string");return Ri(t)=="symbol"?t:t+""}function hU(e,t){if(Ri(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ri(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function vU(e){return e.dataKey}function yU(e,t){return E.isValidElement(e)?E.cloneElement(e,t):typeof e=="function"?E.createElement(e,t):E.createElement(WG,t)}var Yn=function(e){function t(){return lU(this,t),pU(this,t,arguments)}return mU(t,e),cU(t,[{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,l=a.animationEasing,u=a.content,p=a.coordinate,c=a.filterNull,f=a.isAnimationActive,d=a.offset,h=a.payload,m=a.payloadUniqBy,g=a.position,v=a.reverseDirection,y=a.useTranslate3d,x=a.viewBox,S=a.wrapperStyle,w=h??[];c&&w.length&&(w=K8(h.filter(function(O){return O.value!=null&&(O.hide!==!0||r.props.includeHidden)}),m,vU));var P=w.length>0;return E.createElement(iU,{allowEscapeViewBox:i,animationDuration:s,animationEasing:l,isAnimationActive:f,active:o,coordinate:p,hasPayload:P,offset:d,position:g,reverseDirection:v,useTranslate3d:y,viewBox:x,wrapperStyle:S},yU(u,Fw(Fw({},this.props),{},{payload:w})))}}])}(k.PureComponent);ng(Yn,"displayName","Tooltip");ng(Yn,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!_o.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var gU=vr,xU=function(){return gU.Date.now()},wU=xU,bU=/\s/;function SU(e){for(var t=e.length;t--&&bU.test(e.charAt(t)););return t}var PU=SU,OU=PU,kU=/^\s+/;function CU(e){return e&&e.slice(0,OU(e)+1).replace(kU,"")}var _U=CU,AU=_U,zw=$a,EU=ps,Bw=NaN,TU=/^[-+]0x[0-9a-f]+$/i,jU=/^0b[01]+$/i,$U=/^0o[0-7]+$/i,NU=parseInt;function MU(e){if(typeof e=="number")return e;if(EU(e))return Bw;if(zw(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=zw(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=AU(e);var n=jU.test(e);return n||$U.test(e)?NU(e.slice(2),n?2:8):TU.test(e)?Bw:+e}var i7=MU,RU=$a,Cm=wU,Hw=i7,IU="Expected a function",DU=Math.max,LU=Math.min;function FU(e,t,n){var r,a,o,i,s,l,u=0,p=!1,c=!1,f=!0;if(typeof e!="function")throw new TypeError(IU);t=Hw(t)||0,RU(n)&&(p=!!n.leading,c="maxWait"in n,o=c?DU(Hw(n.maxWait)||0,t):o,f="trailing"in n?!!n.trailing:f);function d(P){var O=r,C=a;return r=a=void 0,u=P,i=e.apply(C,O),i}function h(P){return u=P,s=setTimeout(v,t),p?d(P):i}function m(P){var O=P-l,C=P-u,_=t-O;return c?LU(_,o-C):_}function g(P){var O=P-l,C=P-u;return l===void 0||O>=t||O<0||c&&C>=o}function v(){var P=Cm();if(g(P))return y(P);s=setTimeout(v,m(P))}function y(P){return s=void 0,f&&r?d(P):(r=a=void 0,i)}function x(){s!==void 0&&clearTimeout(s),u=0,r=l=a=s=void 0}function S(){return s===void 0?i:y(Cm())}function w(){var P=Cm(),O=g(P);if(r=arguments,a=this,l=P,O){if(s===void 0)return h(l);if(c)return clearTimeout(s),s=setTimeout(v,t),d(l)}return s===void 0&&(s=setTimeout(v,t)),i}return w.cancel=x,w.flush=S,w}var zU=FU,BU=zU,HU=$a,GU="Expected a function";function UU(e,t,n){var r=!0,a=!0;if(typeof e!="function")throw new TypeError(GU);return HU(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),BU(e,t,{leading:r,maxWait:t,trailing:a})}var WU=UU;const s7=_e(WU);function Rl(e){"@babel/helpers - typeof";return Rl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rl(e)}function Gw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function ic(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Gw(Object(n),!0).forEach(function(r){qU(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gw(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function qU(e,t,n){return t=VU(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function VU(e){var t=KU(e,"string");return Rl(t)=="symbol"?t:t+""}function KU(e,t){if(Rl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Rl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function XU(e,t){return JU(e)||ZU(e,t)||QU(e,t)||YU()}function YU(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QU(e,t){if(e){if(typeof e=="string")return Uw(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Uw(e,t)}}function Uw(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ZU(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function JU(e){if(Array.isArray(e))return e}var eW=k.forwardRef(function(e,t){var n=e.aspect,r=e.initialDimension,a=r===void 0?{width:-1,height:-1}:r,o=e.width,i=o===void 0?"100%":o,s=e.height,l=s===void 0?"100%":s,u=e.minWidth,p=u===void 0?0:u,c=e.minHeight,f=e.maxHeight,d=e.children,h=e.debounce,m=h===void 0?0:h,g=e.id,v=e.className,y=e.onResize,x=e.style,S=x===void 0?{}:x,w=k.useRef(null),P=k.useRef();P.current=y,k.useImperativeHandle(t,function(){return Object.defineProperty(w.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),w.current},configurable:!0})});var O=k.useState({containerWidth:a.width,containerHeight:a.height}),C=XU(O,2),_=C[0],T=C[1],A=k.useCallback(function(N,M){T(function(I){var R=Math.round(N),L=Math.round(M);return I.containerWidth===R&&I.containerHeight===L?I:{containerWidth:R,containerHeight:L}})},[]);k.useEffect(function(){var N=function(D){var H,W=D[0].contentRect,G=W.width,Z=W.height;A(G,Z),(H=P.current)===null||H===void 0||H.call(P,G,Z)};m>0&&(N=s7(N,m,{trailing:!0,leading:!1}));var M=new ResizeObserver(N),I=w.current.getBoundingClientRect(),R=I.width,L=I.height;return A(R,L),M.observe(w.current),function(){M.disconnect()}},[A,m]);var j=k.useMemo(function(){var N=_.containerWidth,M=_.containerHeight;if(N<0||M<0)return null;Tr(Xa(i)||Xa(l),`The width(%s) and height(%s) are both fixed numbers,
+       maybe you don't need to use a ResponsiveContainer.`,i,l),Tr(!n||n>0,"The aspect(%s) must be greater than zero.",n);var I=Xa(i)?N:i,R=Xa(l)?M:l;n&&n>0&&(I?R=I/n:R&&(I=R*n),f&&R>f&&(R=f)),Tr(I>0||R>0,`The width(%s) and height(%s) of chart should be greater than 0,
+       please check the style of container, or the props width(%s) and height(%s),
+       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
+       height and width.`,I,R,i,l,p,c,n);var L=!Array.isArray(d)&&Er(d.type).endsWith("Chart");return E.Children.map(d,function($){return E.isValidElement($)?k.cloneElement($,ic({width:I,height:R},L?{style:ic({height:"100%",width:"100%",maxHeight:R,maxWidth:I},$.props.style)}:{})):$})},[n,d,l,f,c,p,_,i]);return E.createElement("div",{id:g?"".concat(g):void 0,className:ue("recharts-responsive-container",v),style:ic(ic({},S),{},{width:i,height:l,minWidth:p,minHeight:c,maxHeight:f}),ref:w},j)}),l7=function(t){return null};l7.displayName="Cell";function Il(e){"@babel/helpers - typeof";return Il=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Il(e)}function Ww(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function w0(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ww(Object(n),!0).forEach(function(r){tW(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ww(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function tW(e,t,n){return t=nW(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function nW(e){var t=rW(e,"string");return Il(t)=="symbol"?t:t+""}function rW(e,t){if(Il(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Il(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Ro={widthCache:{},cacheCount:0},aW=2e3,oW={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},qw="recharts_measurement_span";function iW(e){var t=w0({},e);return Object.keys(t).forEach(function(n){t[n]||delete t[n]}),t}var il=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||_o.isSsr)return{width:0,height:0};var r=iW(n),a=JSON.stringify({text:t,copyStyle:r});if(Ro.widthCache[a])return Ro.widthCache[a];try{var o=document.getElementById(qw);o||(o=document.createElement("span"),o.setAttribute("id",qw),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var i=w0(w0({},oW),r);Object.assign(o.style,i),o.textContent="".concat(t);var s=o.getBoundingClientRect(),l={width:s.width,height:s.height};return Ro.widthCache[a]=l,++Ro.cacheCount>aW&&(Ro.cacheCount=0,Ro.widthCache={}),l}catch{return{width:0,height:0}}},sW=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function Dl(e){"@babel/helpers - typeof";return Dl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Dl(e)}function Ep(e,t){return pW(e)||cW(e,t)||uW(e,t)||lW()}function lW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function uW(e,t){if(e){if(typeof e=="string")return Vw(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Vw(e,t)}}function Vw(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function cW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function pW(e){if(Array.isArray(e))return e}function fW(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Kw(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,mW(r.key),r)}}function dW(e,t,n){return t&&Kw(e.prototype,t),n&&Kw(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function mW(e){var t=hW(e,"string");return Dl(t)=="symbol"?t:t+""}function hW(e,t){if(Dl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Dl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Xw=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,Yw=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,vW=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,yW=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,u7={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},gW=Object.keys(u7),Qo="NaN";function xW(e,t){return e*u7[t]}var sc=function(){function e(t,n){fW(this,e),this.num=t,this.unit=n,this.num=t,this.unit=n,Number.isNaN(t)&&(this.unit=""),n!==""&&!vW.test(n)&&(this.num=NaN,this.unit=""),gW.includes(n)&&(this.num=xW(t,n),this.unit="px")}return dW(e,[{key:"add",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num+n.num,this.unit)}},{key:"subtract",value:function(n){return this.unit!==n.unit?new e(NaN,""):new e(this.num-n.num,this.unit)}},{key:"multiply",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num*n.num,this.unit||n.unit)}},{key:"divide",value:function(n){return this.unit!==""&&n.unit!==""&&this.unit!==n.unit?new e(NaN,""):new e(this.num/n.num,this.unit||n.unit)}},{key:"toString",value:function(){return"".concat(this.num).concat(this.unit)}},{key:"isNaN",value:function(){return Number.isNaN(this.num)}}],[{key:"parse",value:function(n){var r,a=(r=yW.exec(n))!==null&&r!==void 0?r:[],o=Ep(a,3),i=o[1],s=o[2];return new e(parseFloat(i),s??"")}}])}();function c7(e){if(e.includes(Qo))return Qo;for(var t=e;t.includes("*")||t.includes("/");){var n,r=(n=Xw.exec(t))!==null&&n!==void 0?n:[],a=Ep(r,4),o=a[1],i=a[2],s=a[3],l=sc.parse(o??""),u=sc.parse(s??""),p=i==="*"?l.multiply(u):l.divide(u);if(p.isNaN())return Qo;t=t.replace(Xw,p.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var c,f=(c=Yw.exec(t))!==null&&c!==void 0?c:[],d=Ep(f,4),h=d[1],m=d[2],g=d[3],v=sc.parse(h??""),y=sc.parse(g??""),x=m==="+"?v.add(y):v.subtract(y);if(x.isNaN())return Qo;t=t.replace(Yw,x.toString())}return t}var Qw=/\(([^()]*)\)/;function wW(e){for(var t=e;t.includes("(");){var n=Qw.exec(t),r=Ep(n,2),a=r[1];t=t.replace(Qw,c7(a))}return t}function bW(e){var t=e.replace(/\s+/g,"");return t=wW(t),t=c7(t),t}function SW(e){try{return bW(e)}catch{return Qo}}function _m(e){var t=SW(e.slice(5,-1));return t===Qo?"":t}var PW=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],OW=["dx","dy","angle","className","breakAll"];function b0(){return b0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},b0.apply(this,arguments)}function Zw(e,t){if(e==null)return{};var n=kW(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kW(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Jw(e,t){return EW(e)||AW(e,t)||_W(e,t)||CW()}function CW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _W(e,t){if(e){if(typeof e=="string")return e3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return e3(e,t)}}function e3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function AW(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function EW(e){if(Array.isArray(e))return e}var p7=/[ \f\n\r\t\v\u2028\u2029]+/,f7=function(t){var n=t.children,r=t.breakAll,a=t.style;try{var o=[];le(n)||(r?o=n.toString().split(""):o=n.toString().split(p7));var i=o.map(function(l){return{word:l,width:il(l,a).width}}),s=r?0:il(" ",a).width;return{wordsWithComputedWidth:i,spaceWidth:s}}catch{return null}},TW=function(t,n,r,a,o){var i=t.maxLines,s=t.children,l=t.style,u=t.breakAll,p=V(i),c=s,f=function(){var I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return I.reduce(function(R,L){var $=L.word,D=L.width,H=R[R.length-1];if(H&&(a==null||o||H.width+D+r<Number(a)))H.words.push($),H.width+=D+r;else{var W={words:[$],width:D};R.push(W)}return R},[])},d=f(n),h=function(I){return I.reduce(function(R,L){return R.width>L.width?R:L})};if(!p)return d;for(var m="…",g=function(I){var R=c.slice(0,I),L=f7({breakAll:u,style:l,children:R+m}).wordsWithComputedWidth,$=f(L),D=$.length>i||h($).width>Number(a);return[D,$]},v=0,y=c.length-1,x=0,S;v<=y&&x<=c.length-1;){var w=Math.floor((v+y)/2),P=w-1,O=g(P),C=Jw(O,2),_=C[0],T=C[1],A=g(w),j=Jw(A,1),N=j[0];if(!_&&!N&&(v=w+1),_&&N&&(y=w-1),!_&&N){S=T;break}x++}return S||d},t3=function(t){var n=le(t)?[]:t.toString().split(p7);return[{words:n}]},jW=function(t){var n=t.width,r=t.scaleToFit,a=t.children,o=t.style,i=t.breakAll,s=t.maxLines;if((n||r)&&!_o.isSsr){var l,u,p=f7({breakAll:i,children:a,style:o});if(p){var c=p.wordsWithComputedWidth,f=p.spaceWidth;l=c,u=f}else return t3(a);return TW({breakAll:i,children:a,maxLines:s,style:o},l,u,n,r)}return t3(a)},n3="#808080",Tp=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.lineHeight,s=i===void 0?"1em":i,l=t.capHeight,u=l===void 0?"0.71em":l,p=t.scaleToFit,c=p===void 0?!1:p,f=t.textAnchor,d=f===void 0?"start":f,h=t.verticalAnchor,m=h===void 0?"end":h,g=t.fill,v=g===void 0?n3:g,y=Zw(t,PW),x=k.useMemo(function(){return jW({breakAll:y.breakAll,children:y.children,maxLines:y.maxLines,scaleToFit:c,style:y.style,width:y.width})},[y.breakAll,y.children,y.maxLines,c,y.style,y.width]),S=y.dx,w=y.dy,P=y.angle,O=y.className,C=y.breakAll,_=Zw(y,OW);if(!ot(r)||!ot(o))return null;var T=r+(V(S)?S:0),A=o+(V(w)?w:0),j;switch(m){case"start":j=_m("calc(".concat(u,")"));break;case"middle":j=_m("calc(".concat((x.length-1)/2," * -").concat(s," + (").concat(u," / 2))"));break;default:j=_m("calc(".concat(x.length-1," * -").concat(s,")"));break}var N=[];if(c){var M=x[0].width,I=y.width;N.push("scale(".concat((V(I)?I/M:1)/M,")"))}return P&&N.push("rotate(".concat(P,", ").concat(T,", ").concat(A,")")),N.length&&(_.transform=N.join(" ")),E.createElement("text",b0({},ie(_,!0),{x:T,y:A,className:ue("recharts-text",O),textAnchor:d,fill:v.includes("url")?n3:v}),x.map(function(R,L){var $=R.words.join(C?"":" ");return E.createElement("tspan",{x:T,dy:L===0?j:s,key:"".concat($,"-").concat(L)},$)}))};function ba(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function $W(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function rg(e){let t,n,r;e.length!==2?(t=ba,n=(s,l)=>ba(e(s),l),r=(s,l)=>e(s)-l):(t=e===ba||e===$W?e:NW,n=e,r=e);function a(s,l,u=0,p=s.length){if(u<p){if(t(l,l)!==0)return p;do{const c=u+p>>>1;n(s[c],l)<0?u=c+1:p=c}while(u<p)}return u}function o(s,l,u=0,p=s.length){if(u<p){if(t(l,l)!==0)return p;do{const c=u+p>>>1;n(s[c],l)<=0?u=c+1:p=c}while(u<p)}return u}function i(s,l,u=0,p=s.length){const c=a(s,l,u,p-1);return c>u&&r(s[c-1],l)>-r(s[c],l)?c-1:c}return{left:a,center:i,right:o}}function NW(){return 0}function d7(e){return e===null?NaN:+e}function*MW(e,t){for(let n of e)n!=null&&(n=+n)>=n&&(yield n)}const RW=rg(ba),Cu=RW.right;rg(d7).center;class r3 extends Map{constructor(t,n=LW){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,a]of t)this.set(r,a)}get(t){return super.get(a3(this,t))}has(t){return super.has(a3(this,t))}set(t,n){return super.set(IW(this,t),n)}delete(t){return super.delete(DW(this,t))}}function a3({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function IW({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function DW({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function LW(e){return e!==null&&typeof e=="object"?e.valueOf():e}function FW(e=ba){if(e===ba)return m7;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function m7(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(e<t?-1:e>t?1:0)}const zW=Math.sqrt(50),BW=Math.sqrt(10),HW=Math.sqrt(2);function jp(e,t,n){const r=(t-e)/Math.max(0,n),a=Math.floor(Math.log10(r)),o=r/Math.pow(10,a),i=o>=zW?10:o>=BW?5:o>=HW?2:1;let s,l,u;return a<0?(u=Math.pow(10,-a)/i,s=Math.round(e*u),l=Math.round(t*u),s/u<e&&++s,l/u>t&&--l,u=-u):(u=Math.pow(10,a)*i,s=Math.round(e/u),l=Math.round(t/u),s*u<e&&++s,l*u>t&&--l),l<s&&.5<=n&&n<2?jp(e,t,n*2):[s,l,u]}function S0(e,t,n){if(t=+t,e=+e,n=+n,!(n>0))return[];if(e===t)return[e];const r=t<e,[a,o,i]=r?jp(t,e,n):jp(e,t,n);if(!(o>=a))return[];const s=o-a+1,l=new Array(s);if(r)if(i<0)for(let u=0;u<s;++u)l[u]=(o-u)/-i;else for(let u=0;u<s;++u)l[u]=(o-u)*i;else if(i<0)for(let u=0;u<s;++u)l[u]=(a+u)/-i;else for(let u=0;u<s;++u)l[u]=(a+u)*i;return l}function P0(e,t,n){return t=+t,e=+e,n=+n,jp(e,t,n)[2]}function O0(e,t,n){t=+t,e=+e,n=+n;const r=t<e,a=r?P0(t,e,n):P0(e,t,n);return(r?-1:1)*(a<0?1/-a:a)}function o3(e,t){let n;for(const r of e)r!=null&&(n<r||n===void 0&&r>=r)&&(n=r);return n}function i3(e,t){let n;for(const r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function h7(e,t,n=0,r=1/0,a){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(a=a===void 0?m7:FW(a);r>n;){if(r-n>600){const l=r-n+1,u=t-n+1,p=Math.log(l),c=.5*Math.exp(2*p/3),f=.5*Math.sqrt(p*c*(l-c)/l)*(u-l/2<0?-1:1),d=Math.max(n,Math.floor(t-u*c/l+f)),h=Math.min(r,Math.floor(t+(l-u)*c/l+f));h7(e,t,d,h,a)}const o=e[t];let i=n,s=r;for(Ds(e,n,t),a(e[r],o)>0&&Ds(e,n,r);i<s;){for(Ds(e,i,s),++i,--s;a(e[i],o)<0;)++i;for(;a(e[s],o)>0;)--s}a(e[n],o)===0?Ds(e,n,s):(++s,Ds(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Ds(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function GW(e,t,n){if(e=Float64Array.from(MW(e)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return i3(e);if(t>=1)return o3(e);var r,a=(r-1)*t,o=Math.floor(a),i=o3(h7(e,o).subarray(0,o+1)),s=i3(e.subarray(o+1));return i+(s-i)*(a-o)}}function UW(e,t,n=d7){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,o=Math.floor(a),i=+n(e[o],o,e),s=+n(e[o+1],o+1,e);return i+(s-i)*(a-o)}}function WW(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,o=new Array(a);++r<a;)o[r]=e+r*n;return o}function Sn(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function Wr(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const k0=Symbol("implicit");function ag(){var e=new r3,t=[],n=[],r=k0;function a(o){let i=e.get(o);if(i===void 0){if(r!==k0)return r;e.set(o,i=t.push(o)-1)}return n[i%n.length]}return a.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new r3;for(const i of o)e.has(i)||e.set(i,t.push(i)-1);return a},a.range=function(o){return arguments.length?(n=Array.from(o),a):n.slice()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return ag(t,n).unknown(r)},Sn.apply(a,arguments),a}function Ll(){var e=ag().unknown(void 0),t=e.domain,n=e.range,r=0,a=1,o,i,s=!1,l=0,u=0,p=.5;delete e.unknown;function c(){var f=t().length,d=a<r,h=d?a:r,m=d?r:a;o=(m-h)/Math.max(1,f-l+u*2),s&&(o=Math.floor(o)),h+=(m-h-o*(f-l))*p,i=o*(1-l),s&&(h=Math.round(h),i=Math.round(i));var g=WW(f).map(function(v){return h+o*v});return n(d?g.reverse():g)}return e.domain=function(f){return arguments.length?(t(f),c()):t()},e.range=function(f){return arguments.length?([r,a]=f,r=+r,a=+a,c()):[r,a]},e.rangeRound=function(f){return[r,a]=f,r=+r,a=+a,s=!0,c()},e.bandwidth=function(){return i},e.step=function(){return o},e.round=function(f){return arguments.length?(s=!!f,c()):s},e.padding=function(f){return arguments.length?(l=Math.min(1,u=+f),c()):l},e.paddingInner=function(f){return arguments.length?(l=Math.min(1,f),c()):l},e.paddingOuter=function(f){return arguments.length?(u=+f,c()):u},e.align=function(f){return arguments.length?(p=Math.max(0,Math.min(1,f)),c()):p},e.copy=function(){return Ll(t(),[r,a]).round(s).paddingInner(l).paddingOuter(u).align(p)},Sn.apply(c(),arguments)}function v7(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return v7(t())},e}function sl(){return v7(Ll.apply(null,arguments).paddingInner(1))}function og(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function y7(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function _u(){}var Fl=.7,$p=1/Fl,pi="\\s*([+-]?\\d+)\\s*",zl="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",cr="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",qW=/^#([0-9a-f]{3,8})$/,VW=new RegExp(`^rgb\\(${pi},${pi},${pi}\\)$`),KW=new RegExp(`^rgb\\(${cr},${cr},${cr}\\)$`),XW=new RegExp(`^rgba\\(${pi},${pi},${pi},${zl}\\)$`),YW=new RegExp(`^rgba\\(${cr},${cr},${cr},${zl}\\)$`),QW=new RegExp(`^hsl\\(${zl},${cr},${cr}\\)$`),ZW=new RegExp(`^hsla\\(${zl},${cr},${cr},${zl}\\)$`),s3={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};og(_u,Bl,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:l3,formatHex:l3,formatHex8:JW,formatHsl:eq,formatRgb:u3,toString:u3});function l3(){return this.rgb().formatHex()}function JW(){return this.rgb().formatHex8()}function eq(){return g7(this).formatHsl()}function u3(){return this.rgb().formatRgb()}function Bl(e){var t,n;return e=(e+"").trim().toLowerCase(),(t=qW.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?c3(t):n===3?new Ht(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?lc(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?lc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=VW.exec(e))?new Ht(t[1],t[2],t[3],1):(t=KW.exec(e))?new Ht(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=XW.exec(e))?lc(t[1],t[2],t[3],t[4]):(t=YW.exec(e))?lc(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=QW.exec(e))?d3(t[1],t[2]/100,t[3]/100,1):(t=ZW.exec(e))?d3(t[1],t[2]/100,t[3]/100,t[4]):s3.hasOwnProperty(e)?c3(s3[e]):e==="transparent"?new Ht(NaN,NaN,NaN,0):null}function c3(e){return new Ht(e>>16&255,e>>8&255,e&255,1)}function lc(e,t,n,r){return r<=0&&(e=t=n=NaN),new Ht(e,t,n,r)}function tq(e){return e instanceof _u||(e=Bl(e)),e?(e=e.rgb(),new Ht(e.r,e.g,e.b,e.opacity)):new Ht}function C0(e,t,n,r){return arguments.length===1?tq(e):new Ht(e,t,n,r??1)}function Ht(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}og(Ht,C0,y7(_u,{brighter(e){return e=e==null?$p:Math.pow($p,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Fl:Math.pow(Fl,e),new Ht(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ht(lo(this.r),lo(this.g),lo(this.b),Np(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:p3,formatHex:p3,formatHex8:nq,formatRgb:f3,toString:f3}));function p3(){return`#${Ya(this.r)}${Ya(this.g)}${Ya(this.b)}`}function nq(){return`#${Ya(this.r)}${Ya(this.g)}${Ya(this.b)}${Ya((isNaN(this.opacity)?1:this.opacity)*255)}`}function f3(){const e=Np(this.opacity);return`${e===1?"rgb(":"rgba("}${lo(this.r)}, ${lo(this.g)}, ${lo(this.b)}${e===1?")":`, ${e})`}`}function Np(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function lo(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Ya(e){return e=lo(e),(e<16?"0":"")+e.toString(16)}function d3(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Rn(e,t,n,r)}function g7(e){if(e instanceof Rn)return new Rn(e.h,e.s,e.l,e.opacity);if(e instanceof _u||(e=Bl(e)),!e)return new Rn;if(e instanceof Rn)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,s=o-a,l=(o+a)/2;return s?(t===o?i=(n-r)/s+(n<r)*6:n===o?i=(r-t)/s+2:i=(t-n)/s+4,s/=l<.5?o+a:2-o-a,i*=60):s=l>0&&l<1?0:i,new Rn(i,s,l,e.opacity)}function rq(e,t,n,r){return arguments.length===1?g7(e):new Rn(e,t,n,r??1)}function Rn(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}og(Rn,rq,y7(_u,{brighter(e){return e=e==null?$p:Math.pow($p,e),new Rn(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Fl:Math.pow(Fl,e),new Rn(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new Ht(Am(e>=240?e-240:e+120,a,r),Am(e,a,r),Am(e<120?e+240:e-120,a,r),this.opacity)},clamp(){return new Rn(m3(this.h),uc(this.s),uc(this.l),Np(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Np(this.opacity);return`${e===1?"hsl(":"hsla("}${m3(this.h)}, ${uc(this.s)*100}%, ${uc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function m3(e){return e=(e||0)%360,e<0?e+360:e}function uc(e){return Math.max(0,Math.min(1,e||0))}function Am(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const ig=e=>()=>e;function aq(e,t){return function(n){return e+n*t}}function oq(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function iq(e){return(e=+e)==1?x7:function(t,n){return n-t?oq(t,n,e):ig(isNaN(t)?n:t)}}function x7(e,t){var n=t-e;return n?aq(e,n):ig(isNaN(e)?t:e)}const h3=function e(t){var n=iq(t);function r(a,o){var i=n((a=C0(a)).r,(o=C0(o)).r),s=n(a.g,o.g),l=n(a.b,o.b),u=x7(a.opacity,o.opacity);return function(p){return a.r=i(p),a.g=s(p),a.b=l(p),a.opacity=u(p),a+""}}return r.gamma=e,r}(1);function sq(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),a;return function(o){for(a=0;a<n;++a)r[a]=e[a]*(1-o)+t[a]*o;return r}}function lq(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function uq(e,t){var n=t?t.length:0,r=e?Math.min(n,e.length):0,a=new Array(r),o=new Array(n),i;for(i=0;i<r;++i)a[i]=bs(e[i],t[i]);for(;i<n;++i)o[i]=t[i];return function(s){for(i=0;i<r;++i)o[i]=a[i](s);return o}}function cq(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function Mp(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function pq(e,t){var n={},r={},a;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(a in t)a in e?n[a]=bs(e[a],t[a]):r[a]=t[a];return function(o){for(a in n)r[a]=n[a](o);return r}}var _0=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Em=new RegExp(_0.source,"g");function fq(e){return function(){return e}}function dq(e){return function(t){return e(t)+""}}function mq(e,t){var n=_0.lastIndex=Em.lastIndex=0,r,a,o,i=-1,s=[],l=[];for(e=e+"",t=t+"";(r=_0.exec(e))&&(a=Em.exec(t));)(o=a.index)>n&&(o=t.slice(n,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(a=a[0])?s[i]?s[i]+=a:s[++i]=a:(s[++i]=null,l.push({i,x:Mp(r,a)})),n=Em.lastIndex;return n<t.length&&(o=t.slice(n),s[i]?s[i]+=o:s[++i]=o),s.length<2?l[0]?dq(l[0].x):fq(t):(t=l.length,function(u){for(var p=0,c;p<t;++p)s[(c=l[p]).i]=c.x(u);return s.join("")})}function bs(e,t){var n=typeof t,r;return t==null||n==="boolean"?ig(t):(n==="number"?Mp:n==="string"?(r=Bl(t))?(t=r,h3):mq:t instanceof Bl?h3:t instanceof Date?cq:lq(t)?sq:Array.isArray(t)?uq:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?pq:Mp)(e,t)}function sg(e,t){return e=+e,t=+t,function(n){return Math.round(e*(1-n)+t*n)}}function hq(e,t){t===void 0&&(t=e,e=bs);for(var n=0,r=t.length-1,a=t[0],o=new Array(r<0?0:r);n<r;)o[n]=e(a,a=t[++n]);return function(i){var s=Math.max(0,Math.min(r-1,Math.floor(i*=r)));return o[s](i-s)}}function vq(e){return function(){return e}}function Rp(e){return+e}var v3=[0,1];function Nt(e){return e}function A0(e,t){return(t-=e=+e)?function(n){return(n-e)/t}:vq(isNaN(t)?NaN:.5)}function yq(e,t){var n;return e>t&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function gq(e,t,n){var r=e[0],a=e[1],o=t[0],i=t[1];return a<r?(r=A0(a,r),o=n(i,o)):(r=A0(r,a),o=n(o,i)),function(s){return o(r(s))}}function xq(e,t,n){var r=Math.min(e.length,t.length)-1,a=new Array(r),o=new Array(r),i=-1;for(e[r]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++i<r;)a[i]=A0(e[i],e[i+1]),o[i]=n(t[i],t[i+1]);return function(s){var l=Cu(e,s,1,r)-1;return o[l](a[l](s))}}function Au(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function ud(){var e=v3,t=v3,n=bs,r,a,o,i=Nt,s,l,u;function p(){var f=Math.min(e.length,t.length);return i!==Nt&&(i=yq(e[0],e[f-1])),s=f>2?xq:gq,l=u=null,c}function c(f){return f==null||isNaN(f=+f)?o:(l||(l=s(e.map(r),t,n)))(r(i(f)))}return c.invert=function(f){return i(a((u||(u=s(t,e.map(r),Mp)))(f)))},c.domain=function(f){return arguments.length?(e=Array.from(f,Rp),p()):e.slice()},c.range=function(f){return arguments.length?(t=Array.from(f),p()):t.slice()},c.rangeRound=function(f){return t=Array.from(f),n=sg,p()},c.clamp=function(f){return arguments.length?(i=f?!0:Nt,p()):i!==Nt},c.interpolate=function(f){return arguments.length?(n=f,p()):n},c.unknown=function(f){return arguments.length?(o=f,c):o},function(f,d){return r=f,a=d,p()}}function lg(){return ud()(Nt,Nt)}function wq(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Ip(e,t){if((n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"))<0)return null;var n,r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function Ii(e){return e=Ip(Math.abs(e)),e?e[1]:NaN}function bq(e,t){return function(n,r){for(var a=n.length,o=[],i=0,s=e[0],l=0;a>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(n.substring(a-=s,a+s)),!((l+=s+1)>r));)s=e[i=(i+1)%e.length];return o.reverse().join(t)}}function Sq(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var Pq=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Hl(e){if(!(t=Pq.exec(e)))throw new Error("invalid format: "+e);var t;return new ug({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Hl.prototype=ug.prototype;function ug(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}ug.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function Oq(e){e:for(var t=e.length,n=1,r=-1,a;n<t;++n)switch(e[n]){case".":r=a=n;break;case"0":r===0&&(r=n),a=n;break;default:if(!+e[n])break e;r>0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(a+1):e}var w7;function kq(e,t){var n=Ip(e,t);if(!n)return e+"";var r=n[0],a=n[1],o=a-(w7=Math.max(-8,Math.min(8,Math.floor(a/3)))*3)+1,i=r.length;return o===i?r:o>i?r+new Array(o-i+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Ip(e,Math.max(0,t+o-1))[0]}function y3(e,t){var n=Ip(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}const g3={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:wq,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>y3(e*100,t),r:y3,s:kq,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function x3(e){return e}var w3=Array.prototype.map,b3=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Cq(e){var t=e.grouping===void 0||e.thousands===void 0?x3:bq(w3.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",a=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?x3:Sq(w3.call(e.numerals,String)),i=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",l=e.nan===void 0?"NaN":e.nan+"";function u(c){c=Hl(c);var f=c.fill,d=c.align,h=c.sign,m=c.symbol,g=c.zero,v=c.width,y=c.comma,x=c.precision,S=c.trim,w=c.type;w==="n"?(y=!0,w="g"):g3[w]||(x===void 0&&(x=12),S=!0,w="g"),(g||f==="0"&&d==="=")&&(g=!0,f="0",d="=");var P=m==="$"?n:m==="#"&&/[boxX]/.test(w)?"0"+w.toLowerCase():"",O=m==="$"?r:/[%p]/.test(w)?i:"",C=g3[w],_=/[defgprs%]/.test(w);x=x===void 0?6:/[gprs]/.test(w)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function T(A){var j=P,N=O,M,I,R;if(w==="c")N=C(A)+N,A="";else{A=+A;var L=A<0||1/A<0;if(A=isNaN(A)?l:C(Math.abs(A),x),S&&(A=Oq(A)),L&&+A==0&&h!=="+"&&(L=!1),j=(L?h==="("?h:s:h==="-"||h==="("?"":h)+j,N=(w==="s"?b3[8+w7/3]:"")+N+(L&&h==="("?")":""),_){for(M=-1,I=A.length;++M<I;)if(R=A.charCodeAt(M),48>R||R>57){N=(R===46?a+A.slice(M+1):A.slice(M))+N,A=A.slice(0,M);break}}}y&&!g&&(A=t(A,1/0));var $=j.length+A.length+N.length,D=$<v?new Array(v-$+1).join(f):"";switch(y&&g&&(A=t(D+A,D.length?v-N.length:1/0),D=""),d){case"<":A=j+A+N+D;break;case"=":A=j+D+A+N;break;case"^":A=D.slice(0,$=D.length>>1)+j+A+N+D.slice($);break;default:A=D+j+A+N;break}return o(A)}return T.toString=function(){return c+""},T}function p(c,f){var d=u((c=Hl(c),c.type="f",c)),h=Math.max(-8,Math.min(8,Math.floor(Ii(f)/3)))*3,m=Math.pow(10,-h),g=b3[8+h/3];return function(v){return d(m*v)+g}}return{format:u,formatPrefix:p}}var cc,cg,b7;_q({thousands:",",grouping:[3],currency:["$",""]});function _q(e){return cc=Cq(e),cg=cc.format,b7=cc.formatPrefix,cc}function Aq(e){return Math.max(0,-Ii(Math.abs(e)))}function Eq(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Ii(t)/3)))*3-Ii(Math.abs(e)))}function Tq(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Ii(t)-Ii(e))+1}function S7(e,t,n,r){var a=O0(e,t,n),o;switch(r=Hl(r??",f"),r.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(o=Eq(a,i))&&(r.precision=o),b7(r,i)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=Tq(a,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=Aq(a))&&(r.precision=o-(r.type==="%")*2);break}}return cg(r)}function Ma(e){var t=e.domain;return e.ticks=function(n){var r=t();return S0(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var a=t();return S7(a[0],a[a.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),a=0,o=r.length-1,i=r[a],s=r[o],l,u,p=10;for(s<i&&(u=i,i=s,s=u,u=a,a=o,o=u);p-- >0;){if(u=P0(i,s,n),u===l)return r[a]=i,r[o]=s,t(r);if(u>0)i=Math.floor(i/u)*u,s=Math.ceil(s/u)*u;else if(u<0)i=Math.ceil(i*u)/u,s=Math.floor(s*u)/u;else break;l=u}return e},e}function Dp(){var e=lg();return e.copy=function(){return Au(e,Dp())},Sn.apply(e,arguments),Ma(e)}function P7(e){var t;function n(r){return r==null||isNaN(r=+r)?t:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(e=Array.from(r,Rp),n):e.slice()},n.unknown=function(r){return arguments.length?(t=r,n):t},n.copy=function(){return P7(e).unknown(t)},e=arguments.length?Array.from(e,Rp):[0,1],Ma(n)}function O7(e,t){e=e.slice();var n=0,r=e.length-1,a=e[n],o=e[r],i;return o<a&&(i=n,n=r,r=i,i=a,a=o,o=i),e[n]=t.floor(a),e[r]=t.ceil(o),e}function S3(e){return Math.log(e)}function P3(e){return Math.exp(e)}function jq(e){return-Math.log(-e)}function $q(e){return-Math.exp(-e)}function Nq(e){return isFinite(e)?+("1e"+e):e<0?0:e}function Mq(e){return e===10?Nq:e===Math.E?Math.exp:t=>Math.pow(e,t)}function Rq(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function O3(e){return(t,n)=>-e(-t,n)}function pg(e){const t=e(S3,P3),n=t.domain;let r=10,a,o;function i(){return a=Rq(r),o=Mq(r),n()[0]<0?(a=O3(a),o=O3(o),e(jq,$q)):e(S3,P3),t}return t.base=function(s){return arguments.length?(r=+s,i()):r},t.domain=function(s){return arguments.length?(n(s),i()):n()},t.ticks=s=>{const l=n();let u=l[0],p=l[l.length-1];const c=p<u;c&&([u,p]=[p,u]);let f=a(u),d=a(p),h,m;const g=s==null?10:+s;let v=[];if(!(r%1)&&d-f<g){if(f=Math.floor(f),d=Math.ceil(d),u>0){for(;f<=d;++f)for(h=1;h<r;++h)if(m=f<0?h/o(-f):h*o(f),!(m<u)){if(m>p)break;v.push(m)}}else for(;f<=d;++f)for(h=r-1;h>=1;--h)if(m=f>0?h/o(-f):h*o(f),!(m<u)){if(m>p)break;v.push(m)}v.length*2<g&&(v=S0(u,p,g))}else v=S0(f,d,Math.min(d-f,g)).map(o);return c?v.reverse():v},t.tickFormat=(s,l)=>{if(s==null&&(s=10),l==null&&(l=r===10?"s":","),typeof l!="function"&&(!(r%1)&&(l=Hl(l)).precision==null&&(l.trim=!0),l=cg(l)),s===1/0)return l;const u=Math.max(1,r*s/t.ticks().length);return p=>{let c=p/o(Math.round(a(p)));return c*r<r-.5&&(c*=r),c<=u?l(p):""}},t.nice=()=>n(O7(n(),{floor:s=>o(Math.floor(a(s))),ceil:s=>o(Math.ceil(a(s)))})),t}function k7(){const e=pg(ud()).domain([1,10]);return e.copy=()=>Au(e,k7()).base(e.base()),Sn.apply(e,arguments),e}function k3(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function C3(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function fg(e){var t=1,n=e(k3(t),C3(t));return n.constant=function(r){return arguments.length?e(k3(t=+r),C3(t)):t},Ma(n)}function C7(){var e=fg(ud());return e.copy=function(){return Au(e,C7()).constant(e.constant())},Sn.apply(e,arguments)}function _3(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Iq(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function Dq(e){return e<0?-e*e:e*e}function dg(e){var t=e(Nt,Nt),n=1;function r(){return n===1?e(Nt,Nt):n===.5?e(Iq,Dq):e(_3(n),_3(1/n))}return t.exponent=function(a){return arguments.length?(n=+a,r()):n},Ma(t)}function mg(){var e=dg(ud());return e.copy=function(){return Au(e,mg()).exponent(e.exponent())},Sn.apply(e,arguments),e}function Lq(){return mg.apply(null,arguments).exponent(.5)}function A3(e){return Math.sign(e)*e*e}function Fq(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function _7(){var e=lg(),t=[0,1],n=!1,r;function a(o){var i=Fq(e(o));return isNaN(i)?r:n?Math.round(i):i}return a.invert=function(o){return e.invert(A3(o))},a.domain=function(o){return arguments.length?(e.domain(o),a):e.domain()},a.range=function(o){return arguments.length?(e.range((t=Array.from(o,Rp)).map(A3)),a):t.slice()},a.rangeRound=function(o){return a.range(o).round(!0)},a.round=function(o){return arguments.length?(n=!!o,a):n},a.clamp=function(o){return arguments.length?(e.clamp(o),a):e.clamp()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return _7(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Sn.apply(a,arguments),Ma(a)}function A7(){var e=[],t=[],n=[],r;function a(){var i=0,s=Math.max(1,t.length);for(n=new Array(s-1);++i<s;)n[i-1]=UW(e,i/s);return o}function o(i){return i==null||isNaN(i=+i)?r:t[Cu(n,i)]}return o.invertExtent=function(i){var s=t.indexOf(i);return s<0?[NaN,NaN]:[s>0?n[s-1]:e[0],s<n.length?n[s]:e[e.length-1]]},o.domain=function(i){if(!arguments.length)return e.slice();e=[];for(let s of i)s!=null&&!isNaN(s=+s)&&e.push(s);return e.sort(ba),a()},o.range=function(i){return arguments.length?(t=Array.from(i),a()):t.slice()},o.unknown=function(i){return arguments.length?(r=i,o):r},o.quantiles=function(){return n.slice()},o.copy=function(){return A7().domain(e).range(t).unknown(r)},Sn.apply(o,arguments)}function E7(){var e=0,t=1,n=1,r=[.5],a=[0,1],o;function i(l){return l!=null&&l<=l?a[Cu(r,l,0,n)]:o}function s(){var l=-1;for(r=new Array(n);++l<n;)r[l]=((l+1)*t-(l-n)*e)/(n+1);return i}return i.domain=function(l){return arguments.length?([e,t]=l,e=+e,t=+t,s()):[e,t]},i.range=function(l){return arguments.length?(n=(a=Array.from(l)).length-1,s()):a.slice()},i.invertExtent=function(l){var u=a.indexOf(l);return u<0?[NaN,NaN]:u<1?[e,r[0]]:u>=n?[r[n-1],t]:[r[u-1],r[u]]},i.unknown=function(l){return arguments.length&&(o=l),i},i.thresholds=function(){return r.slice()},i.copy=function(){return E7().domain([e,t]).range(a).unknown(o)},Sn.apply(Ma(i),arguments)}function T7(){var e=[.5],t=[0,1],n,r=1;function a(o){return o!=null&&o<=o?t[Cu(e,o,0,r)]:n}return a.domain=function(o){return arguments.length?(e=Array.from(o),r=Math.min(e.length,t.length-1),a):e.slice()},a.range=function(o){return arguments.length?(t=Array.from(o),r=Math.min(e.length,t.length-1),a):t.slice()},a.invertExtent=function(o){var i=t.indexOf(o);return[e[i-1],e[i]]},a.unknown=function(o){return arguments.length?(n=o,a):n},a.copy=function(){return T7().domain(e).range(t).unknown(n)},Sn.apply(a,arguments)}const Tm=new Date,jm=new Date;function it(e,t,n,r){function a(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return a.floor=o=>(e(o=new Date(+o)),o),a.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),a.round=o=>{const i=a(o),s=a.ceil(o);return o-i<s-o?i:s},a.offset=(o,i)=>(t(o=new Date(+o),i==null?1:Math.floor(i)),o),a.range=(o,i,s)=>{const l=[];if(o=a.ceil(o),s=s==null?1:Math.floor(s),!(o<i)||!(s>0))return l;let u;do l.push(u=new Date(+o)),t(o,s),e(o);while(u<o&&o<i);return l},a.filter=o=>it(i=>{if(i>=i)for(;e(i),!o(i);)i.setTime(i-1)},(i,s)=>{if(i>=i)if(s<0)for(;++s<=0;)for(;t(i,-1),!o(i););else for(;--s>=0;)for(;t(i,1),!o(i););}),n&&(a.count=(o,i)=>(Tm.setTime(+o),jm.setTime(+i),e(Tm),e(jm),Math.floor(n(Tm,jm))),a.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?a.filter(r?i=>r(i)%o===0:i=>a.count(0,i)%o===0):a)),a}const Lp=it(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Lp.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?it(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Lp);Lp.range;const kr=1e3,mn=kr*60,Cr=mn*60,Fr=Cr*24,hg=Fr*7,E3=Fr*30,$m=Fr*365,Qa=it(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*kr)},(e,t)=>(t-e)/kr,e=>e.getUTCSeconds());Qa.range;const vg=it(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*kr)},(e,t)=>{e.setTime(+e+t*mn)},(e,t)=>(t-e)/mn,e=>e.getMinutes());vg.range;const yg=it(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*mn)},(e,t)=>(t-e)/mn,e=>e.getUTCMinutes());yg.range;const gg=it(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*kr-e.getMinutes()*mn)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getHours());gg.range;const xg=it(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getUTCHours());xg.range;const Eu=it(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*mn)/Fr,e=>e.getDate()-1);Eu.range;const cd=it(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Fr,e=>e.getUTCDate()-1);cd.range;const j7=it(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Fr,e=>Math.floor(e/Fr));j7.range;function Ao(e){return it(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*mn)/hg)}const pd=Ao(0),Fp=Ao(1),zq=Ao(2),Bq=Ao(3),Di=Ao(4),Hq=Ao(5),Gq=Ao(6);pd.range;Fp.range;zq.range;Bq.range;Di.range;Hq.range;Gq.range;function Eo(e){return it(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/hg)}const fd=Eo(0),zp=Eo(1),Uq=Eo(2),Wq=Eo(3),Li=Eo(4),qq=Eo(5),Vq=Eo(6);fd.range;zp.range;Uq.range;Wq.range;Li.range;qq.range;Vq.range;const wg=it(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());wg.range;const bg=it(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());bg.range;const zr=it(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());zr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:it(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});zr.range;const Br=it(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Br.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:it(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});Br.range;function $7(e,t,n,r,a,o){const i=[[Qa,1,kr],[Qa,5,5*kr],[Qa,15,15*kr],[Qa,30,30*kr],[o,1,mn],[o,5,5*mn],[o,15,15*mn],[o,30,30*mn],[a,1,Cr],[a,3,3*Cr],[a,6,6*Cr],[a,12,12*Cr],[r,1,Fr],[r,2,2*Fr],[n,1,hg],[t,1,E3],[t,3,3*E3],[e,1,$m]];function s(u,p,c){const f=p<u;f&&([u,p]=[p,u]);const d=c&&typeof c.range=="function"?c:l(u,p,c),h=d?d.range(u,+p+1):[];return f?h.reverse():h}function l(u,p,c){const f=Math.abs(p-u)/c,d=rg(([,,g])=>g).right(i,f);if(d===i.length)return e.every(O0(u/$m,p/$m,c));if(d===0)return Lp.every(Math.max(O0(u,p,c),1));const[h,m]=i[f/i[d-1][2]<i[d][2]/f?d-1:d];return h.every(m)}return[s,l]}const[Kq,Xq]=$7(Br,bg,fd,j7,xg,yg),[Yq,Qq]=$7(zr,wg,pd,Eu,gg,vg);function Nm(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function Mm(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function Ls(e,t,n){return{y:e,m:t,d:n,H:0,M:0,S:0,L:0}}function Zq(e){var t=e.dateTime,n=e.date,r=e.time,a=e.periods,o=e.days,i=e.shortDays,s=e.months,l=e.shortMonths,u=Fs(a),p=zs(a),c=Fs(o),f=zs(o),d=Fs(i),h=zs(i),m=Fs(s),g=zs(s),v=Fs(l),y=zs(l),x={a:L,A:$,b:D,B:H,c:null,d:R3,e:R3,f:bV,g:jV,G:NV,H:gV,I:xV,j:wV,L:N7,m:SV,M:PV,p:W,q:G,Q:L3,s:F3,S:OV,u:kV,U:CV,V:_V,w:AV,W:EV,x:null,X:null,y:TV,Y:$V,Z:MV,"%":D3},S={a:Z,A:re,b:ve,B:be,c:null,d:I3,e:I3,f:LV,g:KV,G:YV,H:RV,I:IV,j:DV,L:R7,m:FV,M:zV,p:J,q:se,Q:L3,s:F3,S:BV,u:HV,U:GV,V:UV,w:WV,W:qV,x:null,X:null,y:VV,Y:XV,Z:QV,"%":D3},w={a:T,A,b:j,B:N,c:M,d:N3,e:N3,f:mV,g:$3,G:j3,H:M3,I:M3,j:cV,L:dV,m:uV,M:pV,p:_,q:lV,Q:vV,s:yV,S:fV,u:rV,U:aV,V:oV,w:nV,W:iV,x:I,X:R,y:$3,Y:j3,Z:sV,"%":hV};x.x=P(n,x),x.X=P(r,x),x.c=P(t,x),S.x=P(n,S),S.X=P(r,S),S.c=P(t,S);function P(q,K){return function(X){var F=[],pe=-1,te=0,Ne=q.length,Me,Qe,Vn;for(X instanceof Date||(X=new Date(+X));++pe<Ne;)q.charCodeAt(pe)===37&&(F.push(q.slice(te,pe)),(Qe=T3[Me=q.charAt(++pe)])!=null?Me=q.charAt(++pe):Qe=Me==="e"?" ":"0",(Vn=K[Me])&&(Me=Vn(X,Qe)),F.push(Me),te=pe+1);return F.push(q.slice(te,pe)),F.join("")}}function O(q,K){return function(X){var F=Ls(1900,void 0,1),pe=C(F,q,X+="",0),te,Ne;if(pe!=X.length)return null;if("Q"in F)return new Date(F.Q);if("s"in F)return new Date(F.s*1e3+("L"in F?F.L:0));if(K&&!("Z"in F)&&(F.Z=0),"p"in F&&(F.H=F.H%12+F.p*12),F.m===void 0&&(F.m="q"in F?F.q:0),"V"in F){if(F.V<1||F.V>53)return null;"w"in F||(F.w=1),"Z"in F?(te=Mm(Ls(F.y,0,1)),Ne=te.getUTCDay(),te=Ne>4||Ne===0?zp.ceil(te):zp(te),te=cd.offset(te,(F.V-1)*7),F.y=te.getUTCFullYear(),F.m=te.getUTCMonth(),F.d=te.getUTCDate()+(F.w+6)%7):(te=Nm(Ls(F.y,0,1)),Ne=te.getDay(),te=Ne>4||Ne===0?Fp.ceil(te):Fp(te),te=Eu.offset(te,(F.V-1)*7),F.y=te.getFullYear(),F.m=te.getMonth(),F.d=te.getDate()+(F.w+6)%7)}else("W"in F||"U"in F)&&("w"in F||(F.w="u"in F?F.u%7:"W"in F?1:0),Ne="Z"in F?Mm(Ls(F.y,0,1)).getUTCDay():Nm(Ls(F.y,0,1)).getDay(),F.m=0,F.d="W"in F?(F.w+6)%7+F.W*7-(Ne+5)%7:F.w+F.U*7-(Ne+6)%7);return"Z"in F?(F.H+=F.Z/100|0,F.M+=F.Z%100,Mm(F)):Nm(F)}}function C(q,K,X,F){for(var pe=0,te=K.length,Ne=X.length,Me,Qe;pe<te;){if(F>=Ne)return-1;if(Me=K.charCodeAt(pe++),Me===37){if(Me=K.charAt(pe++),Qe=w[Me in T3?K.charAt(pe++):Me],!Qe||(F=Qe(q,X,F))<0)return-1}else if(Me!=X.charCodeAt(F++))return-1}return F}function _(q,K,X){var F=u.exec(K.slice(X));return F?(q.p=p.get(F[0].toLowerCase()),X+F[0].length):-1}function T(q,K,X){var F=d.exec(K.slice(X));return F?(q.w=h.get(F[0].toLowerCase()),X+F[0].length):-1}function A(q,K,X){var F=c.exec(K.slice(X));return F?(q.w=f.get(F[0].toLowerCase()),X+F[0].length):-1}function j(q,K,X){var F=v.exec(K.slice(X));return F?(q.m=y.get(F[0].toLowerCase()),X+F[0].length):-1}function N(q,K,X){var F=m.exec(K.slice(X));return F?(q.m=g.get(F[0].toLowerCase()),X+F[0].length):-1}function M(q,K,X){return C(q,t,K,X)}function I(q,K,X){return C(q,n,K,X)}function R(q,K,X){return C(q,r,K,X)}function L(q){return i[q.getDay()]}function $(q){return o[q.getDay()]}function D(q){return l[q.getMonth()]}function H(q){return s[q.getMonth()]}function W(q){return a[+(q.getHours()>=12)]}function G(q){return 1+~~(q.getMonth()/3)}function Z(q){return i[q.getUTCDay()]}function re(q){return o[q.getUTCDay()]}function ve(q){return l[q.getUTCMonth()]}function be(q){return s[q.getUTCMonth()]}function J(q){return a[+(q.getUTCHours()>=12)]}function se(q){return 1+~~(q.getUTCMonth()/3)}return{format:function(q){var K=P(q+="",x);return K.toString=function(){return q},K},parse:function(q){var K=O(q+="",!1);return K.toString=function(){return q},K},utcFormat:function(q){var K=P(q+="",S);return K.toString=function(){return q},K},utcParse:function(q){var K=O(q+="",!0);return K.toString=function(){return q},K}}}var T3={"-":"",_:" ",0:"0"},ct=/^\s*\d+/,Jq=/^%/,eV=/[\\^$*+?|[\]().{}]/g;function he(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",o=a.length;return r+(o<n?new Array(n-o+1).join(t)+a:a)}function tV(e){return e.replace(eV,"\\$&")}function Fs(e){return new RegExp("^(?:"+e.map(tV).join("|")+")","i")}function zs(e){return new Map(e.map((t,n)=>[t.toLowerCase(),n]))}function nV(e,t,n){var r=ct.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function rV(e,t,n){var r=ct.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function aV(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function oV(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function iV(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function j3(e,t,n){var r=ct.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function $3(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function sV(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function lV(e,t,n){var r=ct.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function uV(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function N3(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function cV(e,t,n){var r=ct.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function M3(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function pV(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function fV(e,t,n){var r=ct.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function dV(e,t,n){var r=ct.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function mV(e,t,n){var r=ct.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function hV(e,t,n){var r=Jq.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function vV(e,t,n){var r=ct.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function yV(e,t,n){var r=ct.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function R3(e,t){return he(e.getDate(),t,2)}function gV(e,t){return he(e.getHours(),t,2)}function xV(e,t){return he(e.getHours()%12||12,t,2)}function wV(e,t){return he(1+Eu.count(zr(e),e),t,3)}function N7(e,t){return he(e.getMilliseconds(),t,3)}function bV(e,t){return N7(e,t)+"000"}function SV(e,t){return he(e.getMonth()+1,t,2)}function PV(e,t){return he(e.getMinutes(),t,2)}function OV(e,t){return he(e.getSeconds(),t,2)}function kV(e){var t=e.getDay();return t===0?7:t}function CV(e,t){return he(pd.count(zr(e)-1,e),t,2)}function M7(e){var t=e.getDay();return t>=4||t===0?Di(e):Di.ceil(e)}function _V(e,t){return e=M7(e),he(Di.count(zr(e),e)+(zr(e).getDay()===4),t,2)}function AV(e){return e.getDay()}function EV(e,t){return he(Fp.count(zr(e)-1,e),t,2)}function TV(e,t){return he(e.getFullYear()%100,t,2)}function jV(e,t){return e=M7(e),he(e.getFullYear()%100,t,2)}function $V(e,t){return he(e.getFullYear()%1e4,t,4)}function NV(e,t){var n=e.getDay();return e=n>=4||n===0?Di(e):Di.ceil(e),he(e.getFullYear()%1e4,t,4)}function MV(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+he(t/60|0,"0",2)+he(t%60,"0",2)}function I3(e,t){return he(e.getUTCDate(),t,2)}function RV(e,t){return he(e.getUTCHours(),t,2)}function IV(e,t){return he(e.getUTCHours()%12||12,t,2)}function DV(e,t){return he(1+cd.count(Br(e),e),t,3)}function R7(e,t){return he(e.getUTCMilliseconds(),t,3)}function LV(e,t){return R7(e,t)+"000"}function FV(e,t){return he(e.getUTCMonth()+1,t,2)}function zV(e,t){return he(e.getUTCMinutes(),t,2)}function BV(e,t){return he(e.getUTCSeconds(),t,2)}function HV(e){var t=e.getUTCDay();return t===0?7:t}function GV(e,t){return he(fd.count(Br(e)-1,e),t,2)}function I7(e){var t=e.getUTCDay();return t>=4||t===0?Li(e):Li.ceil(e)}function UV(e,t){return e=I7(e),he(Li.count(Br(e),e)+(Br(e).getUTCDay()===4),t,2)}function WV(e){return e.getUTCDay()}function qV(e,t){return he(zp.count(Br(e)-1,e),t,2)}function VV(e,t){return he(e.getUTCFullYear()%100,t,2)}function KV(e,t){return e=I7(e),he(e.getUTCFullYear()%100,t,2)}function XV(e,t){return he(e.getUTCFullYear()%1e4,t,4)}function YV(e,t){var n=e.getUTCDay();return e=n>=4||n===0?Li(e):Li.ceil(e),he(e.getUTCFullYear()%1e4,t,4)}function QV(){return"+0000"}function D3(){return"%"}function L3(e){return+e}function F3(e){return Math.floor(+e/1e3)}var Io,D7,L7;ZV({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function ZV(e){return Io=Zq(e),D7=Io.format,Io.parse,L7=Io.utcFormat,Io.utcParse,Io}function JV(e){return new Date(e)}function eK(e){return e instanceof Date?+e:+new Date(+e)}function Sg(e,t,n,r,a,o,i,s,l,u){var p=lg(),c=p.invert,f=p.domain,d=u(".%L"),h=u(":%S"),m=u("%I:%M"),g=u("%I %p"),v=u("%a %d"),y=u("%b %d"),x=u("%B"),S=u("%Y");function w(P){return(l(P)<P?d:s(P)<P?h:i(P)<P?m:o(P)<P?g:r(P)<P?a(P)<P?v:y:n(P)<P?x:S)(P)}return p.invert=function(P){return new Date(c(P))},p.domain=function(P){return arguments.length?f(Array.from(P,eK)):f().map(JV)},p.ticks=function(P){var O=f();return e(O[0],O[O.length-1],P??10)},p.tickFormat=function(P,O){return O==null?w:u(O)},p.nice=function(P){var O=f();return(!P||typeof P.range!="function")&&(P=t(O[0],O[O.length-1],P??10)),P?f(O7(O,P)):p},p.copy=function(){return Au(p,Sg(e,t,n,r,a,o,i,s,l,u))},p}function tK(){return Sn.apply(Sg(Yq,Qq,zr,wg,pd,Eu,gg,vg,Qa,D7).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function nK(){return Sn.apply(Sg(Kq,Xq,Br,bg,fd,cd,xg,yg,Qa,L7).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function dd(){var e=0,t=1,n,r,a,o,i=Nt,s=!1,l;function u(c){return c==null||isNaN(c=+c)?l:i(a===0?.5:(c=(o(c)-n)*a,s?Math.max(0,Math.min(1,c)):c))}u.domain=function(c){return arguments.length?([e,t]=c,n=o(e=+e),r=o(t=+t),a=n===r?0:1/(r-n),u):[e,t]},u.clamp=function(c){return arguments.length?(s=!!c,u):s},u.interpolator=function(c){return arguments.length?(i=c,u):i};function p(c){return function(f){var d,h;return arguments.length?([d,h]=f,i=c(d,h),u):[i(0),i(1)]}}return u.range=p(bs),u.rangeRound=p(sg),u.unknown=function(c){return arguments.length?(l=c,u):l},function(c){return o=c,n=c(e),r=c(t),a=n===r?0:1/(r-n),u}}function Ra(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function F7(){var e=Ma(dd()(Nt));return e.copy=function(){return Ra(e,F7())},Wr.apply(e,arguments)}function z7(){var e=pg(dd()).domain([1,10]);return e.copy=function(){return Ra(e,z7()).base(e.base())},Wr.apply(e,arguments)}function B7(){var e=fg(dd());return e.copy=function(){return Ra(e,B7()).constant(e.constant())},Wr.apply(e,arguments)}function Pg(){var e=dg(dd());return e.copy=function(){return Ra(e,Pg()).exponent(e.exponent())},Wr.apply(e,arguments)}function rK(){return Pg.apply(null,arguments).exponent(.5)}function H7(){var e=[],t=Nt;function n(r){if(r!=null&&!isNaN(r=+r))return t((Cu(e,r,1)-1)/(e.length-1))}return n.domain=function(r){if(!arguments.length)return e.slice();e=[];for(let a of r)a!=null&&!isNaN(a=+a)&&e.push(a);return e.sort(ba),n},n.interpolator=function(r){return arguments.length?(t=r,n):t},n.range=function(){return e.map((r,a)=>t(a/(e.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(a,o)=>GW(e,o/r))},n.copy=function(){return H7(t).domain(e)},Wr.apply(n,arguments)}function md(){var e=0,t=.5,n=1,r=1,a,o,i,s,l,u=Nt,p,c=!1,f;function d(m){return isNaN(m=+m)?f:(m=.5+((m=+p(m))-o)*(r*m<r*o?s:l),u(c?Math.max(0,Math.min(1,m)):m))}d.domain=function(m){return arguments.length?([e,t,n]=m,a=p(e=+e),o=p(t=+t),i=p(n=+n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d):[e,t,n]},d.clamp=function(m){return arguments.length?(c=!!m,d):c},d.interpolator=function(m){return arguments.length?(u=m,d):u};function h(m){return function(g){var v,y,x;return arguments.length?([v,y,x]=g,u=hq(m,[v,y,x]),d):[u(0),u(.5),u(1)]}}return d.range=h(bs),d.rangeRound=h(sg),d.unknown=function(m){return arguments.length?(f=m,d):f},function(m){return p=m,a=m(e),o=m(t),i=m(n),s=a===o?0:.5/(o-a),l=o===i?0:.5/(i-o),r=o<a?-1:1,d}}function G7(){var e=Ma(md()(Nt));return e.copy=function(){return Ra(e,G7())},Wr.apply(e,arguments)}function U7(){var e=pg(md()).domain([.1,1,10]);return e.copy=function(){return Ra(e,U7()).base(e.base())},Wr.apply(e,arguments)}function W7(){var e=fg(md());return e.copy=function(){return Ra(e,W7()).constant(e.constant())},Wr.apply(e,arguments)}function Og(){var e=dg(md());return e.copy=function(){return Ra(e,Og()).exponent(e.exponent())},Wr.apply(e,arguments)}function aK(){return Og.apply(null,arguments).exponent(.5)}const z3=Object.freeze(Object.defineProperty({__proto__:null,scaleBand:Ll,scaleDiverging:G7,scaleDivergingLog:U7,scaleDivergingPow:Og,scaleDivergingSqrt:aK,scaleDivergingSymlog:W7,scaleIdentity:P7,scaleImplicit:k0,scaleLinear:Dp,scaleLog:k7,scaleOrdinal:ag,scalePoint:sl,scalePow:mg,scaleQuantile:A7,scaleQuantize:E7,scaleRadial:_7,scaleSequential:F7,scaleSequentialLog:z7,scaleSequentialPow:Pg,scaleSequentialQuantile:H7,scaleSequentialSqrt:rK,scaleSequentialSymlog:B7,scaleSqrt:Lq,scaleSymlog:C7,scaleThreshold:T7,scaleTime:tK,scaleUtc:nK,tickFormat:S7},Symbol.toStringTag,{value:"Module"}));var oK=ps;function iK(e,t,n){for(var r=-1,a=e.length;++r<a;){var o=e[r],i=t(o);if(i!=null&&(s===void 0?i===i&&!oK(i):n(i,s)))var s=i,l=o}return l}var q7=iK;function sK(e,t){return e>t}var lK=sK,uK=q7,cK=lK,pK=ws;function fK(e){return e&&e.length?uK(e,pK,cK):void 0}var dK=fK;const pa=_e(dK);function mK(e,t){return e<t}var hK=mK,vK=q7,yK=hK,gK=ws;function xK(e){return e&&e.length?vK(e,gK,yK):void 0}var wK=xK;const hd=_e(wK);var bK=Ly,SK=Na,PK=e7,OK=qt;function kK(e,t){var n=OK(e)?bK:PK;return n(e,SK(t))}var CK=kK,_K=Z8,AK=CK;function EK(e,t){return _K(AK(e,t),1)}var TK=EK;const jK=_e(TK);var $K=Jy;function NK(e,t){return $K(e,t)}var MK=NK;const Fi=_e(MK);var Ss=1e9,RK={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},Cg,Be=!0,wn="[DecimalError] ",uo=wn+"Invalid argument: ",kg=wn+"Exponent out of range: ",Ps=Math.floor,Wa=Math.pow,IK=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,Zt,st=1e7,Le=7,V7=9007199254740991,Bp=Ps(V7/Le),Q={};Q.absoluteValue=Q.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};Q.comparedTo=Q.cmp=function(e){var t,n,r,a,o=this;if(e=new o.constructor(e),o.s!==e.s)return o.s||-e.s;if(o.e!==e.e)return o.e>e.e^o.s<0?1:-1;for(r=o.d.length,a=e.d.length,t=0,n=r<a?r:a;t<n;++t)if(o.d[t]!==e.d[t])return o.d[t]>e.d[t]^o.s<0?1:-1;return r===a?0:r>a^o.s<0?1:-1};Q.decimalPlaces=Q.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*Le;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n};Q.dividedBy=Q.div=function(e){return jr(this,new this.constructor(e))};Q.dividedToIntegerBy=Q.idiv=function(e){var t=this,n=t.constructor;return Ee(jr(t,new n(e),0,1),n.precision)};Q.equals=Q.eq=function(e){return!this.cmp(e)};Q.exponent=function(){return et(this)};Q.greaterThan=Q.gt=function(e){return this.cmp(e)>0};Q.greaterThanOrEqualTo=Q.gte=function(e){return this.cmp(e)>=0};Q.isInteger=Q.isint=function(){return this.e>this.d.length-2};Q.isNegative=Q.isneg=function(){return this.s<0};Q.isPositive=Q.ispos=function(){return this.s>0};Q.isZero=function(){return this.s===0};Q.lessThan=Q.lt=function(e){return this.cmp(e)<0};Q.lessThanOrEqualTo=Q.lte=function(e){return this.cmp(e)<1};Q.logarithm=Q.log=function(e){var t,n=this,r=n.constructor,a=r.precision,o=a+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(Zt))throw Error(wn+"NaN");if(n.s<1)throw Error(wn+(n.s?"NaN":"-Infinity"));return n.eq(Zt)?new r(0):(Be=!1,t=jr(Gl(n,o),Gl(e,o),o),Be=!0,Ee(t,a))};Q.minus=Q.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?Y7(t,e):K7(t,(e.s=-e.s,e))};Q.modulo=Q.mod=function(e){var t,n=this,r=n.constructor,a=r.precision;if(e=new r(e),!e.s)throw Error(wn+"NaN");return n.s?(Be=!1,t=jr(n,e,0,1).times(e),Be=!0,n.minus(t)):Ee(new r(n),a)};Q.naturalExponential=Q.exp=function(){return X7(this)};Q.naturalLogarithm=Q.ln=function(){return Gl(this)};Q.negated=Q.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};Q.plus=Q.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?K7(t,e):Y7(t,(e.s=-e.s,e))};Q.precision=Q.sd=function(e){var t,n,r,a=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(uo+e);if(t=et(a)+1,r=a.d.length-1,n=r*Le+1,r=a.d[r],r){for(;r%10==0;r/=10)n--;for(r=a.d[0];r>=10;r/=10)n++}return e&&t>n?t:n};Q.squareRoot=Q.sqrt=function(){var e,t,n,r,a,o,i,s=this,l=s.constructor;if(s.s<1){if(!s.s)return new l(0);throw Error(wn+"NaN")}for(e=et(s),Be=!1,a=Math.sqrt(+s),a==0||a==1/0?(t=rr(s.d),(t.length+e)%2==0&&(t+="0"),a=Math.sqrt(t),e=Ps((e+1)/2)-(e<0||e%2),a==1/0?t="5e"+e:(t=a.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),r=new l(t)):r=new l(a.toString()),n=l.precision,a=i=n+3;;)if(o=r,r=o.plus(jr(s,o,i+2)).times(.5),rr(o.d).slice(0,i)===(t=rr(r.d)).slice(0,i)){if(t=t.slice(i-3,i+1),a==i&&t=="4999"){if(Ee(o,n+1,0),o.times(o).eq(s)){r=o;break}}else if(t!="9999")break;i+=4}return Be=!0,Ee(r,n)};Q.times=Q.mul=function(e){var t,n,r,a,o,i,s,l,u,p=this,c=p.constructor,f=p.d,d=(e=new c(e)).d;if(!p.s||!e.s)return new c(0);for(e.s*=p.s,n=p.e+e.e,l=f.length,u=d.length,l<u&&(o=f,f=d,d=o,i=l,l=u,u=i),o=[],i=l+u,r=i;r--;)o.push(0);for(r=u;--r>=0;){for(t=0,a=l+r;a>r;)s=o[a]+d[r]*f[a-r-1]+t,o[a--]=s%st|0,t=s/st|0;o[a]=(o[a]+t)%st|0}for(;!o[--i];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,Be?Ee(e,c.precision):e};Q.toDecimalPlaces=Q.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(dr(e,0,Ss),t===void 0?t=r.rounding:dr(t,0,8),Ee(n,e+et(n)+1,t))};Q.toExponential=function(e,t){var n,r=this,a=r.constructor;return e===void 0?n=bo(r,!0):(dr(e,0,Ss),t===void 0?t=a.rounding:dr(t,0,8),r=Ee(new a(r),e+1,t),n=bo(r,!0,e+1)),n};Q.toFixed=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?bo(a):(dr(e,0,Ss),t===void 0?t=o.rounding:dr(t,0,8),r=Ee(new o(a),e+et(a)+1,t),n=bo(r.abs(),!1,e+et(r)+1),a.isneg()&&!a.isZero()?"-"+n:n)};Q.toInteger=Q.toint=function(){var e=this,t=e.constructor;return Ee(new t(e),et(e)+1,t.rounding)};Q.toNumber=function(){return+this};Q.toPower=Q.pow=function(e){var t,n,r,a,o,i,s=this,l=s.constructor,u=12,p=+(e=new l(e));if(!e.s)return new l(Zt);if(s=new l(s),!s.s){if(e.s<1)throw Error(wn+"Infinity");return s}if(s.eq(Zt))return s;if(r=l.precision,e.eq(Zt))return Ee(s,r);if(t=e.e,n=e.d.length-1,i=t>=n,o=s.s,i){if((n=p<0?-p:p)<=V7){for(a=new l(Zt),t=Math.ceil(r/Le+4),Be=!1;n%2&&(a=a.times(s),H3(a.d,t)),n=Ps(n/2),n!==0;)s=s.times(s),H3(s.d,t);return Be=!0,e.s<0?new l(Zt).div(a):Ee(a,r)}}else if(o<0)throw Error(wn+"NaN");return o=o<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,Be=!1,a=e.times(Gl(s,r+u)),Be=!0,a=X7(a),a.s=o,a};Q.toPrecision=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?(n=et(a),r=bo(a,n<=o.toExpNeg||n>=o.toExpPos)):(dr(e,1,Ss),t===void 0?t=o.rounding:dr(t,0,8),a=Ee(new o(a),e,t),n=et(a),r=bo(a,e<=n||n<=o.toExpNeg,e)),r};Q.toSignificantDigits=Q.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(dr(e,1,Ss),t===void 0?t=r.rounding:dr(t,0,8)),Ee(new r(n),e,t)};Q.toString=Q.valueOf=Q.val=Q.toJSON=Q[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=et(e),n=e.constructor;return bo(e,t<=n.toExpNeg||t>=n.toExpPos)};function K7(e,t){var n,r,a,o,i,s,l,u,p=e.constructor,c=p.precision;if(!e.s||!t.s)return t.s||(t=new p(e)),Be?Ee(t,c):t;if(l=e.d,u=t.d,i=e.e,a=t.e,l=l.slice(),o=i-a,o){for(o<0?(r=l,o=-o,s=u.length):(r=u,a=i,s=l.length),i=Math.ceil(c/Le),s=i>s?i+1:s+1,o>s&&(o=s,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(s=l.length,o=u.length,s-o<0&&(o=s,r=u,u=l,l=r),n=0;o;)n=(l[--o]=l[o]+u[o]+n)/st|0,l[o]%=st;for(n&&(l.unshift(n),++a),s=l.length;l[--s]==0;)l.pop();return t.d=l,t.e=a,Be?Ee(t,c):t}function dr(e,t,n){if(e!==~~e||e<t||e>n)throw Error(uo+e)}function rr(e){var t,n,r,a=e.length-1,o="",i=e[0];if(a>0){for(o+=i,t=1;t<a;t++)r=e[t]+"",n=Le-r.length,n&&(o+=ea(n)),o+=r;i=e[t],r=i+"",n=Le-r.length,n&&(o+=ea(n))}else if(i===0)return"0";for(;i%10===0;)i/=10;return o+i}var jr=function(){function e(r,a){var o,i=0,s=r.length;for(r=r.slice();s--;)o=r[s]*a+i,r[s]=o%st|0,i=o/st|0;return i&&r.unshift(i),r}function t(r,a,o,i){var s,l;if(o!=i)l=o>i?1:-1;else for(s=l=0;s<o;s++)if(r[s]!=a[s]){l=r[s]>a[s]?1:-1;break}return l}function n(r,a,o){for(var i=0;o--;)r[o]-=i,i=r[o]<a[o]?1:0,r[o]=i*st+r[o]-a[o];for(;!r[0]&&r.length>1;)r.shift()}return function(r,a,o,i){var s,l,u,p,c,f,d,h,m,g,v,y,x,S,w,P,O,C,_=r.constructor,T=r.s==a.s?1:-1,A=r.d,j=a.d;if(!r.s)return new _(r);if(!a.s)throw Error(wn+"Division by zero");for(l=r.e-a.e,O=j.length,w=A.length,d=new _(T),h=d.d=[],u=0;j[u]==(A[u]||0);)++u;if(j[u]>(A[u]||0)&&--l,o==null?y=o=_.precision:i?y=o+(et(r)-et(a))+1:y=o,y<0)return new _(0);if(y=y/Le+2|0,u=0,O==1)for(p=0,j=j[0],y++;(u<w||p)&&y--;u++)x=p*st+(A[u]||0),h[u]=x/j|0,p=x%j|0;else{for(p=st/(j[0]+1)|0,p>1&&(j=e(j,p),A=e(A,p),O=j.length,w=A.length),S=O,m=A.slice(0,O),g=m.length;g<O;)m[g++]=0;C=j.slice(),C.unshift(0),P=j[0],j[1]>=st/2&&++P;do p=0,s=t(j,m,O,g),s<0?(v=m[0],O!=g&&(v=v*st+(m[1]||0)),p=v/P|0,p>1?(p>=st&&(p=st-1),c=e(j,p),f=c.length,g=m.length,s=t(c,m,f,g),s==1&&(p--,n(c,O<f?C:j,f))):(p==0&&(s=p=1),c=j.slice()),f=c.length,f<g&&c.unshift(0),n(m,c,g),s==-1&&(g=m.length,s=t(j,m,O,g),s<1&&(p++,n(m,O<g?C:j,g))),g=m.length):s===0&&(p++,m=[0]),h[u++]=p,s&&m[0]?m[g++]=A[S]||0:(m=[A[S]],g=1);while((S++<w||m[0]!==void 0)&&y--)}return h[0]||h.shift(),d.e=l,Ee(d,i?o+et(d)+1:o)}}();function X7(e,t){var n,r,a,o,i,s,l=0,u=0,p=e.constructor,c=p.precision;if(et(e)>16)throw Error(kg+et(e));if(!e.s)return new p(Zt);for(Be=!1,s=c,i=new p(.03125);e.abs().gte(.1);)e=e.times(i),u+=5;for(r=Math.log(Wa(2,u))/Math.LN10*2+5|0,s+=r,n=a=o=new p(Zt),p.precision=s;;){if(a=Ee(a.times(e),s),n=n.times(++l),i=o.plus(jr(a,n,s)),rr(i.d).slice(0,s)===rr(o.d).slice(0,s)){for(;u--;)o=Ee(o.times(o),s);return p.precision=c,t==null?(Be=!0,Ee(o,c)):o}o=i}}function et(e){for(var t=e.e*Le,n=e.d[0];n>=10;n/=10)t++;return t}function Rm(e,t,n){if(t>e.LN10.sd())throw Be=!0,n&&(e.precision=n),Error(wn+"LN10 precision limit exceeded");return Ee(new e(e.LN10),t)}function ea(e){for(var t="";e--;)t+="0";return t}function Gl(e,t){var n,r,a,o,i,s,l,u,p,c=1,f=10,d=e,h=d.d,m=d.constructor,g=m.precision;if(d.s<1)throw Error(wn+(d.s?"NaN":"-Infinity"));if(d.eq(Zt))return new m(0);if(t==null?(Be=!1,u=g):u=t,d.eq(10))return t==null&&(Be=!0),Rm(m,u);if(u+=f,m.precision=u,n=rr(h),r=n.charAt(0),o=et(d),Math.abs(o)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)d=d.times(e),n=rr(d.d),r=n.charAt(0),c++;o=et(d),r>1?(d=new m("0."+n),o++):d=new m(r+"."+n.slice(1))}else return l=Rm(m,u+2,g).times(o+""),d=Gl(new m(r+"."+n.slice(1)),u-f).plus(l),m.precision=g,t==null?(Be=!0,Ee(d,g)):d;for(s=i=d=jr(d.minus(Zt),d.plus(Zt),u),p=Ee(d.times(d),u),a=3;;){if(i=Ee(i.times(p),u),l=s.plus(jr(i,new m(a),u)),rr(l.d).slice(0,u)===rr(s.d).slice(0,u))return s=s.times(2),o!==0&&(s=s.plus(Rm(m,u+2,g).times(o+""))),s=jr(s,new m(c),u),m.precision=g,t==null?(Be=!0,Ee(s,g)):s;s=l,a+=2}}function B3(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=Ps(n/Le),e.d=[],r=(n+1)%Le,n<0&&(r+=Le),r<a){for(r&&e.d.push(+t.slice(0,r)),a-=Le;r<a;)e.d.push(+t.slice(r,r+=Le));t=t.slice(r),r=Le-t.length}else r-=a;for(;r--;)t+="0";if(e.d.push(+t),Be&&(e.e>Bp||e.e<-Bp))throw Error(kg+n)}else e.s=0,e.e=0,e.d=[0];return e}function Ee(e,t,n){var r,a,o,i,s,l,u,p,c=e.d;for(i=1,o=c[0];o>=10;o/=10)i++;if(r=t-i,r<0)r+=Le,a=t,u=c[p=0];else{if(p=Math.ceil((r+1)/Le),o=c.length,p>=o)return e;for(u=o=c[p],i=1;o>=10;o/=10)i++;r%=Le,a=r-Le+i}if(n!==void 0&&(o=Wa(10,i-a-1),s=u/o%10|0,l=t<0||c[p+1]!==void 0||u%o,l=n<4?(s||l)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||l||n==6&&(r>0?a>0?u/Wa(10,i-a):0:c[p-1])%10&1||n==(e.s<0?8:7))),t<1||!c[0])return l?(o=et(e),c.length=1,t=t-o-1,c[0]=Wa(10,(Le-t%Le)%Le),e.e=Ps(-t/Le)||0):(c.length=1,c[0]=e.e=e.s=0),e;if(r==0?(c.length=p,o=1,p--):(c.length=p+1,o=Wa(10,Le-r),c[p]=a>0?(u/Wa(10,i-a)%Wa(10,a)|0)*o:0),l)for(;;)if(p==0){(c[0]+=o)==st&&(c[0]=1,++e.e);break}else{if(c[p]+=o,c[p]!=st)break;c[p--]=0,o=1}for(r=c.length;c[--r]===0;)c.pop();if(Be&&(e.e>Bp||e.e<-Bp))throw Error(kg+et(e));return e}function Y7(e,t){var n,r,a,o,i,s,l,u,p,c,f=e.constructor,d=f.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new f(e),Be?Ee(t,d):t;if(l=e.d,c=t.d,r=t.e,u=e.e,l=l.slice(),i=u-r,i){for(p=i<0,p?(n=l,i=-i,s=c.length):(n=c,r=u,s=l.length),a=Math.max(Math.ceil(d/Le),s)+2,i>a&&(i=a,n.length=1),n.reverse(),a=i;a--;)n.push(0);n.reverse()}else{for(a=l.length,s=c.length,p=a<s,p&&(s=a),a=0;a<s;a++)if(l[a]!=c[a]){p=l[a]<c[a];break}i=0}for(p&&(n=l,l=c,c=n,t.s=-t.s),s=l.length,a=c.length-s;a>0;--a)l[s++]=0;for(a=c.length;a>i;){if(l[--a]<c[a]){for(o=a;o&&l[--o]===0;)l[o]=st-1;--l[o],l[a]+=st}l[a]-=c[a]}for(;l[--s]===0;)l.pop();for(;l[0]===0;l.shift())--r;return l[0]?(t.d=l,t.e=r,Be?Ee(t,d):t):new f(0)}function bo(e,t,n){var r,a=et(e),o=rr(e.d),i=o.length;return t?(n&&(r=n-i)>0?o=o.charAt(0)+"."+o.slice(1)+ea(r):i>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(a<0?"e":"e+")+a):a<0?(o="0."+ea(-a-1)+o,n&&(r=n-i)>0&&(o+=ea(r))):a>=i?(o+=ea(a+1-i),n&&(r=n-a-1)>0&&(o=o+"."+ea(r))):((r=a+1)<i&&(o=o.slice(0,r)+"."+o.slice(r)),n&&(r=n-i)>0&&(a+1===i&&(o+="."),o+=ea(r))),e.s<0?"-"+o:o}function H3(e,t){if(e.length>t)return e.length=t,!0}function Q7(e){var t,n,r;function a(o){var i=this;if(!(i instanceof a))return new a(o);if(i.constructor=a,o instanceof a){i.s=o.s,i.e=o.e,i.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(uo+o);if(o>0)i.s=1;else if(o<0)o=-o,i.s=-1;else{i.s=0,i.e=0,i.d=[0];return}if(o===~~o&&o<1e7){i.e=0,i.d=[o];return}return B3(i,o.toString())}else if(typeof o!="string")throw Error(uo+o);if(o.charCodeAt(0)===45?(o=o.slice(1),i.s=-1):i.s=1,IK.test(o))B3(i,o);else throw Error(uo+o)}if(a.prototype=Q,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=Q7,a.config=a.set=DK,e===void 0&&(e={}),e)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<r.length;)e.hasOwnProperty(n=r[t++])||(e[n]=this[n]);return a.config(e),a}function DK(e){if(!e||typeof e!="object")throw Error(wn+"Object expected");var t,n,r,a=["precision",1,Ss,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<a.length;t+=3)if((r=e[n=a[t]])!==void 0)if(Ps(r)===r&&r>=a[t+1]&&r<=a[t+2])this[n]=r;else throw Error(uo+n+": "+r);if((r=e[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(uo+n+": "+r);return this}var Cg=Q7(RK);Zt=new Cg(1);const Ce=Cg;function LK(e){return HK(e)||BK(e)||zK(e)||FK()}function FK(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function zK(e,t){if(e){if(typeof e=="string")return E0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return E0(e,t)}}function BK(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function HK(e){if(Array.isArray(e))return E0(e)}function E0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var GK=function(t){return t},Z7={},J7=function(t){return t===Z7},G3=function(t){return function n(){return arguments.length===0||arguments.length===1&&J7(arguments.length<=0?void 0:arguments[0])?n:t.apply(void 0,arguments)}},UK=function e(t,n){return t===1?n:G3(function(){for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];var i=a.filter(function(s){return s!==Z7}).length;return i>=t?n.apply(void 0,a):e(t-i,G3(function(){for(var s=arguments.length,l=new Array(s),u=0;u<s;u++)l[u]=arguments[u];var p=a.map(function(c){return J7(c)?l.shift():c});return n.apply(void 0,LK(p).concat(l))}))})},vd=function(t){return UK(t.length,t)},T0=function(t,n){for(var r=[],a=t;a<n;++a)r[a-t]=a;return r},WK=vd(function(e,t){return Array.isArray(t)?t.map(e):Object.keys(t).map(function(n){return t[n]}).map(e)}),qK=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];if(!n.length)return GK;var a=n.reverse(),o=a[0],i=a.slice(1);return function(){return i.reduce(function(s,l){return l(s)},o.apply(void 0,arguments))}},j0=function(t){return Array.isArray(t)?t.reverse():t.split("").reverse.join("")},eS=function(t){var n=null,r=null;return function(){for(var a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return n&&o.every(function(s,l){return s===n[l]})||(n=o,r=t.apply(void 0,o)),r}};function VK(e){var t;return e===0?t=1:t=Math.floor(new Ce(e).abs().log(10).toNumber())+1,t}function KK(e,t,n){for(var r=new Ce(e),a=0,o=[];r.lt(t)&&a<1e5;)o.push(r.toNumber()),r=r.add(n),a++;return o}var XK=vd(function(e,t,n){var r=+e,a=+t;return r+n*(a-r)}),YK=vd(function(e,t,n){var r=t-+e;return r=r||1/0,(n-e)/r}),QK=vd(function(e,t,n){var r=t-+e;return r=r||1/0,Math.max(0,Math.min(1,(n-e)/r))});const yd={rangeStep:KK,getDigitCount:VK,interpolateNumber:XK,uninterpolateNumber:YK,uninterpolateTruncation:QK};function $0(e){return eX(e)||JK(e)||tS(e)||ZK()}function ZK(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function JK(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function eX(e){if(Array.isArray(e))return N0(e)}function Ul(e,t){return rX(e)||nX(e,t)||tS(e,t)||tX()}function tX(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tS(e,t){if(e){if(typeof e=="string")return N0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return N0(e,t)}}function N0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function nX(e,t){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(e)))){var n=[],r=!0,a=!1,o=void 0;try{for(var i=e[Symbol.iterator](),s;!(r=(s=i.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(l){a=!0,o=l}finally{try{!r&&i.return!=null&&i.return()}finally{if(a)throw o}}return n}}function rX(e){if(Array.isArray(e))return e}function nS(e){var t=Ul(e,2),n=t[0],r=t[1],a=n,o=r;return n>r&&(a=r,o=n),[a,o]}function rS(e,t,n){if(e.lte(0))return new Ce(0);var r=yd.getDigitCount(e.toNumber()),a=new Ce(10).pow(r),o=e.div(a),i=r!==1?.05:.1,s=new Ce(Math.ceil(o.div(i).toNumber())).add(n).mul(i),l=s.mul(a);return t?l:new Ce(Math.ceil(l))}function aX(e,t,n){var r=1,a=new Ce(e);if(!a.isint()&&n){var o=Math.abs(e);o<1?(r=new Ce(10).pow(yd.getDigitCount(e)-1),a=new Ce(Math.floor(a.div(r).toNumber())).mul(r)):o>1&&(a=new Ce(Math.floor(e)))}else e===0?a=new Ce(Math.floor((t-1)/2)):n||(a=new Ce(Math.floor(e)));var i=Math.floor((t-1)/2),s=qK(WK(function(l){return a.add(new Ce(l-i).mul(r)).toNumber()}),T0);return s(0,t)}function aS(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new Ce(0),tickMin:new Ce(0),tickMax:new Ce(0)};var o=rS(new Ce(t).sub(e).div(n-1),r,a),i;e<=0&&t>=0?i=new Ce(0):(i=new Ce(e).add(t).div(2),i=i.sub(new Ce(i).mod(o)));var s=Math.ceil(i.sub(e).div(o).toNumber()),l=Math.ceil(new Ce(t).sub(i).div(o).toNumber()),u=s+l+1;return u>n?aS(e,t,n,r,a+1):(u<n&&(l=t>0?l+(n-u):l,s=t>0?s:s+(n-u)),{step:o,tickMin:i.sub(new Ce(s).mul(o)),tickMax:i.add(new Ce(l).mul(o))})}function oX(e){var t=Ul(e,2),n=t[0],r=t[1],a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=Math.max(a,2),s=nS([n,r]),l=Ul(s,2),u=l[0],p=l[1];if(u===-1/0||p===1/0){var c=p===1/0?[u].concat($0(T0(0,a-1).map(function(){return 1/0}))):[].concat($0(T0(0,a-1).map(function(){return-1/0})),[p]);return n>r?j0(c):c}if(u===p)return aX(u,a,o);var f=aS(u,p,i,o),d=f.step,h=f.tickMin,m=f.tickMax,g=yd.rangeStep(h,m.add(new Ce(.1).mul(d)),d);return n>r?j0(g):g}function iX(e,t){var n=Ul(e,2),r=n[0],a=n[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=nS([r,a]),s=Ul(i,2),l=s[0],u=s[1];if(l===-1/0||u===1/0)return[r,a];if(l===u)return[l];var p=Math.max(t,2),c=rS(new Ce(u).sub(l).div(p-1),o,0),f=[].concat($0(yd.rangeStep(new Ce(l),new Ce(u).sub(new Ce(.99).mul(c)),c)),[u]);return r>a?j0(f):f}var sX=eS(oX),lX=eS(iX),uX="Invariant failed";function So(e,t){throw new Error(uX)}var cX=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function zi(e){"@babel/helpers - typeof";return zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zi(e)}function Hp(){return Hp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Hp.apply(this,arguments)}function pX(e,t){return hX(e)||mX(e,t)||dX(e,t)||fX()}function fX(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function dX(e,t){if(e){if(typeof e=="string")return U3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return U3(e,t)}}function U3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function mX(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function hX(e){if(Array.isArray(e))return e}function vX(e,t){if(e==null)return{};var n=yX(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function yX(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function gX(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function xX(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,sS(r.key),r)}}function wX(e,t,n){return t&&xX(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function bX(e,t,n){return t=Gp(t),SX(e,oS()?Reflect.construct(t,n||[],Gp(e).constructor):t.apply(e,n))}function SX(e,t){if(t&&(zi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return PX(e)}function PX(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function oS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(oS=function(){return!!e})()}function Gp(e){return Gp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Gp(e)}function OX(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&M0(e,t)}function M0(e,t){return M0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},M0(e,t)}function iS(e,t,n){return t=sS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sS(e){var t=kX(e,"string");return zi(t)=="symbol"?t:t+""}function kX(e,t){if(zi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(zi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Tu=function(e){function t(){return gX(this,t),bX(this,t,arguments)}return OX(t,e),wX(t,[{key:"render",value:function(){var r=this.props,a=r.offset,o=r.layout,i=r.width,s=r.dataKey,l=r.data,u=r.dataPointFormatter,p=r.xAxis,c=r.yAxis,f=vX(r,cX),d=ie(f,!1);this.props.direction==="x"&&p.type!=="number"&&So();var h=l.map(function(m){var g=u(m,s),v=g.x,y=g.y,x=g.value,S=g.errorVal;if(!S)return null;var w=[],P,O;if(Array.isArray(S)){var C=pX(S,2);P=C[0],O=C[1]}else P=O=S;if(o==="vertical"){var _=p.scale,T=y+a,A=T+i,j=T-i,N=_(x-P),M=_(x+O);w.push({x1:M,y1:A,x2:M,y2:j}),w.push({x1:N,y1:T,x2:M,y2:T}),w.push({x1:N,y1:A,x2:N,y2:j})}else if(o==="horizontal"){var I=c.scale,R=v+a,L=R-i,$=R+i,D=I(x-P),H=I(x+O);w.push({x1:L,y1:H,x2:$,y2:H}),w.push({x1:R,y1:D,x2:R,y2:H}),w.push({x1:L,y1:D,x2:$,y2:D})}return E.createElement($e,Hp({className:"recharts-errorBar",key:"bar-".concat(w.map(function(W){return"".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))},d),w.map(function(W){return E.createElement("line",Hp({},W,{key:"line-".concat(W.x1,"-").concat(W.x2,"-").concat(W.y1,"-").concat(W.y2)}))}))});return E.createElement($e,{className:"recharts-errorBars"},h)}}])}(E.Component);iS(Tu,"defaultProps",{stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"});iS(Tu,"displayName","ErrorBar");function Wl(e){"@babel/helpers - typeof";return Wl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wl(e)}function W3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function za(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?W3(Object(n),!0).forEach(function(r){CX(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):W3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function CX(e,t,n){return t=_X(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _X(e){var t=AX(e,"string");return Wl(t)=="symbol"?t:t+""}function AX(e,t){if(Wl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var lS=function(t){var n=t.children,r=t.formattedGraphicalItems,a=t.legendWidth,o=t.legendContent,i=Yt(n,ci);if(!i)return null;var s=ci.defaultProps,l=s!==void 0?za(za({},s),i.props):{},u;return i.props&&i.props.payload?u=i.props&&i.props.payload:o==="children"?u=(r||[]).reduce(function(p,c){var f=c.item,d=c.props,h=d.sectors||d.data||[];return p.concat(h.map(function(m){return{type:i.props.iconType||f.props.legendType,value:m.name,color:m.fill,payload:m}}))},[]):u=(r||[]).map(function(p){var c=p.item,f=c.type.defaultProps,d=f!==void 0?za(za({},f),c.props):{},h=d.dataKey,m=d.name,g=d.legendType,v=d.hide;return{inactive:v,dataKey:h,type:l.iconType||g||"square",color:_g(c),value:m||h,payload:d}}),za(za(za({},l),ci.getWithHeight(i,a)),{},{payload:u,item:i})};function ql(e){"@babel/helpers - typeof";return ql=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ql(e)}function q3(e){return $X(e)||jX(e)||TX(e)||EX()}function EX(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function TX(e,t){if(e){if(typeof e=="string")return R0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return R0(e,t)}}function jX(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function $X(e){if(Array.isArray(e))return R0(e)}function R0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function V3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ve(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?V3(Object(n),!0).forEach(function(r){fi(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):V3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function fi(e,t,n){return t=NX(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function NX(e){var t=MX(e,"string");return ql(t)=="symbol"?t:t+""}function MX(e,t){if(ql(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ql(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function It(e,t,n){return le(e)||le(t)?n:ot(t)?vn(e,t,n):ae(t)?t(e):n}function ll(e,t,n,r){var a=jK(e,function(s){return It(s,t)});if(n==="number"){var o=a.filter(function(s){return V(s)||parseFloat(s)});return o.length?[hd(o),pa(o)]:[1/0,-1/0]}var i=r?a.filter(function(s){return!le(s)}):a;return i.map(function(s){return ot(s)||s instanceof Date?s:""})}var RX=function(t){var n,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,s=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(s<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var l=o.range,u=0;u<s;u++){var p=u>0?a[u-1].coordinate:a[s-1].coordinate,c=a[u].coordinate,f=u>=s-1?a[0].coordinate:a[u+1].coordinate,d=void 0;if(In(c-p)!==In(f-c)){var h=[];if(In(f-c)===In(l[1]-l[0])){d=f;var m=c+l[1]-l[0];h[0]=Math.min(m,(m+p)/2),h[1]=Math.max(m,(m+p)/2)}else{d=p;var g=f+l[1]-l[0];h[0]=Math.min(c,(g+c)/2),h[1]=Math.max(c,(g+c)/2)}var v=[Math.min(c,(d+c)/2),Math.max(c,(d+c)/2)];if(t>v[0]&&t<=v[1]||t>=h[0]&&t<=h[1]){i=a[u].index;break}}else{var y=Math.min(p,f),x=Math.max(p,f);if(t>(y+c)/2&&t<=(x+c)/2){i=a[u].index;break}}}else for(var S=0;S<s;S++)if(S===0&&t<=(r[S].coordinate+r[S+1].coordinate)/2||S>0&&S<s-1&&t>(r[S].coordinate+r[S-1].coordinate)/2&&t<=(r[S].coordinate+r[S+1].coordinate)/2||S===s-1&&t>(r[S].coordinate+r[S-1].coordinate)/2){i=r[S].index;break}return i},_g=function(t){var n,r=t,a=r.type.displayName,o=(n=t.type)!==null&&n!==void 0&&n.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,i=o.stroke,s=o.fill,l;switch(a){case"Line":l=i;break;case"Area":case"Radar":l=i&&i!=="none"?i:s;break;default:l=s;break}return l},IX=function(t){var n=t.barSize,r=t.totalSize,a=t.stackGroups,o=a===void 0?{}:a;if(!o)return{};for(var i={},s=Object.keys(o),l=0,u=s.length;l<u;l++)for(var p=o[s[l]].stackGroups,c=Object.keys(p),f=0,d=c.length;f<d;f++){var h=p[c[f]],m=h.items,g=h.cateAxisId,v=m.filter(function(O){return Er(O.type).indexOf("Bar")>=0});if(v&&v.length){var y=v[0].type.defaultProps,x=y!==void 0?Ve(Ve({},y),v[0].props):v[0].props,S=x.barSize,w=x[g];i[w]||(i[w]=[]);var P=le(S)?n:S;i[w].push({item:v[0],stackList:v.slice(1),barSize:le(P)?void 0:wo(P,r,0)})}}return i},DX=function(t){var n=t.barGap,r=t.barCategoryGap,a=t.bandSize,o=t.sizeList,i=o===void 0?[]:o,s=t.maxBarSize,l=i.length;if(l<1)return null;var u=wo(n,a,0,!0),p,c=[];if(i[0].barSize===+i[0].barSize){var f=!1,d=a/l,h=i.reduce(function(S,w){return S+w.barSize||0},0);h+=(l-1)*u,h>=a&&(h-=(l-1)*u,u=0),h>=a&&d>0&&(f=!0,d*=.9,h=l*d);var m=(a-h)/2>>0,g={offset:m-u,size:0};p=i.reduce(function(S,w){var P={item:w.item,position:{offset:g.offset+g.size+u,size:f?d:w.barSize}},O=[].concat(q3(S),[P]);return g=O[O.length-1].position,w.stackList&&w.stackList.length&&w.stackList.forEach(function(C){O.push({item:C,position:g})}),O},c)}else{var v=wo(r,a,0,!0);a-2*v-(l-1)*u<=0&&(u=0);var y=(a-2*v-(l-1)*u)/l;y>1&&(y>>=0);var x=s===+s?Math.min(y,s):y;p=i.reduce(function(S,w,P){var O=[].concat(q3(S),[{item:w.item,position:{offset:v+(y+u)*P+(y-x)/2,size:x}}]);return w.stackList&&w.stackList.length&&w.stackList.forEach(function(C){O.push({item:C,position:O[O.length-1].position})}),O},c)}return p},LX=function(t,n,r,a){var o=r.children,i=r.width,s=r.margin,l=i-(s.left||0)-(s.right||0),u=lS({children:o,legendWidth:l});if(u){var p=a||{},c=p.width,f=p.height,d=u.align,h=u.verticalAlign,m=u.layout;if((m==="vertical"||m==="horizontal"&&h==="middle")&&d!=="center"&&V(t[d]))return Ve(Ve({},t),{},fi({},d,t[d]+(c||0)));if((m==="horizontal"||m==="vertical"&&d==="center")&&h!=="middle"&&V(t[h]))return Ve(Ve({},t),{},fi({},h,t[h]+(f||0)))}return t},FX=function(t,n,r){return le(n)?!0:t==="horizontal"?n==="yAxis":t==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},uS=function(t,n,r,a,o){var i=n.props.children,s=yn(i,Tu).filter(function(u){return FX(a,o,u.props.direction)});if(s&&s.length){var l=s.map(function(u){return u.props.dataKey});return t.reduce(function(u,p){var c=It(p,r);if(le(c))return u;var f=Array.isArray(c)?[hd(c),pa(c)]:[c,c],d=l.reduce(function(h,m){var g=It(p,m,0),v=f[0]-Math.abs(Array.isArray(g)?g[0]:g),y=f[1]+Math.abs(Array.isArray(g)?g[1]:g);return[Math.min(v,h[0]),Math.max(y,h[1])]},[1/0,-1/0]);return[Math.min(d[0],u[0]),Math.max(d[1],u[1])]},[1/0,-1/0])}return null},zX=function(t,n,r,a,o){var i=n.map(function(s){return uS(t,s,r,o,a)}).filter(function(s){return!le(s)});return i&&i.length?i.reduce(function(s,l){return[Math.min(s[0],l[0]),Math.max(s[1],l[1])]},[1/0,-1/0]):null},cS=function(t,n,r,a,o){var i=n.map(function(l){var u=l.props.dataKey;return r==="number"&&u&&uS(t,l,u,a)||ll(t,u,r,o)});if(r==="number")return i.reduce(function(l,u){return[Math.min(l[0],u[0]),Math.max(l[1],u[1])]},[1/0,-1/0]);var s={};return i.reduce(function(l,u){for(var p=0,c=u.length;p<c;p++)s[u[p]]||(s[u[p]]=!0,l.push(u[p]));return l},[])},pS=function(t,n){return t==="horizontal"&&n==="xAxis"||t==="vertical"&&n==="yAxis"||t==="centric"&&n==="angleAxis"||t==="radial"&&n==="radiusAxis"},fS=function(t,n,r,a){if(a)return t.map(function(l){return l.coordinate});var o,i,s=t.map(function(l){return l.coordinate===n&&(o=!0),l.coordinate===r&&(i=!0),l.coordinate});return o||s.push(n),i||s.push(r),s},_r=function(t,n,r){if(!t)return null;var a=t.scale,o=t.duplicateDomain,i=t.type,s=t.range,l=t.realScaleType==="scaleBand"?a.bandwidth()/2:2,u=(n||r)&&i==="category"&&a.bandwidth?a.bandwidth()/l:0;if(u=t.axisType==="angleAxis"&&(s==null?void 0:s.length)>=2?In(s[0]-s[1])*2*u:u,n&&(t.ticks||t.niceTicks)){var p=(t.ticks||t.niceTicks).map(function(c){var f=o?o.indexOf(c):c;return{coordinate:a(f)+u,value:c,offset:u}});return p.filter(function(c){return!vs(c.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(c,f){return{coordinate:a(c)+u,value:c,index:f,offset:u}}):a.ticks&&!r?a.ticks(t.tickCount).map(function(c){return{coordinate:a(c)+u,value:c,offset:u}}):a.domain().map(function(c,f){return{coordinate:a(c)+u,value:o?o[c]:c,index:f,offset:u}})},Im=new WeakMap,pc=function(t,n){if(typeof n!="function")return t;Im.has(t)||Im.set(t,new WeakMap);var r=Im.get(t);if(r.has(n))return r.get(n);var a=function(){t.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,a),a},BX=function(t,n,r){var a=t.scale,o=t.type,i=t.layout,s=t.axisType;if(a==="auto")return i==="radial"&&s==="radiusAxis"?{scale:Ll(),realScaleType:"band"}:i==="radial"&&s==="angleAxis"?{scale:Dp(),realScaleType:"linear"}:o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:sl(),realScaleType:"point"}:o==="category"?{scale:Ll(),realScaleType:"band"}:{scale:Dp(),realScaleType:"linear"};if(xo(a)){var l="scale".concat(nd(a));return{scale:(z3[l]||sl)(),realScaleType:z3[l]?l:"point"}}return ae(a)?{scale:a}:{scale:sl(),realScaleType:"point"}},K3=1e-4,HX=function(t){var n=t.domain();if(!(!n||n.length<=2)){var r=n.length,a=t.range(),o=Math.min(a[0],a[1])-K3,i=Math.max(a[0],a[1])+K3,s=t(n[0]),l=t(n[r-1]);(s<o||s>i||l<o||l>i)&&t.domain([n[0],n[r-1]])}},GX=function(t,n){if(!t)return null;for(var r=0,a=t.length;r<a;r++)if(t[r].item===n)return t[r].position;return null},UX=function(t,n){if(!n||n.length!==2||!V(n[0])||!V(n[1]))return t;var r=Math.min(n[0],n[1]),a=Math.max(n[0],n[1]),o=[t[0],t[1]];return(!V(t[0])||t[0]<r)&&(o[0]=r),(!V(t[1])||t[1]>a)&&(o[1]=a),o[0]>a&&(o[0]=a),o[1]<r&&(o[1]=r),o},WX=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0,s=0;s<n;++s){var l=vs(t[s][r][1])?t[s][r][0]:t[s][r][1];l>=0?(t[s][r][0]=o,t[s][r][1]=o+l,o=t[s][r][1]):(t[s][r][0]=i,t[s][r][1]=i+l,i=t[s][r][1])}},qX=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r<a;++r)for(var o=0,i=0;i<n;++i){var s=vs(t[i][r][1])?t[i][r][0]:t[i][r][1];s>=0?(t[i][r][0]=o,t[i][r][1]=o+s,o=t[i][r][1]):(t[i][r][0]=0,t[i][r][1]=0)}},VX={sign:WX,expand:sI,none:ji,silhouette:lI,wiggle:uI,positive:qX},KX=function(t,n,r){var a=n.map(function(s){return s.props.dataKey}),o=VX[r],i=iI().keys(a).value(function(s,l){return+It(s,l,0)}).order(i0).offset(o);return i(t)},XX=function(t,n,r,a,o,i){if(!t)return null;var s=i?n.reverse():n,l={},u=s.reduce(function(c,f){var d,h=(d=f.type)!==null&&d!==void 0&&d.defaultProps?Ve(Ve({},f.type.defaultProps),f.props):f.props,m=h.stackId,g=h.hide;if(g)return c;var v=h[r],y=c[v]||{hasStack:!1,stackGroups:{}};if(ot(m)){var x=y.stackGroups[m]||{numericAxisId:r,cateAxisId:a,items:[]};x.items.push(f),y.hasStack=!0,y.stackGroups[m]=x}else y.stackGroups[ys("_stackId_")]={numericAxisId:r,cateAxisId:a,items:[f]};return Ve(Ve({},c),{},fi({},v,y))},l),p={};return Object.keys(u).reduce(function(c,f){var d=u[f];if(d.hasStack){var h={};d.stackGroups=Object.keys(d.stackGroups).reduce(function(m,g){var v=d.stackGroups[g];return Ve(Ve({},m),{},fi({},g,{numericAxisId:r,cateAxisId:a,items:v.items,stackedData:KX(t,v.items,o)}))},h)}return Ve(Ve({},c),{},fi({},f,d))},p)},YX=function(t,n){var r=n.realScaleType,a=n.type,o=n.tickCount,i=n.originalDomain,s=n.allowDecimals,l=r||n.scale;if(l!=="auto"&&l!=="linear")return null;if(o&&a==="number"&&i&&(i[0]==="auto"||i[1]==="auto")){var u=t.domain();if(!u.length)return null;var p=sX(u,o,s);return t.domain([hd(p),pa(p)]),{niceTicks:p}}if(o&&a==="number"){var c=t.domain(),f=lX(c,o,s);return{niceTicks:f}}return null};function Up(e){var t=e.axis,n=e.ticks,r=e.bandSize,a=e.entry,o=e.index,i=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!le(a[t.dataKey])){var s=mp(n,"value",a[t.dataKey]);if(s)return s.coordinate+r/2}return n[o]?n[o].coordinate+r/2:null}var l=It(a,le(i)?t.dataKey:i);return le(l)?null:t.scale(l)}var X3=function(t){var n=t.axis,r=t.ticks,a=t.offset,o=t.bandSize,i=t.entry,s=t.index;if(n.type==="category")return r[s]?r[s].coordinate+a:null;var l=It(i,n.dataKey,n.domain[s]);return le(l)?null:n.scale(l)-o/2+a},QX=function(t){var n=t.numericAxis,r=n.scale.domain();if(n.type==="number"){var a=Math.min(r[0],r[1]),o=Math.max(r[0],r[1]);return a<=0&&o>=0?0:o<0?o:a}return r[0]},ZX=function(t,n){var r,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,o=a.stackId;if(ot(o)){var i=n[o];if(i){var s=i.items.indexOf(t);return s>=0?i.stackedData[s]:null}}return null},JX=function(t){return t.reduce(function(n,r){return[hd(r.concat([n[0]]).filter(V)),pa(r.concat([n[1]]).filter(V))]},[1/0,-1/0])},dS=function(t,n,r){return Object.keys(t).reduce(function(a,o){var i=t[o],s=i.stackedData,l=s.reduce(function(u,p){var c=JX(p.slice(n,r+1));return[Math.min(u[0],c[0]),Math.max(u[1],c[1])]},[1/0,-1/0]);return[Math.min(l[0],a[0]),Math.max(l[1],a[1])]},[1/0,-1/0]).map(function(a){return a===1/0||a===-1/0?0:a})},Y3=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Q3=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,I0=function(t,n,r){if(ae(t))return t(n,r);if(!Array.isArray(t))return n;var a=[];if(V(t[0]))a[0]=r?t[0]:Math.min(t[0],n[0]);else if(Y3.test(t[0])){var o=+Y3.exec(t[0])[1];a[0]=n[0]-o}else ae(t[0])?a[0]=t[0](n[0]):a[0]=n[0];if(V(t[1]))a[1]=r?t[1]:Math.max(t[1],n[1]);else if(Q3.test(t[1])){var i=+Q3.exec(t[1])[1];a[1]=n[1]+i}else ae(t[1])?a[1]=t[1](n[1]):a[1]=n[1];return a},Wp=function(t,n,r){if(t&&t.scale&&t.scale.bandwidth){var a=t.scale.bandwidth();if(!r||a>0)return a}if(t&&n&&n.length>=2){for(var o=tg(n,function(c){return c.coordinate}),i=1/0,s=1,l=o.length;s<l;s++){var u=o[s],p=o[s-1];i=Math.min((u.coordinate||0)-(p.coordinate||0),i)}return i===1/0?0:i}return r?void 0:0},Z3=function(t,n,r){return!t||!t.length||Fi(t,vn(r,"type.defaultProps.domain"))?n:t},mS=function(t,n){var r=t.type.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,a=r.dataKey,o=r.name,i=r.unit,s=r.formatter,l=r.tooltipType,u=r.chartType,p=r.hide;return Ve(Ve({},ie(t,!1)),{},{dataKey:a,unit:i,formatter:s,name:o||a,color:_g(t),value:It(n,a),type:l,payload:n,chartType:u,hide:p})};function Vl(e){"@babel/helpers - typeof";return Vl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vl(e)}function J3(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function eb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?J3(Object(n),!0).forEach(function(r){eY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):J3(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function eY(e,t,n){return t=tY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tY(e){var t=nY(e,"string");return Vl(t)=="symbol"?t:t+""}function nY(e,t){if(Vl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Vl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var qp=Math.PI/180,rY=function(t){return t*180/Math.PI},mt=function(t,n,r,a){return{x:t+Math.cos(-qp*a)*r,y:n+Math.sin(-qp*a)*r}},aY=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return Math.sqrt(Math.pow(r-o,2)+Math.pow(a-i,2))},oY=function(t,n){var r=t.x,a=t.y,o=n.cx,i=n.cy,s=aY({x:r,y:a},{x:o,y:i});if(s<=0)return{radius:s};var l=(r-o)/s,u=Math.acos(l);return a>i&&(u=2*Math.PI-u),{radius:s,angle:rY(u),angleInRadian:u}},iY=function(t){var n=t.startAngle,r=t.endAngle,a=Math.floor(n/360),o=Math.floor(r/360),i=Math.min(a,o);return{startAngle:n-i*360,endAngle:r-i*360}},sY=function(t,n){var r=n.startAngle,a=n.endAngle,o=Math.floor(r/360),i=Math.floor(a/360),s=Math.min(o,i);return t+s*360},tb=function(t,n){var r=t.x,a=t.y,o=oY({x:r,y:a},n),i=o.radius,s=o.angle,l=n.innerRadius,u=n.outerRadius;if(i<l||i>u)return!1;if(i===0)return!0;var p=iY(n),c=p.startAngle,f=p.endAngle,d=s,h;if(c<=f){for(;d>f;)d-=360;for(;d<c;)d+=360;h=d>=c&&d<=f}else{for(;d>c;)d-=360;for(;d<f;)d+=360;h=d>=f&&d<=c}return h?eb(eb({},n),{},{radius:i,angle:sY(d,n)}):null};function Kl(e){"@babel/helpers - typeof";return Kl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Kl(e)}var lY=["offset"];function uY(e){return dY(e)||fY(e)||pY(e)||cY()}function cY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function pY(e,t){if(e){if(typeof e=="string")return D0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return D0(e,t)}}function fY(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function dY(e){if(Array.isArray(e))return D0(e)}function D0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function mY(e,t){if(e==null)return{};var n=hY(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function nb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function nt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?nb(Object(n),!0).forEach(function(r){vY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):nb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vY(e,t,n){return t=yY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function yY(e){var t=gY(e,"string");return Kl(t)=="symbol"?t:t+""}function gY(e,t){if(Kl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Kl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Xl(){return Xl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Xl.apply(this,arguments)}var xY=function(t){var n=t.value,r=t.formatter,a=le(t.children)?n:t.children;return ae(r)?r(a):a},wY=function(t,n){var r=In(n-t),a=Math.min(Math.abs(n-t),360);return r*a},bY=function(t,n,r){var a=t.position,o=t.viewBox,i=t.offset,s=t.className,l=o,u=l.cx,p=l.cy,c=l.innerRadius,f=l.outerRadius,d=l.startAngle,h=l.endAngle,m=l.clockWise,g=(c+f)/2,v=wY(d,h),y=v>=0?1:-1,x,S;a==="insideStart"?(x=d+y*i,S=m):a==="insideEnd"?(x=h-y*i,S=!m):a==="end"&&(x=h+y*i,S=m),S=v<=0?S:!S;var w=mt(u,p,g,x),P=mt(u,p,g,x+(S?1:-1)*359),O="M".concat(w.x,",").concat(w.y,`
+    A`).concat(g,",").concat(g,",0,1,").concat(S?0:1,`,
+    `).concat(P.x,",").concat(P.y),C=le(t.id)?ys("recharts-radial-line-"):t.id;return E.createElement("text",Xl({},r,{dominantBaseline:"central",className:ue("recharts-radial-bar-label",s)}),E.createElement("defs",null,E.createElement("path",{id:C,d:O})),E.createElement("textPath",{xlinkHref:"#".concat(C)},n))},SY=function(t){var n=t.viewBox,r=t.offset,a=t.position,o=n,i=o.cx,s=o.cy,l=o.innerRadius,u=o.outerRadius,p=o.startAngle,c=o.endAngle,f=(p+c)/2;if(a==="outside"){var d=mt(i,s,u+r,f),h=d.x,m=d.y;return{x:h,y:m,textAnchor:h>=i?"start":"end",verticalAnchor:"middle"}}if(a==="center")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"middle"};if(a==="centerTop")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"start"};if(a==="centerBottom")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"end"};var g=(l+u)/2,v=mt(i,s,g,f),y=v.x,x=v.y;return{x:y,y:x,textAnchor:"middle",verticalAnchor:"middle"}},PY=function(t){var n=t.viewBox,r=t.parentViewBox,a=t.offset,o=t.position,i=n,s=i.x,l=i.y,u=i.width,p=i.height,c=p>=0?1:-1,f=c*a,d=c>0?"end":"start",h=c>0?"start":"end",m=u>=0?1:-1,g=m*a,v=m>0?"end":"start",y=m>0?"start":"end";if(o==="top"){var x={x:s+u/2,y:l-c*a,textAnchor:"middle",verticalAnchor:d};return nt(nt({},x),r?{height:Math.max(l-r.y,0),width:u}:{})}if(o==="bottom"){var S={x:s+u/2,y:l+p+f,textAnchor:"middle",verticalAnchor:h};return nt(nt({},S),r?{height:Math.max(r.y+r.height-(l+p),0),width:u}:{})}if(o==="left"){var w={x:s-g,y:l+p/2,textAnchor:v,verticalAnchor:"middle"};return nt(nt({},w),r?{width:Math.max(w.x-r.x,0),height:p}:{})}if(o==="right"){var P={x:s+u+g,y:l+p/2,textAnchor:y,verticalAnchor:"middle"};return nt(nt({},P),r?{width:Math.max(r.x+r.width-P.x,0),height:p}:{})}var O=r?{width:u,height:p}:{};return o==="insideLeft"?nt({x:s+g,y:l+p/2,textAnchor:y,verticalAnchor:"middle"},O):o==="insideRight"?nt({x:s+u-g,y:l+p/2,textAnchor:v,verticalAnchor:"middle"},O):o==="insideTop"?nt({x:s+u/2,y:l+f,textAnchor:"middle",verticalAnchor:h},O):o==="insideBottom"?nt({x:s+u/2,y:l+p-f,textAnchor:"middle",verticalAnchor:d},O):o==="insideTopLeft"?nt({x:s+g,y:l+f,textAnchor:y,verticalAnchor:h},O):o==="insideTopRight"?nt({x:s+u-g,y:l+f,textAnchor:v,verticalAnchor:h},O):o==="insideBottomLeft"?nt({x:s+g,y:l+p-f,textAnchor:y,verticalAnchor:d},O):o==="insideBottomRight"?nt({x:s+u-g,y:l+p-f,textAnchor:v,verticalAnchor:d},O):fs(o)&&(V(o.x)||Xa(o.x))&&(V(o.y)||Xa(o.y))?nt({x:s+wo(o.x,u),y:l+wo(o.y,p),textAnchor:"end",verticalAnchor:"end"},O):nt({x:s+u/2,y:l+p/2,textAnchor:"middle",verticalAnchor:"middle"},O)},OY=function(t){return"cx"in t&&V(t.cx)};function kt(e){var t=e.offset,n=t===void 0?5:t,r=mY(e,lY),a=nt({offset:n},r),o=a.viewBox,i=a.position,s=a.value,l=a.children,u=a.content,p=a.className,c=p===void 0?"":p,f=a.textBreakAll;if(!o||le(s)&&le(l)&&!k.isValidElement(u)&&!ae(u))return null;if(k.isValidElement(u))return k.cloneElement(u,a);var d;if(ae(u)){if(d=k.createElement(u,a),k.isValidElement(d))return d}else d=xY(a);var h=OY(o),m=ie(a,!0);if(h&&(i==="insideStart"||i==="insideEnd"||i==="end"))return bY(a,d,m);var g=h?SY(a):PY(a);return E.createElement(Tp,Xl({className:ue("recharts-label",c)},m,g,{breakAll:f}),d)}kt.displayName="Label";var hS=function(t){var n=t.cx,r=t.cy,a=t.angle,o=t.startAngle,i=t.endAngle,s=t.r,l=t.radius,u=t.innerRadius,p=t.outerRadius,c=t.x,f=t.y,d=t.top,h=t.left,m=t.width,g=t.height,v=t.clockWise,y=t.labelViewBox;if(y)return y;if(V(m)&&V(g)){if(V(c)&&V(f))return{x:c,y:f,width:m,height:g};if(V(d)&&V(h))return{x:d,y:h,width:m,height:g}}return V(c)&&V(f)?{x:c,y:f,width:0,height:0}:V(n)&&V(r)?{cx:n,cy:r,startAngle:o||a||0,endAngle:i||a||0,innerRadius:u||0,outerRadius:p||l||s||0,clockWise:v}:t.viewBox?t.viewBox:{}},kY=function(t,n){return t?t===!0?E.createElement(kt,{key:"label-implicit",viewBox:n}):ot(t)?E.createElement(kt,{key:"label-implicit",viewBox:n,value:t}):k.isValidElement(t)?t.type===kt?k.cloneElement(t,{key:"label-implicit",viewBox:n}):E.createElement(kt,{key:"label-implicit",content:t,viewBox:n}):ae(t)?E.createElement(kt,{key:"label-implicit",content:t,viewBox:n}):fs(t)?E.createElement(kt,Xl({viewBox:n},t,{key:"label-implicit"})):null:null},CY=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&r&&!t.label)return null;var a=t.children,o=hS(t),i=yn(a,kt).map(function(l,u){return k.cloneElement(l,{viewBox:n||o,key:"label-".concat(u)})});if(!r)return i;var s=kY(t.label,n||o);return[s].concat(uY(i))};kt.parseViewBox=hS;kt.renderCallByParent=CY;function _Y(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var AY=_Y;const EY=_e(AY);function Yl(e){"@babel/helpers - typeof";return Yl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yl(e)}var TY=["valueAccessor"],jY=["data","dataKey","clockWise","id","textBreakAll"];function $Y(e){return IY(e)||RY(e)||MY(e)||NY()}function NY(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function MY(e,t){if(e){if(typeof e=="string")return L0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return L0(e,t)}}function RY(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function IY(e){if(Array.isArray(e))return L0(e)}function L0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Vp(){return Vp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Vp.apply(this,arguments)}function rb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function ab(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?rb(Object(n),!0).forEach(function(r){DY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):rb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function DY(e,t,n){return t=LY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function LY(e){var t=FY(e,"string");return Yl(t)=="symbol"?t:t+""}function FY(e,t){if(Yl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Yl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ob(e,t){if(e==null)return{};var n=zY(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var BY=function(t){return Array.isArray(t.value)?EY(t.value):t.value};function $r(e){var t=e.valueAccessor,n=t===void 0?BY:t,r=ob(e,TY),a=r.data,o=r.dataKey,i=r.clockWise,s=r.id,l=r.textBreakAll,u=ob(r,jY);return!a||!a.length?null:E.createElement($e,{className:"recharts-label-list"},a.map(function(p,c){var f=le(o)?n(p,c):It(p&&p.payload,o),d=le(s)?{}:{id:"".concat(s,"-").concat(c)};return E.createElement(kt,Vp({},ie(p,!0),u,d,{parentViewBox:p.parentViewBox,value:f,textBreakAll:l,viewBox:kt.parseViewBox(le(i)?p:ab(ab({},p),{},{clockWise:i})),key:"label-".concat(c),index:c}))}))}$r.displayName="LabelList";function HY(e,t){return e?e===!0?E.createElement($r,{key:"labelList-implicit",data:t}):E.isValidElement(e)||ae(e)?E.createElement($r,{key:"labelList-implicit",data:t,content:e}):fs(e)?E.createElement($r,Vp({data:t},e,{key:"labelList-implicit"})):null:null}function GY(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&n&&!e.label)return null;var r=e.children,a=yn(r,$r).map(function(i,s){return k.cloneElement(i,{data:t,key:"labelList-".concat(s)})});if(!n)return a;var o=HY(e.label,t);return[o].concat($Y(a))}$r.renderCallByParent=GY;function Ql(e){"@babel/helpers - typeof";return Ql=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ql(e)}function F0(){return F0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},F0.apply(this,arguments)}function ib(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function sb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?ib(Object(n),!0).forEach(function(r){UY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ib(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function UY(e,t,n){return t=WY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function WY(e){var t=qY(e,"string");return Ql(t)=="symbol"?t:t+""}function qY(e,t){if(Ql(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ql(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var VY=function(t,n){var r=In(n-t),a=Math.min(Math.abs(n-t),359.999);return r*a},fc=function(t){var n=t.cx,r=t.cy,a=t.radius,o=t.angle,i=t.sign,s=t.isExternal,l=t.cornerRadius,u=t.cornerIsExternal,p=l*(s?1:-1)+a,c=Math.asin(l/p)/qp,f=u?o:o+i*c,d=mt(n,r,p,f),h=mt(n,r,a,f),m=u?o-i*c:o,g=mt(n,r,p*Math.cos(c*qp),m);return{center:d,circleTangency:h,lineTangency:g,theta:c}},vS=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.startAngle,s=t.endAngle,l=VY(i,s),u=i+l,p=mt(n,r,o,i),c=mt(n,r,o,u),f="M ".concat(p.x,",").concat(p.y,`
+    A `).concat(o,",").concat(o,`,0,
+    `).concat(+(Math.abs(l)>180),",").concat(+(i>u),`,
+    `).concat(c.x,",").concat(c.y,`
+  `);if(a>0){var d=mt(n,r,a,i),h=mt(n,r,a,u);f+="L ".concat(h.x,",").concat(h.y,`
+            A `).concat(a,",").concat(a,`,0,
+            `).concat(+(Math.abs(l)>180),",").concat(+(i<=u),`,
+            `).concat(d.x,",").concat(d.y," Z")}else f+="L ".concat(n,",").concat(r," Z");return f},KY=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.cornerRadius,s=t.forceCornerRadius,l=t.cornerIsExternal,u=t.startAngle,p=t.endAngle,c=In(p-u),f=fc({cx:n,cy:r,radius:o,angle:u,sign:c,cornerRadius:i,cornerIsExternal:l}),d=f.circleTangency,h=f.lineTangency,m=f.theta,g=fc({cx:n,cy:r,radius:o,angle:p,sign:-c,cornerRadius:i,cornerIsExternal:l}),v=g.circleTangency,y=g.lineTangency,x=g.theta,S=l?Math.abs(u-p):Math.abs(u-p)-m-x;if(S<0)return s?"M ".concat(h.x,",").concat(h.y,`
+        a`).concat(i,",").concat(i,",0,0,1,").concat(i*2,`,0
+        a`).concat(i,",").concat(i,",0,0,1,").concat(-i*2,`,0
+      `):vS({cx:n,cy:r,innerRadius:a,outerRadius:o,startAngle:u,endAngle:p});var w="M ".concat(h.x,",").concat(h.y,`
+    A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(d.x,",").concat(d.y,`
+    A`).concat(o,",").concat(o,",0,").concat(+(S>180),",").concat(+(c<0),",").concat(v.x,",").concat(v.y,`
+    A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(y.x,",").concat(y.y,`
+  `);if(a>0){var P=fc({cx:n,cy:r,radius:a,angle:u,sign:c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),O=P.circleTangency,C=P.lineTangency,_=P.theta,T=fc({cx:n,cy:r,radius:a,angle:p,sign:-c,isExternal:!0,cornerRadius:i,cornerIsExternal:l}),A=T.circleTangency,j=T.lineTangency,N=T.theta,M=l?Math.abs(u-p):Math.abs(u-p)-_-N;if(M<0&&i===0)return"".concat(w,"L").concat(n,",").concat(r,"Z");w+="L".concat(j.x,",").concat(j.y,`
+      A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(A.x,",").concat(A.y,`
+      A`).concat(a,",").concat(a,",0,").concat(+(M>180),",").concat(+(c>0),",").concat(O.x,",").concat(O.y,`
+      A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(C.x,",").concat(C.y,"Z")}else w+="L".concat(n,",").concat(r,"Z");return w},XY={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},yS=function(t){var n=sb(sb({},XY),t),r=n.cx,a=n.cy,o=n.innerRadius,i=n.outerRadius,s=n.cornerRadius,l=n.forceCornerRadius,u=n.cornerIsExternal,p=n.startAngle,c=n.endAngle,f=n.className;if(i<o||p===c)return null;var d=ue("recharts-sector",f),h=i-o,m=wo(s,h,0,!0),g;return m>0&&Math.abs(p-c)<360?g=KY({cx:r,cy:a,innerRadius:o,outerRadius:i,cornerRadius:Math.min(m,h/2),forceCornerRadius:l,cornerIsExternal:u,startAngle:p,endAngle:c}):g=vS({cx:r,cy:a,innerRadius:o,outerRadius:i,startAngle:p,endAngle:c}),E.createElement("path",F0({},ie(n,!0),{className:d,d:g,role:"img"}))};function Zl(e){"@babel/helpers - typeof";return Zl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zl(e)}function z0(){return z0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},z0.apply(this,arguments)}function lb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function ub(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?lb(Object(n),!0).forEach(function(r){YY(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):lb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function YY(e,t,n){return t=QY(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function QY(e){var t=ZY(e,"string");return Zl(t)=="symbol"?t:t+""}function ZY(e,t){if(Zl(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Zl(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var cb={curveBasisClosed:XR,curveBasisOpen:YR,curveBasis:KR,curveBumpX:MR,curveBumpY:RR,curveLinearClosed:QR,curveLinear:ad,curveMonotoneX:ZR,curveMonotoneY:JR,curveNatural:eI,curveStep:tI,curveStepAfter:rI,curveStepBefore:nI},dc=function(t){return t.x===+t.x&&t.y===+t.y},Bs=function(t){return t.x},Hs=function(t){return t.y},JY=function(t,n){if(ae(t))return t;var r="curve".concat(nd(t));return(r==="curveMonotone"||r==="curveBump")&&n?cb["".concat(r).concat(n==="vertical"?"Y":"X")]:cb[r]||ad},eQ=function(t){var n=t.type,r=n===void 0?"linear":n,a=t.points,o=a===void 0?[]:a,i=t.baseLine,s=t.layout,l=t.connectNulls,u=l===void 0?!1:l,p=JY(r,s),c=u?o.filter(function(m){return dc(m)}):o,f;if(Array.isArray(i)){var d=u?i.filter(function(m){return dc(m)}):i,h=c.map(function(m,g){return ub(ub({},m),{},{base:d[g]})});return s==="vertical"?f=rc().y(Hs).x1(Bs).x0(function(m){return m.base.x}):f=rc().x(Bs).y1(Hs).y0(function(m){return m.base.y}),f.defined(dc).curve(p),f(h)}return s==="vertical"&&V(i)?f=rc().y(Hs).x1(Bs).x0(i):V(i)?f=rc().x(Bs).y1(Hs).y0(i):f=y8().x(Bs).y(Hs),f.defined(dc).curve(p),f(c)},di=function(t){var n=t.className,r=t.points,a=t.path,o=t.pathRef;if((!r||!r.length)&&!a)return null;var i=r&&r.length?eQ(t):a;return k.createElement("path",z0({},ie(t,!1),hp(t),{className:ue("recharts-curve",n),d:i,ref:o}))},gS={exports:{}},tQ="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED",nQ=tQ,rQ=nQ;function xS(){}function wS(){}wS.resetWarningCache=xS;var aQ=function(){function e(r,a,o,i,s,l){if(l!==rQ){var u=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}e.isRequired=e;function t(){return e}var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:wS,resetWarningCache:xS};return n.PropTypes=n,n};gS.exports=aQ();var oQ=gS.exports;const ye=_e(oQ);var iQ=Object.getOwnPropertyNames,sQ=Object.getOwnPropertySymbols,lQ=Object.prototype.hasOwnProperty;function pb(e,t){return function(r,a,o){return e(r,a,o)&&t(r,a,o)}}function mc(e){return function(n,r,a){if(!n||!r||typeof n!="object"||typeof r!="object")return e(n,r,a);var o=a.cache,i=o.get(n),s=o.get(r);if(i&&s)return i===r&&s===n;o.set(n,r),o.set(r,n);var l=e(n,r,a);return o.delete(n),o.delete(r),l}}function fb(e){return iQ(e).concat(sQ(e))}var uQ=Object.hasOwn||function(e,t){return lQ.call(e,t)};function To(e,t){return e===t||!e&&!t&&e!==e&&t!==t}var cQ="__v",pQ="__o",fQ="_owner",db=Object.getOwnPropertyDescriptor,mb=Object.keys;function dQ(e,t,n){var r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function mQ(e,t){return To(e.getTime(),t.getTime())}function hQ(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function vQ(e,t){return e===t}function hb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.entries(),i,s,l=0;(i=o.next())&&!i.done;){for(var u=t.entries(),p=!1,c=0;(s=u.next())&&!s.done;){if(a[c]){c++;continue}var f=i.value,d=s.value;if(n.equals(f[0],d[0],l,c,e,t,n)&&n.equals(f[1],d[1],f[0],d[0],e,t,n)){p=a[c]=!0;break}c++}if(!p)return!1;l++}return!0}var yQ=To;function gQ(e,t,n){var r=mb(e),a=r.length;if(mb(t).length!==a)return!1;for(;a-- >0;)if(!bS(e,t,n,r[a]))return!1;return!0}function Gs(e,t,n){var r=fb(e),a=r.length;if(fb(t).length!==a)return!1;for(var o,i,s;a-- >0;)if(o=r[a],!bS(e,t,n,o)||(i=db(e,o),s=db(t,o),(i||s)&&(!i||!s||i.configurable!==s.configurable||i.enumerable!==s.enumerable||i.writable!==s.writable)))return!1;return!0}function xQ(e,t){return To(e.valueOf(),t.valueOf())}function wQ(e,t){return e.source===t.source&&e.flags===t.flags}function vb(e,t,n){var r=e.size;if(r!==t.size)return!1;if(!r)return!0;for(var a=new Array(r),o=e.values(),i,s;(i=o.next())&&!i.done;){for(var l=t.values(),u=!1,p=0;(s=l.next())&&!s.done;){if(!a[p]&&n.equals(i.value,s.value,i.value,s.value,e,t,n)){u=a[p]=!0;break}p++}if(!u)return!1}return!0}function bQ(e,t){var n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function SQ(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function bS(e,t,n,r){return(r===fQ||r===pQ||r===cQ)&&(e.$$typeof||t.$$typeof)?!0:uQ(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}var PQ="[object Arguments]",OQ="[object Boolean]",kQ="[object Date]",CQ="[object Error]",_Q="[object Map]",AQ="[object Number]",EQ="[object Object]",TQ="[object RegExp]",jQ="[object Set]",$Q="[object String]",NQ="[object URL]",MQ=Array.isArray,yb=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,gb=Object.assign,RQ=Object.prototype.toString.call.bind(Object.prototype.toString);function IQ(e){var t=e.areArraysEqual,n=e.areDatesEqual,r=e.areErrorsEqual,a=e.areFunctionsEqual,o=e.areMapsEqual,i=e.areNumbersEqual,s=e.areObjectsEqual,l=e.arePrimitiveWrappersEqual,u=e.areRegExpsEqual,p=e.areSetsEqual,c=e.areTypedArraysEqual,f=e.areUrlsEqual;return function(h,m,g){if(h===m)return!0;if(h==null||m==null)return!1;var v=typeof h;if(v!==typeof m)return!1;if(v!=="object")return v==="number"?i(h,m,g):v==="function"?a(h,m,g):!1;var y=h.constructor;if(y!==m.constructor)return!1;if(y===Object)return s(h,m,g);if(MQ(h))return t(h,m,g);if(yb!=null&&yb(h))return c(h,m,g);if(y===Date)return n(h,m,g);if(y===RegExp)return u(h,m,g);if(y===Map)return o(h,m,g);if(y===Set)return p(h,m,g);var x=RQ(h);return x===kQ?n(h,m,g):x===TQ?u(h,m,g):x===_Q?o(h,m,g):x===jQ?p(h,m,g):x===EQ?typeof h.then!="function"&&typeof m.then!="function"&&s(h,m,g):x===NQ?f(h,m,g):x===CQ?r(h,m,g):x===PQ?s(h,m,g):x===OQ||x===AQ||x===$Q?l(h,m,g):!1}}function DQ(e){var t=e.circular,n=e.createCustomConfig,r=e.strict,a={areArraysEqual:r?Gs:dQ,areDatesEqual:mQ,areErrorsEqual:hQ,areFunctionsEqual:vQ,areMapsEqual:r?pb(hb,Gs):hb,areNumbersEqual:yQ,areObjectsEqual:r?Gs:gQ,arePrimitiveWrappersEqual:xQ,areRegExpsEqual:wQ,areSetsEqual:r?pb(vb,Gs):vb,areTypedArraysEqual:r?Gs:bQ,areUrlsEqual:SQ};if(n&&(a=gb({},a,n(a))),t){var o=mc(a.areArraysEqual),i=mc(a.areMapsEqual),s=mc(a.areObjectsEqual),l=mc(a.areSetsEqual);a=gb({},a,{areArraysEqual:o,areMapsEqual:i,areObjectsEqual:s,areSetsEqual:l})}return a}function LQ(e){return function(t,n,r,a,o,i,s){return e(t,n,s)}}function FQ(e){var t=e.circular,n=e.comparator,r=e.createState,a=e.equals,o=e.strict;if(r)return function(l,u){var p=r(),c=p.cache,f=c===void 0?t?new WeakMap:void 0:c,d=p.meta;return n(l,u,{cache:f,equals:a,meta:d,strict:o})};if(t)return function(l,u){return n(l,u,{cache:new WeakMap,equals:a,meta:void 0,strict:o})};var i={cache:void 0,equals:a,meta:void 0,strict:o};return function(l,u){return n(l,u,i)}}var zQ=Ia();Ia({strict:!0});Ia({circular:!0});Ia({circular:!0,strict:!0});Ia({createInternalComparator:function(){return To}});Ia({strict:!0,createInternalComparator:function(){return To}});Ia({circular:!0,createInternalComparator:function(){return To}});Ia({circular:!0,createInternalComparator:function(){return To},strict:!0});function Ia(e){e===void 0&&(e={});var t=e.circular,n=t===void 0?!1:t,r=e.createInternalComparator,a=e.createState,o=e.strict,i=o===void 0?!1:o,s=DQ(e),l=IQ(s),u=r?r(l):LQ(l);return FQ({circular:n,comparator:l,createState:a,equals:u,strict:i})}function BQ(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function xb(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function a(o){n<0&&(n=o),o-n>t?(e(o),n=-1):BQ(a)};requestAnimationFrame(r)}function B0(e){"@babel/helpers - typeof";return B0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},B0(e)}function HQ(e){return qQ(e)||WQ(e)||UQ(e)||GQ()}function GQ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function UQ(e,t){if(e){if(typeof e=="string")return wb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return wb(e,t)}}function wb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function WQ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function qQ(e){if(Array.isArray(e))return e}function VQ(){var e={},t=function(){return null},n=!1,r=function a(o){if(!n){if(Array.isArray(o)){if(!o.length)return;var i=o,s=HQ(i),l=s[0],u=s.slice(1);if(typeof l=="number"){xb(a.bind(null,u),l);return}a(l),xb(a.bind(null,u));return}B0(o)==="object"&&(e=o,t(e)),typeof o=="function"&&o()}};return{stop:function(){n=!0},start:function(o){n=!1,r(o)},subscribe:function(o){return t=o,function(){t=function(){return null}}}}}function Jl(e){"@babel/helpers - typeof";return Jl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Jl(e)}function bb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Sb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?bb(Object(n),!0).forEach(function(r){SS(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function SS(e,t,n){return t=KQ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function KQ(e){var t=XQ(e,"string");return Jl(t)==="symbol"?t:String(t)}function XQ(e,t){if(Jl(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Jl(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var YQ=function(t,n){return[Object.keys(t),Object.keys(n)].reduce(function(r,a){return r.filter(function(o){return a.includes(o)})})},QQ=function(t){return t},ZQ=function(t){return t.replace(/([A-Z])/g,function(n){return"-".concat(n.toLowerCase())})},ul=function(t,n){return Object.keys(n).reduce(function(r,a){return Sb(Sb({},r),{},SS({},a,t(a,n[a])))},{})},Pb=function(t,n,r){return t.map(function(a){return"".concat(ZQ(a)," ").concat(n,"ms ").concat(r)}).join(",")};function JQ(e,t){return nZ(e)||tZ(e,t)||PS(e,t)||eZ()}function eZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function nZ(e){if(Array.isArray(e))return e}function rZ(e){return iZ(e)||oZ(e)||PS(e)||aZ()}function aZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function PS(e,t){if(e){if(typeof e=="string")return H0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H0(e,t)}}function oZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function iZ(e){if(Array.isArray(e))return H0(e)}function H0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Kp=1e-4,OS=function(t,n){return[0,3*t,3*n-6*t,3*t-3*n+1]},kS=function(t,n){return t.map(function(r,a){return r*Math.pow(n,a)}).reduce(function(r,a){return r+a})},Ob=function(t,n){return function(r){var a=OS(t,n);return kS(a,r)}},sZ=function(t,n){return function(r){var a=OS(t,n),o=[].concat(rZ(a.map(function(i,s){return i*s}).slice(1)),[0]);return kS(o,r)}},kb=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0],o=n[1],i=n[2],s=n[3];if(n.length===1)switch(n[0]){case"linear":a=0,o=0,i=1,s=1;break;case"ease":a=.25,o=.1,i=.25,s=1;break;case"ease-in":a=.42,o=0,i=1,s=1;break;case"ease-out":a=.42,o=0,i=.58,s=1;break;case"ease-in-out":a=0,o=0,i=.58,s=1;break;default:{var l=n[0].split("(");if(l[0]==="cubic-bezier"&&l[1].split(")")[0].split(",").length===4){var u=l[1].split(")")[0].split(",").map(function(g){return parseFloat(g)}),p=JQ(u,4);a=p[0],o=p[1],i=p[2],s=p[3]}}}var c=Ob(a,i),f=Ob(o,s),d=sZ(a,i),h=function(v){return v>1?1:v<0?0:v},m=function(v){for(var y=v>1?1:v,x=y,S=0;S<8;++S){var w=c(x)-y,P=d(x);if(Math.abs(w-y)<Kp||P<Kp)return f(x);x=h(x-w/P)}return f(x)};return m.isStepper=!1,m},lZ=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=t.stiff,r=n===void 0?100:n,a=t.damping,o=a===void 0?8:a,i=t.dt,s=i===void 0?17:i,l=function(p,c,f){var d=-(p-c)*r,h=f*o,m=f+(d-h)*s/1e3,g=f*s/1e3+p;return Math.abs(g-c)<Kp&&Math.abs(m)<Kp?[c,0]:[g,m]};return l.isStepper=!0,l.dt=s,l},uZ=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];var a=n[0];if(typeof a=="string")switch(a){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return kb(a);case"spring":return lZ();default:if(a.split("(")[0]==="cubic-bezier")return kb(a)}return typeof a=="function"?a:null};function eu(e){"@babel/helpers - typeof";return eu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},eu(e)}function Cb(e){return fZ(e)||pZ(e)||CS(e)||cZ()}function cZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function pZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function fZ(e){if(Array.isArray(e))return U0(e)}function _b(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function pt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?_b(Object(n),!0).forEach(function(r){G0(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):_b(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function G0(e,t,n){return t=dZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function dZ(e){var t=mZ(e,"string");return eu(t)==="symbol"?t:String(t)}function mZ(e,t){if(eu(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(eu(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function hZ(e,t){return gZ(e)||yZ(e,t)||CS(e,t)||vZ()}function vZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function CS(e,t){if(e){if(typeof e=="string")return U0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return U0(e,t)}}function U0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function yZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function gZ(e){if(Array.isArray(e))return e}var Xp=function(t,n,r){return t+(n-t)*r},W0=function(t){var n=t.from,r=t.to;return n!==r},xZ=function e(t,n,r){var a=ul(function(o,i){if(W0(i)){var s=t(i.from,i.to,i.velocity),l=hZ(s,2),u=l[0],p=l[1];return pt(pt({},i),{},{from:u,velocity:p})}return i},n);return r<1?ul(function(o,i){return W0(i)?pt(pt({},i),{},{velocity:Xp(i.velocity,a[o].velocity,r),from:Xp(i.from,a[o].from,r)}):i},n):e(t,a,r-1)};const wZ=function(e,t,n,r,a){var o=YQ(e,t),i=o.reduce(function(g,v){return pt(pt({},g),{},G0({},v,[e[v],t[v]]))},{}),s=o.reduce(function(g,v){return pt(pt({},g),{},G0({},v,{from:e[v],velocity:0,to:t[v]}))},{}),l=-1,u,p,c=function(){return null},f=function(){return ul(function(v,y){return y.from},s)},d=function(){return!Object.values(s).filter(W0).length},h=function(v){u||(u=v);var y=v-u,x=y/n.dt;s=xZ(n,s,x),a(pt(pt(pt({},e),t),f())),u=v,d()||(l=requestAnimationFrame(c))},m=function(v){p||(p=v);var y=(v-p)/r,x=ul(function(w,P){return Xp.apply(void 0,Cb(P).concat([n(y)]))},i);if(a(pt(pt(pt({},e),t),x)),y<1)l=requestAnimationFrame(c);else{var S=ul(function(w,P){return Xp.apply(void 0,Cb(P).concat([n(1)]))},i);a(pt(pt(pt({},e),t),S))}};return c=n.isStepper?h:m,function(){return requestAnimationFrame(c),function(){cancelAnimationFrame(l)}}};function Bi(e){"@babel/helpers - typeof";return Bi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Bi(e)}var bZ=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function SZ(e,t){if(e==null)return{};var n=PZ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PZ(e,t){if(e==null)return{};var n={},r=Object.keys(e),a,o;for(o=0;o<r.length;o++)a=r[o],!(t.indexOf(a)>=0)&&(n[a]=e[a]);return n}function Dm(e){return _Z(e)||CZ(e)||kZ(e)||OZ()}function OZ(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function kZ(e,t){if(e){if(typeof e=="string")return q0(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return q0(e,t)}}function CZ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function _Z(e){if(Array.isArray(e))return q0(e)}function q0(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ab(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function kn(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Ab(Object(n),!0).forEach(function(r){Ys(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ab(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Ys(e,t,n){return t=_S(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function AZ(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function EZ(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,_S(r.key),r)}}function TZ(e,t,n){return t&&EZ(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function _S(e){var t=jZ(e,"string");return Bi(t)==="symbol"?t:String(t)}function jZ(e,t){if(Bi(e)!=="object"||e===null)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Bi(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function $Z(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&V0(e,t)}function V0(e,t){return V0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},V0(e,t)}function NZ(e){var t=MZ();return function(){var r=Yp(e),a;if(t){var o=Yp(this).constructor;a=Reflect.construct(r,arguments,o)}else a=r.apply(this,arguments);return K0(this,a)}}function K0(e,t){if(t&&(Bi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return X0(e)}function X0(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function MZ(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Yp(e){return Yp=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},Yp(e)}var mr=function(e){$Z(n,e);var t=NZ(n);function n(r,a){var o;AZ(this,n),o=t.call(this,r,a);var i=o.props,s=i.isActive,l=i.attributeName,u=i.from,p=i.to,c=i.steps,f=i.children,d=i.duration;if(o.handleStyleChange=o.handleStyleChange.bind(X0(o)),o.changeStyle=o.changeStyle.bind(X0(o)),!s||d<=0)return o.state={style:{}},typeof f=="function"&&(o.state={style:p}),K0(o);if(c&&c.length)o.state={style:c[0].style};else if(u){if(typeof f=="function")return o.state={style:u},K0(o);o.state={style:l?Ys({},l,u):u}}else o.state={style:{}};return o}return TZ(n,[{key:"componentDidMount",value:function(){var a=this.props,o=a.isActive,i=a.canBegin;this.mounted=!0,!(!o||!i)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(a){var o=this.props,i=o.isActive,s=o.canBegin,l=o.attributeName,u=o.shouldReAnimate,p=o.to,c=o.from,f=this.state.style;if(s){if(!i){var d={style:l?Ys({},l,p):p};this.state&&f&&(l&&f[l]!==p||!l&&f!==p)&&this.setState(d);return}if(!(zQ(a.to,p)&&a.canBegin&&a.isActive)){var h=!a.canBegin||!a.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var m=h||u?c:a.to;if(this.state&&f){var g={style:l?Ys({},l,m):m};(l&&f[l]!==m||!l&&f!==m)&&this.setState(g)}this.runAnimation(kn(kn({},this.props),{},{from:m,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var a=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),a&&a()}},{key:"handleStyleChange",value:function(a){this.changeStyle(a)}},{key:"changeStyle",value:function(a){this.mounted&&this.setState({style:a})}},{key:"runJSAnimation",value:function(a){var o=this,i=a.from,s=a.to,l=a.duration,u=a.easing,p=a.begin,c=a.onAnimationEnd,f=a.onAnimationStart,d=wZ(i,s,uZ(u),l,this.changeStyle),h=function(){o.stopJSAnimation=d()};this.manager.start([f,p,h,l,c])}},{key:"runStepAnimation",value:function(a){var o=this,i=a.steps,s=a.begin,l=a.onAnimationStart,u=i[0],p=u.style,c=u.duration,f=c===void 0?0:c,d=function(m,g,v){if(v===0)return m;var y=g.duration,x=g.easing,S=x===void 0?"ease":x,w=g.style,P=g.properties,O=g.onAnimationEnd,C=v>0?i[v-1]:g,_=P||Object.keys(w);if(typeof S=="function"||S==="spring")return[].concat(Dm(m),[o.runJSAnimation.bind(o,{from:C.style,to:w,duration:y,easing:S}),y]);var T=Pb(_,y,S),A=kn(kn(kn({},C.style),w),{},{transition:T});return[].concat(Dm(m),[A,y,O]).filter(QQ)};return this.manager.start([l].concat(Dm(i.reduce(d,[p,Math.max(f,s)])),[a.onAnimationEnd]))}},{key:"runAnimation",value:function(a){this.manager||(this.manager=VQ());var o=a.begin,i=a.duration,s=a.attributeName,l=a.to,u=a.easing,p=a.onAnimationStart,c=a.onAnimationEnd,f=a.steps,d=a.children,h=this.manager;if(this.unSubscribe=h.subscribe(this.handleStyleChange),typeof u=="function"||typeof d=="function"||u==="spring"){this.runJSAnimation(a);return}if(f.length>1){this.runStepAnimation(a);return}var m=s?Ys({},s,l):l,g=Pb(Object.keys(m),i,u);h.start([p,o,kn(kn({},m),{},{transition:g}),i,c])}},{key:"render",value:function(){var a=this.props,o=a.children;a.begin;var i=a.duration;a.attributeName,a.easing;var s=a.isActive;a.steps,a.from,a.to,a.canBegin,a.onAnimationEnd,a.shouldReAnimate,a.onAnimationReStart;var l=SZ(a,bZ),u=k.Children.count(o),p=this.state.style;if(typeof o=="function")return o(p);if(!s||u===0||i<=0)return o;var c=function(d){var h=d.props,m=h.style,g=m===void 0?{}:m,v=h.className,y=k.cloneElement(d,kn(kn({},l),{},{style:kn(kn({},g),p),className:v}));return y};return u===1?c(k.Children.only(o)):E.createElement("div",null,k.Children.map(o,function(f){return c(f)}))}}]),n}(k.PureComponent);mr.displayName="Animate";mr.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};mr.propTypes={from:ye.oneOfType([ye.object,ye.string]),to:ye.oneOfType([ye.object,ye.string]),attributeName:ye.string,duration:ye.number,begin:ye.number,easing:ye.oneOfType([ye.string,ye.func]),steps:ye.arrayOf(ye.shape({duration:ye.number.isRequired,style:ye.object.isRequired,easing:ye.oneOfType([ye.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ye.func]),properties:ye.arrayOf("string"),onAnimationEnd:ye.func})),children:ye.oneOfType([ye.node,ye.func]),isActive:ye.bool,canBegin:ye.bool,onAnimationEnd:ye.func,shouldReAnimate:ye.bool,onAnimationStart:ye.func,onAnimationReStart:ye.func};function tu(e){"@babel/helpers - typeof";return tu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},tu(e)}function Qp(){return Qp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Qp.apply(this,arguments)}function RZ(e,t){return FZ(e)||LZ(e,t)||DZ(e,t)||IZ()}function IZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function DZ(e,t){if(e){if(typeof e=="string")return Eb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Eb(e,t)}}function Eb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function LZ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function FZ(e){if(Array.isArray(e))return e}function Tb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function jb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Tb(Object(n),!0).forEach(function(r){zZ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Tb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zZ(e,t,n){return t=BZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function BZ(e){var t=HZ(e,"string");return tu(t)=="symbol"?t:t+""}function HZ(e,t){if(tu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(tu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var $b=function(t,n,r,a,o){var i=Math.min(Math.abs(r)/2,Math.abs(a)/2),s=a>=0?1:-1,l=r>=0?1:-1,u=a>=0&&r>=0||a<0&&r<0?1:0,p;if(i>0&&o instanceof Array){for(var c=[0,0,0,0],f=0,d=4;f<d;f++)c[f]=o[f]>i?i:o[f];p="M".concat(t,",").concat(n+s*c[0]),c[0]>0&&(p+="A ".concat(c[0],",").concat(c[0],",0,0,").concat(u,",").concat(t+l*c[0],",").concat(n)),p+="L ".concat(t+r-l*c[1],",").concat(n),c[1]>0&&(p+="A ".concat(c[1],",").concat(c[1],",0,0,").concat(u,`,
+        `).concat(t+r,",").concat(n+s*c[1])),p+="L ".concat(t+r,",").concat(n+a-s*c[2]),c[2]>0&&(p+="A ".concat(c[2],",").concat(c[2],",0,0,").concat(u,`,
+        `).concat(t+r-l*c[2],",").concat(n+a)),p+="L ".concat(t+l*c[3],",").concat(n+a),c[3]>0&&(p+="A ".concat(c[3],",").concat(c[3],",0,0,").concat(u,`,
+        `).concat(t,",").concat(n+a-s*c[3])),p+="Z"}else if(i>0&&o===+o&&o>0){var h=Math.min(i,o);p="M ".concat(t,",").concat(n+s*h,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+l*h,",").concat(n,`
+            L `).concat(t+r-l*h,",").concat(n,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+r,",").concat(n+s*h,`
+            L `).concat(t+r,",").concat(n+a-s*h,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t+r-l*h,",").concat(n+a,`
+            L `).concat(t+l*h,",").concat(n+a,`
+            A `).concat(h,",").concat(h,",0,0,").concat(u,",").concat(t,",").concat(n+a-s*h," Z")}else p="M ".concat(t,",").concat(n," h ").concat(r," v ").concat(a," h ").concat(-r," Z");return p},GZ=function(t,n){if(!t||!n)return!1;var r=t.x,a=t.y,o=n.x,i=n.y,s=n.width,l=n.height;if(Math.abs(s)>0&&Math.abs(l)>0){var u=Math.min(o,o+s),p=Math.max(o,o+s),c=Math.min(i,i+l),f=Math.max(i,i+l);return r>=u&&r<=p&&a>=c&&a<=f}return!1},UZ={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},Ag=function(t){var n=jb(jb({},UZ),t),r=k.useRef(),a=k.useState(-1),o=RZ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var S=r.current.getTotalLength();S&&s(S)}catch{}},[]);var l=n.x,u=n.y,p=n.width,c=n.height,f=n.radius,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isAnimationActive,y=n.isUpdateAnimationActive;if(l!==+l||u!==+u||p!==+p||c!==+c||p===0||c===0)return null;var x=ue("recharts-rectangle",d);return y?E.createElement(mr,{canBegin:i>0,from:{width:p,height:c,x:l,y:u},to:{width:p,height:c,x:l,y:u},duration:m,animationEasing:h,isActive:y},function(S){var w=S.width,P=S.height,O=S.x,C=S.y;return E.createElement(mr,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,isActive:v,easing:h},E.createElement("path",Qp({},ie(n,!0),{className:x,d:$b(O,C,w,P,f),ref:r})))}):E.createElement("path",Qp({},ie(n,!0),{className:x,d:$b(l,u,p,c,f)}))};function Y0(){return Y0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Y0.apply(this,arguments)}var gd=function(t){var n=t.cx,r=t.cy,a=t.r,o=t.className,i=ue("recharts-dot",o);return n===+n&&r===+r&&a===+a?k.createElement("circle",Y0({},ie(t,!1),hp(t),{className:i,cx:n,cy:r,r:a})):null};function nu(e){"@babel/helpers - typeof";return nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},nu(e)}var WZ=["x","y","top","left","width","height","className"];function Q0(){return Q0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Q0.apply(this,arguments)}function Nb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function qZ(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Nb(Object(n),!0).forEach(function(r){VZ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Nb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function VZ(e,t,n){return t=KZ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function KZ(e){var t=XZ(e,"string");return nu(t)=="symbol"?t:t+""}function XZ(e,t){if(nu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(nu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function YZ(e,t){if(e==null)return{};var n=QZ(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function QZ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var ZZ=function(t,n,r,a,o,i){return"M".concat(t,",").concat(o,"v").concat(a,"M").concat(i,",").concat(n,"h").concat(r)},JZ=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.top,s=i===void 0?0:i,l=t.left,u=l===void 0?0:l,p=t.width,c=p===void 0?0:p,f=t.height,d=f===void 0?0:f,h=t.className,m=YZ(t,WZ),g=qZ({x:r,y:o,top:s,left:u,width:c,height:d},m);return!V(r)||!V(o)||!V(c)||!V(d)||!V(s)||!V(u)?null:E.createElement("path",Q0({},ie(g,!0),{className:ue("recharts-cross",h),d:ZZ(r,o,c,d,s,u)}))},eJ=B8,tJ=eJ(Object.getPrototypeOf,Object),nJ=tJ,rJ=Gr,aJ=nJ,oJ=Ur,iJ="[object Object]",sJ=Function.prototype,lJ=Object.prototype,AS=sJ.toString,uJ=lJ.hasOwnProperty,cJ=AS.call(Object);function pJ(e){if(!oJ(e)||rJ(e)!=iJ)return!1;var t=aJ(e);if(t===null)return!0;var n=uJ.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&AS.call(n)==cJ}var fJ=pJ;const dJ=_e(fJ);var mJ=Gr,hJ=Ur,vJ="[object Boolean]";function yJ(e){return e===!0||e===!1||hJ(e)&&mJ(e)==vJ}var gJ=yJ;const xJ=_e(gJ);function ru(e){"@babel/helpers - typeof";return ru=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ru(e)}function Zp(){return Zp=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zp.apply(this,arguments)}function wJ(e,t){return OJ(e)||PJ(e,t)||SJ(e,t)||bJ()}function bJ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function SJ(e,t){if(e){if(typeof e=="string")return Mb(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Mb(e,t)}}function Mb(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function PJ(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function OJ(e){if(Array.isArray(e))return e}function Rb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ib(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Rb(Object(n),!0).forEach(function(r){kJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Rb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function kJ(e,t,n){return t=CJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function CJ(e){var t=_J(e,"string");return ru(t)=="symbol"?t:t+""}function _J(e,t){if(ru(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(ru(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Db=function(t,n,r,a,o){var i=r-a,s;return s="M ".concat(t,",").concat(n),s+="L ".concat(t+r,",").concat(n),s+="L ".concat(t+r-i/2,",").concat(n+o),s+="L ".concat(t+r-i/2-a,",").concat(n+o),s+="L ".concat(t,",").concat(n," Z"),s},AJ={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},EJ=function(t){var n=Ib(Ib({},AJ),t),r=k.useRef(),a=k.useState(-1),o=wJ(a,2),i=o[0],s=o[1];k.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var x=r.current.getTotalLength();x&&s(x)}catch{}},[]);var l=n.x,u=n.y,p=n.upperWidth,c=n.lowerWidth,f=n.height,d=n.className,h=n.animationEasing,m=n.animationDuration,g=n.animationBegin,v=n.isUpdateAnimationActive;if(l!==+l||u!==+u||p!==+p||c!==+c||f!==+f||p===0&&c===0||f===0)return null;var y=ue("recharts-trapezoid",d);return v?E.createElement(mr,{canBegin:i>0,from:{upperWidth:0,lowerWidth:0,height:f,x:l,y:u},to:{upperWidth:p,lowerWidth:c,height:f,x:l,y:u},duration:m,animationEasing:h,isActive:v},function(x){var S=x.upperWidth,w=x.lowerWidth,P=x.height,O=x.x,C=x.y;return E.createElement(mr,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:g,duration:m,easing:h},E.createElement("path",Zp({},ie(n,!0),{className:y,d:Db(O,C,S,w,P),ref:r})))}):E.createElement("g",null,E.createElement("path",Zp({},ie(n,!0),{className:y,d:Db(l,u,p,c,f)})))},TJ=["option","shapeType","propTransformer","activeClassName","isActive"];function au(e){"@babel/helpers - typeof";return au=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},au(e)}function jJ(e,t){if(e==null)return{};var n=$J(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function $J(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Lb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Jp(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Lb(Object(n),!0).forEach(function(r){NJ(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Lb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function NJ(e,t,n){return t=MJ(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function MJ(e){var t=RJ(e,"string");return au(t)=="symbol"?t:t+""}function RJ(e,t){if(au(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(au(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function IJ(e,t){return Jp(Jp({},t),e)}function DJ(e,t){return e==="symbols"}function Fb(e){var t=e.shapeType,n=e.elementProps;switch(t){case"rectangle":return E.createElement(Ag,n);case"trapezoid":return E.createElement(EJ,n);case"sector":return E.createElement(yS,n);case"symbols":if(DJ(t))return E.createElement(Vy,n);break;default:return null}}function LJ(e){return k.isValidElement(e)?e.props:e}function FJ(e){var t=e.option,n=e.shapeType,r=e.propTransformer,a=r===void 0?IJ:r,o=e.activeClassName,i=o===void 0?"recharts-active-shape":o,s=e.isActive,l=jJ(e,TJ),u;if(k.isValidElement(t))u=k.cloneElement(t,Jp(Jp({},l),LJ(t)));else if(ae(t))u=t(l);else if(dJ(t)&&!xJ(t)){var p=a(t,l);u=E.createElement(Fb,{shapeType:n,elementProps:p})}else{var c=l;u=E.createElement(Fb,{shapeType:n,elementProps:c})}return s?E.createElement($e,{className:i},u):u}function xd(e,t){return t!=null&&"trapezoids"in e.props}function wd(e,t){return t!=null&&"sectors"in e.props}function ou(e,t){return t!=null&&"points"in e.props}function zJ(e,t){var n,r,a=e.x===(t==null||(n=t.labelViewBox)===null||n===void 0?void 0:n.x)||e.x===t.x,o=e.y===(t==null||(r=t.labelViewBox)===null||r===void 0?void 0:r.y)||e.y===t.y;return a&&o}function BJ(e,t){var n=e.endAngle===t.endAngle,r=e.startAngle===t.startAngle;return n&&r}function HJ(e,t){var n=e.x===t.x,r=e.y===t.y,a=e.z===t.z;return n&&r&&a}function GJ(e,t){var n;return xd(e,t)?n=zJ:wd(e,t)?n=BJ:ou(e,t)&&(n=HJ),n}function UJ(e,t){var n;return xd(e,t)?n="trapezoids":wd(e,t)?n="sectors":ou(e,t)&&(n="points"),n}function WJ(e,t){if(xd(e,t)){var n;return(n=t.tooltipPayload)===null||n===void 0||(n=n[0])===null||n===void 0||(n=n.payload)===null||n===void 0?void 0:n.payload}if(wd(e,t)){var r;return(r=t.tooltipPayload)===null||r===void 0||(r=r[0])===null||r===void 0||(r=r.payload)===null||r===void 0?void 0:r.payload}return ou(e,t)?t.payload:{}}function qJ(e){var t=e.activeTooltipItem,n=e.graphicalItem,r=e.itemData,a=UJ(n,t),o=WJ(n,t),i=r.filter(function(l,u){var p=Fi(o,l),c=n.props[a].filter(function(h){var m=GJ(n,t);return m(h,t)}),f=n.props[a].indexOf(c[c.length-1]),d=u===f;return p&&d}),s=r.indexOf(i[i.length-1]);return s}var VJ=Math.ceil,KJ=Math.max;function XJ(e,t,n,r){for(var a=-1,o=KJ(VJ((t-e)/(n||1)),0),i=Array(o);o--;)i[r?o:++a]=e,e+=n;return i}var YJ=XJ,QJ=i7,zb=1/0,ZJ=17976931348623157e292;function JJ(e){if(!e)return e===0?e:0;if(e=QJ(e),e===zb||e===-zb){var t=e<0?-1:1;return t*ZJ}return e===e?e:0}var ES=JJ,eee=YJ,tee=ld,Lm=ES;function nee(e){return function(t,n,r){return r&&typeof r!="number"&&tee(t,n,r)&&(n=r=void 0),t=Lm(t),n===void 0?(n=t,t=0):n=Lm(n),r=r===void 0?t<n?1:-1:Lm(r),eee(t,n,r,e)}}var ree=nee,aee=ree,oee=aee(),iee=oee;const ef=_e(iee);function iu(e){"@babel/helpers - typeof";return iu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},iu(e)}function Bb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Hb(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Bb(Object(n),!0).forEach(function(r){TS(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Bb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function TS(e,t,n){return t=see(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function see(e){var t=lee(e,"string");return iu(t)=="symbol"?t:t+""}function lee(e,t){if(iu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(iu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var uee=["Webkit","Moz","O","ms"],cee=function(t,n){var r=t.replace(/(\w)/,function(o){return o.toUpperCase()}),a=uee.reduce(function(o,i){return Hb(Hb({},o),{},TS({},i+r,n))},{});return a[t]=n,a};function Hi(e){"@babel/helpers - typeof";return Hi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hi(e)}function tf(){return tf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},tf.apply(this,arguments)}function Gb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Fm(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Gb(Object(n),!0).forEach(function(r){Kt(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Gb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function pee(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ub(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,$S(r.key),r)}}function fee(e,t,n){return t&&Ub(e.prototype,t),n&&Ub(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function dee(e,t,n){return t=nf(t),mee(e,jS()?Reflect.construct(t,n||[],nf(e).constructor):t.apply(e,n))}function mee(e,t){if(t&&(Hi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return hee(e)}function hee(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function jS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(jS=function(){return!!e})()}function nf(e){return nf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},nf(e)}function vee(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Z0(e,t)}function Z0(e,t){return Z0=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},Z0(e,t)}function Kt(e,t,n){return t=$S(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $S(e){var t=yee(e,"string");return Hi(t)=="symbol"?t:t+""}function yee(e,t){if(Hi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Hi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var gee=function(t){var n=t.data,r=t.startIndex,a=t.endIndex,o=t.x,i=t.width,s=t.travellerWidth;if(!n||!n.length)return{};var l=n.length,u=sl().domain(ef(0,l)).range([o,o+i-s]),p=u.domain().map(function(c){return u(c)});return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:u(r),endX:u(a),scale:u,scaleValues:p}},Wb=function(t){return t.changedTouches&&!!t.changedTouches.length},Gi=function(e){function t(n){var r;return pee(this,t),r=dee(this,t,[n]),Kt(r,"handleDrag",function(a){r.leaveTimer&&(clearTimeout(r.leaveTimer),r.leaveTimer=null),r.state.isTravellerMoving?r.handleTravellerMove(a):r.state.isSlideMoving&&r.handleSlideDrag(a)}),Kt(r,"handleTouchMove",function(a){a.changedTouches!=null&&a.changedTouches.length>0&&r.handleDrag(a.changedTouches[0])}),Kt(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var a=r.props,o=a.endIndex,i=a.onDragEnd,s=a.startIndex;i==null||i({endIndex:o,startIndex:s})}),r.detachDragEndListener()}),Kt(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Kt(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Kt(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Kt(r,"handleSlideDragStart",function(a){var o=Wb(a)?a.changedTouches[0]:a;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return vee(t,e),fee(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var a=r.startX,o=r.endX,i=this.state.scaleValues,s=this.props,l=s.gap,u=s.data,p=u.length-1,c=Math.min(a,o),f=Math.max(a,o),d=t.getIndexInRange(i,c),h=t.getIndexInRange(i,f);return{startIndex:d-d%l,endIndex:h===p?p:h-h%l}}},{key:"getTextOfTick",value:function(r){var a=this.props,o=a.data,i=a.tickFormatter,s=a.dataKey,l=It(o[r],s,r);return ae(i)?i(l,r):l}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var a=this.state,o=a.slideMoveStartX,i=a.startX,s=a.endX,l=this.props,u=l.x,p=l.width,c=l.travellerWidth,f=l.startIndex,d=l.endIndex,h=l.onChange,m=r.pageX-o;m>0?m=Math.min(m,u+p-c-s,u+p-c-i):m<0&&(m=Math.max(m,u-i,u-s));var g=this.getIndex({startX:i+m,endX:s+m});(g.startIndex!==f||g.endIndex!==d)&&h&&h(g),this.setState({startX:i+m,endX:s+m,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,a){var o=Wb(a)?a.changedTouches[0]:a;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var a=this.state,o=a.brushMoveStartX,i=a.movingTravellerId,s=a.endX,l=a.startX,u=this.state[i],p=this.props,c=p.x,f=p.width,d=p.travellerWidth,h=p.onChange,m=p.gap,g=p.data,v={startX:this.state.startX,endX:this.state.endX},y=r.pageX-o;y>0?y=Math.min(y,c+f-d-u):y<0&&(y=Math.max(y,c-u)),v[i]=u+y;var x=this.getIndex(v),S=x.startIndex,w=x.endIndex,P=function(){var C=g.length-1;return i==="startX"&&(s>l?S%m===0:w%m===0)||s<l&&w===C||i==="endX"&&(s>l?w%m===0:S%m===0)||s>l&&w===C};this.setState(Kt(Kt({},i,u+y),"brushMoveStartX",r.pageX),function(){h&&P()&&h(x)})}},{key:"handleTravellerMoveKeyboard",value:function(r,a){var o=this,i=this.state,s=i.scaleValues,l=i.startX,u=i.endX,p=this.state[a],c=s.indexOf(p);if(c!==-1){var f=c+r;if(!(f===-1||f>=s.length)){var d=s[f];a==="startX"&&d>=u||a==="endX"&&d<=l||this.setState(Kt({},a,d),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.fill,u=r.stroke;return E.createElement("rect",{stroke:u,fill:l,x:a,y:o,width:i,height:s})}},{key:"renderPanorama",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.data,u=r.children,p=r.padding,c=k.Children.only(u);return c?E.cloneElement(c,{x:a,y:o,width:i,height:s,margin:p,compact:!0,data:l}):null}},{key:"renderTravellerLayer",value:function(r,a){var o,i,s=this,l=this.props,u=l.y,p=l.travellerWidth,c=l.height,f=l.traveller,d=l.ariaLabel,h=l.data,m=l.startIndex,g=l.endIndex,v=Math.max(r,this.props.x),y=Fm(Fm({},ie(this.props,!1)),{},{x:v,y:u,width:p,height:c}),x=d||"Min value: ".concat((o=h[m])===null||o===void 0?void 0:o.name,", Max value: ").concat((i=h[g])===null||i===void 0?void 0:i.name);return E.createElement($e,{tabIndex:0,role:"slider","aria-label":x,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[a],onTouchStart:this.travellerDragStartHandlers[a],onKeyDown:function(w){["ArrowLeft","ArrowRight"].includes(w.key)&&(w.preventDefault(),w.stopPropagation(),s.handleTravellerMoveKeyboard(w.key==="ArrowRight"?1:-1,a))},onFocus:function(){s.setState({isTravellerFocused:!0})},onBlur:function(){s.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(f,y))}},{key:"renderSlide",value:function(r,a){var o=this.props,i=o.y,s=o.height,l=o.stroke,u=o.travellerWidth,p=Math.min(r,a)+u,c=Math.max(Math.abs(a-r)-u,0);return E.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:l,fillOpacity:.2,x:p,y:i,width:c,height:s})}},{key:"renderText",value:function(){var r=this.props,a=r.startIndex,o=r.endIndex,i=r.y,s=r.height,l=r.travellerWidth,u=r.stroke,p=this.state,c=p.startX,f=p.endX,d=5,h={pointerEvents:"none",fill:u};return E.createElement($e,{className:"recharts-brush-texts"},E.createElement(Tp,tf({textAnchor:"end",verticalAnchor:"middle",x:Math.min(c,f)-d,y:i+s/2},h),this.getTextOfTick(a)),E.createElement(Tp,tf({textAnchor:"start",verticalAnchor:"middle",x:Math.max(c,f)+l+d,y:i+s/2},h),this.getTextOfTick(o)))}},{key:"render",value:function(){var r=this.props,a=r.data,o=r.className,i=r.children,s=r.x,l=r.y,u=r.width,p=r.height,c=r.alwaysShowText,f=this.state,d=f.startX,h=f.endX,m=f.isTextActive,g=f.isSlideMoving,v=f.isTravellerMoving,y=f.isTravellerFocused;if(!a||!a.length||!V(s)||!V(l)||!V(u)||!V(p)||u<=0||p<=0)return null;var x=ue("recharts-brush",o),S=E.Children.count(i)===1,w=cee("userSelect","none");return E.createElement($e,{className:x,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:w},this.renderBackground(),S&&this.renderPanorama(),this.renderSlide(d,h),this.renderTravellerLayer(d,"startX"),this.renderTravellerLayer(h,"endX"),(m||g||v||y||c)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var a=r.x,o=r.y,i=r.width,s=r.height,l=r.stroke,u=Math.floor(o+s/2)-1;return E.createElement(E.Fragment,null,E.createElement("rect",{x:a,y:o,width:i,height:s,fill:l,stroke:"none"}),E.createElement("line",{x1:a+1,y1:u,x2:a+i-1,y2:u,fill:"none",stroke:"#fff"}),E.createElement("line",{x1:a+1,y1:u+2,x2:a+i-1,y2:u+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,a){var o;return E.isValidElement(r)?o=E.cloneElement(r,a):ae(r)?o=r(a):o=t.renderDefaultTraveller(a),o}},{key:"getDerivedStateFromProps",value:function(r,a){var o=r.data,i=r.width,s=r.x,l=r.travellerWidth,u=r.updateId,p=r.startIndex,c=r.endIndex;if(o!==a.prevData||u!==a.prevUpdateId)return Fm({prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i},o&&o.length?gee({data:o,width:i,x:s,travellerWidth:l,startIndex:p,endIndex:c}):{scale:null,scaleValues:null});if(a.scale&&(i!==a.prevWidth||s!==a.prevX||l!==a.prevTravellerWidth)){a.scale.range([s,s+i-l]);var f=a.scale.domain().map(function(d){return a.scale(d)});return{prevData:o,prevTravellerWidth:l,prevUpdateId:u,prevX:s,prevWidth:i,startX:a.scale(r.startIndex),endX:a.scale(r.endIndex),scaleValues:f}}return null}},{key:"getIndexInRange",value:function(r,a){for(var o=r.length,i=0,s=o-1;s-i>1;){var l=Math.floor((i+s)/2);r[l]>a?s=l:i=l}return a>=r[s]?s:i}}])}(k.PureComponent);Kt(Gi,"displayName","Brush");Kt(Gi,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var xee=eg;function wee(e,t){var n;return xee(e,function(r,a,o){return n=t(r,a,o),!n}),!!n}var bee=wee,See=N8,Pee=Na,Oee=bee,kee=qt,Cee=ld;function _ee(e,t,n){var r=kee(e)?See:Oee;return n&&Cee(e,t,n)&&(t=void 0),r(e,Pee(t))}var Aee=_ee;const Eee=_e(Aee);var pr=function(t,n){var r=t.alwaysShow,a=t.ifOverflow;return r&&(a="extendDomain"),a===n},qb=t7;function Tee(e,t,n){t=="__proto__"&&qb?qb(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var jee=Tee,$ee=jee,Nee=J8,Mee=Na;function Ree(e,t){var n={};return t=Mee(t),Nee(e,function(r,a,o){$ee(n,a,t(r,a,o))}),n}var Iee=Ree;const Dee=_e(Iee);function Lee(e,t){for(var n=-1,r=e==null?0:e.length;++n<r;)if(!t(e[n],n,e))return!1;return!0}var Fee=Lee,zee=eg;function Bee(e,t){var n=!0;return zee(e,function(r,a,o){return n=!!t(r,a,o),n}),n}var Hee=Bee,Gee=Fee,Uee=Hee,Wee=Na,qee=qt,Vee=ld;function Kee(e,t,n){var r=qee(e)?Gee:Uee;return n&&Vee(e,t,n)&&(t=void 0),r(e,Wee(t))}var Xee=Kee;const NS=_e(Xee);var Yee=["x","y"];function su(e){"@babel/helpers - typeof";return su=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},su(e)}function J0(){return J0=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},J0.apply(this,arguments)}function Vb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Us(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Vb(Object(n),!0).forEach(function(r){Qee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Vb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Qee(e,t,n){return t=Zee(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Zee(e){var t=Jee(e,"string");return su(t)=="symbol"?t:t+""}function Jee(e,t){if(su(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(su(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ete(e,t){if(e==null)return{};var n=tte(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function tte(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function nte(e,t){var n=e.x,r=e.y,a=ete(e,Yee),o="".concat(n),i=parseInt(o,10),s="".concat(r),l=parseInt(s,10),u="".concat(t.height||a.height),p=parseInt(u,10),c="".concat(t.width||a.width),f=parseInt(c,10);return Us(Us(Us(Us(Us({},t),a),i?{x:i}:{}),l?{y:l}:{}),{},{height:p,width:f,name:t.name,radius:t.radius})}function Kb(e){return E.createElement(FJ,J0({shapeType:"rectangle",propTransformer:nte,activeClassName:"recharts-active-bar"},e))}var rte=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,a){if(typeof t=="number")return t;var o=V(r)||wM(r);return o?t(r,a):(o||So(),n)}},ate=["value","background"],MS;function Ui(e){"@babel/helpers - typeof";return Ui=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ui(e)}function ote(e,t){if(e==null)return{};var n=ite(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ite(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function rf(){return rf=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rf.apply(this,arguments)}function Xb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ze(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Xb(Object(n),!0).forEach(function(r){fa(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Xb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ste(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Yb(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,IS(r.key),r)}}function lte(e,t,n){return t&&Yb(e.prototype,t),n&&Yb(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function ute(e,t,n){return t=af(t),cte(e,RS()?Reflect.construct(t,n||[],af(e).constructor):t.apply(e,n))}function cte(e,t){if(t&&(Ui(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return pte(e)}function pte(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function RS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(RS=function(){return!!e})()}function af(e){return af=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},af(e)}function fte(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&ev(e,t)}function ev(e,t){return ev=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},ev(e,t)}function fa(e,t,n){return t=IS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function IS(e){var t=dte(e,"string");return Ui(t)=="symbol"?t:t+""}function dte(e,t){if(Ui(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ui(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Da=function(e){function t(){var n;ste(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=ute(this,t,[].concat(a)),fa(n,"state",{isAnimationFinished:!1}),fa(n,"id",ys("recharts-bar-")),fa(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),i&&i()}),fa(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),i&&i()}),n}return fte(t,e),lte(t,[{key:"renderRectanglesStatically",value:function(r){var a=this,o=this.props,i=o.shape,s=o.dataKey,l=o.activeIndex,u=o.activeBar,p=ie(this.props,!1);return r&&r.map(function(c,f){var d=f===l,h=d?u:i,m=Ze(Ze(Ze({},p),c),{},{isActive:d,option:h,index:f,dataKey:s,onAnimationStart:a.handleAnimationStart,onAnimationEnd:a.handleAnimationEnd});return E.createElement($e,rf({className:"recharts-bar-rectangle"},vp(a.props,c,f),{key:"rectangle-".concat(c==null?void 0:c.x,"-").concat(c==null?void 0:c.y,"-").concat(c==null?void 0:c.value,"-").concat(f)}),E.createElement(Kb,m))})}},{key:"renderRectanglesWithAnimation",value:function(){var r=this,a=this.props,o=a.data,i=a.layout,s=a.isAnimationActive,l=a.animationBegin,u=a.animationDuration,p=a.animationEasing,c=a.animationId,f=this.state.prevData;return E.createElement(mr,{begin:l,duration:u,isActive:s,easing:p,from:{t:0},to:{t:1},key:"bar-".concat(c),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(d){var h=d.t,m=o.map(function(g,v){var y=f&&f[v];if(y){var x=dt(y.x,g.x),S=dt(y.y,g.y),w=dt(y.width,g.width),P=dt(y.height,g.height);return Ze(Ze({},g),{},{x:x(h),y:S(h),width:w(h),height:P(h)})}if(i==="horizontal"){var O=dt(0,g.height),C=O(h);return Ze(Ze({},g),{},{y:g.y+g.height-C,height:C})}var _=dt(0,g.width),T=_(h);return Ze(Ze({},g),{},{width:T})});return E.createElement($e,null,r.renderRectanglesStatically(m))})}},{key:"renderRectangles",value:function(){var r=this.props,a=r.data,o=r.isAnimationActive,i=this.state.prevData;return o&&a&&a.length&&(!i||!Fi(i,a))?this.renderRectanglesWithAnimation():this.renderRectanglesStatically(a)}},{key:"renderBackground",value:function(){var r=this,a=this.props,o=a.data,i=a.dataKey,s=a.activeIndex,l=ie(this.props.background,!1);return o.map(function(u,p){u.value;var c=u.background,f=ote(u,ate);if(!c)return null;var d=Ze(Ze(Ze(Ze(Ze({},f),{},{fill:"#eee"},c),l),vp(r.props,u,p)),{},{onAnimationStart:r.handleAnimationStart,onAnimationEnd:r.handleAnimationEnd,dataKey:i,index:p,className:"recharts-bar-background-rectangle"});return E.createElement(Kb,rf({key:"background-bar-".concat(p),option:r.props.background,isActive:p===s},d))})}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.data,s=o.xAxis,l=o.yAxis,u=o.layout,p=o.children,c=yn(p,Tu);if(!c)return null;var f=u==="vertical"?i[0].height/2:i[0].width/2,d=function(g,v){var y=Array.isArray(g.value)?g.value[1]:g.value;return{x:g.x,y:g.y,value:y,errorVal:It(g,v)}},h={clipPath:r?"url(#clipPath-".concat(a,")"):null};return E.createElement($e,h,c.map(function(m){return E.cloneElement(m,{key:"error-bar-".concat(a,"-").concat(m.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,offset:f,dataPointFormatter:d})}))}},{key:"render",value:function(){var r=this.props,a=r.hide,o=r.data,i=r.className,s=r.xAxis,l=r.yAxis,u=r.left,p=r.top,c=r.width,f=r.height,d=r.isAnimationActive,h=r.background,m=r.id;if(a||!o||!o.length)return null;var g=this.state.isAnimationFinished,v=ue("recharts-bar",i),y=s&&s.allowDataOverflow,x=l&&l.allowDataOverflow,S=y||x,w=le(m)?this.id:m;return E.createElement($e,{className:v},y||x?E.createElement("defs",null,E.createElement("clipPath",{id:"clipPath-".concat(w)},E.createElement("rect",{x:y?u:u-c/2,y:x?p:p-f/2,width:y?c:c*2,height:x?f:f*2}))):null,E.createElement($e,{className:"recharts-bar-rectangles",clipPath:S?"url(#clipPath-".concat(w,")"):null},h?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(S,w),(!d||g)&&$r.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curData:r.data,prevData:a.curData}:r.data!==a.curData?{curData:r.data}:null}}])}(k.PureComponent);MS=Da;fa(Da,"displayName","Bar");fa(Da,"defaultProps",{xAxisId:0,yAxisId:0,legendType:"rect",minPointSize:0,hide:!1,data:[],layout:"vertical",activeBar:!1,isAnimationActive:!_o.isSsr,animationBegin:0,animationDuration:400,animationEasing:"ease"});fa(Da,"getComposedData",function(e){var t=e.props,n=e.item,r=e.barPosition,a=e.bandSize,o=e.xAxis,i=e.yAxis,s=e.xAxisTicks,l=e.yAxisTicks,u=e.stackedData,p=e.dataStartIndex,c=e.displayedData,f=e.offset,d=GX(r,n);if(!d)return null;var h=t.layout,m=n.type.defaultProps,g=m!==void 0?Ze(Ze({},m),n.props):n.props,v=g.dataKey,y=g.children,x=g.minPointSize,S=h==="horizontal"?i:o,w=u?S.scale.domain():null,P=QX({numericAxis:S}),O=yn(y,l7),C=c.map(function(_,T){var A,j,N,M,I,R;u?A=UX(u[p+T],w):(A=It(_,v),Array.isArray(A)||(A=[P,A]));var L=rte(x,MS.defaultProps.minPointSize)(A[1],T);if(h==="horizontal"){var $,D=[i.scale(A[0]),i.scale(A[1])],H=D[0],W=D[1];j=X3({axis:o,ticks:s,bandSize:a,offset:d.offset,entry:_,index:T}),N=($=W??H)!==null&&$!==void 0?$:void 0,M=d.size;var G=H-W;if(I=Number.isNaN(G)?0:G,R={x:j,y:i.y,width:M,height:i.height},Math.abs(L)>0&&Math.abs(I)<Math.abs(L)){var Z=In(I||L)*(Math.abs(L)-Math.abs(I));N-=Z,I+=Z}}else{var re=[o.scale(A[0]),o.scale(A[1])],ve=re[0],be=re[1];if(j=ve,N=X3({axis:i,ticks:l,bandSize:a,offset:d.offset,entry:_,index:T}),M=be-ve,I=d.size,R={x:o.x,y:N,width:o.width,height:I},Math.abs(L)>0&&Math.abs(M)<Math.abs(L)){var J=In(M||L)*(Math.abs(L)-Math.abs(M));M+=J}}return Ze(Ze(Ze({},_),{},{x:j,y:N,width:M,height:I,value:u?A:A[1],payload:_,background:R},O&&O[T]&&O[T].props),{},{tooltipPayload:[mS(n,_)],tooltipPosition:{x:j+M/2,y:N+I/2}})});return Ze({data:C,layout:h},f)});function lu(e){"@babel/helpers - typeof";return lu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},lu(e)}function mte(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Qb(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,DS(r.key),r)}}function hte(e,t,n){return t&&Qb(e.prototype,t),n&&Qb(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Zb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function $n(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?Zb(Object(n),!0).forEach(function(r){bd(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zb(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function bd(e,t,n){return t=DS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function DS(e){var t=vte(e,"string");return lu(t)=="symbol"?t:t+""}function vte(e,t){if(lu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(lu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Eg=function(t,n,r,a,o){var i=t.width,s=t.height,l=t.layout,u=t.children,p=Object.keys(n),c={left:r.left,leftMirror:r.left,right:i-r.right,rightMirror:i-r.right,top:r.top,topMirror:r.top,bottom:s-r.bottom,bottomMirror:s-r.bottom},f=!!Yt(u,Da);return p.reduce(function(d,h){var m=n[h],g=m.orientation,v=m.domain,y=m.padding,x=y===void 0?{}:y,S=m.mirror,w=m.reversed,P="".concat(g).concat(S?"Mirror":""),O,C,_,T,A;if(m.type==="number"&&(m.padding==="gap"||m.padding==="no-gap")){var j=v[1]-v[0],N=1/0,M=m.categoricalDomain.sort(PM);if(M.forEach(function(re,ve){ve>0&&(N=Math.min((re||0)-(M[ve-1]||0),N))}),Number.isFinite(N)){var I=N/j,R=m.layout==="vertical"?r.height:r.width;if(m.padding==="gap"&&(O=I*R/2),m.padding==="no-gap"){var L=wo(t.barCategoryGap,I*R),$=I*R/2;O=$-L-($-L)/R*L}}}a==="xAxis"?C=[r.left+(x.left||0)+(O||0),r.left+r.width-(x.right||0)-(O||0)]:a==="yAxis"?C=l==="horizontal"?[r.top+r.height-(x.bottom||0),r.top+(x.top||0)]:[r.top+(x.top||0)+(O||0),r.top+r.height-(x.bottom||0)-(O||0)]:C=m.range,w&&(C=[C[1],C[0]]);var D=BX(m,o,f),H=D.scale,W=D.realScaleType;H.domain(v).range(C),HX(H);var G=YX(H,$n($n({},m),{},{realScaleType:W}));a==="xAxis"?(A=g==="top"&&!S||g==="bottom"&&S,_=r.left,T=c[P]-A*m.height):a==="yAxis"&&(A=g==="left"&&!S||g==="right"&&S,_=c[P]-A*m.width,T=r.top);var Z=$n($n($n({},m),G),{},{realScaleType:W,x:_,y:T,scale:H,width:a==="xAxis"?r.width:m.width,height:a==="yAxis"?r.height:m.height});return Z.bandSize=Wp(Z,G),!m.hide&&a==="xAxis"?c[P]+=(A?-1:1)*Z.height:m.hide||(c[P]+=(A?-1:1)*Z.width),$n($n({},d),{},bd({},h,Z))},{})},LS=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return{x:Math.min(r,o),y:Math.min(a,i),width:Math.abs(o-r),height:Math.abs(i-a)}},yte=function(t){var n=t.x1,r=t.y1,a=t.x2,o=t.y2;return LS({x:n,y:r},{x:a,y:o})},FS=function(){function e(t){mte(this,e),this.scale=t}return hte(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.bandAware,o=r.position;if(n!==void 0){if(o)switch(o){case"start":return this.scale(n);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+i}case"end":{var s=this.bandwidth?this.bandwidth():0;return this.scale(n)+s}default:return this.scale(n)}if(a){var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+l}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),a=r[0],o=r[r.length-1];return a<=o?n>=a&&n<=o:n>=o&&n<=a}}],[{key:"create",value:function(n){return new e(n)}}])}();bd(FS,"EPS",1e-4);var Tg=function(t){var n=Object.keys(t).reduce(function(r,a){return $n($n({},r),{},bd({},a,FS.create(t[a])))},{});return $n($n({},n),{},{apply:function(a){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.bandAware,s=o.position;return Dee(a,function(l,u){return n[u].apply(l,{bandAware:i,position:s})})},isInRange:function(a){return NS(a,function(o,i){return n[i].isInRange(o)})}})};function gte(e){return(e%180+180)%180}var xte=function(t){var n=t.width,r=t.height,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=gte(a),i=o*Math.PI/180,s=Math.atan(r/n),l=i>s&&i<Math.PI-s?r/Math.sin(i):n/Math.cos(i);return Math.abs(l)},wte=Na,bte=ku,Ste=id;function Pte(e){return function(t,n,r){var a=Object(t);if(!bte(t)){var o=wte(n);t=Ste(t),n=function(s){return o(a[s],s,a)}}var i=e(t,n,r);return i>-1?a[o?t[i]:i]:void 0}}var Ote=Pte,kte=ES;function Cte(e){var t=kte(e),n=t%1;return t===t?n?t-n:t:0}var _te=Cte,Ate=V8,Ete=Na,Tte=_te,jte=Math.max;function $te(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var a=n==null?0:Tte(n);return a<0&&(a=jte(r+a,0)),Ate(e,Ete(t),a)}var Nte=$te,Mte=Ote,Rte=Nte,Ite=Mte(Rte),Dte=Ite;const Lte=_e(Dte);var Fte=CN(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),jg=k.createContext(void 0),$g=k.createContext(void 0),zS=k.createContext(void 0),BS=k.createContext({}),HS=k.createContext(void 0),GS=k.createContext(0),US=k.createContext(0),Jb=function(t){var n=t.state,r=n.xAxisMap,a=n.yAxisMap,o=n.offset,i=t.clipPathId,s=t.children,l=t.width,u=t.height,p=Fte(o);return E.createElement(jg.Provider,{value:r},E.createElement($g.Provider,{value:a},E.createElement(BS.Provider,{value:o},E.createElement(zS.Provider,{value:p},E.createElement(HS.Provider,{value:i},E.createElement(GS.Provider,{value:u},E.createElement(US.Provider,{value:l},s)))))))},zte=function(){return k.useContext(HS)},WS=function(t){var n=k.useContext(jg);n==null&&So();var r=n[t];return r==null&&So(),r},Bte=function(){var t=k.useContext(jg);return ra(t)},Hte=function(){var t=k.useContext($g),n=Lte(t,function(r){return NS(r.domain,Number.isFinite)});return n||ra(t)},qS=function(t){var n=k.useContext($g);n==null&&So();var r=n[t];return r==null&&So(),r},Gte=function(){var t=k.useContext(zS);return t},Ute=function(){return k.useContext(BS)},Ng=function(){return k.useContext(US)},Mg=function(){return k.useContext(GS)};function Wi(e){"@babel/helpers - typeof";return Wi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wi(e)}function Wte(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qte(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,KS(r.key),r)}}function Vte(e,t,n){return t&&qte(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Kte(e,t,n){return t=of(t),Xte(e,VS()?Reflect.construct(t,n||[],of(e).constructor):t.apply(e,n))}function Xte(e,t){if(t&&(Wi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Yte(e)}function Yte(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function VS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(VS=function(){return!!e})()}function of(e){return of=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},of(e)}function Qte(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&tv(e,t)}function tv(e,t){return tv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},tv(e,t)}function e2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function t2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?e2(Object(n),!0).forEach(function(r){Rg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):e2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Rg(e,t,n){return t=KS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function KS(e){var t=Zte(e,"string");return Wi(t)=="symbol"?t:t+""}function Zte(e,t){if(Wi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Wi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function Jte(e,t){return rne(e)||nne(e,t)||tne(e,t)||ene()}function ene(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tne(e,t){if(e){if(typeof e=="string")return n2(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return n2(e,t)}}function n2(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function nne(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function rne(e){if(Array.isArray(e))return e}function nv(){return nv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},nv.apply(this,arguments)}var ane=function(t,n){var r;return E.isValidElement(t)?r=E.cloneElement(t,n):ae(t)?r=t(n):r=E.createElement("line",nv({},n,{className:"recharts-reference-line-line"})),r},one=function(t,n,r,a,o,i,s,l,u){var p=o.x,c=o.y,f=o.width,d=o.height;if(r){var h=u.y,m=t.y.apply(h,{position:i});if(pr(u,"discard")&&!t.y.isInRange(m))return null;var g=[{x:p+f,y:m},{x:p,y:m}];return l==="left"?g.reverse():g}if(n){var v=u.x,y=t.x.apply(v,{position:i});if(pr(u,"discard")&&!t.x.isInRange(y))return null;var x=[{x:y,y:c+d},{x:y,y:c}];return s==="top"?x.reverse():x}if(a){var S=u.segment,w=S.map(function(P){return t.apply(P,{position:i})});return pr(u,"discard")&&Eee(w,function(P){return!t.isInRange(P)})?null:w}return null};function ine(e){var t=e.x,n=e.y,r=e.segment,a=e.xAxisId,o=e.yAxisId,i=e.shape,s=e.className,l=e.alwaysShow,u=zte(),p=WS(a),c=qS(o),f=Gte();if(!u||!f)return null;Tr(l===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var d=Tg({x:p.scale,y:c.scale}),h=ot(t),m=ot(n),g=r&&r.length===2,v=one(d,h,m,g,f,e.position,p.orientation,c.orientation,e);if(!v)return null;var y=Jte(v,2),x=y[0],S=x.x,w=x.y,P=y[1],O=P.x,C=P.y,_=pr(e,"hidden")?"url(#".concat(u,")"):void 0,T=t2(t2({clipPath:_},ie(e,!0)),{},{x1:S,y1:w,x2:O,y2:C});return E.createElement($e,{className:ue("recharts-reference-line",s)},ane(i,T),kt.renderCallByParent(e,yte({x1:S,y1:w,x2:O,y2:C})))}var Ig=function(e){function t(){return Wte(this,t),Kte(this,t,arguments)}return Qte(t,e),Vte(t,[{key:"render",value:function(){return E.createElement(ine,this.props)}}])}(E.Component);Rg(Ig,"displayName","ReferenceLine");Rg(Ig,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});function rv(){return rv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},rv.apply(this,arguments)}function qi(e){"@babel/helpers - typeof";return qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qi(e)}function r2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function a2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?r2(Object(n),!0).forEach(function(r){Sd(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function sne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function lne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,YS(r.key),r)}}function une(e,t,n){return t&&lne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function cne(e,t,n){return t=sf(t),pne(e,XS()?Reflect.construct(t,n||[],sf(e).constructor):t.apply(e,n))}function pne(e,t){if(t&&(qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return fne(e)}function fne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function XS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(XS=function(){return!!e})()}function sf(e){return sf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},sf(e)}function dne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&av(e,t)}function av(e,t){return av=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},av(e,t)}function Sd(e,t,n){return t=YS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function YS(e){var t=mne(e,"string");return qi(t)=="symbol"?t:t+""}function mne(e,t){if(qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var hne=function(t){var n=t.x,r=t.y,a=t.xAxis,o=t.yAxis,i=Tg({x:a.scale,y:o.scale}),s=i.apply({x:n,y:r},{bandAware:!0});return pr(t,"discard")&&!i.isInRange(s)?null:s},Pd=function(e){function t(){return sne(this,t),cne(this,t,arguments)}return dne(t,e),une(t,[{key:"render",value:function(){var r=this.props,a=r.x,o=r.y,i=r.r,s=r.alwaysShow,l=r.clipPathId,u=ot(a),p=ot(o);if(Tr(s===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.'),!u||!p)return null;var c=hne(this.props);if(!c)return null;var f=c.x,d=c.y,h=this.props,m=h.shape,g=h.className,v=pr(this.props,"hidden")?"url(#".concat(l,")"):void 0,y=a2(a2({clipPath:v},ie(this.props,!0)),{},{cx:f,cy:d});return E.createElement($e,{className:ue("recharts-reference-dot",g)},t.renderDot(m,y),kt.renderCallByParent(this.props,{x:f-i,y:d-i,width:2*i,height:2*i}))}}])}(E.Component);Sd(Pd,"displayName","ReferenceDot");Sd(Pd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1});Sd(Pd,"renderDot",function(e,t){var n;return E.isValidElement(e)?n=E.cloneElement(e,t):ae(e)?n=e(t):n=E.createElement(gd,rv({},t,{cx:t.cx,cy:t.cy,className:"recharts-reference-dot-dot"})),n});function ov(){return ov=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ov.apply(this,arguments)}function Vi(e){"@babel/helpers - typeof";return Vi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vi(e)}function o2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function i2(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?o2(Object(n),!0).forEach(function(r){Od(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function vne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yne(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ZS(r.key),r)}}function gne(e,t,n){return t&&yne(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function xne(e,t,n){return t=lf(t),wne(e,QS()?Reflect.construct(t,n||[],lf(e).constructor):t.apply(e,n))}function wne(e,t){if(t&&(Vi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return bne(e)}function bne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function QS(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(QS=function(){return!!e})()}function lf(e){return lf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},lf(e)}function Sne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&iv(e,t)}function iv(e,t){return iv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},iv(e,t)}function Od(e,t,n){return t=ZS(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ZS(e){var t=Pne(e,"string");return Vi(t)=="symbol"?t:t+""}function Pne(e,t){if(Vi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Vi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var One=function(t,n,r,a,o){var i=o.x1,s=o.x2,l=o.y1,u=o.y2,p=o.xAxis,c=o.yAxis;if(!p||!c)return null;var f=Tg({x:p.scale,y:c.scale}),d={x:t?f.x.apply(i,{position:"start"}):f.x.rangeMin,y:r?f.y.apply(l,{position:"start"}):f.y.rangeMin},h={x:n?f.x.apply(s,{position:"end"}):f.x.rangeMax,y:a?f.y.apply(u,{position:"end"}):f.y.rangeMax};return pr(o,"discard")&&(!f.isInRange(d)||!f.isInRange(h))?null:LS(d,h)},kd=function(e){function t(){return vne(this,t),xne(this,t,arguments)}return Sne(t,e),gne(t,[{key:"render",value:function(){var r=this.props,a=r.x1,o=r.x2,i=r.y1,s=r.y2,l=r.className,u=r.alwaysShow,p=r.clipPathId;Tr(u===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var c=ot(a),f=ot(o),d=ot(i),h=ot(s),m=this.props.shape;if(!c&&!f&&!d&&!h&&!m)return null;var g=One(c,f,d,h,this.props);if(!g&&!m)return null;var v=pr(this.props,"hidden")?"url(#".concat(p,")"):void 0;return E.createElement($e,{className:ue("recharts-reference-area",l)},t.renderRect(m,i2(i2({clipPath:v},ie(this.props,!0)),g)),kt.renderCallByParent(this.props,g))}}])}(E.Component);Od(kd,"displayName","ReferenceArea");Od(kd,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1});Od(kd,"renderRect",function(e,t){var n;return E.isValidElement(e)?n=E.cloneElement(e,t):ae(e)?n=e(t):n=E.createElement(Ag,ov({},t,{className:"recharts-reference-area-rect"})),n});function JS(e,t,n){if(t<1)return[];if(t===1&&n===void 0)return e;for(var r=[],a=0;a<e.length;a+=t)r.push(e[a]);return r}function kne(e,t,n){var r={width:e.width+t.width,height:e.height+t.height};return xte(r,n)}function Cne(e,t,n){var r=n==="width",a=e.x,o=e.y,i=e.width,s=e.height;return t===1?{start:r?a:o,end:r?a+i:o+s}:{start:r?a+i:o+s,end:r?a:o}}function uf(e,t,n,r,a){if(e*t<e*r||e*t>e*a)return!1;var o=n();return e*(t-e*o/2-r)>=0&&e*(t+e*o/2-a)<=0}function _ne(e,t){return JS(e,t+1)}function Ane(e,t,n,r,a){for(var o=(r||[]).slice(),i=t.start,s=t.end,l=0,u=1,p=i,c=function(){var h=r==null?void 0:r[l];if(h===void 0)return{v:JS(r,u)};var m=l,g,v=function(){return g===void 0&&(g=n(h,m)),g},y=h.coordinate,x=l===0||uf(e,y,v,p,s);x||(l=0,p=i,u+=1),x&&(p=y+e*(v()/2+a),l+=u)},f;u<=o.length;)if(f=c(),f)return f.v;return[]}function uu(e){"@babel/helpers - typeof";return uu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},uu(e)}function s2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Pt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?s2(Object(n),!0).forEach(function(r){Ene(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Ene(e,t,n){return t=Tne(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Tne(e){var t=jne(e,"string");return uu(t)=="symbol"?t:t+""}function jne(e,t){if(uu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(uu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function $ne(e,t,n,r,a){for(var o=(r||[]).slice(),i=o.length,s=t.start,l=t.end,u=function(f){var d=o[f],h,m=function(){return h===void 0&&(h=n(d,f)),h};if(f===i-1){var g=e*(d.coordinate+e*m()/2-l);o[f]=d=Pt(Pt({},d),{},{tickCoord:g>0?d.coordinate-g*e:d.coordinate})}else o[f]=d=Pt(Pt({},d),{},{tickCoord:d.coordinate});var v=uf(e,d.tickCoord,m,s,l);v&&(l=d.tickCoord-e*(m()/2+a),o[f]=Pt(Pt({},d),{},{isShow:!0}))},p=i-1;p>=0;p--)u(p);return o}function Nne(e,t,n,r,a,o){var i=(r||[]).slice(),s=i.length,l=t.start,u=t.end;if(o){var p=r[s-1],c=n(p,s-1),f=e*(p.coordinate+e*c/2-u);i[s-1]=p=Pt(Pt({},p),{},{tickCoord:f>0?p.coordinate-f*e:p.coordinate});var d=uf(e,p.tickCoord,function(){return c},l,u);d&&(u=p.tickCoord-e*(c/2+a),i[s-1]=Pt(Pt({},p),{},{isShow:!0}))}for(var h=o?s-1:s,m=function(y){var x=i[y],S,w=function(){return S===void 0&&(S=n(x,y)),S};if(y===0){var P=e*(x.coordinate-e*w()/2-l);i[y]=x=Pt(Pt({},x),{},{tickCoord:P<0?x.coordinate-P*e:x.coordinate})}else i[y]=x=Pt(Pt({},x),{},{tickCoord:x.coordinate});var O=uf(e,x.tickCoord,w,l,u);O&&(l=x.tickCoord+e*(w()/2+a),i[y]=Pt(Pt({},x),{},{isShow:!0}))},g=0;g<h;g++)m(g);return i}function Dg(e,t,n){var r=e.tick,a=e.ticks,o=e.viewBox,i=e.minTickGap,s=e.orientation,l=e.interval,u=e.tickFormatter,p=e.unit,c=e.angle;if(!a||!a.length||!r)return[];if(V(l)||_o.isSsr)return _ne(a,typeof l=="number"&&V(l)?l:0);var f=[],d=s==="top"||s==="bottom"?"width":"height",h=p&&d==="width"?il(p,{fontSize:t,letterSpacing:n}):{width:0,height:0},m=function(x,S){var w=ae(u)?u(x.value,S):x.value;return d==="width"?kne(il(w,{fontSize:t,letterSpacing:n}),h,c):il(w,{fontSize:t,letterSpacing:n})[d]},g=a.length>=2?In(a[1].coordinate-a[0].coordinate):1,v=Cne(o,g,d);return l==="equidistantPreserveStart"?Ane(g,v,m,a,i):(l==="preserveStart"||l==="preserveStartEnd"?f=Nne(g,v,m,a,i,l==="preserveStartEnd"):f=$ne(g,v,m,a,i),f.filter(function(y){return y.isShow}))}var Mne=["viewBox"],Rne=["viewBox"],Ine=["ticks"];function Ki(e){"@babel/helpers - typeof";return Ki=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ki(e)}function Zo(){return Zo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Zo.apply(this,arguments)}function l2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?l2(Object(n),!0).forEach(function(r){Lg(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function zm(e,t){if(e==null)return{};var n=Dne(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Dne(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Lne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,tP(r.key),r)}}function Fne(e,t,n){return t&&u2(e.prototype,t),n&&u2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function zne(e,t,n){return t=cf(t),Bne(e,eP()?Reflect.construct(t,n||[],cf(e).constructor):t.apply(e,n))}function Bne(e,t){if(t&&(Ki(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Hne(e)}function Hne(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function eP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(eP=function(){return!!e})()}function cf(e){return cf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},cf(e)}function Gne(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&sv(e,t)}function sv(e,t){return sv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},sv(e,t)}function Lg(e,t,n){return t=tP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function tP(e){var t=Une(e,"string");return Ki(t)=="symbol"?t:t+""}function Une(e,t){if(Ki(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ki(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Os=function(e){function t(n){var r;return Lne(this,t),r=zne(this,t,[n]),r.state={fontSize:"",letterSpacing:""},r}return Gne(t,e),Fne(t,[{key:"shouldComponentUpdate",value:function(r,a){var o=r.viewBox,i=zm(r,Mne),s=this.props,l=s.viewBox,u=zm(s,Rne);return!ui(o,l)||!ui(i,u)||!ui(a,this.state)}},{key:"componentDidMount",value:function(){var r=this.layerReference;if(r){var a=r.getElementsByClassName("recharts-cartesian-axis-tick-value")[0];a&&this.setState({fontSize:window.getComputedStyle(a).fontSize,letterSpacing:window.getComputedStyle(a).letterSpacing})}}},{key:"getTickLineCoord",value:function(r){var a=this.props,o=a.x,i=a.y,s=a.width,l=a.height,u=a.orientation,p=a.tickSize,c=a.mirror,f=a.tickMargin,d,h,m,g,v,y,x=c?-1:1,S=r.tickSize||p,w=V(r.tickCoord)?r.tickCoord:r.coordinate;switch(u){case"top":d=h=r.coordinate,g=i+ +!c*l,m=g-x*S,y=m-x*f,v=w;break;case"left":m=g=r.coordinate,h=o+ +!c*s,d=h-x*S,v=d-x*f,y=w;break;case"right":m=g=r.coordinate,h=o+ +c*s,d=h+x*S,v=d+x*f,y=w;break;default:d=h=r.coordinate,g=i+ +c*l,m=g+x*S,y=m+x*f,v=w;break}return{line:{x1:d,y1:m,x2:h,y2:g},tick:{x:v,y}}}},{key:"getTickTextAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i;switch(a){case"left":i=o?"start":"end";break;case"right":i=o?"end":"start";break;default:i="middle";break}return i}},{key:"getTickVerticalAnchor",value:function(){var r=this.props,a=r.orientation,o=r.mirror,i="end";switch(a){case"left":case"right":i="middle";break;case"top":i=o?"start":"end";break;default:i=o?"end":"start";break}return i}},{key:"renderAxisLine",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,l=r.orientation,u=r.mirror,p=r.axisLine,c=tt(tt(tt({},ie(this.props,!1)),ie(p,!1)),{},{fill:"none"});if(l==="top"||l==="bottom"){var f=+(l==="top"&&!u||l==="bottom"&&u);c=tt(tt({},c),{},{x1:a,y1:o+f*s,x2:a+i,y2:o+f*s})}else{var d=+(l==="left"&&!u||l==="right"&&u);c=tt(tt({},c),{},{x1:a+d*i,y1:o,x2:a+d*i,y2:o+s})}return E.createElement("line",Zo({},c,{className:ue("recharts-cartesian-axis-line",vn(p,"className"))}))}},{key:"renderTicks",value:function(r,a,o){var i=this,s=this.props,l=s.tickLine,u=s.stroke,p=s.tick,c=s.tickFormatter,f=s.unit,d=Dg(tt(tt({},this.props),{},{ticks:r}),a,o),h=this.getTickTextAnchor(),m=this.getTickVerticalAnchor(),g=ie(this.props,!1),v=ie(p,!1),y=tt(tt({},g),{},{fill:"none"},ie(l,!1)),x=d.map(function(S,w){var P=i.getTickLineCoord(S),O=P.line,C=P.tick,_=tt(tt(tt(tt({textAnchor:h,verticalAnchor:m},g),{},{stroke:"none",fill:u},v),C),{},{index:w,payload:S,visibleTicksCount:d.length,tickFormatter:c});return E.createElement($e,Zo({className:"recharts-cartesian-axis-tick",key:"tick-".concat(S.value,"-").concat(S.coordinate,"-").concat(S.tickCoord)},vp(i.props,S,w)),l&&E.createElement("line",Zo({},y,O,{className:ue("recharts-cartesian-axis-tick-line",vn(l,"className"))})),p&&t.renderTickItem(p,_,"".concat(ae(c)?c(S.value,w):S.value).concat(f||"")))});return E.createElement("g",{className:"recharts-cartesian-axis-ticks"},x)}},{key:"render",value:function(){var r=this,a=this.props,o=a.axisLine,i=a.width,s=a.height,l=a.ticksGenerator,u=a.className,p=a.hide;if(p)return null;var c=this.props,f=c.ticks,d=zm(c,Ine),h=f;return ae(l)&&(h=f&&f.length>0?l(this.props):l(d)),i<=0||s<=0||!h||!h.length?null:E.createElement($e,{className:ue("recharts-cartesian-axis",u),ref:function(g){r.layerReference=g}},o&&this.renderAxisLine(),this.renderTicks(h,this.state.fontSize,this.state.letterSpacing),kt.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,a,o){var i,s=ue(a.className,"recharts-cartesian-axis-tick-value");return E.isValidElement(r)?i=E.cloneElement(r,tt(tt({},a),{},{className:s})):ae(r)?i=r(tt(tt({},a),{},{className:s})):i=E.createElement(Tp,Zo({},a,{className:"recharts-cartesian-axis-tick-value"}),o),i}}])}(k.Component);Lg(Os,"displayName","CartesianAxis");Lg(Os,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var Wne=["x1","y1","x2","y2","key"],qne=["offset"];function Po(e){"@babel/helpers - typeof";return Po=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Po(e)}function c2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Ct(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?c2(Object(n),!0).forEach(function(r){Vne(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):c2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Vne(e,t,n){return t=Kne(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Kne(e){var t=Xne(e,"string");return Po(t)=="symbol"?t:t+""}function Xne(e,t){if(Po(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Po(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Za(){return Za=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Za.apply(this,arguments)}function p2(e,t){if(e==null)return{};var n=Yne(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Yne(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var Qne=function(t){var n=t.fill;if(!n||n==="none")return null;var r=t.fillOpacity,a=t.x,o=t.y,i=t.width,s=t.height,l=t.ry;return E.createElement("rect",{x:a,y:o,ry:l,width:i,height:s,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function nP(e,t){var n;if(E.isValidElement(e))n=E.cloneElement(e,t);else if(ae(e))n=e(t);else{var r=t.x1,a=t.y1,o=t.x2,i=t.y2,s=t.key,l=p2(t,Wne),u=ie(l,!1);u.offset;var p=p2(u,qne);n=E.createElement("line",Za({},p,{x1:r,y1:a,x2:o,y2:i,fill:"none",key:s}))}return n}function Zne(e){var t=e.x,n=e.width,r=e.horizontal,a=r===void 0?!0:r,o=e.horizontalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=Ct(Ct({},e),{},{x1:t,y1:s,x2:t+n,y2:s,key:"line-".concat(l),index:l});return nP(a,u)});return E.createElement("g",{className:"recharts-cartesian-grid-horizontal"},i)}function Jne(e){var t=e.y,n=e.height,r=e.vertical,a=r===void 0?!0:r,o=e.verticalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,l){var u=Ct(Ct({},e),{},{x1:s,y1:t,x2:s,y2:t+n,key:"line-".concat(l),index:l});return nP(a,u)});return E.createElement("g",{className:"recharts-cartesian-grid-vertical"},i)}function ere(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,a=e.y,o=e.width,i=e.height,s=e.horizontalPoints,l=e.horizontal,u=l===void 0?!0:l;if(!u||!t||!t.length)return null;var p=s.map(function(f){return Math.round(f+a-a)}).sort(function(f,d){return f-d});a!==p[0]&&p.unshift(0);var c=p.map(function(f,d){var h=!p[d+1],m=h?a+i-f:p[d+1]-f;if(m<=0)return null;var g=d%t.length;return E.createElement("rect",{key:"react-".concat(d),y:f,x:r,height:m,width:o,stroke:"none",fill:t[g],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return E.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},c)}function tre(e){var t=e.vertical,n=t===void 0?!0:t,r=e.verticalFill,a=e.fillOpacity,o=e.x,i=e.y,s=e.width,l=e.height,u=e.verticalPoints;if(!n||!r||!r.length)return null;var p=u.map(function(f){return Math.round(f+o-o)}).sort(function(f,d){return f-d});o!==p[0]&&p.unshift(0);var c=p.map(function(f,d){var h=!p[d+1],m=h?o+s-f:p[d+1]-f;if(m<=0)return null;var g=d%r.length;return E.createElement("rect",{key:"react-".concat(d),x:f,y:i,width:m,height:l,stroke:"none",fill:r[g],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return E.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},c)}var nre=function(t,n){var r=t.xAxis,a=t.width,o=t.height,i=t.offset;return fS(Dg(Ct(Ct(Ct({},Os.defaultProps),r),{},{ticks:_r(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.left,i.left+i.width,n)},rre=function(t,n){var r=t.yAxis,a=t.width,o=t.height,i=t.offset;return fS(Dg(Ct(Ct(Ct({},Os.defaultProps),r),{},{ticks:_r(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.top,i.top+i.height,n)},Do={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function Dn(e){var t,n,r,a,o,i,s=Ng(),l=Mg(),u=Ute(),p=Ct(Ct({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:Do.stroke,fill:(n=e.fill)!==null&&n!==void 0?n:Do.fill,horizontal:(r=e.horizontal)!==null&&r!==void 0?r:Do.horizontal,horizontalFill:(a=e.horizontalFill)!==null&&a!==void 0?a:Do.horizontalFill,vertical:(o=e.vertical)!==null&&o!==void 0?o:Do.vertical,verticalFill:(i=e.verticalFill)!==null&&i!==void 0?i:Do.verticalFill,x:V(e.x)?e.x:u.left,y:V(e.y)?e.y:u.top,width:V(e.width)?e.width:u.width,height:V(e.height)?e.height:u.height}),c=p.x,f=p.y,d=p.width,h=p.height,m=p.syncWithTicks,g=p.horizontalValues,v=p.verticalValues,y=Bte(),x=Hte();if(!V(d)||d<=0||!V(h)||h<=0||!V(c)||c!==+c||!V(f)||f!==+f)return null;var S=p.verticalCoordinatesGenerator||nre,w=p.horizontalCoordinatesGenerator||rre,P=p.horizontalPoints,O=p.verticalPoints;if((!P||!P.length)&&ae(w)){var C=g&&g.length,_=w({yAxis:x?Ct(Ct({},x),{},{ticks:C?g:x.ticks}):void 0,width:s,height:l,offset:u},C?!0:m);Tr(Array.isArray(_),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Po(_),"]")),Array.isArray(_)&&(P=_)}if((!O||!O.length)&&ae(S)){var T=v&&v.length,A=S({xAxis:y?Ct(Ct({},y),{},{ticks:T?v:y.ticks}):void 0,width:s,height:l,offset:u},T?!0:m);Tr(Array.isArray(A),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Po(A),"]")),Array.isArray(A)&&(O=A)}return E.createElement("g",{className:"recharts-cartesian-grid"},E.createElement(Qne,{fill:p.fill,fillOpacity:p.fillOpacity,x:p.x,y:p.y,width:p.width,height:p.height,ry:p.ry}),E.createElement(Zne,Za({},p,{offset:u,horizontalPoints:P,xAxis:y,yAxis:x})),E.createElement(Jne,Za({},p,{offset:u,verticalPoints:O,xAxis:y,yAxis:x})),E.createElement(ere,Za({},p,{horizontalPoints:P})),E.createElement(tre,Za({},p,{verticalPoints:O})))}Dn.displayName="CartesianGrid";var are=["type","layout","connectNulls","ref"],ore=["key"];function Xi(e){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xi(e)}function f2(e,t){if(e==null)return{};var n=ire(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ire(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function cl(){return cl=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},cl.apply(this,arguments)}function d2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Vt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?d2(Object(n),!0).forEach(function(r){Nn(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):d2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function Lo(e){return cre(e)||ure(e)||lre(e)||sre()}function sre(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function lre(e,t){if(e){if(typeof e=="string")return lv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return lv(e,t)}}function ure(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function cre(e){if(Array.isArray(e))return lv(e)}function lv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function pre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function m2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,aP(r.key),r)}}function fre(e,t,n){return t&&m2(e.prototype,t),n&&m2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function dre(e,t,n){return t=pf(t),mre(e,rP()?Reflect.construct(t,n||[],pf(e).constructor):t.apply(e,n))}function mre(e,t){if(t&&(Xi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return hre(e)}function hre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function rP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(rP=function(){return!!e})()}function pf(e){return pf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},pf(e)}function vre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&uv(e,t)}function uv(e,t){return uv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},uv(e,t)}function Nn(e,t,n){return t=aP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function aP(e){var t=yre(e,"string");return Xi(t)=="symbol"?t:t+""}function yre(e,t){if(Xi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Xi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var zt=function(e){function t(){var n;pre(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=dre(this,t,[].concat(a)),Nn(n,"state",{isAnimationFinished:!0,totalLength:0}),Nn(n,"generateSimpleStrokeDasharray",function(i,s){return"".concat(s,"px ").concat(i-s,"px")}),Nn(n,"getStrokeDasharray",function(i,s,l){var u=l.reduce(function(v,y){return v+y});if(!u)return n.generateSimpleStrokeDasharray(s,i);for(var p=Math.floor(i/u),c=i%u,f=s-i,d=[],h=0,m=0;h<l.length;m+=l[h],++h)if(m+l[h]>c){d=[].concat(Lo(l.slice(0,h)),[c-m]);break}var g=d.length%2===0?[0,f]:[f];return[].concat(Lo(t.repeat(l,p)),Lo(d),g).map(function(v){return"".concat(v,"px")}).join(", ")}),Nn(n,"id",ys("recharts-line-")),Nn(n,"pathRef",function(i){n.mainCurve=i}),Nn(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),Nn(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return vre(t,e),fre(t,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();this.setState({totalLength:r})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();r!==this.state.totalLength&&this.setState({totalLength:r})}}},{key:"getTotalLength",value:function(){var r=this.mainCurve;try{return r&&r.getTotalLength&&r.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.points,s=o.xAxis,l=o.yAxis,u=o.layout,p=o.children,c=yn(p,Tu);if(!c)return null;var f=function(m,g){return{x:m.x,y:m.y,value:m.value,errorVal:It(m.payload,g)}},d={clipPath:r?"url(#clipPath-".concat(a,")"):null};return E.createElement($e,d,c.map(function(h){return E.cloneElement(h,{key:"bar-".concat(h.props.dataKey),data:i,xAxis:s,yAxis:l,layout:u,dataPointFormatter:f})}))}},{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive;if(i&&!this.state.isAnimationFinished)return null;var s=this.props,l=s.dot,u=s.points,p=s.dataKey,c=ie(this.props,!1),f=ie(l,!0),d=u.map(function(m,g){var v=Vt(Vt(Vt({key:"dot-".concat(g),r:3},c),f),{},{index:g,cx:m.x,cy:m.y,value:m.value,dataKey:p,payload:m.payload,points:u});return t.renderDotItem(l,v)}),h={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return E.createElement($e,cl({className:"recharts-line-dots",key:"dots"},h),d)}},{key:"renderCurveStatically",value:function(r,a,o,i){var s=this.props,l=s.type,u=s.layout,p=s.connectNulls;s.ref;var c=f2(s,are),f=Vt(Vt(Vt({},ie(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(o,")"):null,points:r},i),{},{type:l,layout:u,connectNulls:p});return E.createElement(di,cl({},f,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.strokeDasharray,u=i.isAnimationActive,p=i.animationBegin,c=i.animationDuration,f=i.animationEasing,d=i.animationId,h=i.animateNewValues,m=i.width,g=i.height,v=this.state,y=v.prevPoints,x=v.totalLength;return E.createElement(mr,{begin:p,duration:c,isActive:u,easing:f,from:{t:0},to:{t:1},key:"line-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(S){var w=S.t;if(y){var P=y.length/s.length,O=s.map(function(j,N){var M=Math.floor(N*P);if(y[M]){var I=y[M],R=dt(I.x,j.x),L=dt(I.y,j.y);return Vt(Vt({},j),{},{x:R(w),y:L(w)})}if(h){var $=dt(m*2,j.x),D=dt(g/2,j.y);return Vt(Vt({},j),{},{x:$(w),y:D(w)})}return Vt(Vt({},j),{},{x:j.x,y:j.y})});return o.renderCurveStatically(O,r,a)}var C=dt(0,x),_=C(w),T;if(l){var A="".concat(l).split(/[,\s]+/gim).map(function(j){return parseFloat(j)});T=o.getStrokeDasharray(_,x,A)}else T=o.generateSimpleStrokeDasharray(x,_);return o.renderCurveStatically(s,r,a,{strokeDasharray:T})})}},{key:"renderCurve",value:function(r,a){var o=this.props,i=o.points,s=o.isAnimationActive,l=this.state,u=l.prevPoints,p=l.totalLength;return s&&i&&i.length&&(!u&&p>0||!Fi(u,i))?this.renderCurveWithAnimation(r,a):this.renderCurveStatically(i,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.xAxis,p=a.yAxis,c=a.top,f=a.left,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-line",l),S=u&&u.allowDataOverflow,w=p&&p.allowDataOverflow,P=S||w,O=le(g)?this.id:g,C=(r=ie(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},_=C.r,T=_===void 0?3:_,A=C.strokeWidth,j=A===void 0?2:A,N=a8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=T*2+j;return E.createElement($e,{className:x},S||w?E.createElement("defs",null,E.createElement("clipPath",{id:"clipPath-".concat(O)},E.createElement("rect",{x:S?f:f-d/2,y:w?c:c-h/2,width:S?d:d*2,height:w?h:h*2})),!I&&E.createElement("clipPath",{id:"clipPath-dots-".concat(O)},E.createElement("rect",{x:f-R/2,y:c-R/2,width:d+R,height:h+R}))):null,!y&&this.renderCurve(P,O),this.renderErrorBar(P,O),(y||i)&&this.renderDots(P,I,O),(!m||v)&&$r.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}},{key:"repeat",value:function(r,a){for(var o=r.length%2!==0?[].concat(Lo(r),[0]):r,i=[],s=0;s<a;++s)i=[].concat(Lo(i),Lo(o));return i}},{key:"renderDotItem",value:function(r,a){var o;if(E.isValidElement(r))o=E.cloneElement(r,a);else if(ae(r))o=r(a);else{var i=a.key,s=f2(a,ore),l=ue("recharts-line-dot",typeof r!="boolean"?r.className:"");o=E.createElement(gd,cl({key:i},s,{className:l}))}return o}}])}(k.PureComponent);Nn(zt,"displayName","Line");Nn(zt,"defaultProps",{xAxisId:0,yAxisId:0,connectNulls:!1,activeDot:!0,dot:!0,legendType:"line",stroke:"#3182bd",strokeWidth:1,fill:"#fff",points:[],isAnimationActive:!_o.isSsr,animateNewValues:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",hide:!1,label:!1});Nn(zt,"getComposedData",function(e){var t=e.props,n=e.xAxis,r=e.yAxis,a=e.xAxisTicks,o=e.yAxisTicks,i=e.dataKey,s=e.bandSize,l=e.displayedData,u=e.offset,p=t.layout,c=l.map(function(f,d){var h=It(f,i);return p==="horizontal"?{x:Up({axis:n,ticks:a,bandSize:s,entry:f,index:d}),y:le(h)?null:r.scale(h),value:h,payload:f}:{x:le(h)?null:n.scale(h),y:Up({axis:r,ticks:o,bandSize:s,entry:f,index:d}),value:h,payload:f}});return Vt({points:c,layout:p},u)});var gre=["layout","type","stroke","connectNulls","isRange","ref"],xre=["key"],oP;function Yi(e){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yi(e)}function iP(e,t){if(e==null)return{};var n=wre(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Ja(){return Ja=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Ja.apply(this,arguments)}function h2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Yr(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?h2(Object(n),!0).forEach(function(r){ar(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function bre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v2(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,lP(r.key),r)}}function Sre(e,t,n){return t&&v2(e.prototype,t),n&&v2(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function Pre(e,t,n){return t=ff(t),Ore(e,sP()?Reflect.construct(t,n||[],ff(e).constructor):t.apply(e,n))}function Ore(e,t){if(t&&(Yi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return kre(e)}function kre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function sP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(sP=function(){return!!e})()}function ff(e){return ff=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},ff(e)}function Cre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&cv(e,t)}function cv(e,t){return cv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},cv(e,t)}function ar(e,t,n){return t=lP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lP(e){var t=_re(e,"string");return Yi(t)=="symbol"?t:t+""}function _re(e,t){if(Yi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Yi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var ht=function(e){function t(){var n;bre(this,t);for(var r=arguments.length,a=new Array(r),o=0;o<r;o++)a[o]=arguments[o];return n=Pre(this,t,[].concat(a)),ar(n,"state",{isAnimationFinished:!0}),ar(n,"id",ys("recharts-area-")),ar(n,"handleAnimationEnd",function(){var i=n.props.onAnimationEnd;n.setState({isAnimationFinished:!0}),ae(i)&&i()}),ar(n,"handleAnimationStart",function(){var i=n.props.onAnimationStart;n.setState({isAnimationFinished:!1}),ae(i)&&i()}),n}return Cre(t,e),Sre(t,[{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive,s=this.state.isAnimationFinished;if(i&&!s)return null;var l=this.props,u=l.dot,p=l.points,c=l.dataKey,f=ie(this.props,!1),d=ie(u,!0),h=p.map(function(g,v){var y=Yr(Yr(Yr({key:"dot-".concat(v),r:3},f),d),{},{index:v,cx:g.x,cy:g.y,dataKey:c,value:g.value,payload:g.payload,points:p});return t.renderDotItem(u,y)}),m={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return E.createElement($e,Ja({className:"recharts-area-dots"},m),h)}},{key:"renderHorizontalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].x,u=i[i.length-1].x,p=r*Math.abs(l-u),c=pa(i.map(function(f){return f.y||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(pa(o.map(function(f){return f.y||0})),c)),V(c)?E.createElement("rect",{x:l<u?l:l-p,y:0,width:p,height:Math.floor(c+(s?parseInt("".concat(s),10):1))}):null}},{key:"renderVerticalRect",value:function(r){var a=this.props,o=a.baseLine,i=a.points,s=a.strokeWidth,l=i[0].y,u=i[i.length-1].y,p=r*Math.abs(l-u),c=pa(i.map(function(f){return f.x||0}));return V(o)&&typeof o=="number"?c=Math.max(o,c):o&&Array.isArray(o)&&o.length&&(c=Math.max(pa(o.map(function(f){return f.x||0})),c)),V(c)?E.createElement("rect",{x:0,y:l<u?l:l-p,width:c+(s?parseInt("".concat(s),10):1),height:Math.floor(p)}):null}},{key:"renderClipRect",value:function(r){var a=this.props.layout;return a==="vertical"?this.renderVerticalRect(r):this.renderHorizontalRect(r)}},{key:"renderAreaStatically",value:function(r,a,o,i){var s=this.props,l=s.layout,u=s.type,p=s.stroke,c=s.connectNulls,f=s.isRange;s.ref;var d=iP(s,gre);return E.createElement($e,{clipPath:o?"url(#clipPath-".concat(i,")"):null},E.createElement(di,Ja({},ie(d,!0),{points:r,connectNulls:c,type:u,baseLine:a,layout:l,stroke:"none",className:"recharts-area-area"})),p!=="none"&&E.createElement(di,Ja({},ie(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:r})),p!=="none"&&f&&E.createElement(di,Ja({},ie(this.props,!1),{className:"recharts-area-curve",layout:l,type:u,connectNulls:c,fill:"none",points:a})))}},{key:"renderAreaWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,l=i.baseLine,u=i.isAnimationActive,p=i.animationBegin,c=i.animationDuration,f=i.animationEasing,d=i.animationId,h=this.state,m=h.prevPoints,g=h.prevBaseLine;return E.createElement(mr,{begin:p,duration:c,isActive:u,easing:f,from:{t:0},to:{t:1},key:"area-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(v){var y=v.t;if(m){var x=m.length/s.length,S=s.map(function(C,_){var T=Math.floor(_*x);if(m[T]){var A=m[T],j=dt(A.x,C.x),N=dt(A.y,C.y);return Yr(Yr({},C),{},{x:j(y),y:N(y)})}return C}),w;if(V(l)&&typeof l=="number"){var P=dt(g,l);w=P(y)}else if(le(l)||vs(l)){var O=dt(g,0);w=O(y)}else w=l.map(function(C,_){var T=Math.floor(_*x);if(g[T]){var A=g[T],j=dt(A.x,C.x),N=dt(A.y,C.y);return Yr(Yr({},C),{},{x:j(y),y:N(y)})}return C});return o.renderAreaStatically(S,w,r,a)}return E.createElement($e,null,E.createElement("defs",null,E.createElement("clipPath",{id:"animationClipPath-".concat(a)},o.renderClipRect(y))),E.createElement($e,{clipPath:"url(#animationClipPath-".concat(a,")")},o.renderAreaStatically(s,l,r,a)))})}},{key:"renderArea",value:function(r,a){var o=this.props,i=o.points,s=o.baseLine,l=o.isAnimationActive,u=this.state,p=u.prevPoints,c=u.prevBaseLine,f=u.totalLength;return l&&i&&i.length&&(!p&&f>0||!Fi(p,i)||!Fi(c,s))?this.renderAreaWithAnimation(r,a):this.renderAreaStatically(i,s,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,l=a.className,u=a.top,p=a.left,c=a.xAxis,f=a.yAxis,d=a.width,h=a.height,m=a.isAnimationActive,g=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,y=s.length===1,x=ue("recharts-area",l),S=c&&c.allowDataOverflow,w=f&&f.allowDataOverflow,P=S||w,O=le(g)?this.id:g,C=(r=ie(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},_=C.r,T=_===void 0?3:_,A=C.strokeWidth,j=A===void 0?2:A,N=a8(i)?i:{},M=N.clipDot,I=M===void 0?!0:M,R=T*2+j;return E.createElement($e,{className:x},S||w?E.createElement("defs",null,E.createElement("clipPath",{id:"clipPath-".concat(O)},E.createElement("rect",{x:S?p:p-d/2,y:w?u:u-h/2,width:S?d:d*2,height:w?h:h*2})),!I&&E.createElement("clipPath",{id:"clipPath-dots-".concat(O)},E.createElement("rect",{x:p-R/2,y:u-R/2,width:d+R,height:h+R}))):null,y?null:this.renderArea(P,O),(i||y)&&this.renderDots(P,I,O),(!m||v)&&$r.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:r.points!==a.curPoints||r.baseLine!==a.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(k.PureComponent);oP=ht;ar(ht,"displayName","Area");ar(ht,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!_o.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});ar(ht,"getBaseValue",function(e,t,n,r){var a=e.layout,o=e.baseValue,i=t.props.baseValue,s=i??o;if(V(s)&&typeof s=="number")return s;var l=a==="horizontal"?r:n,u=l.scale.domain();if(l.type==="number"){var p=Math.max(u[0],u[1]),c=Math.min(u[0],u[1]);return s==="dataMin"?c:s==="dataMax"||p<0?p:Math.max(Math.min(u[0],u[1]),0)}return s==="dataMin"?u[0]:s==="dataMax"?u[1]:u[0]});ar(ht,"getComposedData",function(e){var t=e.props,n=e.item,r=e.xAxis,a=e.yAxis,o=e.xAxisTicks,i=e.yAxisTicks,s=e.bandSize,l=e.dataKey,u=e.stackedData,p=e.dataStartIndex,c=e.displayedData,f=e.offset,d=t.layout,h=u&&u.length,m=oP.getBaseValue(t,n,r,a),g=d==="horizontal",v=!1,y=c.map(function(S,w){var P;h?P=u[p+w]:(P=It(S,l),Array.isArray(P)?v=!0:P=[m,P]);var O=P[1]==null||h&&It(S,l)==null;return g?{x:Up({axis:r,ticks:o,bandSize:s,entry:S,index:w}),y:O?null:a.scale(P[1]),value:P,payload:S}:{x:O?null:r.scale(P[1]),y:Up({axis:a,ticks:i,bandSize:s,entry:S,index:w}),value:P,payload:S}}),x;return h||v?x=y.map(function(S){var w=Array.isArray(S.value)?S.value[0]:null;return g?{x:S.x,y:w!=null&&S.y!=null?a.scale(w):null}:{x:w!=null?r.scale(w):null,y:S.y}}):x=g?a.scale(m):r.scale(m),Yr({points:y,baseLine:x,layout:d,isRange:v},f)});ar(ht,"renderDotItem",function(e,t){var n;if(E.isValidElement(e))n=E.cloneElement(e,t);else if(ae(e))n=e(t);else{var r=ue("recharts-area-dot",typeof e!="boolean"?e.className:""),a=t.key,o=iP(t,xre);n=E.createElement(gd,Ja({},o,{key:a,className:r}))}return n});function Qi(e){"@babel/helpers - typeof";return Qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qi(e)}function Are(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ere(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,pP(r.key),r)}}function Tre(e,t,n){return t&&Ere(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function jre(e,t,n){return t=df(t),$re(e,uP()?Reflect.construct(t,n||[],df(e).constructor):t.apply(e,n))}function $re(e,t){if(t&&(Qi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Nre(e)}function Nre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function uP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(uP=function(){return!!e})()}function df(e){return df=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},df(e)}function Mre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&pv(e,t)}function pv(e,t){return pv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},pv(e,t)}function cP(e,t,n){return t=pP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function pP(e){var t=Rre(e,"string");return Qi(t)=="symbol"?t:t+""}function Rre(e,t){if(Qi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Qi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function fv(){return fv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},fv.apply(this,arguments)}function Ire(e){var t=e.xAxisId,n=Ng(),r=Mg(),a=WS(t);return a==null?null:k.createElement(Os,fv({},a,{className:ue("recharts-".concat(a.axisType," ").concat(a.axisType),a.className),viewBox:{x:0,y:0,width:n,height:r},ticksGenerator:function(i){return _r(i,!0)}}))}var Mt=function(e){function t(){return Are(this,t),jre(this,t,arguments)}return Mre(t,e),Tre(t,[{key:"render",value:function(){return k.createElement(Ire,this.props)}}])}(k.Component);cP(Mt,"displayName","XAxis");cP(Mt,"defaultProps",{allowDecimals:!0,hide:!1,orientation:"bottom",width:0,height:30,mirror:!1,xAxisId:0,tickCount:5,type:"category",padding:{left:0,right:0},allowDataOverflow:!1,scale:"auto",reversed:!1,allowDuplicatedCategory:!0});function Zi(e){"@babel/helpers - typeof";return Zi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zi(e)}function Dre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Lre(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,mP(r.key),r)}}function Fre(e,t,n){return t&&Lre(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function zre(e,t,n){return t=mf(t),Bre(e,fP()?Reflect.construct(t,n||[],mf(e).constructor):t.apply(e,n))}function Bre(e,t){if(t&&(Zi(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Hre(e)}function Hre(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function fP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(fP=function(){return!!e})()}function mf(e){return mf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},mf(e)}function Gre(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&dv(e,t)}function dv(e,t){return dv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},dv(e,t)}function dP(e,t,n){return t=mP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function mP(e){var t=Ure(e,"string");return Zi(t)=="symbol"?t:t+""}function Ure(e,t){if(Zi(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Zi(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function mv(){return mv=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},mv.apply(this,arguments)}var Wre=function(t){var n=t.yAxisId,r=Ng(),a=Mg(),o=qS(n);return o==null?null:k.createElement(Os,mv({},o,{className:ue("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:r,height:a},ticksGenerator:function(s){return _r(s,!0)}}))},_t=function(e){function t(){return Dre(this,t),zre(this,t,arguments)}return Gre(t,e),Fre(t,[{key:"render",value:function(){return k.createElement(Wre,this.props)}}])}(k.Component);dP(_t,"displayName","YAxis");dP(_t,"defaultProps",{allowDuplicatedCategory:!0,allowDecimals:!0,hide:!1,orientation:"left",width:60,height:0,mirror:!1,yAxisId:0,tickCount:5,type:"number",padding:{top:0,bottom:0},allowDataOverflow:!1,scale:"auto",reversed:!1});function y2(e){return Xre(e)||Kre(e)||Vre(e)||qre()}function qre(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vre(e,t){if(e){if(typeof e=="string")return hv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return hv(e,t)}}function Kre(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Xre(e){if(Array.isArray(e))return hv(e)}function hv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var vv=function(t,n,r,a,o){var i=yn(t,Ig),s=yn(t,Pd),l=[].concat(y2(i),y2(s)),u=yn(t,kd),p="".concat(a,"Id"),c=a[0],f=n;if(l.length&&(f=l.reduce(function(m,g){if(g.props[p]===r&&pr(g.props,"extendDomain")&&V(g.props[c])){var v=g.props[c];return[Math.min(m[0],v),Math.max(m[1],v)]}return m},f)),u.length){var d="".concat(c,"1"),h="".concat(c,"2");f=u.reduce(function(m,g){if(g.props[p]===r&&pr(g.props,"extendDomain")&&V(g.props[d])&&V(g.props[h])){var v=g.props[d],y=g.props[h];return[Math.min(m[0],v,y),Math.max(m[1],v,y)]}return m},f)}return o&&o.length&&(f=o.reduce(function(m,g){return V(g)?[Math.min(m[0],g),Math.max(m[1],g)]:m},f)),f},hP={exports:{}};(function(e){var t=Object.prototype.hasOwnProperty,n="~";function r(){}Object.create&&(r.prototype=Object.create(null),new r().__proto__||(n=!1));function a(l,u,p){this.fn=l,this.context=u,this.once=p||!1}function o(l,u,p,c,f){if(typeof p!="function")throw new TypeError("The listener must be a function");var d=new a(p,c||l,f),h=n?n+u:u;return l._events[h]?l._events[h].fn?l._events[h]=[l._events[h],d]:l._events[h].push(d):(l._events[h]=d,l._eventsCount++),l}function i(l,u){--l._eventsCount===0?l._events=new r:delete l._events[u]}function s(){this._events=new r,this._eventsCount=0}s.prototype.eventNames=function(){var u=[],p,c;if(this._eventsCount===0)return u;for(c in p=this._events)t.call(p,c)&&u.push(n?c.slice(1):c);return Object.getOwnPropertySymbols?u.concat(Object.getOwnPropertySymbols(p)):u},s.prototype.listeners=function(u){var p=n?n+u:u,c=this._events[p];if(!c)return[];if(c.fn)return[c.fn];for(var f=0,d=c.length,h=new Array(d);f<d;f++)h[f]=c[f].fn;return h},s.prototype.listenerCount=function(u){var p=n?n+u:u,c=this._events[p];return c?c.fn?1:c.length:0},s.prototype.emit=function(u,p,c,f,d,h){var m=n?n+u:u;if(!this._events[m])return!1;var g=this._events[m],v=arguments.length,y,x;if(g.fn){switch(g.once&&this.removeListener(u,g.fn,void 0,!0),v){case 1:return g.fn.call(g.context),!0;case 2:return g.fn.call(g.context,p),!0;case 3:return g.fn.call(g.context,p,c),!0;case 4:return g.fn.call(g.context,p,c,f),!0;case 5:return g.fn.call(g.context,p,c,f,d),!0;case 6:return g.fn.call(g.context,p,c,f,d,h),!0}for(x=1,y=new Array(v-1);x<v;x++)y[x-1]=arguments[x];g.fn.apply(g.context,y)}else{var S=g.length,w;for(x=0;x<S;x++)switch(g[x].once&&this.removeListener(u,g[x].fn,void 0,!0),v){case 1:g[x].fn.call(g[x].context);break;case 2:g[x].fn.call(g[x].context,p);break;case 3:g[x].fn.call(g[x].context,p,c);break;case 4:g[x].fn.call(g[x].context,p,c,f);break;default:if(!y)for(w=1,y=new Array(v-1);w<v;w++)y[w-1]=arguments[w];g[x].fn.apply(g[x].context,y)}}return!0},s.prototype.on=function(u,p,c){return o(this,u,p,c,!1)},s.prototype.once=function(u,p,c){return o(this,u,p,c,!0)},s.prototype.removeListener=function(u,p,c,f){var d=n?n+u:u;if(!this._events[d])return this;if(!p)return i(this,d),this;var h=this._events[d];if(h.fn)h.fn===p&&(!f||h.once)&&(!c||h.context===c)&&i(this,d);else{for(var m=0,g=[],v=h.length;m<v;m++)(h[m].fn!==p||f&&!h[m].once||c&&h[m].context!==c)&&g.push(h[m]);g.length?this._events[d]=g.length===1?g[0]:g:i(this,d)}return this},s.prototype.removeAllListeners=function(u){var p;return u?(p=n?n+u:u,this._events[p]&&i(this,p)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=n,s.EventEmitter=s,e.exports=s})(hP);var Yre=hP.exports;const Qre=_e(Yre);var Bm=new Qre,Hm="recharts.syncMouseEvents";function cu(e){"@babel/helpers - typeof";return cu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cu(e)}function Zre(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Jre(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,vP(r.key),r)}}function eae(e,t,n){return t&&Jre(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Gm(e,t,n){return t=vP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function vP(e){var t=tae(e,"string");return cu(t)=="symbol"?t:t+""}function tae(e,t){if(cu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(cu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var nae=function(){function e(){Zre(this,e),Gm(this,"activeIndex",0),Gm(this,"coordinateList",[]),Gm(this,"layout","horizontal")}return eae(e,[{key:"setDetails",value:function(n){var r,a=n.coordinateList,o=a===void 0?null:a,i=n.container,s=i===void 0?null:i,l=n.layout,u=l===void 0?null:l,p=n.offset,c=p===void 0?null:p,f=n.mouseHandlerCallback,d=f===void 0?null:f;this.coordinateList=(r=o??this.coordinateList)!==null&&r!==void 0?r:[],this.container=s??this.container,this.layout=u??this.layout,this.offset=c??this.offset,this.mouseHandlerCallback=d??this.mouseHandlerCallback,this.activeIndex=Math.min(Math.max(this.activeIndex,0),this.coordinateList.length-1)}},{key:"focus",value:function(){this.spoofMouse()}},{key:"keyboardEvent",value:function(n){if(this.coordinateList.length!==0)switch(n.key){case"ArrowRight":{if(this.layout!=="horizontal")return;this.activeIndex=Math.min(this.activeIndex+1,this.coordinateList.length-1),this.spoofMouse();break}case"ArrowLeft":{if(this.layout!=="horizontal")return;this.activeIndex=Math.max(this.activeIndex-1,0),this.spoofMouse();break}}}},{key:"setIndex",value:function(n){this.activeIndex=n}},{key:"spoofMouse",value:function(){var n,r;if(this.layout==="horizontal"&&this.coordinateList.length!==0){var a=this.container.getBoundingClientRect(),o=a.x,i=a.y,s=a.height,l=this.coordinateList[this.activeIndex].coordinate,u=((n=window)===null||n===void 0?void 0:n.scrollX)||0,p=((r=window)===null||r===void 0?void 0:r.scrollY)||0,c=o+l+u,f=i+this.offset.top+s/2+p;this.mouseHandlerCallback({pageX:c,pageY:f})}}}])}();function rae(e,t,n){if(n==="number"&&t===!0&&Array.isArray(e)){var r=e==null?void 0:e[0],a=e==null?void 0:e[1];if(r&&a&&V(r)&&V(a))return!0}return!1}function aae(e,t,n,r){var a=r/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-a:n.left+.5,y:e==="horizontal"?n.top+.5:t.y-a,width:e==="horizontal"?r:n.width-1,height:e==="horizontal"?n.height-1:r}}function yP(e){var t=e.cx,n=e.cy,r=e.radius,a=e.startAngle,o=e.endAngle,i=mt(t,n,r,a),s=mt(t,n,r,o);return{points:[i,s],cx:t,cy:n,radius:r,startAngle:a,endAngle:o}}function oae(e,t,n){var r,a,o,i;if(e==="horizontal")r=t.x,o=r,a=n.top,i=n.top+n.height;else if(e==="vertical")a=t.y,i=a,r=n.left,o=n.left+n.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var s=t.cx,l=t.cy,u=t.innerRadius,p=t.outerRadius,c=t.angle,f=mt(s,l,u,c),d=mt(s,l,p,c);r=f.x,a=f.y,o=d.x,i=d.y}else return yP(t);return[{x:r,y:a},{x:o,y:i}]}function pu(e){"@babel/helpers - typeof";return pu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pu(e)}function g2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function hc(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?g2(Object(n),!0).forEach(function(r){iae(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function iae(e,t,n){return t=sae(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function sae(e){var t=lae(e,"string");return pu(t)=="symbol"?t:t+""}function lae(e,t){if(pu(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(pu(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function uae(e){var t,n,r=e.element,a=e.tooltipEventType,o=e.isActive,i=e.activeCoordinate,s=e.activePayload,l=e.offset,u=e.activeTooltipIndex,p=e.tooltipAxisBandSize,c=e.layout,f=e.chartName,d=(t=r.props.cursor)!==null&&t!==void 0?t:(n=r.type.defaultProps)===null||n===void 0?void 0:n.cursor;if(!r||!d||!o||!i||f!=="ScatterChart"&&a!=="axis")return null;var h,m=di;if(f==="ScatterChart")h=i,m=JZ;else if(f==="BarChart")h=aae(c,i,l,p),m=Ag;else if(c==="radial"){var g=yP(i),v=g.cx,y=g.cy,x=g.radius,S=g.startAngle,w=g.endAngle;h={cx:v,cy:y,startAngle:S,endAngle:w,innerRadius:x,outerRadius:x},m=yS}else h={points:oae(c,i,l)},m=di;var P=hc(hc(hc(hc({stroke:"#ccc",pointerEvents:"none"},l),h),ie(d,!1)),{},{payload:s,payloadIndex:u,className:ue("recharts-tooltip-cursor",d.className)});return k.isValidElement(d)?k.cloneElement(d,P):k.createElement(m,P)}var cae=["item"],pae=["children","className","width","height","style","compact","title","desc"];function Ji(e){"@babel/helpers - typeof";return Ji=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ji(e)}function Jo(){return Jo=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},Jo.apply(this,arguments)}function x2(e,t){return mae(e)||dae(e,t)||xP(e,t)||fae()}function fae(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function dae(e,t){var n=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,a,o,i,s=[],l=!0,u=!1;try{if(o=(n=n.call(e)).next,t!==0)for(;!(l=(r=o.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(p){u=!0,a=p}finally{try{if(!l&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return s}}function mae(e){if(Array.isArray(e))return e}function w2(e,t){if(e==null)return{};var n=hae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)r=o[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function hae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function yae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,wP(r.key),r)}}function gae(e,t,n){return t&&yae(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function xae(e,t,n){return t=hf(t),wae(e,gP()?Reflect.construct(t,n||[],hf(e).constructor):t.apply(e,n))}function wae(e,t){if(t&&(Ji(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return bae(e)}function bae(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function gP(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(gP=function(){return!!e})()}function hf(e){return hf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},hf(e)}function Sae(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&yv(e,t)}function yv(e,t){return yv=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,a){return r.__proto__=a,r},yv(e,t)}function es(e){return kae(e)||Oae(e)||xP(e)||Pae()}function Pae(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
+In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xP(e,t){if(e){if(typeof e=="string")return gv(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return gv(e,t)}}function Oae(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function kae(e){if(Array.isArray(e))return gv(e)}function gv(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function b2(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};t%2?b2(Object(n),!0).forEach(function(r){ee(e,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):b2(Object(n)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))})}return e}function ee(e,t,n){return t=wP(t),t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function wP(e){var t=Cae(e,"string");return Ji(t)=="symbol"?t:t+""}function Cae(e,t){if(Ji(e)!="object"||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(Ji(r)!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var _ae={xAxis:["bottom","top"],yAxis:["left","right"]},Aae={width:"100%",height:"100%"},bP={x:0,y:0};function vc(e){return e}var Eae=function(t,n){return n==="horizontal"?t.x:n==="vertical"?t.y:n==="centric"?t.angle:t.radius},Tae=function(t,n,r,a){var o=n.find(function(p){return p&&p.index===r});if(o){if(t==="horizontal")return{x:o.coordinate,y:a.y};if(t==="vertical")return{x:a.x,y:o.coordinate};if(t==="centric"){var i=o.coordinate,s=a.radius;return z(z(z({},a),mt(a.cx,a.cy,s,i)),{},{angle:i,radius:s})}var l=o.coordinate,u=a.angle;return z(z(z({},a),mt(a.cx,a.cy,l,u)),{},{angle:u,radius:l})}return bP},Cd=function(t,n){var r=n.graphicalItems,a=n.dataStartIndex,o=n.dataEndIndex,i=(r??[]).reduce(function(s,l){var u=l.props.data;return u&&u.length?[].concat(es(s),es(u)):s},[]);return i.length>0?i:t&&t.length&&V(a)&&V(o)?t.slice(a,o+1):[]};function SP(e){return e==="number"?[0,"auto"]:void 0}var xv=function(t,n,r,a){var o=t.graphicalItems,i=t.tooltipAxis,s=Cd(n,t);return r<0||!o||!o.length||r>=s.length?null:o.reduce(function(l,u){var p,c=(p=u.props.data)!==null&&p!==void 0?p:n;c&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(c=c.slice(t.dataStartIndex,t.dataEndIndex+1));var f;if(i.dataKey&&!i.allowDuplicatedCategory){var d=c===void 0?s:c;f=mp(d,i.dataKey,a)}else f=c&&c[r]||s[r];return f?[].concat(es(l),[mS(u,f)]):l},[])},S2=function(t,n,r,a){var o=a||{x:t.chartX,y:t.chartY},i=Eae(o,r),s=t.orderedTooltipTicks,l=t.tooltipAxis,u=t.tooltipTicks,p=RX(i,s,u,l);if(p>=0&&u){var c=u[p]&&u[p].value,f=xv(t,n,p,c),d=Tae(r,s,p,o);return{activeTooltipIndex:p,activeLabel:c,activePayload:f,activeCoordinate:d}}return null},jae=function(t,n){var r=n.axes,a=n.graphicalItems,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,p=t.layout,c=t.children,f=t.stackOffset,d=pS(p,o);return r.reduce(function(h,m){var g,v=m.type.defaultProps!==void 0?z(z({},m.type.defaultProps),m.props):m.props,y=v.type,x=v.dataKey,S=v.allowDataOverflow,w=v.allowDuplicatedCategory,P=v.scale,O=v.ticks,C=v.includeHidden,_=v[i];if(h[_])return h;var T=Cd(t.data,{graphicalItems:a.filter(function(G){var Z,re=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i];return re===_}),dataStartIndex:l,dataEndIndex:u}),A=T.length,j,N,M;rae(v.domain,S,y)&&(j=I0(v.domain,null,S),d&&(y==="number"||P!=="auto")&&(M=ll(T,x,"category")));var I=SP(y);if(!j||j.length===0){var R,L=(R=v.domain)!==null&&R!==void 0?R:I;if(x){if(j=ll(T,x,y),y==="category"&&d){var $=SM(j);w&&$?(N=j,j=ef(0,A)):w||(j=Z3(L,j,m).reduce(function(G,Z){return G.indexOf(Z)>=0?G:[].concat(es(G),[Z])},[]))}else if(y==="category")w?j=j.filter(function(G){return G!==""&&!le(G)}):j=Z3(L,j,m).reduce(function(G,Z){return G.indexOf(Z)>=0||Z===""||le(Z)?G:[].concat(es(G),[Z])},[]);else if(y==="number"){var D=zX(T,a.filter(function(G){var Z,re,ve=i in G.props?G.props[i]:(Z=G.type.defaultProps)===null||Z===void 0?void 0:Z[i],be="hide"in G.props?G.props.hide:(re=G.type.defaultProps)===null||re===void 0?void 0:re.hide;return ve===_&&(C||!be)}),x,o,p);D&&(j=D)}d&&(y==="number"||P!=="auto")&&(M=ll(T,x,"category"))}else d?j=ef(0,A):s&&s[_]&&s[_].hasStack&&y==="number"?j=f==="expand"?[0,1]:dS(s[_].stackGroups,l,u):j=cS(T,a.filter(function(G){var Z=i in G.props?G.props[i]:G.type.defaultProps[i],re="hide"in G.props?G.props.hide:G.type.defaultProps.hide;return Z===_&&(C||!re)}),y,p,!0);if(y==="number")j=vv(c,j,_,o,O),L&&(j=I0(L,j,S));else if(y==="category"&&L){var H=L,W=j.every(function(G){return H.indexOf(G)>=0});W&&(j=H)}}return z(z({},h),{},ee({},_,z(z({},v),{},{axisType:o,domain:j,categoricalDomain:M,duplicateDomain:N,originalDomain:(g=v.domain)!==null&&g!==void 0?g:I,isCategorical:d,layout:p})))},{})},$ae=function(t,n){var r=n.graphicalItems,a=n.Axis,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,p=t.layout,c=t.children,f=Cd(t.data,{graphicalItems:r,dataStartIndex:l,dataEndIndex:u}),d=f.length,h=pS(p,o),m=-1;return r.reduce(function(g,v){var y=v.type.defaultProps!==void 0?z(z({},v.type.defaultProps),v.props):v.props,x=y[i],S=SP("number");if(!g[x]){m++;var w;return h?w=ef(0,d):s&&s[x]&&s[x].hasStack?(w=dS(s[x].stackGroups,l,u),w=vv(c,w,x,o)):(w=I0(S,cS(f,r.filter(function(P){var O,C,_=i in P.props?P.props[i]:(O=P.type.defaultProps)===null||O===void 0?void 0:O[i],T="hide"in P.props?P.props.hide:(C=P.type.defaultProps)===null||C===void 0?void 0:C.hide;return _===x&&!T}),"number",p),a.defaultProps.allowDataOverflow),w=vv(c,w,x,o)),z(z({},g),{},ee({},x,z(z({axisType:o},a.defaultProps),{},{hide:!0,orientation:vn(_ae,"".concat(o,".").concat(m%2),null),domain:w,originalDomain:S,isCategorical:h,layout:p})))}return g},{})},Nae=function(t,n){var r=n.axisType,a=r===void 0?"xAxis":r,o=n.AxisComp,i=n.graphicalItems,s=n.stackGroups,l=n.dataStartIndex,u=n.dataEndIndex,p=t.children,c="".concat(a,"Id"),f=yn(p,o),d={};return f&&f.length?d=jae(t,{axes:f,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u}):i&&i.length&&(d=$ae(t,{Axis:o,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:l,dataEndIndex:u})),d},Mae=function(t){var n=ra(t),r=_r(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:tg(r,function(a){return a.coordinate}),tooltipAxis:n,tooltipAxisBandSize:Wp(n,r)}},P2=function(t){var n=t.children,r=t.defaultShowTooltip,a=Yt(n,Gi),o=0,i=0;return t.data&&t.data.length!==0&&(i=t.data.length-1),a&&a.props&&(a.props.startIndex>=0&&(o=a.props.startIndex),a.props.endIndex>=0&&(i=a.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:!!r}},Rae=function(t){return!t||!t.length?!1:t.some(function(n){var r=Er(n&&n.type);return r&&r.indexOf("Bar")>=0})},O2=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},Iae=function(t,n){var r=t.props,a=t.graphicalItems,o=t.xAxisMap,i=o===void 0?{}:o,s=t.yAxisMap,l=s===void 0?{}:s,u=r.width,p=r.height,c=r.children,f=r.margin||{},d=Yt(c,Gi),h=Yt(c,ci),m=Object.keys(l).reduce(function(w,P){var O=l[P],C=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},C,w[C]+O.width)):w},{left:f.left||0,right:f.right||0}),g=Object.keys(i).reduce(function(w,P){var O=i[P],C=O.orientation;return!O.mirror&&!O.hide?z(z({},w),{},ee({},C,vn(w,"".concat(C))+O.height)):w},{top:f.top||0,bottom:f.bottom||0}),v=z(z({},g),m),y=v.bottom;d&&(v.bottom+=d.props.height||Gi.defaultProps.height),h&&n&&(v=LX(v,a,r,n));var x=u-v.left-v.right,S=p-v.top-v.bottom;return z(z({brushBottom:y},v),{},{width:Math.max(x,0),height:Math.max(S,0)})},Dae=function(t,n){if(n==="xAxis")return t[n].width;if(n==="yAxis")return t[n].height},Fg=function(t){var n=t.chartName,r=t.GraphicalChild,a=t.defaultTooltipEventType,o=a===void 0?"axis":a,i=t.validateTooltipEventTypes,s=i===void 0?["axis"]:i,l=t.axisComponents,u=t.legendContent,p=t.formatAxisMap,c=t.defaultProps,f=function(v,y){var x=y.graphicalItems,S=y.stackGroups,w=y.offset,P=y.updateId,O=y.dataStartIndex,C=y.dataEndIndex,_=v.barSize,T=v.layout,A=v.barGap,j=v.barCategoryGap,N=v.maxBarSize,M=O2(T),I=M.numericAxisName,R=M.cateAxisName,L=Rae(x),$=[];return x.forEach(function(D,H){var W=Cd(v.data,{graphicalItems:[D],dataStartIndex:O,dataEndIndex:C}),G=D.type.defaultProps!==void 0?z(z({},D.type.defaultProps),D.props):D.props,Z=G.dataKey,re=G.maxBarSize,ve=G["".concat(I,"Id")],be=G["".concat(R,"Id")],J={},se=l.reduce(function(La,Fa){var $d=y["".concat(Fa.axisType,"Map")],Kg=G["".concat(Fa.axisType,"Id")];$d&&$d[Kg]||Fa.axisType==="zAxis"||So();var Xg=$d[Kg];return z(z({},La),{},ee(ee({},Fa.axisType,Xg),"".concat(Fa.axisType,"Ticks"),_r(Xg)))},J),q=se[R],K=se["".concat(R,"Ticks")],X=S&&S[ve]&&S[ve].hasStack&&ZX(D,S[ve].stackGroups),F=Er(D.type).indexOf("Bar")>=0,pe=Wp(q,K),te=[],Ne=L&&IX({barSize:_,stackGroups:S,totalSize:Dae(se,R)});if(F){var Me,Qe,Vn=le(re)?N:re,Pn=(Me=(Qe=Wp(q,K,!0))!==null&&Qe!==void 0?Qe:Vn)!==null&&Me!==void 0?Me:0;te=DX({barGap:A,barCategoryGap:j,bandSize:Pn!==pe?Pn:pe,sizeList:Ne[be],maxBarSize:Vn}),Pn!==pe&&(te=te.map(function(La){return z(z({},La),{},{position:z(z({},La.position),{},{offset:La.position.offset-Pn/2})})}))}var $u=D&&D.type&&D.type.getComposedData;$u&&$.push({props:z(z({},$u(z(z({},se),{},{displayedData:W,props:v,dataKey:Z,item:D,bandSize:pe,barPosition:te,offset:w,stackedData:X,layout:T,dataStartIndex:O,dataEndIndex:C}))),{},ee(ee(ee({key:D.key||"item-".concat(H)},I,se[I]),R,se[R]),"animationId",P)),childIndex:MM(D,v.children),item:D})}),$},d=function(v,y){var x=v.props,S=v.dataStartIndex,w=v.dataEndIndex,P=v.updateId;if(!qx({props:x}))return null;var O=x.children,C=x.layout,_=x.stackOffset,T=x.data,A=x.reverseStackOrder,j=O2(C),N=j.numericAxisName,M=j.cateAxisName,I=yn(O,r),R=XX(T,I,"".concat(N,"Id"),"".concat(M,"Id"),_,A),L=l.reduce(function(G,Z){var re="".concat(Z.axisType,"Map");return z(z({},G),{},ee({},re,Nae(x,z(z({},Z),{},{graphicalItems:I,stackGroups:Z.axisType===N&&R,dataStartIndex:S,dataEndIndex:w}))))},{}),$=Iae(z(z({},L),{},{props:x,graphicalItems:I}),y==null?void 0:y.legendBBox);Object.keys(L).forEach(function(G){L[G]=p(x,L[G],$,G.replace("Map",""),n)});var D=L["".concat(M,"Map")],H=Mae(D),W=f(x,z(z({},L),{},{dataStartIndex:S,dataEndIndex:w,updateId:P,graphicalItems:I,stackGroups:R,offset:$}));return z(z({formattedGraphicalItems:W,graphicalItems:I,offset:$,stackGroups:R},H),L)},h=function(g){function v(y){var x,S,w;return vae(this,v),w=xae(this,v,[y]),ee(w,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),ee(w,"accessibilityManager",new nae),ee(w,"handleLegendBBoxUpdate",function(P){if(P){var O=w.state,C=O.dataStartIndex,_=O.dataEndIndex,T=O.updateId;w.setState(z({legendBBox:P},d({props:w.props,dataStartIndex:C,dataEndIndex:_,updateId:T},z(z({},w.state),{},{legendBBox:P}))))}}),ee(w,"handleReceiveSyncEvent",function(P,O,C){if(w.props.syncId===P){if(C===w.eventEmitterSymbol&&typeof w.props.syncMethod!="function")return;w.applySyncEvent(O)}}),ee(w,"handleBrushChange",function(P){var O=P.startIndex,C=P.endIndex;if(O!==w.state.dataStartIndex||C!==w.state.dataEndIndex){var _=w.state.updateId;w.setState(function(){return z({dataStartIndex:O,dataEndIndex:C},d({props:w.props,dataStartIndex:O,dataEndIndex:C,updateId:_},w.state))}),w.triggerSyncEvent({dataStartIndex:O,dataEndIndex:C})}}),ee(w,"handleMouseEnter",function(P){var O=w.getMouseInfo(P);if(O){var C=z(z({},O),{},{isTooltipActive:!0});w.setState(C),w.triggerSyncEvent(C);var _=w.props.onMouseEnter;ae(_)&&_(C,P)}}),ee(w,"triggeredAfterMouseMove",function(P){var O=w.getMouseInfo(P),C=O?z(z({},O),{},{isTooltipActive:!0}):{isTooltipActive:!1};w.setState(C),w.triggerSyncEvent(C);var _=w.props.onMouseMove;ae(_)&&_(C,P)}),ee(w,"handleItemMouseEnter",function(P){w.setState(function(){return{isTooltipActive:!0,activeItem:P,activePayload:P.tooltipPayload,activeCoordinate:P.tooltipPosition||{x:P.cx,y:P.cy}}})}),ee(w,"handleItemMouseLeave",function(){w.setState(function(){return{isTooltipActive:!1}})}),ee(w,"handleMouseMove",function(P){P.persist(),w.throttleTriggeredAfterMouseMove(P)}),ee(w,"handleMouseLeave",function(P){w.throttleTriggeredAfterMouseMove.cancel();var O={isTooltipActive:!1};w.setState(O),w.triggerSyncEvent(O);var C=w.props.onMouseLeave;ae(C)&&C(O,P)}),ee(w,"handleOuterEvent",function(P){var O=NM(P),C=vn(w.props,"".concat(O));if(O&&ae(C)){var _,T;/.*touch.*/i.test(O)?T=w.getMouseInfo(P.changedTouches[0]):T=w.getMouseInfo(P),C((_=T)!==null&&_!==void 0?_:{},P)}}),ee(w,"handleClick",function(P){var O=w.getMouseInfo(P);if(O){var C=z(z({},O),{},{isTooltipActive:!0});w.setState(C),w.triggerSyncEvent(C);var _=w.props.onClick;ae(_)&&_(C,P)}}),ee(w,"handleMouseDown",function(P){var O=w.props.onMouseDown;if(ae(O)){var C=w.getMouseInfo(P);O(C,P)}}),ee(w,"handleMouseUp",function(P){var O=w.props.onMouseUp;if(ae(O)){var C=w.getMouseInfo(P);O(C,P)}}),ee(w,"handleTouchMove",function(P){P.changedTouches!=null&&P.changedTouches.length>0&&w.throttleTriggeredAfterMouseMove(P.changedTouches[0])}),ee(w,"handleTouchStart",function(P){P.changedTouches!=null&&P.changedTouches.length>0&&w.handleMouseDown(P.changedTouches[0])}),ee(w,"handleTouchEnd",function(P){P.changedTouches!=null&&P.changedTouches.length>0&&w.handleMouseUp(P.changedTouches[0])}),ee(w,"handleDoubleClick",function(P){var O=w.props.onDoubleClick;if(ae(O)){var C=w.getMouseInfo(P);O(C,P)}}),ee(w,"handleContextMenu",function(P){var O=w.props.onContextMenu;if(ae(O)){var C=w.getMouseInfo(P);O(C,P)}}),ee(w,"triggerSyncEvent",function(P){w.props.syncId!==void 0&&Bm.emit(Hm,w.props.syncId,P,w.eventEmitterSymbol)}),ee(w,"applySyncEvent",function(P){var O=w.props,C=O.layout,_=O.syncMethod,T=w.state.updateId,A=P.dataStartIndex,j=P.dataEndIndex;if(P.dataStartIndex!==void 0||P.dataEndIndex!==void 0)w.setState(z({dataStartIndex:A,dataEndIndex:j},d({props:w.props,dataStartIndex:A,dataEndIndex:j,updateId:T},w.state)));else if(P.activeTooltipIndex!==void 0){var N=P.chartX,M=P.chartY,I=P.activeTooltipIndex,R=w.state,L=R.offset,$=R.tooltipTicks;if(!L)return;if(typeof _=="function")I=_($,P);else if(_==="value"){I=-1;for(var D=0;D<$.length;D++)if($[D].value===P.activeLabel){I=D;break}}var H=z(z({},L),{},{x:L.left,y:L.top}),W=Math.min(N,H.x+H.width),G=Math.min(M,H.y+H.height),Z=$[I]&&$[I].value,re=xv(w.state,w.props.data,I),ve=$[I]?{x:C==="horizontal"?$[I].coordinate:W,y:C==="horizontal"?G:$[I].coordinate}:bP;w.setState(z(z({},P),{},{activeLabel:Z,activeCoordinate:ve,activePayload:re,activeTooltipIndex:I}))}else w.setState(P)}),ee(w,"renderCursor",function(P){var O,C=w.state,_=C.isTooltipActive,T=C.activeCoordinate,A=C.activePayload,j=C.offset,N=C.activeTooltipIndex,M=C.tooltipAxisBandSize,I=w.getTooltipEventType(),R=(O=P.props.active)!==null&&O!==void 0?O:_,L=w.props.layout,$=P.key||"_recharts-cursor";return E.createElement(uae,{key:$,activeCoordinate:T,activePayload:A,activeTooltipIndex:N,chartName:n,element:P,isActive:R,layout:L,offset:j,tooltipAxisBandSize:M,tooltipEventType:I})}),ee(w,"renderPolarAxis",function(P,O,C){var _=vn(P,"type.axisType"),T=vn(w.state,"".concat(_,"Map")),A=P.type.defaultProps,j=A!==void 0?z(z({},A),P.props):P.props,N=T&&T[j["".concat(_,"Id")]];return k.cloneElement(P,z(z({},N),{},{className:ue(_,N.className),key:P.key||"".concat(O,"-").concat(C),ticks:_r(N,!0)}))}),ee(w,"renderPolarGrid",function(P){var O=P.props,C=O.radialLines,_=O.polarAngles,T=O.polarRadius,A=w.state,j=A.radiusAxisMap,N=A.angleAxisMap,M=ra(j),I=ra(N),R=I.cx,L=I.cy,$=I.innerRadius,D=I.outerRadius;return k.cloneElement(P,{polarAngles:Array.isArray(_)?_:_r(I,!0).map(function(H){return H.coordinate}),polarRadius:Array.isArray(T)?T:_r(M,!0).map(function(H){return H.coordinate}),cx:R,cy:L,innerRadius:$,outerRadius:D,key:P.key||"polar-grid",radialLines:C})}),ee(w,"renderLegend",function(){var P=w.state.formattedGraphicalItems,O=w.props,C=O.children,_=O.width,T=O.height,A=w.props.margin||{},j=_-(A.left||0)-(A.right||0),N=lS({children:C,formattedGraphicalItems:P,legendWidth:j,legendContent:u});if(!N)return null;var M=N.item,I=w2(N,cae);return k.cloneElement(M,z(z({},I),{},{chartWidth:_,chartHeight:T,margin:A,onBBoxUpdate:w.handleLegendBBoxUpdate}))}),ee(w,"renderTooltip",function(){var P,O=w.props,C=O.children,_=O.accessibilityLayer,T=Yt(C,Yn);if(!T)return null;var A=w.state,j=A.isTooltipActive,N=A.activeCoordinate,M=A.activePayload,I=A.activeLabel,R=A.offset,L=(P=T.props.active)!==null&&P!==void 0?P:j;return k.cloneElement(T,{viewBox:z(z({},R),{},{x:R.left,y:R.top}),active:L,label:I,payload:L?M:[],coordinate:N,accessibilityLayer:_})}),ee(w,"renderBrush",function(P){var O=w.props,C=O.margin,_=O.data,T=w.state,A=T.offset,j=T.dataStartIndex,N=T.dataEndIndex,M=T.updateId;return k.cloneElement(P,{key:P.key||"_recharts-brush",onChange:pc(w.handleBrushChange,P.props.onChange),data:_,x:V(P.props.x)?P.props.x:A.left,y:V(P.props.y)?P.props.y:A.top+A.height+A.brushBottom-(C.bottom||0),width:V(P.props.width)?P.props.width:A.width,startIndex:j,endIndex:N,updateId:"brush-".concat(M)})}),ee(w,"renderReferenceElement",function(P,O,C){if(!P)return null;var _=w,T=_.clipPathId,A=w.state,j=A.xAxisMap,N=A.yAxisMap,M=A.offset,I=P.type.defaultProps||{},R=P.props,L=R.xAxisId,$=L===void 0?I.xAxisId:L,D=R.yAxisId,H=D===void 0?I.yAxisId:D;return k.cloneElement(P,{key:P.key||"".concat(O,"-").concat(C),xAxis:j[$],yAxis:N[H],viewBox:{x:M.left,y:M.top,width:M.width,height:M.height},clipPathId:T})}),ee(w,"renderActivePoints",function(P){var O=P.item,C=P.activePoint,_=P.basePoint,T=P.childIndex,A=P.isRange,j=[],N=O.props.key,M=O.item.type.defaultProps!==void 0?z(z({},O.item.type.defaultProps),O.item.props):O.item.props,I=M.activeDot,R=M.dataKey,L=z(z({index:T,dataKey:R,cx:C.x,cy:C.y,r:4,fill:_g(O.item),strokeWidth:2,stroke:"#fff",payload:C.payload,value:C.value},ie(I,!1)),hp(I));return j.push(v.renderActiveDot(I,L,"".concat(N,"-activePoint-").concat(T))),_?j.push(v.renderActiveDot(I,z(z({},L),{},{cx:_.x,cy:_.y}),"".concat(N,"-basePoint-").concat(T))):A&&j.push(null),j}),ee(w,"renderGraphicChild",function(P,O,C){var _=w.filterFormatItem(P,O,C);if(!_)return null;var T=w.getTooltipEventType(),A=w.state,j=A.isTooltipActive,N=A.tooltipAxis,M=A.activeTooltipIndex,I=A.activeLabel,R=w.props.children,L=Yt(R,Yn),$=_.props,D=$.points,H=$.isRange,W=$.baseLine,G=_.item.type.defaultProps!==void 0?z(z({},_.item.type.defaultProps),_.item.props):_.item.props,Z=G.activeDot,re=G.hide,ve=G.activeBar,be=G.activeShape,J=!!(!re&&j&&L&&(Z||ve||be)),se={};T!=="axis"&&L&&L.props.trigger==="click"?se={onClick:pc(w.handleItemMouseEnter,P.props.onClick)}:T!=="axis"&&(se={onMouseLeave:pc(w.handleItemMouseLeave,P.props.onMouseLeave),onMouseEnter:pc(w.handleItemMouseEnter,P.props.onMouseEnter)});var q=k.cloneElement(P,z(z({},_.props),se));function K(Fa){return typeof N.dataKey=="function"?N.dataKey(Fa.payload):null}if(J)if(M>=0){var X,F;if(N.dataKey&&!N.allowDuplicatedCategory){var pe=typeof N.dataKey=="function"?K:"payload.".concat(N.dataKey.toString());X=mp(D,pe,I),F=H&&W&&mp(W,pe,I)}else X=D==null?void 0:D[M],F=H&&W&&W[M];if(be||ve){var te=P.props.activeIndex!==void 0?P.props.activeIndex:M;return[k.cloneElement(P,z(z(z({},_.props),se),{},{activeIndex:te})),null,null]}if(!le(X))return[q].concat(es(w.renderActivePoints({item:_,activePoint:X,basePoint:F,childIndex:M,isRange:H})))}else{var Ne,Me=(Ne=w.getItemByXY(w.state.activeCoordinate))!==null&&Ne!==void 0?Ne:{graphicalItem:q},Qe=Me.graphicalItem,Vn=Qe.item,Pn=Vn===void 0?P:Vn,$u=Qe.childIndex,La=z(z(z({},_.props),se),{},{activeIndex:$u});return[k.cloneElement(Pn,La),null,null]}return H?[q,null,null]:[q,null]}),ee(w,"renderCustomized",function(P,O,C){return k.cloneElement(P,z(z({key:"recharts-customized-".concat(C)},w.props),w.state))}),ee(w,"renderMap",{CartesianGrid:{handler:vc,once:!0},ReferenceArea:{handler:w.renderReferenceElement},ReferenceLine:{handler:vc},ReferenceDot:{handler:w.renderReferenceElement},XAxis:{handler:vc},YAxis:{handler:vc},Brush:{handler:w.renderBrush,once:!0},Bar:{handler:w.renderGraphicChild},Line:{handler:w.renderGraphicChild},Area:{handler:w.renderGraphicChild},Radar:{handler:w.renderGraphicChild},RadialBar:{handler:w.renderGraphicChild},Scatter:{handler:w.renderGraphicChild},Pie:{handler:w.renderGraphicChild},Funnel:{handler:w.renderGraphicChild},Tooltip:{handler:w.renderCursor,once:!0},PolarGrid:{handler:w.renderPolarGrid,once:!0},PolarAngleAxis:{handler:w.renderPolarAxis},PolarRadiusAxis:{handler:w.renderPolarAxis},Customized:{handler:w.renderCustomized}}),w.clipPathId="".concat((x=y.id)!==null&&x!==void 0?x:ys("recharts"),"-clip"),w.throttleTriggeredAfterMouseMove=s7(w.triggeredAfterMouseMove,(S=y.throttleDelay)!==null&&S!==void 0?S:1e3/60),w.state={},w}return Sae(v,g),gae(v,[{key:"componentDidMount",value:function(){var x,S;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(S=this.props.margin.top)!==null&&S!==void 0?S:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var x=this.props,S=x.children,w=x.data,P=x.height,O=x.layout,C=Yt(S,Yn);if(C){var _=C.props.defaultIndex;if(!(typeof _!="number"||_<0||_>this.state.tooltipTicks.length-1)){var T=this.state.tooltipTicks[_]&&this.state.tooltipTicks[_].value,A=xv(this.state,w,_,T),j=this.state.tooltipTicks[_].coordinate,N=(this.state.offset.top+P)/2,M=O==="horizontal",I=M?{x:j,y:N}:{y:j,x:N},R=this.state.formattedGraphicalItems.find(function($){var D=$.item;return D.type.name==="Scatter"});R&&(I=z(z({},I),R.props.points[_].tooltipPosition),A=R.props.points[_].tooltipPayload);var L={activeTooltipIndex:_,isTooltipActive:!0,activeLabel:T,activePayload:A,activeCoordinate:I};this.setState(L),this.renderCursor(C),this.accessibilityManager.setIndex(_)}}}},{key:"getSnapshotBeforeUpdate",value:function(x,S){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==S.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==x.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==x.margin){var w,P;this.accessibilityManager.setDetails({offset:{left:(w=this.props.margin.left)!==null&&w!==void 0?w:0,top:(P=this.props.margin.top)!==null&&P!==void 0?P:0}})}return null}},{key:"componentDidUpdate",value:function(x){Qh([Yt(x.children,Yn)],[Yt(this.props.children,Yn)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var x=Yt(this.props.children,Yn);if(x&&typeof x.props.shared=="boolean"){var S=x.props.shared?"axis":"item";return s.indexOf(S)>=0?S:o}return o}},{key:"getMouseInfo",value:function(x){if(!this.container)return null;var S=this.container,w=S.getBoundingClientRect(),P=sW(w),O={chartX:Math.round(x.pageX-P.left),chartY:Math.round(x.pageY-P.top)},C=w.width/S.offsetWidth||1,_=this.inRange(O.chartX,O.chartY,C);if(!_)return null;var T=this.state,A=T.xAxisMap,j=T.yAxisMap,N=this.getTooltipEventType(),M=S2(this.state,this.props.data,this.props.layout,_);if(N!=="axis"&&A&&j){var I=ra(A).scale,R=ra(j).scale,L=I&&I.invert?I.invert(O.chartX):null,$=R&&R.invert?R.invert(O.chartY):null;return z(z({},O),{},{xValue:L,yValue:$},M)}return M?z(z({},O),M):null}},{key:"inRange",value:function(x,S){var w=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,P=this.props.layout,O=x/w,C=S/w;if(P==="horizontal"||P==="vertical"){var _=this.state.offset,T=O>=_.left&&O<=_.left+_.width&&C>=_.top&&C<=_.top+_.height;return T?{x:O,y:C}:null}var A=this.state,j=A.angleAxisMap,N=A.radiusAxisMap;if(j&&N){var M=ra(j);return tb({x:O,y:C},M)}return null}},{key:"parseEventsOfWrapper",value:function(){var x=this.props.children,S=this.getTooltipEventType(),w=Yt(x,Yn),P={};w&&S==="axis"&&(w.props.trigger==="click"?P={onClick:this.handleClick}:P={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var O=hp(this.props,this.handleOuterEvent);return z(z({},O),P)}},{key:"addListener",value:function(){Bm.on(Hm,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){Bm.removeListener(Hm,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(x,S,w){for(var P=this.state.formattedGraphicalItems,O=0,C=P.length;O<C;O++){var _=P[O];if(_.item===x||_.props.key===x.key||S===Er(_.item.type)&&w===_.childIndex)return _}return null}},{key:"renderClipPath",value:function(){var x=this.clipPathId,S=this.state.offset,w=S.left,P=S.top,O=S.height,C=S.width;return E.createElement("defs",null,E.createElement("clipPath",{id:x},E.createElement("rect",{x:w,y:P,height:O,width:C})))}},{key:"getXScales",value:function(){var x=this.state.xAxisMap;return x?Object.entries(x).reduce(function(S,w){var P=x2(w,2),O=P[0],C=P[1];return z(z({},S),{},ee({},O,C.scale))},{}):null}},{key:"getYScales",value:function(){var x=this.state.yAxisMap;return x?Object.entries(x).reduce(function(S,w){var P=x2(w,2),O=P[0],C=P[1];return z(z({},S),{},ee({},O,C.scale))},{}):null}},{key:"getXScaleByAxisId",value:function(x){var S;return(S=this.state.xAxisMap)===null||S===void 0||(S=S[x])===null||S===void 0?void 0:S.scale}},{key:"getYScaleByAxisId",value:function(x){var S;return(S=this.state.yAxisMap)===null||S===void 0||(S=S[x])===null||S===void 0?void 0:S.scale}},{key:"getItemByXY",value:function(x){var S=this.state,w=S.formattedGraphicalItems,P=S.activeItem;if(w&&w.length)for(var O=0,C=w.length;O<C;O++){var _=w[O],T=_.props,A=_.item,j=A.type.defaultProps!==void 0?z(z({},A.type.defaultProps),A.props):A.props,N=Er(A.type);if(N==="Bar"){var M=(T.data||[]).find(function($){return GZ(x,$)});if(M)return{graphicalItem:_,payload:M}}else if(N==="RadialBar"){var I=(T.data||[]).find(function($){return tb(x,$)});if(I)return{graphicalItem:_,payload:I}}else if(xd(_,P)||wd(_,P)||ou(_,P)){var R=qJ({graphicalItem:_,activeTooltipItem:P,itemData:j.data}),L=j.activeIndex===void 0?R:j.activeIndex;return{graphicalItem:z(z({},_),{},{childIndex:L}),payload:ou(_,P)?j.data[R]:_.props.data[R]}}}return null}},{key:"render",value:function(){var x=this;if(!qx(this))return null;var S=this.props,w=S.children,P=S.className,O=S.width,C=S.height,_=S.style,T=S.compact,A=S.title,j=S.desc,N=w2(S,pae),M=ie(N,!1);if(T)return E.createElement(Jb,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},E.createElement(Jh,Jo({},M,{width:O,height:C,title:A,desc:j}),this.renderClipPath(),Kx(w,this.renderMap)));if(this.props.accessibilityLayer){var I,R;M.tabIndex=(I=this.props.tabIndex)!==null&&I!==void 0?I:0,M.role=(R=this.props.role)!==null&&R!==void 0?R:"application",M.onKeyDown=function($){x.accessibilityManager.keyboardEvent($)},M.onFocus=function(){x.accessibilityManager.focus()}}var L=this.parseEventsOfWrapper();return E.createElement(Jb,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},E.createElement("div",Jo({className:ue("recharts-wrapper",P),style:z({position:"relative",cursor:"default",width:O,height:C},_)},L,{ref:function(D){x.container=D}}),E.createElement(Jh,Jo({},M,{width:O,height:C,title:A,desc:j,style:Aae}),this.renderClipPath(),Kx(w,this.renderMap)),this.renderLegend(),this.renderTooltip()))}}])}(k.Component);ee(h,"displayName",n),ee(h,"defaultProps",z({layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},c)),ee(h,"getDerivedStateFromProps",function(g,v){var y=g.dataKey,x=g.data,S=g.children,w=g.width,P=g.height,O=g.layout,C=g.stackOffset,_=g.margin,T=v.dataStartIndex,A=v.dataEndIndex;if(v.updateId===void 0){var j=P2(g);return z(z(z({},j),{},{updateId:0},d(z(z({props:g},j),{},{updateId:0}),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:P,prevLayout:O,prevStackOffset:C,prevMargin:_,prevChildren:S})}if(y!==v.prevDataKey||x!==v.prevData||w!==v.prevWidth||P!==v.prevHeight||O!==v.prevLayout||C!==v.prevStackOffset||!ui(_,v.prevMargin)){var N=P2(g),M={chartX:v.chartX,chartY:v.chartY,isTooltipActive:v.isTooltipActive},I=z(z({},S2(v,x,O)),{},{updateId:v.updateId+1}),R=z(z(z({},N),M),I);return z(z(z({},R),d(z({props:g},R),v)),{},{prevDataKey:y,prevData:x,prevWidth:w,prevHeight:P,prevLayout:O,prevStackOffset:C,prevMargin:_,prevChildren:S})}if(!Qh(S,v.prevChildren)){var L,$,D,H,W=Yt(S,Gi),G=W&&(L=($=W.props)===null||$===void 0?void 0:$.startIndex)!==null&&L!==void 0?L:T,Z=W&&(D=(H=W.props)===null||H===void 0?void 0:H.endIndex)!==null&&D!==void 0?D:A,re=G!==T||Z!==A,ve=!le(x),be=ve&&!re?v.updateId:v.updateId+1;return z(z({updateId:be},d(z(z({props:g},v),{},{updateId:be,dataStartIndex:G,dataEndIndex:Z}),v)),{},{prevChildren:S,dataStartIndex:G,dataEndIndex:Z})}return null}),ee(h,"renderActiveDot",function(g,v,y){var x;return k.isValidElement(g)?x=k.cloneElement(g,v):ae(g)?x=g(v):x=E.createElement(gd,v),E.createElement($e,{className:"recharts-active-dot",key:y},x)});var m=k.forwardRef(function(v,y){return E.createElement(h,Jo({},v,{ref:y}))});return m.displayName=h.displayName,m},zg=Fg({chartName:"LineChart",GraphicalChild:zt,axisComponents:[{axisType:"xAxis",AxisComp:Mt},{axisType:"yAxis",AxisComp:_t}],formatAxisMap:Eg}),PP=Fg({chartName:"BarChart",GraphicalChild:Da,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:Mt},{axisType:"yAxis",AxisComp:_t}],formatAxisMap:Eg}),fu=Fg({chartName:"AreaChart",GraphicalChild:ht,axisComponents:[{axisType:"xAxis",AxisComp:Mt},{axisType:"yAxis",AxisComp:_t}],formatAxisMap:Eg});const Lae={light:"",dark:".dark"},OP=k.createContext(null);function kP(){const e=k.useContext(OP);if(!e)throw new Error("useChart must be used within a <ChartContainer />");return e}const Ln=k.forwardRef(({id:e,className:t,children:n,config:r,...a},o)=>{const i=k.useId(),s=`chart-${e||i.replace(/:/g,"")}`;return b.jsx(OP.Provider,{value:{config:r},children:b.jsxs("div",{"data-chart":s,ref:o,className:Pe("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...a,children:[b.jsx(Fae,{id:s,config:r}),b.jsx(eW,{children:n})]})})});Ln.displayName="Chart";const Fae=({id:e,config:t})=>{const n=Object.entries(t).filter(([r,a])=>a.theme||a.color);return n.length?b.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(Lae).map(([r,a])=>`
+${a} [data-chart=${e}] {
+${n.map(([o,i])=>{var l;const s=((l=i.theme)==null?void 0:l[r])||i.color;return s?`  --color-${o}: ${s};`:null}).join(`
+`)}
+}
+`).join(`
+`)}}):null},or=Yn,Fn=k.forwardRef(({active:e,payload:t,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:o=!1,label:i,labelFormatter:s,labelClassName:l,formatter:u,color:p,nameKey:c,labelKey:f},d)=>{const{config:h}=kP(),m=k.useMemo(()=>{var w;if(a||!(t!=null&&t.length))return null;const[v]=t,y=`${f||v.dataKey||v.name||"value"}`,x=wv(h,v,y),S=!f&&typeof i=="string"?((w=h[i])==null?void 0:w.label)||i:x==null?void 0:x.label;return s?b.jsx("div",{className:Pe("font-medium",l),children:s(S,t)}):S?b.jsx("div",{className:Pe("font-medium",l),children:S}):null},[i,s,t,a,l,h,f]);if(!e||!(t!=null&&t.length))return null;const g=t.length===1&&r!=="dot";return b.jsxs("div",{ref:d,className:Pe("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[g?null:m,b.jsx("div",{className:"grid gap-1.5",children:t.map((v,y)=>{const x=`${c||v.name||v.dataKey||"value"}`,S=wv(h,v,x),w=p||v.payload.fill||v.color;return b.jsx("div",{className:Pe("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:u&&(v==null?void 0:v.value)!==void 0&&v.name?u(v.value,v.name,v,y,v.payload):b.jsxs(b.Fragment,{children:[S!=null&&S.icon?b.jsx(S.icon,{}):!o&&b.jsx("div",{className:Pe("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":g&&r==="dashed"}),style:{"--color-bg":w,"--color-border":w}}),b.jsxs("div",{className:Pe("flex flex-1 justify-between leading-none",g?"items-end":"items-center"),children:[b.jsxs("div",{className:"grid gap-1.5",children:[g?m:null,b.jsx("span",{className:"text-muted-foreground",children:(S==null?void 0:S.label)||v.name})]}),v.value&&b.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:v.value.toLocaleString()})]})]})},v.dataKey)})})]})});Fn.displayName="ChartTooltip";const zae=k.forwardRef(({className:e,hideIcon:t=!1,payload:n,verticalAlign:r="bottom",nameKey:a},o)=>{const{config:i}=kP();return n!=null&&n.length?b.jsx("div",{ref:o,className:Pe("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e),children:n.map(s=>{const l=`${a||s.dataKey||"value"}`,u=wv(i,s,l);return b.jsxs("div",{className:Pe("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[u!=null&&u.icon&&!t?b.jsx(u.icon,{}):b.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:s.color}}),u==null?void 0:u.label]},s.value)})}):null});zae.displayName="ChartLegend";function wv(e,t,n){if(typeof t!="object"||t===null)return;const r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let a=n;return n in t&&typeof t[n]=="string"?a=t[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in e?e[a]:e[n]}const Bae={empty:{icon:E4,title:"No Data Available",description:"There is no data to display at the moment."},error:{icon:VE,title:"Failed to Load Data",description:"An error occurred while loading the data. Please try again."},loading:{icon:j4,title:"Loading Data",description:"Please wait while we fetch the latest information."},"no-data":{icon:k4,title:"No Chart Data",description:"No data available to display in the chart."}},Hae=({type:e="empty",title:t,description:n,action:r,className:a})=>{const o=Bae[e],i=o.icon;return b.jsx(ge,{className:`border-dashed ${a}`,children:b.jsxs(we,{className:"flex flex-col items-center justify-center py-12 px-6 text-center",children:[b.jsx("div",{className:"rounded-full bg-gray-100 p-3 mb-4",children:b.jsx(i,{className:`h-8 w-8 text-gray-400 ${e==="loading"?"animate-spin":""}`})}),b.jsx(xe,{className:"text-lg font-medium text-gray-900 mb-2",children:t||o.title}),b.jsx("p",{className:"text-sm text-gray-500 mb-6 max-w-sm",children:n||o.description}),r&&b.jsxs(dp,{onClick:r.onClick,variant:"outline",size:"sm",children:[b.jsx(j4,{className:"h-4 w-4 mr-2"}),r.label]})]})})},zn=({onRetry:e})=>b.jsx(Hae,{type:"no-data",title:"No Chart Data",description:"Unable to generate chart with the current data set.",action:e?{label:"Retry",onClick:e}:void 0}),ir=({text:e="Kind Cluster / GitHub CI",position:t="top-center",className:n=""})=>{const r=()=>{switch(t){case"bottom-left":return"bottom-8 left-4";case"bottom-right":return"bottom-8 right-4";case"bottom-center":return"bottom-8 left-1/2 transform -translate-x-1/2";case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"top-center":return"left-1/2 transform -translate-x-1/2 -translate-y-1/2";default:return"bottom-8 left-1/2 transform -translate-x-1/2"}};return b.jsxs("div",{className:`absolute ${r()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${n}`,children:[b.jsx(T4,{className:"h-3 w-3 text-white"}),b.jsx("span",{className:"text-xs text-white font-medium",children:e})]})},Gae=({performanceMatrix:e,benchmarkResults:t,testConfiguration:n,performanceSummary:r,latencyPercentileComparison:a})=>{const o=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,throughput:Math.round(c.throughput),latency:Number(c.meanLatency.toFixed(1))})),i=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,gateway:Math.round(c.resources.envoyGateway.memory.mean),proxy:Math.round(c.resources.envoyProxy.memory.mean),total:Math.round(c.resources.envoyGateway.memory.mean+c.resources.envoyProxy.memory.mean)})),l=(()=>{if(a&&a.length>0){const c=a.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(c.p99.toFixed(1)),status:"watch"}]}if(t&&t.length>0){const c=t.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c&&c.latency&&c.latency.percentiles){const f=c.latency.percentiles;return[{percentile:"P50",value:Number((f.p50/1e3).toFixed(1)),status:"excellent"},{percentile:"P75",value:Number((f.p75/1e3).toFixed(1)),status:"excellent"},{percentile:"P90",value:Number((f.p90/1e3).toFixed(1)),status:"good"},{percentile:"P95",value:Number((f.p95/1e3).toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number((f.p99/1e3).toFixed(1)),status:"watch"}]}}return null})(),u=i.map(c=>({routes:c.routes,gatewayPerRoute:Number((c.gateway/c.routes).toFixed(2)),proxyPerRoute:Number((c.proxy/c.routes).toFixed(2)),totalPerRoute:Number((c.total/c.routes).toFixed(2))})),p={throughput:{label:"Throughput",color:"#8b5cf6"},latency:{label:"Latency",color:"#6366f1"},gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},totalPerRoute:{label:"Total per Route",color:"#8b5cf6"},gatewayPerRoute:{label:"Gateway per Route",color:"#a855f7"},proxyPerRoute:{label:"Proxy per Route",color:"#4f46e5"}};return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Avg Throughput"}),b.jsx(tT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[Math.round(r.avgThroughput)," RPS"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Mean Response Time"}),b.jsx(A4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[(r.avgLatency/1e3).toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"End-to-end as measured by Nighthawk"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Max Routes in Test"}),b.jsx(N4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:r.maxRoutes}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Routes tested successfully"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Reliability"}),b.jsx(ZE,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:"100%"}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Perfect system reliability"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Throughput Consistency"}),b.jsx(en,{children:"Throughput remains stable across different route scales"})]}),b.jsx(we,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:p,children:b.jsxs(fu,{data:o,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{domain:[0,"dataMax"],tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}`}),b.jsx(or,{content:b.jsx(Fn,{formatter:(c,f)=>[`${c} RPS`,"Throughput"],labelFormatter:c=>`${c} routes`})}),b.jsx(ht,{dataKey:"throughput",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(zn,{})})]}),b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Usage"}),b.jsx(en,{children:"Memory scaling patterns for Gateway and Proxy components"})]}),b.jsx(we,{children:i&&i.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:p,children:b.jsxs(fu,{data:i,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(or,{content:b.jsx(Fn,{})}),b.jsx(ht,{dataKey:"gateway",stackId:"memory",type:"monotone",fill:"#a855f7",stroke:"#a855f7"}),b.jsx(ht,{dataKey:"proxy",stackId:"memory",type:"monotone",fill:"#4f46e5",stroke:"#4f46e5"})]})})]}):b.jsx(zn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Distribution"}),b.jsx(en,{children:"Latency percentiles at 1000 routes (worst case)"})]}),b.jsx(we,{children:l?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:p,children:b.jsxs(PP,{data:l,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(or,{content:b.jsx(Fn,{formatter:(c,f)=>[`${c}ms`,"Latency"]})}),b.jsx(Da,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(zn,{})})]}),b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Efficiency"}),b.jsx(en,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(we,{children:u&&u.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:p,children:b.jsxs(zg,{data:u,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(or,{content:b.jsx(Fn,{formatter:(c,f)=>[`${c}MB per route`,f==="gatewayPerRoute"?"Gateway":f==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:c=>`${c} routes`})}),b.jsx(zt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(zt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(zt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(zn,{})})]})]})]})},Uae=({latencyPercentileComparison:e,benchmarkResults:t})=>{const n=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})),a=(()=>{if(e&&e.length>0){const c=e.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(c.p99.toFixed(1)),category:"99th",status:"alert"}]}if(t&&t.length>0){const c=t.filter(f=>f.phase==="scaling-up").sort((f,d)=>d.routes-f.routes)[0];if(c&&c.latency&&c.latency.percentiles){const f=c.latency.percentiles;return[{percentile:"P50",value:Number((f.p50/1e3).toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number((f.p75/1e3).toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number((f.p90/1e3).toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number((f.p95/1e3).toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number((f.p99/1e3).toFixed(1)),category:"99th",status:"alert"}]}}return null})(),o=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,mean:Number((c.latency.mean/1e3).toFixed(1)),p95:Number((c.latency.percentiles.p95/1e3).toFixed(1)),ratio:Number((c.latency.percentiles.p95/c.latency.mean).toFixed(1))})),s=e&&e.length>0?e.filter(c=>c.phase==="scaling-up").sort((c,f)=>c.routes-f.routes).map(c=>({scale:`${c.routes} Routes`,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})):null,l={p50:{label:"P50 (Median)",color:"#8b5cf6"},p95:{label:"P95",color:"#6366f1"},p99:{label:"P99",color:"#4f46e5"},mean:{label:"Mean",color:"#a855f7"},ratio:{label:"P95/Mean Ratio",color:"#7c3aed"}},p=(()=>{if(n.length===0)return{medianLatency:0,p95Latency:0,p99Latency:0,consistencyRatio:0};const c=n[n.length-1],f=o.length>0?o.reduce((d,h)=>d+h.ratio,0)/o.length:0;return{medianLatency:(c==null?void 0:c.p50)||0,p95Latency:(c==null?void 0:c.p95)||0,p99Latency:(c==null?void 0:c.p99)||0,consistencyRatio:f}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Median RTT"}),b.jsx(JE,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.medianLatency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"P95 RTT"}),b.jsx(XE,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.p95Latency.toFixed(1),"ms"]}),b.jsxs("p",{className:"text-xs text-muted-foreground",children:["95% of requests under ",p.p95Latency.toFixed(0),"ms"]})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Tail RTT"}),b.jsx(eT,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.p99Latency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P99 RTT (1% of requests)"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Consistency"}),b.jsx(_4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.consistencyRatio.toFixed(1),":1"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P95/Mean ratio"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Scaling Behavior"}),b.jsx(en,{children:"How key percentiles perform as route count increases"})]}),b.jsx(we,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:l,children:b.jsxs(fu,{data:n,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(or,{content:b.jsx(Fn,{labelFormatter:c=>`${c} routes`})}),b.jsx(ht,{dataKey:"p99",stackId:"latency",type:"monotone",fill:"#4f46e5",fillOpacity:.3,stroke:"#4f46e5",strokeWidth:1}),b.jsx(ht,{dataKey:"p95",stackId:"latency",type:"monotone",fill:"#6366f1",fillOpacity:.4,stroke:"#6366f1",strokeWidth:2}),b.jsx(ht,{dataKey:"p50",stackId:"latency",type:"monotone",fill:"#8b5cf6",fillOpacity:.6,stroke:"#8b5cf6",strokeWidth:3})]})})]}):b.jsx(zn,{})})]}),b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Distribution"}),b.jsx(en,{children:"Percentile breakdown at 1000 routes (worst case scenario)"})]}),b.jsx(we,{children:a?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:l,children:b.jsxs(PP,{data:a,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(or,{content:b.jsx(Fn,{formatter:(c,f)=>[`${c}ms`,"RTT"],labelFormatter:c=>`${c} Percentile`})}),b.jsx(Da,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(zn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Consistency"}),b.jsx(en,{children:"P95/Mean ratio shows how predictable RTT is"})]}),b.jsx(we,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:l,children:b.jsxs(zg,{data:o,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{yAxisId:"ratio",orientation:"left",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}x`}),b.jsx(_t,{yAxisId:"latency",orientation:"right",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(or,{content:b.jsx(Fn,{labelFormatter:c=>`${c} routes`})}),b.jsx(zt,{yAxisId:"latency",dataKey:"mean",type:"monotone",stroke:"#a855f7",strokeWidth:2,dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(zt,{yAxisId:"ratio",dataKey:"ratio",type:"monotone",stroke:"#7c3aed",strokeWidth:3,strokeDasharray:"5 5",dot:{fill:"#7c3aed",strokeWidth:2,r:4}})]})})]}):b.jsx(zn,{})})]}),b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Performance Summary"}),b.jsx(en,{children:"RTT performance at different scales"})]}),b.jsx(we,{children:s&&s.length>0?b.jsx("div",{className:"space-y-4",children:s.map((c,f)=>b.jsx("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:c.scale}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["P50: ",c.p50,"ms"]}),b.jsxs("span",{children:["P95: ",c.p95,"ms"]}),b.jsxs("span",{children:["P99: ",c.p99,"ms"]})]})]})},f))}):b.jsx(zn,{})})]})]})]})},Wae=({resourceTrends:e,benchmarkResults:t})=>{const n=t.filter(f=>f.phase==="scaling-up").map(f=>({routes:f.routes,gateway:Math.round(f.resources.envoyGateway.memory.mean),proxy:Math.round(f.resources.envoyProxy.memory.mean),total:Math.round(f.resources.envoyGateway.memory.mean+f.resources.envoyProxy.memory.mean)})),r=t.filter(f=>f.phase==="scaling-up").map(f=>({routes:f.routes,gatewayMean:Number(f.resources.envoyGateway.cpu.mean.toFixed(1)),gatewayMax:Number(f.resources.envoyGateway.cpu.max.toFixed(1)),proxyMean:Number(f.resources.envoyProxy.cpu.mean.toFixed(1)),proxyMax:Number(f.resources.envoyProxy.cpu.max.toFixed(1))})),a=n.map(f=>({routes:f.routes,gatewayPerRoute:Number((f.gateway/f.routes).toFixed(2)),proxyPerRoute:Number((f.proxy/f.routes).toFixed(2)),totalPerRoute:Number((f.total/f.routes).toFixed(2))})),o=()=>{if(n.length===0)return[{component:"Gateway",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Proxy",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Total",min:0,max:0,scaling:"No Data",efficiency:"Unknown"}];const f=n.map(m=>m.gateway),d=n.map(m=>m.proxy),h=n.map(m=>m.total);return[{component:"Gateway",min:Math.min(...f),max:Math.max(...f),scaling:i(n.map(m=>m.routes),f),efficiency:s(n.map(m=>m.routes),f)},{component:"Proxy",min:Math.min(...d),max:Math.max(...d),scaling:i(n.map(m=>m.routes),d),efficiency:s(n.map(m=>m.routes),d)},{component:"Total",min:Math.min(...h),max:Math.max(...h),scaling:i(n.map(m=>m.routes),h),efficiency:s(n.map(m=>m.routes),h)}]},i=(f,d)=>{if(f.length<3)return"Insufficient Data";const h=f.length,m=f.reduce((N,M)=>N+M,0),g=d.reduce((N,M)=>N+M,0),v=f.reduce((N,M,I)=>N+M*d[I],0),y=f.reduce((N,M)=>N+M*M,0),x=d.reduce((N,M)=>N+M*M,0),S=h*v-m*g,w=Math.sqrt((h*y-m*m)*(h*x-g*g)),P=w===0?0:S/w,O=P*P,C=[];for(let N=1;N<d.length;N++)C.push(d[N]-d[N-1]);const _=C.reduce((N,M)=>N+M,0)/C.length,T=C.reduce((N,M)=>N+Math.pow(M-_,2),0)/C.length,A=Math.sqrt(T),j=_===0?0:Math.abs(A/_);return O>.95?"Highly Linear":O>.85?"Linear":j>1.5?"Step-wise":O>.7?"Moderately Linear":"Variable"},s=(f,d)=>{if(f.length<2)return"Unknown";const h=f.map((w,P)=>d[P]/w),m=h[0],g=h[h.length-1],v=(m-g)/m,y=h.reduce((w,P)=>w+P,0)/h.length,x=h.reduce((w,P)=>w+Math.pow(P-y,2),0)/h.length,S=Math.sqrt(x)/y;return v>.3?"Excellent":v>.1||S<.2?"Good":S<.4?"Moderate":"Variable"},l=o(),u={gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},gatewayMean:{label:"Gateway Mean",color:"#8b5cf6"},gatewayMax:{label:"Gateway Peak",color:"#c084fc"},proxyMean:{label:"Proxy Mean",color:"#6366f1"},proxyMax:{label:"Proxy Peak",color:"#818cf8"}},c=(()=>{if(n.length===0||r.length===0||a.length===0)return{gatewayMemoryRange:"0-0MB",proxyMemoryRange:"0-0MB",peakCPU:0,memoryPerRouteAtScale:0};const f=n.map(P=>P.gateway),d=n.map(P=>P.proxy),h=Math.min(...f),m=Math.max(...f),g=Math.min(...d),v=Math.max(...d),y=r.flatMap(P=>[P.gatewayMax,P.proxyMax]),x=Math.max(...y),S=a[a.length-1],w=(S==null?void 0:S.totalPerRoute)||0;return{gatewayMemoryRange:`${h}-${m}MB`,proxyMemoryRange:`${g}-${v}MB`,peakCPU:Math.round(x),memoryPerRouteAtScale:w}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Gateway Memory"}),b.jsx(E4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.gatewayMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Linear scaling pattern"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Proxy Memory"}),b.jsx($4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.proxyMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Efficient step-wise scaling"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Peak CPU"}),b.jsx(O4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.peakCPU,"%"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Brief spikes, stable avg"})]})]}),b.jsxs(ge,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Efficiency"}),b.jsx(N4,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.memoryPerRouteAtScale.toFixed(2),"MB"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Memory per route at scale"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Scaling"}),b.jsx(en,{children:"How Gateway and Proxy memory usage grows with route count"})]}),b.jsx(we,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:u,children:b.jsxs(fu,{data:n,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f=>`${f}MB`}),b.jsx(or,{content:b.jsx(Fn,{labelFormatter:f=>`${f} routes`})}),b.jsx(ht,{dataKey:"gateway",stackId:"memory",type:"monotone",fill:"#a855f7",fillOpacity:.6,stroke:"#a855f7",strokeWidth:2}),b.jsx(ht,{dataKey:"proxy",stackId:"memory",type:"monotone",fill:"#4f46e5",fillOpacity:.6,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(zn,{})})]}),b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"CPU Usage Patterns"}),b.jsx(en,{children:"Mean vs peak CPU usage showing burst characteristics"})]}),b.jsx(we,{children:r&&r.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:u,children:b.jsxs(fu,{data:r,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f=>`${f}%`}),b.jsx(or,{content:b.jsx(Fn,{labelFormatter:f=>`${f} routes`})}),b.jsx(ht,{dataKey:"gatewayMax",type:"monotone",fill:"#c084fc",fillOpacity:.3,stroke:"#c084fc",strokeWidth:1}),b.jsx(ht,{dataKey:"proxyMax",type:"monotone",fill:"#818cf8",fillOpacity:.3,stroke:"#818cf8",strokeWidth:1}),b.jsx(zt,{dataKey:"gatewayMean",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:3}}),b.jsx(zt,{dataKey:"proxyMean",type:"monotone",stroke:"#6366f1",strokeWidth:3,dot:{fill:"#6366f1",strokeWidth:2,r:3}})]})})]}):b.jsx(zn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Efficiency"}),b.jsx(en,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(we,{children:a&&a.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ir,{}),b.jsx(Ln,{config:u,children:b.jsxs(zg,{data:a,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Mt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(_t,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:f=>`${f}MB`}),b.jsx(or,{content:b.jsx(Fn,{formatter:(f,d)=>[`${f}MB per route`,d==="gatewayPerRoute"?"Gateway":d==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:f=>`${f} routes`})}),b.jsx(zt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(zt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(zt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(zn,{})})]}),b.jsxs(ge,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Scaling Summary"}),b.jsx(en,{children:"Memory usage characteristics and scaling patterns across different components"})]}),b.jsx(we,{children:b.jsx("div",{className:"space-y-4",children:l.map((f,d)=>b.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:f.component}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["Range: ",f.min,"-",f.max,"MB"]}),b.jsxs("span",{children:["Pattern: ",f.scaling]})]})]}),b.jsxs("div",{className:"flex items-center space-x-2",children:[b.jsx(_4,{className:"h-4 w-4 text-green-600"}),b.jsx("span",{className:"text-sm font-medium text-green-700",children:f.efficiency})]})]},d))})})]})]})]})};var Um="rovingFocusGroup.onEntryFocus",qae={bubbles:!1,cancelable:!0},ju="RovingFocusGroup",[bv,CP,Vae]=n6(ju),[Kae,_P]=is(ju,[Vae]),[Xae,Yae]=Kae(ju),AP=k.forwardRef((e,t)=>b.jsx(bv.Provider,{scope:e.__scopeRovingFocusGroup,children:b.jsx(bv.Slot,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Qae,{...e,ref:t})})}));AP.displayName=ju;var Qae=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:i,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:l,onEntryFocus:u,preventScrollOnEntryFocus:p=!1,...c}=e,f=k.useRef(null),d=Ye(t,f),h=xy(o),[m,g]=pp({prop:i,defaultProp:s??null,onChange:l,caller:ju}),[v,y]=k.useState(!1),x=Oa(u),S=CP(n),w=k.useRef(!1),[P,O]=k.useState(0);return k.useEffect(()=>{const C=f.current;if(C)return C.addEventListener(Um,x),()=>C.removeEventListener(Um,x)},[x]),b.jsx(Xae,{scope:n,orientation:r,dir:h,loop:a,currentTabStopId:m,onItemFocus:k.useCallback(C=>g(C),[g]),onItemShiftTab:k.useCallback(()=>y(!0),[]),onFocusableItemAdd:k.useCallback(()=>O(C=>C+1),[]),onFocusableItemRemove:k.useCallback(()=>O(C=>C-1),[]),children:b.jsx(Ae.div,{tabIndex:v||P===0?-1:0,"data-orientation":r,...c,ref:d,style:{outline:"none",...e.style},onMouseDown:fe(e.onMouseDown,()=>{w.current=!0}),onFocus:fe(e.onFocus,C=>{const _=!w.current;if(C.target===C.currentTarget&&_&&!v){const T=new CustomEvent(Um,qae);if(C.currentTarget.dispatchEvent(T),!T.defaultPrevented){const A=S().filter(R=>R.focusable),j=A.find(R=>R.active),N=A.find(R=>R.id===m),I=[j,N,...A].filter(Boolean).map(R=>R.ref.current);jP(I,p)}}w.current=!1}),onBlur:fe(e.onBlur,()=>y(!1))})})}),EP="RovingFocusGroupItem",TP=k.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:i,...s}=e,l=Su(),u=o||l,p=Yae(EP,n),c=p.currentTabStopId===u,f=CP(n),{onFocusableItemAdd:d,onFocusableItemRemove:h,currentTabStopId:m}=p;return k.useEffect(()=>{if(r)return d(),()=>h()},[r,d,h]),b.jsx(bv.ItemSlot,{scope:n,id:u,focusable:r,active:a,children:b.jsx(Ae.span,{tabIndex:c?0:-1,"data-orientation":p.orientation,...s,ref:t,onMouseDown:fe(e.onMouseDown,g=>{r?p.onItemFocus(u):g.preventDefault()}),onFocus:fe(e.onFocus,()=>p.onItemFocus(u)),onKeyDown:fe(e.onKeyDown,g=>{if(g.key==="Tab"&&g.shiftKey){p.onItemShiftTab();return}if(g.target!==g.currentTarget)return;const v=eoe(g,p.orientation,p.dir);if(v!==void 0){if(g.metaKey||g.ctrlKey||g.altKey||g.shiftKey)return;g.preventDefault();let x=f().filter(S=>S.focusable).map(S=>S.ref.current);if(v==="last")x.reverse();else if(v==="prev"||v==="next"){v==="prev"&&x.reverse();const S=x.indexOf(g.currentTarget);x=p.loop?toe(x,S+1):x.slice(S+1)}setTimeout(()=>jP(x))}}),children:typeof i=="function"?i({isCurrentTabStop:c,hasTabStop:m!=null}):i})})});TP.displayName=EP;var Zae={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function Jae(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function eoe(e,t,n){const r=Jae(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Zae[r]}function jP(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function toe(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var noe=AP,roe=TP;function aoe(e,t){return k.useReducer((n,r)=>t[n][r]??n,e)}var Bg=e=>{const{present:t,children:n}=e,r=ooe(t),a=typeof n=="function"?n({present:r.isPresent}):k.Children.only(n),o=Ye(r.ref,ioe(a));return typeof n=="function"||r.isPresent?k.cloneElement(a,{ref:o}):null};Bg.displayName="Presence";function ooe(e){const[t,n]=k.useState(),r=k.useRef(null),a=k.useRef(e),o=k.useRef("none"),i=e?"mounted":"unmounted",[s,l]=aoe(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return k.useEffect(()=>{const u=yc(r.current);o.current=s==="mounted"?u:"none"},[s]),Et(()=>{const u=r.current,p=a.current;if(p!==e){const f=o.current,d=yc(u);e?l("MOUNT"):d==="none"||(u==null?void 0:u.display)==="none"?l("UNMOUNT"):l(p&&f!==d?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,l]),Et(()=>{if(t){let u;const p=t.ownerDocument.defaultView??window,c=d=>{const m=yc(r.current).includes(d.animationName);if(d.target===t&&m&&(l("ANIMATION_END"),!a.current)){const g=t.style.animationFillMode;t.style.animationFillMode="forwards",u=p.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=g)})}},f=d=>{d.target===t&&(o.current=yc(r.current))};return t.addEventListener("animationstart",f),t.addEventListener("animationcancel",c),t.addEventListener("animationend",c),()=>{p.clearTimeout(u),t.removeEventListener("animationstart",f),t.removeEventListener("animationcancel",c),t.removeEventListener("animationend",c)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:k.useCallback(u=>{r.current=u?getComputedStyle(u):null,n(u)},[])}}function yc(e){return(e==null?void 0:e.animationName)||"none"}function ioe(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var _d="Tabs",[soe,Aie]=is(_d,[_P]),$P=_P(),[loe,Hg]=soe(_d),NP=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:i="horizontal",dir:s,activationMode:l="automatic",...u}=e,p=xy(s),[c,f]=pp({prop:r,onChange:a,defaultProp:o??"",caller:_d});return b.jsx(loe,{scope:n,baseId:Su(),value:c,onValueChange:f,orientation:i,dir:p,activationMode:l,children:b.jsx(Ae.div,{dir:p,"data-orientation":i,...u,ref:t})})});NP.displayName=_d;var MP="TabsList",RP=k.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...a}=e,o=Hg(MP,n),i=$P(n);return b.jsx(noe,{asChild:!0,...i,orientation:o.orientation,dir:o.dir,loop:r,children:b.jsx(Ae.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:t})})});RP.displayName=MP;var IP="TabsTrigger",DP=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,i=Hg(IP,n),s=$P(n),l=zP(i.baseId,r),u=BP(i.baseId,r),p=r===i.value;return b.jsx(roe,{asChild:!0,...s,focusable:!a,active:p,children:b.jsx(Ae.button,{type:"button",role:"tab","aria-selected":p,"aria-controls":u,"data-state":p?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:l,...o,ref:t,onMouseDown:fe(e.onMouseDown,c=>{!a&&c.button===0&&c.ctrlKey===!1?i.onValueChange(r):c.preventDefault()}),onKeyDown:fe(e.onKeyDown,c=>{[" ","Enter"].includes(c.key)&&i.onValueChange(r)}),onFocus:fe(e.onFocus,()=>{const c=i.activationMode!=="manual";!p&&!a&&c&&i.onValueChange(r)})})})});DP.displayName=IP;var LP="TabsContent",FP=k.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:a,children:o,...i}=e,s=Hg(LP,n),l=zP(s.baseId,r),u=BP(s.baseId,r),p=r===s.value,c=k.useRef(p);return k.useEffect(()=>{const f=requestAnimationFrame(()=>c.current=!1);return()=>cancelAnimationFrame(f)},[]),b.jsx(Bg,{present:a||p,children:({present:f})=>b.jsx(Ae.div,{"data-state":p?"active":"inactive","data-orientation":s.orientation,role:"tabpanel","aria-labelledby":l,hidden:!f,id:u,tabIndex:0,...i,ref:t,style:{...e.style,animationDuration:c.current?"0s":void 0},children:f&&o})})});FP.displayName=LP;function zP(e,t){return`${e}-trigger-${t}`}function BP(e,t){return`${e}-content-${t}`}var uoe=NP,HP=RP,GP=DP,UP=FP;const coe=uoe,WP=k.forwardRef(({className:e,...t},n)=>b.jsx(HP,{ref:n,className:Pe("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));WP.displayName=HP.displayName;const Mc=k.forwardRef(({className:e,...t},n)=>b.jsx(GP,{ref:n,className:Pe("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Mc.displayName=GP.displayName;const Rc=k.forwardRef(({className:e,...t},n)=>b.jsx(UP,{ref:n,className:Pe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Rc.displayName=UP.displayName;const poe={metadata:{version:"1.3.3",runId:"1.3.3-1750189826778",date:"2025-05-09",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5302.05,totalRequests:159067,latency:{min:384,mean:7440,max:68399,pstdev:12191,percentiles:{p50:3692,p75:5903,p80:6670,p90:10777,p95:47519,p99:54405,p999:59346}},resources:{envoyGateway:{memory:{min:126.17,max:126.17,mean:126.17},cpu:{min:.95,max:.95,mean:.95}},envoyProxy:{memory:{min:25.93,max:25.93,mean:25.93},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:358,upstreamConnections:42},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5270.25,totalRequests:158112,latency:{min:392,mean:7067,max:77467,pstdev:12552,percentiles:{p50:3330,p75:5225,p80:5887,p90:8906,p95:49113,p99:55103,p999:60295}},resources:{envoyGateway:{memory:{min:145.89,max:145.89,mean:145.89},cpu:{min:1.66,max:1.66,mean:1.66}},envoyProxy:{memory:{min:32.1,max:32.1,mean:32.1},cpu:{min:60.71,max:60.71,mean:60.71}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5307.61,totalRequests:159230,latency:{min:387,mean:7350,max:76185,pstdev:12732,percentiles:{p50:3508,p75:5524,p80:6220,p90:9652,p95:49100,p99:55363,p999:62654}},resources:{envoyGateway:{memory:{min:153.05,max:153.05,mean:153.05},cpu:{min:3.08,max:3.08,mean:3.08}},envoyProxy:{memory:{min:38.29,max:38.29,mean:38.29},cpu:{min:91.5,max:91.5,mean:91.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5139.63,totalRequests:154189,latency:{min:390,mean:7376,max:78098,pstdev:12993,percentiles:{p50:3429,p75:5431,p80:6116,p90:9633,p95:49809,p99:56043,p999:64651}},resources:{envoyGateway:{memory:{min:152.28,max:152.28,mean:152.28},cpu:{min:15.6,max:15.6,mean:15.6}},envoyProxy:{memory:{min:56.33,max:56.33,mean:56.33},cpu:{min:124.15,max:124.15,mean:124.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5169.8,totalRequests:155094,latency:{min:374,mean:7385,max:105918,pstdev:13085,percentiles:{p50:3382,p75:5336,p80:6024,p90:9658,p95:50104,p99:56487,p999:66418}},resources:{envoyGateway:{memory:{min:166.29,max:166.29,mean:166.29},cpu:{min:28.13,max:28.13,mean:28.13}},envoyProxy:{memory:{min:76.53,max:76.53,mean:76.53},cpu:{min:157.45,max:157.45,mean:157.45}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4963.46,totalRequests:148908,latency:{min:374,mean:7335,max:94580,pstdev:13294,percentiles:{p50:3255,p75:5279,p80:5998,p90:9532,p95:50294,p99:58908,p999:70729}},resources:{envoyGateway:{memory:{min:199.79,max:199.79,mean:199.79},cpu:{min:61.67,max:61.67,mean:61.67}},envoyProxy:{memory:{min:120.77,max:120.77,mean:120.77},cpu:{min:195.1,max:195.1,mean:195.1}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5200.07,totalRequests:156001,latency:{min:395,mean:7530,max:81936,pstdev:13142,percentiles:{p50:3438,p75:5497,p80:6226,p90:10218,p95:50345,p99:56436,p999:61919}},resources:{envoyGateway:{memory:{min:221.87,max:221.87,mean:221.87},cpu:{min:114.77,max:114.77,mean:114.77}},envoyProxy:{memory:{min:121.27,max:121.27,mean:121.27},cpu:{min:356.4,max:356.4,mean:356.4}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5229.66,totalRequests:156893,latency:{min:368,mean:6911,max:72273,pstdev:12396,percentiles:{p50:3227,p75:5075,p80:5695,p90:8751,p95:48676,p99:54822,p999:59865}},resources:{envoyGateway:{memory:{min:221.8,max:221.8,mean:221.8},cpu:{min:114.13,max:114.13,mean:114.13}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:325.9,max:325.9,mean:325.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5099.34,totalRequests:152980,latency:{min:357,mean:6637,max:68100,pstdev:12012,percentiles:{p50:3167,p75:4972,p80:5580,p90:8302,p95:47650,p99:53993,p999:59299}},resources:{envoyGateway:{memory:{min:182.69,max:182.69,mean:182.69},cpu:{min:113.02,max:113.02,mean:113.02}},envoyProxy:{memory:{min:121.2,max:121.2,mean:121.2},cpu:{min:295.3,max:295.3,mean:295.3}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5145.13,totalRequests:154357,latency:{min:379,mean:7234,max:111517,pstdev:12814,percentiles:{p50:3381,p75:5331,p80:5993,p90:9269,p95:49465,p99:55562,p999:64862}},resources:{envoyGateway:{memory:{min:159.09,max:159.09,mean:159.09},cpu:{min:102.57,max:102.57,mean:102.57}},envoyProxy:{memory:{min:121.08,max:121.08,mean:121.08},cpu:{min:263.29,max:263.29,mean:263.29}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5130.95,totalRequests:153929,latency:{min:365,mean:7098,max:95834,pstdev:12843,percentiles:{p50:3267,p75:5110,p80:5752,p90:8975,p95:49702,p99:56408,p999:67330}},resources:{envoyGateway:{memory:{min:163.91,max:163.91,mean:163.91},cpu:{min:91.18,max:91.18,mean:91.18}},envoyProxy:{memory:{min:120.91,max:120.91,mean:120.91},cpu:{min:230.77,max:230.77,mean:230.77}}},poolOverflow:362,upstreamConnections:38}]},foe={metadata:{version:"1.4.0",runId:"1.4.0-1750189826781",date:"2025-05-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5433.23,totalRequests:163e3,latency:{min:367,mean:6485,max:65673,pstdev:11042,percentiles:{p50:3222,p75:5166,p80:5879,p90:9253,p95:43970,p99:52201,p999:56854}},resources:{envoyGateway:{memory:{min:128.52,max:156.24,mean:150.28},cpu:{min:.13,max:.67,mean:.44}},envoyProxy:{memory:{min:0,max:27.01,mean:21.73},cpu:{min:0,max:72.36,mean:2.32}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.69,totalRequests:160221,latency:{min:355,mean:6582,max:88674,pstdev:11849,percentiles:{p50:3134,p75:4984,p80:5597,p90:8545,p95:46972,p99:53663,p999:59625}},resources:{envoyGateway:{memory:{min:155.3,max:169.25,mean:159.23},cpu:{min:.27,max:4.73,mean:.91}},envoyProxy:{memory:{min:26.64,max:33.18,mean:32.22},cpu:{min:0,max:99.91,mean:11.1}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5205.41,totalRequests:156162,latency:{min:384,mean:4221,max:63500,pstdev:9204,percentiles:{p50:2039,p75:3063,p80:3399,p90:4605,p95:7844,p99:49758,p999:54032}},resources:{envoyGateway:{memory:{min:156.77,max:174.36,mean:168.53},cpu:{min:.4,max:8.8,mean:1.37}},envoyProxy:{memory:{min:32.83,max:37.05,mean:36.58},cpu:{min:0,max:99.97,mean:4.39}}},poolOverflow:377,upstreamConnections:23},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5271.84,totalRequests:158157,latency:{min:393,mean:7209,max:93327,pstdev:12640,percentiles:{p50:3281,p75:5443,p80:6241,p90:10258,p95:48494,p99:55793,p999:65497}},resources:{envoyGateway:{memory:{min:179.66,max:187.8,mean:184.81},cpu:{min:.53,max:27.13,mean:4.87}},envoyProxy:{memory:{min:53.06,max:57.31,mean:56.58},cpu:{min:0,max:99.96,mean:15.82}}},poolOverflow:360,upstreamConnections:40},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5351.64,totalRequests:160555,latency:{min:370,mean:6797,max:91549,pstdev:12276,percentiles:{p50:3145,p75:5052,p80:5728,p90:8916,p95:47915,p99:54947,p999:65368}},resources:{envoyGateway:{memory:{min:186.4,max:200.27,mean:195.8},cpu:{min:.4,max:26.07,mean:1.71}},envoyProxy:{memory:{min:71.16,max:77.36,mean:77},cpu:{min:0,max:94.88,mean:3.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5239.17,totalRequests:157179,latency:{min:367,mean:6908,max:97939,pstdev:12608,percentiles:{p50:3176,p75:5046,p80:5680,p90:8770,p95:48472,p99:56449,p999:68317}},resources:{envoyGateway:{memory:{min:220.03,max:237.27,mean:233.38},cpu:{min:.07,max:1.2,mean:.78}},envoyProxy:{memory:{min:129.13,max:129.59,mean:129.34},cpu:{min:0,max:74.43,mean:2.24}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5409.79,totalRequests:162296,latency:{min:386,mean:6690,max:71688,pstdev:12144,percentiles:{p50:3075,p75:4937,p80:5610,p90:8727,p95:48252,p99:54595,p999:59408}},resources:{envoyGateway:{memory:{min:165.91,max:176.04,mean:168.11},cpu:{min:.67,max:3.73,mean:1.23}},envoyProxy:{memory:{min:123.28,max:123.45,mean:123.35},cpu:{min:0,max:99.72,mean:9.08}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5480.62,totalRequests:164426,latency:{min:378,mean:7119,max:85032,pstdev:12404,percentiles:{p50:3390,p75:5340,p80:6015,p90:9300,p95:48457,p99:55005,p999:60284}},resources:{envoyGateway:{memory:{min:165.36,max:171.88,mean:169.47},cpu:{min:.6,max:6.8,mean:1.44}},envoyProxy:{memory:{min:123.27,max:123.97,mean:123.42},cpu:{min:0,max:100.05,mean:11.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5413.63,totalRequests:162409,latency:{min:357,mean:6664,max:77307,pstdev:12030,percentiles:{p50:3140,p75:4935,p80:5560,p90:8456,p95:47661,p99:54544,p999:61110}},resources:{envoyGateway:{memory:{min:170.86,max:186.68,mean:173.53},cpu:{min:.67,max:67.27,mean:7.29}},envoyProxy:{memory:{min:123.27,max:129.61,mean:124.04},cpu:{min:0,max:100,mean:5.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5356.13,totalRequests:160684,latency:{min:376,mean:6544,max:86540,pstdev:11908,percentiles:{p50:3079,p75:4927,p80:5554,p90:8360,p95:47069,p99:54265,p999:62601}},resources:{envoyGateway:{memory:{min:176.87,max:192.99,mean:189.97},cpu:{min:.6,max:73.6,mean:5.05}},envoyProxy:{memory:{min:129.54,max:129.76,mean:129.65},cpu:{min:0,max:100.08,mean:11.45}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5339.99,totalRequests:160200,latency:{min:395,mean:6772,max:99700,pstdev:12345,percentiles:{p50:3118,p75:4954,p80:5598,p90:8672,p95:48261,p99:55498,p999:65902}},resources:{envoyGateway:{memory:{min:199.81,max:210.76,mean:205.85},cpu:{min:.4,max:31.13,mean:2.01}},envoyProxy:{memory:{min:129.54,max:129.74,mean:129.6},cpu:{min:0,max:99.87,mean:8.99}}},poolOverflow:362,upstreamConnections:38}]},doe={metadata:{version:"1.4.1",runId:"1.4.1-1750189826783",date:"2025-06-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5440.31,totalRequests:163209,latency:{min:335,mean:6565,max:66668,pstdev:11480,percentiles:{p50:3258,p75:5079,p80:5722,p90:8679,p95:45924,p99:53512,p999:58220}},resources:{envoyGateway:{memory:{min:128.02,max:151.26,mean:147.41},cpu:{min:.27,max:.67,mean:.45}},envoyProxy:{memory:{min:0,max:26.92,mean:22.58},cpu:{min:0,max:99.73,mean:6.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5429.88,totalRequests:162900,latency:{min:345,mean:6468,max:70791,pstdev:11793,percentiles:{p50:3170,p75:4794,p80:5311,p90:7534,p95:47400,p99:53536,p999:58034}},resources:{envoyGateway:{memory:{min:151.26,max:170.78,mean:161.92},cpu:{min:.4,max:4.33,mean:.97}},envoyProxy:{memory:{min:26.73,max:33.13,mean:31.63},cpu:{min:0,max:99.94,mean:3.35}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5499.86,totalRequests:164996,latency:{min:391,mean:8147,max:99663,pstdev:13319,percentiles:{p50:3957,p75:6308,p80:7120,p90:11799,p95:49942,p99:56190,p999:62709}},resources:{envoyGateway:{memory:{min:161.19,max:165.52,mean:163.96},cpu:{min:.4,max:8.67,mean:1.36}},envoyProxy:{memory:{min:32.98,max:39.18,mean:38.14},cpu:{min:0,max:99.97,mean:8.67}}},poolOverflow:353,upstreamConnections:47},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5335.1,totalRequests:160053,latency:{min:365,mean:6734,max:90963,pstdev:12096,percentiles:{p50:3228,p75:5042,p80:5649,p90:8465,p95:47704,p99:54396,p999:61714}},resources:{envoyGateway:{memory:{min:183.87,max:223.25,mean:206.96},cpu:{min:.47,max:79.87,mean:3.9}},envoyProxy:{memory:{min:57.15,max:57.52,mean:57.34},cpu:{min:0,max:99.97,mean:13.49}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5256.52,totalRequests:157696,latency:{min:389,mean:6320,max:77848,pstdev:11829,percentiles:{p50:2974,p75:4705,p80:5292,p90:7729,p95:47173,p99:54317,p999:64679}},resources:{envoyGateway:{memory:{min:186.16,max:199.19,mean:195.68},cpu:{min:.4,max:1.2,mean:.75}},envoyProxy:{memory:{min:63.26,max:79.43,mean:79.04},cpu:{min:0,max:99.86,mean:17.64}}},poolOverflow:365,upstreamConnections:35},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5280.09,totalRequests:158409,latency:{min:387,mean:6871,max:94064,pstdev:12441,percentiles:{p50:3186,p75:5019,p80:5651,p90:8766,p95:48361,p99:55758,p999:67403}},resources:{envoyGateway:{memory:{min:230.81,max:243.68,mean:238.65},cpu:{min:.13,max:1.13,mean:.8}},envoyProxy:{memory:{min:127.63,max:127.86,mean:127.72},cpu:{min:0,max:85.57,mean:6.19}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5430.18,totalRequests:162909,latency:{min:376,mean:6679,max:79630,pstdev:12142,percentiles:{p50:3147,p75:5015,p80:5630,p90:8374,p95:48377,p99:54654,p999:59858}},resources:{envoyGateway:{memory:{min:164.61,max:169.75,mean:165.39},cpu:{min:.8,max:3.47,mean:1.14}},envoyProxy:{memory:{min:121.22,max:121.61,mean:121.3},cpu:{min:0,max:99.74,mean:8.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5506.49,totalRequests:165195,latency:{min:386,mean:8319,max:85860,pstdev:13567,percentiles:{p50:3951,p75:6305,p80:7155,p90:12741,p95:50714,p99:57303,p999:63928}},resources:{envoyGateway:{memory:{min:165.63,max:175.23,mean:169.06},cpu:{min:.8,max:7.53,mean:1.54}},envoyProxy:{memory:{min:111.91,max:121.36,mean:113.46},cpu:{min:0,max:99.75,mean:7.62}}},poolOverflow:352,upstreamConnections:48},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5452.96,totalRequests:163589,latency:{min:395,mean:7694,max:97460,pstdev:12949,percentiles:{p50:3636,p75:5828,p80:6627,p90:10929,p95:49506,p99:55681,p999:62369}},resources:{envoyGateway:{memory:{min:166.64,max:195.48,mean:174.79},cpu:{min:.8,max:38.2,mean:5.63}},envoyProxy:{memory:{min:111.8,max:112.36,mean:111.95},cpu:{min:0,max:35.17,mean:2.77}}},poolOverflow:356,upstreamConnections:44},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5360.33,totalRequests:160815,latency:{min:354,mean:6538,max:92344,pstdev:12045,percentiles:{p50:3068,p75:4770,p80:5341,p90:7974,p95:47742,p99:54480,p999:62144}},resources:{envoyGateway:{memory:{min:180.27,max:192.65,mean:189.01},cpu:{min:.67,max:46.53,mean:4.41}},envoyProxy:{memory:{min:127.66,max:127.84,mean:127.72},cpu:{min:0,max:100.03,mean:9.14}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5334.03,totalRequests:160024,latency:{min:392,mean:6782,max:132493,pstdev:12373,percentiles:{p50:3182,p75:4977,p80:5586,p90:8359,p95:48365,p99:55252,p999:64712}},resources:{envoyGateway:{memory:{min:203.37,max:217.03,mean:209.04},cpu:{min:.67,max:5.67,mean:1.33}},envoyProxy:{memory:{min:127.65,max:127.84,mean:127.72},cpu:{min:0,max:99.86,mean:9.91}}},poolOverflow:362,upstreamConnections:38}]},moe={metadata:{version:"1.3.2",runId:"1.3.2-1750189826777",date:"2025-03-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5203.06,totalRequests:156092,latency:{min:371,mean:6970,max:73949,pstdev:12106,percentiles:{p50:3331,p75:5396,p80:6080,p90:9715,p95:47564,p99:55666,p999:60872}},resources:{envoyGateway:{memory:{min:126.68,max:126.68,mean:126.68},cpu:{min:.99,max:.99,mean:.99}},envoyProxy:{memory:{min:28.17,max:28.17,mean:28.17},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5157.35,totalRequests:154724,latency:{min:380,mean:6752,max:83992,pstdev:12526,percentiles:{p50:3089,p75:4875,p80:5484,p90:8253,p95:49682,p99:55398,p999:61507}},resources:{envoyGateway:{memory:{min:129.05,max:129.05,mean:129.05},cpu:{min:1.79,max:1.79,mean:1.79}},envoyProxy:{memory:{min:32.33,max:32.33,mean:32.33},cpu:{min:61.02,max:61.02,mean:61.02}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5052.19,totalRequests:151566,latency:{min:363,mean:7564,max:72122,pstdev:13492,percentiles:{p50:3384,p75:5472,p80:6191,p90:9941,p95:51320,p99:57128,p999:63107}},resources:{envoyGateway:{memory:{min:146.92,max:146.92,mean:146.92},cpu:{min:3.17,max:3.17,mean:3.17}},envoyProxy:{memory:{min:40.52,max:40.52,mean:40.52},cpu:{min:91.79,max:91.79,mean:91.79}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5101.42,totalRequests:153051,latency:{min:397,mean:6832,max:82624,pstdev:12894,percentiles:{p50:2990,p75:4798,p80:5418,p90:8366,p95:50391,p99:56737,p999:65114}},resources:{envoyGateway:{memory:{min:154.98,max:154.98,mean:154.98},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.7,max:58.7,mean:58.7},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:4948.44,totalRequests:148459,latency:{min:398,mean:7200,max:94949,pstdev:13256,percentiles:{p50:3208,p75:5057,p80:5652,p90:8780,p95:50821,p99:57442,p999:66746}},resources:{envoyGateway:{memory:{min:163.01,max:163.01,mean:163.01},cpu:{min:27.68,max:27.68,mean:27.68}},envoyProxy:{memory:{min:78.9,max:78.9,mean:78.9},cpu:{min:158.2,max:158.2,mean:158.2}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4933.76,totalRequests:148015,latency:{min:361,mean:7088,max:127959,pstdev:13349,percentiles:{p50:3052,p75:4885,p80:5529,p90:8785,p95:50700,p99:59123,p999:70660}},resources:{envoyGateway:{memory:{min:196.05,max:196.05,mean:196.05},cpu:{min:62.32,max:62.32,mean:62.32}},envoyProxy:{memory:{min:127.19,max:127.19,mean:127.19},cpu:{min:196.79,max:196.79,mean:196.79}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.93,totalRequests:153515,latency:{min:387,mean:9017,max:78245,pstdev:15046,percentiles:{p50:3922,p75:6583,p80:7609,p90:16301,p95:54007,p99:59990,p999:67956}},resources:{envoyGateway:{memory:{min:210.06,max:210.06,mean:210.06},cpu:{min:115.56,max:115.56,mean:115.56}},envoyProxy:{memory:{min:110.31,max:110.31,mean:110.31},cpu:{min:358.89,max:358.89,mean:358.89}}},poolOverflow:351,upstreamConnections:49},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:4991.13,totalRequests:149734,latency:{min:391,mean:7071,max:80433,pstdev:12841,percentiles:{p50:3199,p75:5005,p80:5635,p90:8730,p95:49813,p99:55756,p999:61407}},resources:{envoyGateway:{memory:{min:199.41,max:199.41,mean:199.41},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:127.44,max:127.44,mean:127.44},cpu:{min:328.33,max:328.33,mean:328.33}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5138.59,totalRequests:154161,latency:{min:377,mean:6954,max:86982,pstdev:13049,percentiles:{p50:3045,p75:4886,p80:5525,p90:8466,p95:51048,p99:56733,p999:62337}},resources:{envoyGateway:{memory:{min:219.76,max:219.76,mean:219.76},cpu:{min:113.71,max:113.71,mean:113.71}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:297.73,max:297.73,mean:297.73}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5051.68,totalRequests:151551,latency:{min:389,mean:7977,max:86577,pstdev:14090,percentiles:{p50:3498,p75:5731,p80:6471,p90:10947,p95:52355,p99:58748,p999:67379}},resources:{envoyGateway:{memory:{min:259.14,max:259.14,mean:259.14},cpu:{min:103.22,max:103.22,mean:103.22}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:265.59,max:265.59,mean:265.59}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:4962.4,totalRequests:148872,latency:{min:384,mean:7209,max:110186,pstdev:13357,percentiles:{p50:3112,p75:5018,p80:5694,p90:9338,p95:51267,p99:57384,p999:67244}},resources:{envoyGateway:{memory:{min:177.76,max:177.76,mean:177.76},cpu:{min:91.86,max:91.86,mean:91.86}},envoyProxy:{memory:{min:127.24,max:127.24,mean:127.24},cpu:{min:233.07,max:233.07,mean:233.07}}},poolOverflow:362,upstreamConnections:38}]},hoe={metadata:{version:"1.3.1",runId:"1.3.1-1750189826775",date:"2025-03-05",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5115.35,totalRequests:153465,latency:{min:389,mean:6604,max:74543,pstdev:11843,percentiles:{p50:3094,p75:5007,p80:5671,p90:8723,p95:46997,p99:55033,p999:60336}},resources:{envoyGateway:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:1.04,max:1.04,mean:1.04}},envoyProxy:{memory:{min:25.28,max:25.28,mean:25.28},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5150.43,totalRequests:154513,latency:{min:386,mean:6919,max:87556,pstdev:12645,percentiles:{p50:3126,p75:5009,p80:5646,p90:8620,p95:49580,p99:55326,p999:60073}},resources:{envoyGateway:{memory:{min:151.59,max:151.59,mean:151.59},cpu:{min:1.83,max:1.83,mean:1.83}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5211.7,totalRequests:156354,latency:{min:376,mean:6687,max:88604,pstdev:12657,percentiles:{p50:2913,p75:4676,p80:5309,p90:8259,p95:49930,p99:55853,p999:63514}},resources:{envoyGateway:{memory:{min:145.61,max:145.61,mean:145.61},cpu:{min:3.19,max:3.19,mean:3.19}},envoyProxy:{memory:{min:35.5,max:35.5,mean:35.5},cpu:{min:91.72,max:91.72,mean:91.72}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5066.99,totalRequests:152016,latency:{min:386,mean:7628,max:93048,pstdev:13700,percentiles:{p50:3310,p75:5414,p80:6156,p90:10289,p95:51750,p99:58007,p999:66938}},resources:{envoyGateway:{memory:{min:156.12,max:156.12,mean:156.12},cpu:{min:15.73,max:15.73,mean:15.73}},envoyProxy:{memory:{min:55.56,max:55.56,mean:55.56},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5098.53,totalRequests:152960,latency:{min:373,mean:7203,max:108142,pstdev:13209,percentiles:{p50:3161,p75:5083,p80:5791,p90:9292,p95:50372,p99:56864,p999:67850}},resources:{envoyGateway:{memory:{min:181.23,max:181.23,mean:181.23},cpu:{min:28.35,max:28.35,mean:28.35}},envoyProxy:{memory:{min:73.6,max:73.6,mean:73.6},cpu:{min:158.01,max:158.01,mean:158.01}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5048.96,totalRequests:151469,latency:{min:366,mean:7462,max:99799,pstdev:13676,percentiles:{p50:3122,p75:5245,p80:6050,p90:10398,p95:50685,p99:59639,p999:74547}},resources:{envoyGateway:{memory:{min:196.57,max:196.57,mean:196.57},cpu:{min:61.62,max:61.62,mean:61.62}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:196.43,max:196.43,mean:196.43}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.49,totalRequests:153495,latency:{min:373,mean:7373,max:79749,pstdev:13231,percentiles:{p50:3334,p75:5268,p80:5935,p90:9436,p95:50972,p99:56680,p999:62969}},resources:{envoyGateway:{memory:{min:213.36,max:213.36,mean:213.36},cpu:{min:114.56,max:114.56,mean:114.56}},envoyProxy:{memory:{min:109.79,max:109.79,mean:109.79},cpu:{min:357.84,max:357.84,mean:357.84}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5128.63,totalRequests:153859,latency:{min:380,mean:6787,max:76259,pstdev:12813,percentiles:{p50:2982,p75:4725,p80:5330,p90:8194,p95:50354,p99:56367,p999:61741}},resources:{envoyGateway:{memory:{min:217.34,max:217.34,mean:217.34},cpu:{min:113.9,max:113.9,mean:113.9}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:327.37,max:327.37,mean:327.37}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5217.06,totalRequests:156516,latency:{min:386,mean:7182,max:93491,pstdev:12999,percentiles:{p50:3211,p75:5188,p80:5872,p90:9449,p95:50083,p99:56135,p999:63309}},resources:{envoyGateway:{memory:{min:220.2,max:220.2,mean:220.2},cpu:{min:112.64,max:112.64,mean:112.64}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:296.73,max:296.73,mean:296.73}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5033.4,totalRequests:151002,latency:{min:380,mean:6522,max:92626,pstdev:12472,percentiles:{p50:2849,p75:4643,p80:5272,p90:8064,p95:49350,p99:55799,p999:64323}},resources:{envoyGateway:{memory:{min:201.77,max:201.77,mean:201.77},cpu:{min:102.25,max:102.25,mean:102.25}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:264.74,max:264.74,mean:264.74}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5061.34,totalRequests:151843,latency:{min:393,mean:7429,max:99934,pstdev:13552,percentiles:{p50:3227,p75:5180,p80:5867,p90:9747,p95:51320,p99:58009,p999:68829}},resources:{envoyGateway:{memory:{min:173.04,max:173.04,mean:173.04},cpu:{min:91.12,max:91.12,mean:91.12}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:360,upstreamConnections:40}]},voe={metadata:{version:"1.3.0",runId:"1.3.0-1750189826772",date:"2025-01-31",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5297.23,totalRequests:158917,latency:{min:371,mean:6861,max:69562,pstdev:12096,percentiles:{p50:3223,p75:5219,p80:5926,p90:9360,p95:48029,p99:54945,p999:60096}},resources:{envoyGateway:{memory:{min:116.36,max:116.36,mean:116.36},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:25.3,max:25.3,mean:25.3},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5276.06,totalRequests:158285,latency:{min:372,mean:6781,max:81436,pstdev:12685,percentiles:{p50:3035,p75:4783,p80:5410,p90:8210,p95:50042,p99:55861,p999:61739}},resources:{envoyGateway:{memory:{min:135.97,max:135.97,mean:135.97},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:60.97,max:60.97,mean:60.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5248.15,totalRequests:157445,latency:{min:386,mean:6832,max:83939,pstdev:12879,percentiles:{p50:2957,p75:4826,p80:5504,p90:8587,p95:50454,p99:56524,p999:63150}},resources:{envoyGateway:{memory:{min:128.67,max:128.67,mean:128.67},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:35.62,max:35.62,mean:35.62},cpu:{min:91.69,max:91.69,mean:91.69}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5190.05,totalRequests:155708,latency:{min:374,mean:6735,max:105820,pstdev:12667,percentiles:{p50:2997,p75:4715,p80:5323,p90:8205,p95:49692,p99:56199,p999:64403}},resources:{envoyGateway:{memory:{min:147.27,max:147.27,mean:147.27},cpu:{min:15.8,max:15.8,mean:15.8}},envoyProxy:{memory:{min:61.52,max:61.52,mean:61.52},cpu:{min:124.52,max:124.52,mean:124.52}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5171.63,totalRequests:155149,latency:{min:345,mean:7139,max:89923,pstdev:13210,percentiles:{p50:3191,p75:5039,p80:5680,p90:8824,p95:50767,p99:57397,p999:67665}},resources:{envoyGateway:{memory:{min:158.88,max:158.88,mean:158.88},cpu:{min:28.37,max:28.37,mean:28.37}},envoyProxy:{memory:{min:76,max:76,mean:76},cpu:{min:157.59,max:157.59,mean:157.59}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4998.06,totalRequests:149944,latency:{min:371,mean:6950,max:98525,pstdev:13111,percentiles:{p50:3057,p75:4816,p80:5416,p90:8383,p95:50270,p99:57946,p999:69038}},resources:{envoyGateway:{memory:{min:182.71,max:182.71,mean:182.71},cpu:{min:61.79,max:61.79,mean:61.79}},envoyProxy:{memory:{min:122.12,max:122.12,mean:122.12},cpu:{min:194.7,max:194.7,mean:194.7}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5224.35,totalRequests:156731,latency:{min:376,mean:6870,max:73203,pstdev:12827,percentiles:{p50:3060,p75:4817,p80:5428,p90:8280,p95:50618,p99:56178,p999:61280}},resources:{envoyGateway:{memory:{min:209.85,max:209.85,mean:209.85},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:110.5,max:110.5,mean:110.5},cpu:{min:356.13,max:356.13,mean:356.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5247.75,totalRequests:157436,latency:{min:383,mean:6991,max:88027,pstdev:12998,percentiles:{p50:3091,p75:4901,p80:5532,p90:8568,p95:50655,p99:56272,p999:62160}},resources:{envoyGateway:{memory:{min:208.95,max:208.95,mean:208.95},cpu:{min:114.35,max:114.35,mean:114.35}},envoyProxy:{memory:{min:122.19,max:122.19,mean:122.19},cpu:{min:325.78,max:325.78,mean:325.78}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5201.69,totalRequests:156051,latency:{min:380,mean:7027,max:78663,pstdev:12995,percentiles:{p50:3129,p75:4963,p80:5600,p90:8642,p95:50726,p99:56254,p999:61509}},resources:{envoyGateway:{memory:{min:211.34,max:211.34,mean:211.34},cpu:{min:113.23,max:113.23,mean:113.23}},envoyProxy:{memory:{min:122.17,max:122.17,mean:122.17},cpu:{min:295.15,max:295.15,mean:295.15}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5206.95,totalRequests:156214,latency:{min:386,mean:6893,max:92049,pstdev:12874,percentiles:{p50:3088,p75:4898,p80:5548,p90:8444,p95:50268,p99:56334,p999:65038}},resources:{envoyGateway:{memory:{min:158.73,max:158.73,mean:158.73},cpu:{min:102.79,max:102.79,mean:102.79}},envoyProxy:{memory:{min:122.15,max:122.15,mean:122.15},cpu:{min:263,max:263,mean:263}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5150.23,totalRequests:154507,latency:{min:375,mean:6786,max:84877,pstdev:12812,percentiles:{p50:3009,p75:4734,p80:5340,p90:8236,p95:50247,p99:56647,p999:65042}},resources:{envoyGateway:{memory:{min:168.04,max:168.04,mean:168.04},cpu:{min:91.51,max:91.51,mean:91.51}},envoyProxy:{memory:{min:122.14,max:122.14,mean:122.14},cpu:{min:230.49,max:230.49,mean:230.49}}},poolOverflow:363,upstreamConnections:37}]},yoe={metadata:{version:"1.2.8",runId:"1.2.8-1750189826771",date:"2025-03-25",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.8",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5878.23,totalRequests:176347,latency:{min:376,mean:9154,max:75661,pstdev:14181,percentiles:{p50:4294,p75:7182,p80:8292,p90:22716,p95:52056,p99:58071,p999:64841}},resources:{envoyGateway:{memory:{min:108.89,max:108.89,mean:108.89},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:28.23,max:28.23,mean:28.23},cpu:{min:30.48,max:30.48,mean:30.48}}},poolOverflow:342,upstreamConnections:58},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5582.21,totalRequests:167469,latency:{min:359,mean:6378,max:69967,pstdev:12106,percentiles:{p50:2864,p75:4529,p80:5113,p90:7717,p95:48431,p99:54521,p999:59967}},resources:{envoyGateway:{memory:{min:132.62,max:132.62,mean:132.62},cpu:{min:1.54,max:1.54,mean:1.54}},envoyProxy:{memory:{min:32.39,max:32.39,mean:32.39},cpu:{min:60.99,max:60.99,mean:60.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5454.1,totalRequests:163623,latency:{min:368,mean:6738,max:72437,pstdev:12216,percentiles:{p50:3318,p75:5037,p80:5581,p90:8092,p95:47886,p99:53829,p999:60200}},resources:{envoyGateway:{memory:{min:135.66,max:135.66,mean:135.66},cpu:{min:2.91,max:2.91,mean:2.91}},envoyProxy:{memory:{min:38.6,max:38.6,mean:38.6},cpu:{min:91.91,max:91.91,mean:91.91}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5496.5,totalRequests:164898,latency:{min:375,mean:6453,max:103043,pstdev:12191,percentiles:{p50:2887,p75:4603,p80:5209,p90:7967,p95:48150,p99:54630,p999:63743}},resources:{envoyGateway:{memory:{min:147.15,max:147.15,mean:147.15},cpu:{min:15.47,max:15.47,mean:15.47}},envoyProxy:{memory:{min:60.75,max:60.75,mean:60.75},cpu:{min:125.31,max:125.31,mean:125.31}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5351.8,totalRequests:160554,latency:{min:377,mean:6516,max:93298,pstdev:12549,percentiles:{p50:2857,p75:4496,p80:5076,p90:7615,p95:49512,p99:55822,p999:65318}},resources:{envoyGateway:{memory:{min:155.79,max:155.79,mean:155.79},cpu:{min:28.01,max:28.01,mean:28.01}},envoyProxy:{memory:{min:82.96,max:82.96,mean:82.96},cpu:{min:159.29,max:159.29,mean:159.29}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5102.69,totalRequests:153086,latency:{min:358,mean:6968,max:108298,pstdev:13304,percentiles:{p50:2979,p75:4802,p80:5441,p90:8343,p95:50370,p99:60203,p999:71446}},resources:{envoyGateway:{memory:{min:190.03,max:190.03,mean:190.03},cpu:{min:61.69,max:61.69,mean:61.69}},envoyProxy:{memory:{min:133.22,max:133.22,mean:133.22},cpu:{min:199.84,max:199.84,mean:199.84}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5424.03,totalRequests:162721,latency:{min:362,mean:6570,max:73609,pstdev:12562,percentiles:{p50:2923,p75:4626,p80:5209,p90:7751,p95:49960,p99:55525,p999:60127}},resources:{envoyGateway:{memory:{min:127.89,max:127.89,mean:127.89},cpu:{min:114.69,max:114.69,mean:114.69}},envoyProxy:{memory:{min:112.11,max:112.11,mean:112.11},cpu:{min:363.01,max:363.01,mean:363.01}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5454.96,totalRequests:163653,latency:{min:363,mean:6397,max:73404,pstdev:12347,percentiles:{p50:2884,p75:4452,p80:4989,p90:7300,p95:49477,p99:55369,p999:61495}},resources:{envoyGateway:{memory:{min:136.28,max:136.28,mean:136.28},cpu:{min:114.05,max:114.05,mean:114.05}},envoyProxy:{memory:{min:114.79,max:114.79,mean:114.79},cpu:{min:332.54,max:332.54,mean:332.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5402.5,totalRequests:162075,latency:{min:366,mean:6575,max:127266,pstdev:12484,percentiles:{p50:2940,p75:4600,p80:5162,p90:7727,p95:49549,p99:55334,p999:61478}},resources:{envoyGateway:{memory:{min:140.91,max:140.91,mean:140.91},cpu:{min:112.87,max:112.87,mean:112.87}},envoyProxy:{memory:{min:114.76,max:114.76,mean:114.76},cpu:{min:301.85,max:301.85,mean:301.85}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5498.81,totalRequests:164969,latency:{min:349,mean:6325,max:84213,pstdev:12296,percentiles:{p50:2789,p75:4396,p80:4944,p90:7293,p95:48961,p99:55212,p999:65019}},resources:{envoyGateway:{memory:{min:148.36,max:148.36,mean:148.36},cpu:{min:102.53,max:102.53,mean:102.53}},envoyProxy:{memory:{min:133.35,max:133.35,mean:133.35},cpu:{min:269.43,max:269.43,mean:269.43}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5308.76,totalRequests:159263,latency:{min:361,mean:6727,max:98807,pstdev:12828,percentiles:{p50:2916,p75:4650,p80:5273,p90:8161,p95:49971,p99:56840,p999:67182}},resources:{envoyGateway:{memory:{min:157.93,max:157.93,mean:157.93},cpu:{min:91.26,max:91.26,mean:91.26}},envoyProxy:{memory:{min:133.2,max:133.2,mean:133.2},cpu:{min:236.02,max:236.02,mean:236.02}}},poolOverflow:362,upstreamConnections:38}]},goe={metadata:{version:"1.2.7",runId:"1.2.7-1750189826769",date:"2025-03-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.7",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5984.83,totalRequests:179545,latency:{min:402,mean:12033,max:92835,pstdev:16725,percentiles:{p50:5655,p75:9809,p80:11804,p90:49971,p95:55760,p99:64241,p999:73961}},resources:{envoyGateway:{memory:{min:112.35,max:112.35,mean:112.35},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:28.29,max:28.29,mean:28.29},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:323,upstreamConnections:77},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5564.85,totalRequests:166949,latency:{min:362,mean:6416,max:73261,pstdev:12268,percentiles:{p50:2855,p75:4514,p80:5094,p90:7660,p95:49031,p99:54939,p999:60436}},resources:{envoyGateway:{memory:{min:125.94,max:125.94,mean:125.94},cpu:{min:1.52,max:1.52,mean:1.52}},envoyProxy:{memory:{min:34.46,max:34.46,mean:34.46},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5618.23,totalRequests:168547,latency:{min:372,mean:6834,max:85766,pstdev:12643,percentiles:{p50:3107,p75:4954,p80:5560,p90:8454,p95:49485,p99:55513,p999:61272}},resources:{envoyGateway:{memory:{min:132.05,max:132.05,mean:132.05},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:40.63,max:40.63,mean:40.63},cpu:{min:92.02,max:92.02,mean:92.02}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5506.26,totalRequests:165193,latency:{min:383,mean:6670,max:85905,pstdev:12677,percentiles:{p50:2946,p75:4659,p80:5243,p90:7891,p95:49846,p99:56096,p999:65185}},resources:{envoyGateway:{memory:{min:146.09,max:146.09,mean:146.09},cpu:{min:15.43,max:15.43,mean:15.43}},envoyProxy:{memory:{min:62.86,max:62.86,mean:62.86},cpu:{min:125.21,max:125.21,mean:125.21}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5580.92,totalRequests:167428,latency:{min:310,mean:6716,max:89178,pstdev:12233,percentiles:{p50:3157,p75:4861,p80:5446,p90:8231,p95:47419,p99:54634,p999:65587}},resources:{envoyGateway:{memory:{min:163.49,max:163.49,mean:163.49},cpu:{min:28.15,max:28.15,mean:28.15}},envoyProxy:{memory:{min:83.07,max:83.07,mean:83.07},cpu:{min:159.15,max:159.15,mean:159.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5298.3,totalRequests:158951,latency:{min:369,mean:6537,max:122015,pstdev:12654,percentiles:{p50:2914,p75:4472,p80:5012,p90:7402,p95:48639,p99:58097,p999:69103}},resources:{envoyGateway:{memory:{min:187.81,max:187.81,mean:187.81},cpu:{min:62.41,max:62.41,mean:62.41}},envoyProxy:{memory:{min:133.27,max:133.27,mean:133.27},cpu:{min:199.13,max:199.13,mean:199.13}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5623.57,totalRequests:168711,latency:{min:380,mean:7190,max:75063,pstdev:13103,percentiles:{p50:3211,p75:5102,p80:5772,p90:9144,p95:50722,p99:56260,p999:61515}},resources:{envoyGateway:{memory:{min:132.38,max:132.38,mean:132.38},cpu:{min:116.08,max:116.08,mean:116.08}},envoyProxy:{memory:{min:128.69,max:128.69,mean:128.69},cpu:{min:362.3,max:362.3,mean:362.3}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5516.59,totalRequests:165498,latency:{min:329,mean:6044,max:69902,pstdev:11632,percentiles:{p50:2893,p75:4337,p80:4790,p90:6742,p95:47155,p99:53372,p999:58073}},resources:{envoyGateway:{memory:{min:144.02,max:144.02,mean:144.02},cpu:{min:115.5,max:115.5,mean:115.5}},envoyProxy:{memory:{min:129.14,max:129.14,mean:129.14},cpu:{min:331.76,max:331.76,mean:331.76}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5515.82,totalRequests:165475,latency:{min:380,mean:6483,max:79159,pstdev:12363,percentiles:{p50:2872,p75:4545,p80:5131,p90:7760,p95:49190,p99:55408,p999:61890}},resources:{envoyGateway:{memory:{min:135.79,max:135.79,mean:135.79},cpu:{min:114.36,max:114.36,mean:114.36}},envoyProxy:{memory:{min:109,max:109,mean:109},cpu:{min:301.13,max:301.13,mean:301.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5403.53,totalRequests:162106,latency:{min:354,mean:6429,max:83423,pstdev:12305,percentiles:{p50:2864,p75:4496,p80:5072,p90:7504,p95:48885,p99:55414,p999:63565}},resources:{envoyGateway:{memory:{min:155.42,max:155.42,mean:155.42},cpu:{min:103.9,max:103.9,mean:103.9}},envoyProxy:{memory:{min:133.59,max:133.59,mean:133.59},cpu:{min:268.85,max:268.85,mean:268.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5405.24,totalRequests:162162,latency:{min:387,mean:6615,max:90812,pstdev:12660,percentiles:{p50:2913,p75:4593,p80:5174,p90:7866,p95:49461,p99:56510,p999:67248}},resources:{envoyGateway:{memory:{min:165.58,max:165.58,mean:165.58},cpu:{min:92.35,max:92.35,mean:92.35}},envoyProxy:{memory:{min:133.42,max:133.42,mean:133.42},cpu:{min:235.87,max:235.87,mean:235.87}}},poolOverflow:362,upstreamConnections:38}]},xoe={metadata:{version:"1.2.6",runId:"1.2.6-1750189826767",date:"2025-01-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.6",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5668.03,totalRequests:170041,latency:{min:354,mean:6713,max:73658,pstdev:11906,percentiles:{p50:3142,p75:5170,p80:5865,p90:9278,p95:47425,p99:54870,p999:59602}},resources:{envoyGateway:{memory:{min:108.82,max:108.82,mean:108.82},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:25.38,max:25.38,mean:25.38},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5542.06,totalRequests:166262,latency:{min:380,mean:6117,max:73658,pstdev:11949,percentiles:{p50:2749,p75:4310,p80:4842,p90:7067,p95:48484,p99:54499,p999:59725}},resources:{envoyGateway:{memory:{min:135.08,max:135.08,mean:135.08},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.53,max:31.53,mean:31.53},cpu:{min:61.17,max:61.17,mean:61.17}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5556.06,totalRequests:166682,latency:{min:363,mean:6439,max:100163,pstdev:12297,percentiles:{p50:2891,p75:4506,p80:5050,p90:7595,p95:49078,p99:54935,p999:60456}},resources:{envoyGateway:{memory:{min:140.09,max:140.09,mean:140.09},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:37.7,max:37.7,mean:37.7},cpu:{min:91.98,max:91.98,mean:91.98}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5462.58,totalRequests:163882,latency:{min:372,mean:6376,max:78544,pstdev:12289,percentiles:{p50:2853,p75:4454,p80:5002,p90:7458,p95:49076,p99:55132,p999:63879}},resources:{envoyGateway:{memory:{min:146.71,max:146.71,mean:146.71},cpu:{min:15.64,max:15.64,mean:15.64}},envoyProxy:{memory:{min:59.89,max:59.89,mean:59.89},cpu:{min:125.41,max:125.41,mean:125.41}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5427.5,totalRequests:162825,latency:{min:359,mean:6562,max:97148,pstdev:12598,percentiles:{p50:2881,p75:4518,p80:5091,p90:7774,p95:49301,p99:56102,p999:67338}},resources:{envoyGateway:{memory:{min:155.26,max:155.26,mean:155.26},cpu:{min:28.52,max:28.52,mean:28.52}},envoyProxy:{memory:{min:82.08,max:82.08,mean:82.08},cpu:{min:159.72,max:159.72,mean:159.72}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5261.62,totalRequests:157849,latency:{min:373,mean:6972,max:115060,pstdev:13251,percentiles:{p50:3015,p75:4770,p80:5385,p90:8293,p95:50296,p99:59930,p999:70590}},resources:{envoyGateway:{memory:{min:188.13,max:188.13,mean:188.13},cpu:{min:61.78,max:61.78,mean:61.78}},envoyProxy:{memory:{min:130.35,max:130.35,mean:130.35},cpu:{min:199.1,max:199.1,mean:199.1}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5543.17,totalRequests:166299,latency:{min:360,mean:6447,max:75276,pstdev:12396,percentiles:{p50:2866,p75:4486,p80:5040,p90:7527,p95:49663,p99:55240,p999:60647}},resources:{envoyGateway:{memory:{min:129.36,max:129.36,mean:129.36},cpu:{min:115.21,max:115.21,mean:115.21}},envoyProxy:{memory:{min:122.58,max:122.58,mean:122.58},cpu:{min:362.6,max:362.6,mean:362.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5522.73,totalRequests:165682,latency:{min:384,mean:6098,max:68321,pstdev:11922,percentiles:{p50:2776,p75:4326,p80:4838,p90:6958,p95:48431,p99:54296,p999:58857}},resources:{envoyGateway:{memory:{min:140.97,max:140.97,mean:140.97},cpu:{min:114.57,max:114.57,mean:114.57}},envoyProxy:{memory:{min:122.83,max:122.83,mean:122.83},cpu:{min:332.12,max:332.12,mean:332.12}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5500.66,totalRequests:165023,latency:{min:360,mean:6301,max:80400,pstdev:12064,percentiles:{p50:2833,p75:4483,p80:5035,p90:7574,p95:48777,p99:54876,p999:60850}},resources:{envoyGateway:{memory:{min:132.45,max:132.45,mean:132.45},cpu:{min:113.5,max:113.5,mean:113.5}},envoyProxy:{memory:{min:122.84,max:122.84,mean:122.84},cpu:{min:301.26,max:301.26,mean:301.26}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5453.33,totalRequests:163603,latency:{min:357,mean:6324,max:86024,pstdev:12138,percentiles:{p50:2842,p75:4429,p80:4967,p90:7393,p95:48201,p99:54683,p999:65251}},resources:{envoyGateway:{memory:{min:150.62,max:150.62,mean:150.62},cpu:{min:103.11,max:103.11,mean:103.11}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:269.03,max:269.03,mean:269.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5402.96,totalRequests:162089,latency:{min:371,mean:6575,max:90804,pstdev:12621,percentiles:{p50:2877,p75:4543,p80:5114,p90:7832,p95:49375,p99:56092,p999:69132}},resources:{envoyGateway:{memory:{min:159.25,max:159.25,mean:159.25},cpu:{min:91.66,max:91.66,mean:91.66}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:235.83,max:235.83,mean:235.83}}},poolOverflow:362,upstreamConnections:38}]},woe={metadata:{version:"1.2.5",runId:"1.2.5-1750189826766",date:"2025-01-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.5",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5704.46,totalRequests:171136,latency:{min:370,mean:6520,max:74477,pstdev:11781,percentiles:{p50:3051,p75:4913,p80:5565,p90:8700,p95:47091,p99:54638,p999:59404}},resources:{envoyGateway:{memory:{min:112.07,max:112.07,mean:112.07},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:24.38,max:24.38,mean:24.38},cpu:{min:30.47,max:30.47,mean:30.47}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5647.86,totalRequests:169439,latency:{min:379,mean:6313,max:80498,pstdev:11935,percentiles:{p50:2854,p75:4550,p80:5158,p90:7820,p95:48025,p99:54390,p999:60321}},resources:{envoyGateway:{memory:{min:123.4,max:123.4,mean:123.4},cpu:{min:1.48,max:1.48,mean:1.48}},envoyProxy:{memory:{min:30.55,max:30.55,mean:30.55},cpu:{min:61.09,max:61.09,mean:61.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5529.29,totalRequests:165879,latency:{min:379,mean:6240,max:73539,pstdev:12017,percentiles:{p50:2818,p75:4510,p80:5068,p90:7413,p95:48300,p99:54171,p999:59308}},resources:{envoyGateway:{memory:{min:139.7,max:139.7,mean:139.7},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:36.73,max:36.73,mean:36.73},cpu:{min:91.9,max:91.9,mean:91.9}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5542.3,totalRequests:166274,latency:{min:365,mean:6463,max:81305,pstdev:12357,percentiles:{p50:2890,p75:4545,p80:5116,p90:7585,p95:49043,p99:55365,p999:64399}},resources:{envoyGateway:{memory:{min:146.11,max:146.11,mean:146.11},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.91,max:58.91,mean:58.91},cpu:{min:124.96,max:124.96,mean:124.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5407.59,totalRequests:162228,latency:{min:363,mean:6396,max:88236,pstdev:12419,percentiles:{p50:2816,p75:4450,p80:5012,p90:7485,p95:48762,p99:55666,p999:67457}},resources:{envoyGateway:{memory:{min:154.01,max:154.01,mean:154.01},cpu:{min:27.98,max:27.98,mean:27.98}},envoyProxy:{memory:{min:81.11,max:81.11,mean:81.11},cpu:{min:158.85,max:158.85,mean:158.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5247.32,totalRequests:157425,latency:{min:374,mean:6604,max:106491,pstdev:12903,percentiles:{p50:2880,p75:4514,p80:5089,p90:7639,p95:49453,p99:58750,p999:71970}},resources:{envoyGateway:{memory:{min:183.52,max:183.52,mean:183.52},cpu:{min:61.85,max:61.85,mean:61.85}},envoyProxy:{memory:{min:129.33,max:129.33,mean:129.33},cpu:{min:198.98,max:198.98,mean:198.98}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5668.05,totalRequests:170048,latency:{min:366,mean:6143,max:73551,pstdev:12054,percentiles:{p50:2726,p75:4279,p80:4799,p90:7123,p95:48988,p99:54704,p999:58812}},resources:{envoyGateway:{memory:{min:138.57,max:138.57,mean:138.57},cpu:{min:115.2,max:115.2,mean:115.2}},envoyProxy:{memory:{min:121.88,max:121.88,mean:121.88},cpu:{min:361.89,max:361.89,mean:361.89}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5579.16,totalRequests:167375,latency:{min:353,mean:6190,max:87244,pstdev:12028,percentiles:{p50:2803,p75:4357,p80:4889,p90:7110,p95:48482,p99:54329,p999:59113}},resources:{envoyGateway:{memory:{min:132.83,max:132.83,mean:132.83},cpu:{min:114.63,max:114.63,mean:114.63}},envoyProxy:{memory:{min:122.16,max:122.16,mean:122.16},cpu:{min:331.47,max:331.47,mean:331.47}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5581.7,totalRequests:167453,latency:{min:377,mean:6525,max:72724,pstdev:12286,percentiles:{p50:2929,p75:4641,p80:5219,p90:7915,p95:48732,p99:54810,p999:61450}},resources:{envoyGateway:{memory:{min:133.91,max:133.91,mean:133.91},cpu:{min:113.44,max:113.44,mean:113.44}},envoyProxy:{memory:{min:122.02,max:122.02,mean:122.02},cpu:{min:300.79,max:300.79,mean:300.79}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5447.53,totalRequests:163426,latency:{min:368,mean:6540,max:88612,pstdev:12451,percentiles:{p50:2904,p75:4546,p80:5128,p90:7692,p95:49305,p99:55422,p999:64116}},resources:{envoyGateway:{memory:{min:145.28,max:145.28,mean:145.28},cpu:{min:102.98,max:102.98,mean:102.98}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:268.5,max:268.5,mean:268.5}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5437.61,totalRequests:163132,latency:{min:383,mean:6527,max:102998,pstdev:12600,percentiles:{p50:2827,p75:4470,p80:5070,p90:7714,p95:49029,p99:56436,p999:66684}},resources:{envoyGateway:{memory:{min:164.07,max:164.07,mean:164.07},cpu:{min:91.64,max:91.64,mean:91.64}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:235.61,max:235.61,mean:235.61}}},poolOverflow:362,upstreamConnections:38}]},boe={metadata:{version:"1.2.4",runId:"1.2.4-1750189826764",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5982.38,totalRequests:179472,latency:{min:349,mean:6011,max:83349,pstdev:11061,percentiles:{p50:2829,p75:4477,p80:5098,p90:7842,p95:43255,p99:53350,p999:59346}},resources:{envoyGateway:{memory:{min:110.54,max:110.54,mean:110.54},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.44,max:30.44,mean:30.44}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5917.46,totalRequests:177524,latency:{min:361,mean:6164,max:70909,pstdev:11809,percentiles:{p50:2843,p75:4366,p80:4876,p90:7109,p95:47788,p99:54372,p999:59932}},resources:{envoyGateway:{memory:{min:119.89,max:119.89,mean:119.89},cpu:{min:1.61,max:1.61,mean:1.61}},envoyProxy:{memory:{min:30.43,max:30.43,mean:30.43},cpu:{min:61.13,max:61.13,mean:61.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.25,totalRequests:177910,latency:{min:398,mean:6027,max:92041,pstdev:11760,percentiles:{p50:2652,p75:4198,p80:4747,p90:7135,p95:47513,p99:55083,p999:61542}},resources:{envoyGateway:{memory:{min:129.08,max:129.08,mean:129.08},cpu:{min:3.05,max:3.05,mean:3.05}},envoyProxy:{memory:{min:36.57,max:36.57,mean:36.57},cpu:{min:92.01,max:92.01,mean:92.01}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5612.73,totalRequests:168382,latency:{min:368,mean:6361,max:108085,pstdev:12378,percentiles:{p50:2817,p75:4383,p80:4929,p90:7356,p95:48795,p99:56586,p999:68399}},resources:{envoyGateway:{memory:{min:140.63,max:140.63,mean:140.63},cpu:{min:15.35,max:15.35,mean:15.35}},envoyProxy:{memory:{min:58.77,max:58.77,mean:58.77},cpu:{min:125.44,max:125.44,mean:125.44}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5799.01,totalRequests:173974,latency:{min:378,mean:6166,max:97771,pstdev:11964,percentiles:{p50:2818,p75:4251,p80:4742,p90:6922,p95:47560,p99:55281,p999:68112}},resources:{envoyGateway:{memory:{min:152.5,max:152.5,mean:152.5},cpu:{min:28.38,max:28.38,mean:28.38}},envoyProxy:{memory:{min:78.94,max:78.94,mean:78.94},cpu:{min:159.67,max:159.67,mean:159.67}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5474.43,totalRequests:164233,latency:{min:386,mean:6534,max:109809,pstdev:12936,percentiles:{p50:2656,p75:4361,p80:5013,p90:8074,p95:49516,p99:60213,p999:73678}},resources:{envoyGateway:{memory:{min:183.98,max:183.98,mean:183.98},cpu:{min:62.29,max:62.29,mean:62.29}},envoyProxy:{memory:{min:131.16,max:131.16,mean:131.16},cpu:{min:200.46,max:200.46,mean:200.46}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5816.39,totalRequests:174492,latency:{min:340,mean:6131,max:85209,pstdev:11868,percentiles:{p50:2730,p75:4264,p80:4816,p90:7369,p95:47933,p99:54984,p999:61820}},resources:{envoyGateway:{memory:{min:195,max:195,mean:195},cpu:{min:116.53,max:116.53,mean:116.53}},envoyProxy:{memory:{min:120.37,max:120.37,mean:120.37},cpu:{min:363.61,max:363.61,mean:363.61}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5848.8,totalRequests:175470,latency:{min:372,mean:6285,max:77979,pstdev:12136,percentiles:{p50:2760,p75:4334,p80:4906,p90:7492,p95:48553,p99:55732,p999:63037}},resources:{envoyGateway:{memory:{min:205.2,max:205.2,mean:205.2},cpu:{min:115.88,max:115.88,mean:115.88}},envoyProxy:{memory:{min:120.26,max:120.26,mean:120.26},cpu:{min:333.06,max:333.06,mean:333.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5897.55,totalRequests:176927,latency:{min:365,mean:6054,max:78041,pstdev:11770,percentiles:{p50:2761,p75:4253,p80:4770,p90:6934,p95:47628,p99:54935,p999:62232}},resources:{envoyGateway:{memory:{min:201.78,max:201.78,mean:201.78},cpu:{min:114.84,max:114.84,mean:114.84}},envoyProxy:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:302.66,max:302.66,mean:302.66}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5764.69,totalRequests:172941,latency:{min:376,mean:6540,max:87822,pstdev:12528,percentiles:{p50:2847,p75:4511,p80:5118,p90:7907,p95:49336,p99:56737,p999:66895}},resources:{envoyGateway:{memory:{min:237.36,max:237.36,mean:237.36},cpu:{min:104.3,max:104.3,mean:104.3}},envoyProxy:{memory:{min:131.2,max:131.2,mean:131.2},cpu:{min:270.32,max:270.32,mean:270.32}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5709.58,totalRequests:171290,latency:{min:350,mean:6172,max:93663,pstdev:11978,percentiles:{p50:2864,p75:4285,p80:4782,p90:6980,p95:47689,p99:55115,p999:67440}},resources:{envoyGateway:{memory:{min:158.41,max:158.41,mean:158.41},cpu:{min:92.69,max:92.69,mean:92.69}},envoyProxy:{memory:{min:131.32,max:131.32,mean:131.32},cpu:{min:236.85,max:236.85,mean:236.85}}},poolOverflow:363,upstreamConnections:37}]},Soe={metadata:{version:"1.2.3",runId:"1.2.3-1750189826763",date:"2024-12-02",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6222.52,totalRequests:186680,latency:{min:349,mean:6177,max:70643,pstdev:11464,percentiles:{p50:2879,p75:4520,p80:5082,p90:7684,p95:46213,p99:54147,p999:60250}},resources:{envoyGateway:{memory:{min:110.2,max:110.2,mean:110.2},cpu:{min:.68,max:.68,mean:.68}},envoyProxy:{memory:{min:25.89,max:25.89,mean:25.89},cpu:{min:30.33,max:30.33,mean:30.33}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6170.38,totalRequests:185112,latency:{min:370,mean:5770,max:72798,pstdev:11358,percentiles:{p50:2657,p75:4054,p80:4535,p90:6537,p95:46632,p99:53751,p999:59174}},resources:{envoyGateway:{memory:{min:122.48,max:122.48,mean:122.48},cpu:{min:1.42,max:1.42,mean:1.42}},envoyProxy:{memory:{min:32.05,max:32.05,mean:32.05},cpu:{min:60.88,max:60.88,mean:60.88}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6085.51,totalRequests:182567,latency:{min:365,mean:5863,max:84721,pstdev:11540,percentiles:{p50:2605,p75:4127,p80:4662,p90:7048,p95:46759,p99:54556,p999:61736}},resources:{envoyGateway:{memory:{min:131.06,max:131.06,mean:131.06},cpu:{min:2.8,max:2.8,mean:2.8}},envoyProxy:{memory:{min:38.19,max:38.19,mean:38.19},cpu:{min:91.64,max:91.64,mean:91.64}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6032.83,totalRequests:180985,latency:{min:362,mean:6079,max:79421,pstdev:11806,percentiles:{p50:2707,p75:4272,p80:4832,p90:7327,p95:47441,p99:54743,p999:65808}},resources:{envoyGateway:{memory:{min:142.98,max:142.98,mean:142.98},cpu:{min:15.04,max:15.04,mean:15.04}},envoyProxy:{memory:{min:60.39,max:60.39,mean:60.39},cpu:{min:124.47,max:124.47,mean:124.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5773.98,totalRequests:173223,latency:{min:344,mean:6360,max:79355,pstdev:12473,percentiles:{p50:2707,p75:4299,p80:4888,p90:7643,p95:49309,p99:57382,p999:68141}},resources:{envoyGateway:{memory:{min:160.84,max:160.84,mean:160.84},cpu:{min:27.66,max:27.66,mean:27.66}},envoyProxy:{memory:{min:80.58,max:80.58,mean:80.58},cpu:{min:156.97,max:156.97,mean:156.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5776.08,totalRequests:173283,latency:{min:361,mean:6194,max:89714,pstdev:12241,percentiles:{p50:2703,p75:4241,p80:4791,p90:7296,p95:47755,p99:58537,p999:70676}},resources:{envoyGateway:{memory:{min:186.49,max:186.49,mean:186.49},cpu:{min:61.39,max:61.39,mean:61.39}},envoyProxy:{memory:{min:130.82,max:130.82,mean:130.82},cpu:{min:196.17,max:196.17,mean:196.17}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6128.86,totalRequests:183866,latency:{min:351,mean:5824,max:73633,pstdev:11470,percentiles:{p50:2578,p75:4038,p80:4570,p90:6823,p95:46927,p99:54392,p999:60213}},resources:{envoyGateway:{memory:{min:218.36,max:218.36,mean:218.36},cpu:{min:114.4,max:114.4,mean:114.4}},envoyProxy:{memory:{min:118.8,max:118.8,mean:118.8},cpu:{min:358.03,max:358.03,mean:358.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6065.62,totalRequests:181969,latency:{min:378,mean:5877,max:82526,pstdev:11643,percentiles:{p50:2588,p75:4048,p80:4587,p90:6876,p95:47429,p99:54710,p999:62111}},resources:{envoyGateway:{memory:{min:222.42,max:222.42,mean:222.42},cpu:{min:113.86,max:113.86,mean:113.86}},envoyProxy:{memory:{min:119.23,max:119.23,mean:119.23},cpu:{min:327.6,max:327.6,mean:327.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6045.71,totalRequests:181360,latency:{min:388,mean:6024,max:80216,pstdev:11596,percentiles:{p50:2802,p75:4253,p80:4761,p90:6951,p95:47183,p99:54065,p999:59455}},resources:{envoyGateway:{memory:{min:142.37,max:142.37,mean:142.37},cpu:{min:112.77,max:112.77,mean:112.77}},envoyProxy:{memory:{min:119.54,max:119.54,mean:119.54},cpu:{min:296.95,max:296.95,mean:296.95}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5956.66,totalRequests:178700,latency:{min:379,mean:6153,max:85528,pstdev:12032,percentiles:{p50:2640,p75:4362,p80:4961,p90:7625,p95:47886,p99:55965,p999:65695}},resources:{envoyGateway:{memory:{min:148.72,max:148.72,mean:148.72},cpu:{min:102.49,max:102.49,mean:102.49}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:264.96,max:264.96,mean:264.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5958.61,totalRequests:178765,latency:{min:362,mean:5967,max:83480,pstdev:11671,percentiles:{p50:2714,p75:4156,p80:4658,p90:6839,p95:46901,p99:54601,p999:65464}},resources:{envoyGateway:{memory:{min:164.87,max:164.87,mean:164.87},cpu:{min:91.25,max:91.25,mean:91.25}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:363,upstreamConnections:37}]},Poe={metadata:{version:"1.2.2",runId:"1.2.2-1750189826761",date:"2024-11-28",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6249.74,totalRequests:187495,latency:{min:333,mean:5937,max:75075,pstdev:10895,percentiles:{p50:2840,p75:4501,p80:5077,p90:7640,p95:41435,p99:53243,p999:58066}},resources:{envoyGateway:{memory:{min:106.26,max:106.26,mean:106.26},cpu:{min:.73,max:.73,mean:.73}},envoyProxy:{memory:{min:26.09,max:26.09,mean:26.09},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6140.58,totalRequests:184222,latency:{min:373,mean:5812,max:79740,pstdev:11513,percentiles:{p50:2590,p75:4071,p80:4583,p90:6812,p95:46811,p99:54179,p999:61151}},resources:{envoyGateway:{memory:{min:131.24,max:131.24,mean:131.24},cpu:{min:1.34,max:1.34,mean:1.34}},envoyProxy:{memory:{min:32.26,max:32.26,mean:32.26},cpu:{min:60.74,max:60.74,mean:60.74}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6149.72,totalRequests:184494,latency:{min:366,mean:5813,max:89935,pstdev:11434,percentiles:{p50:2637,p75:4073,p80:4561,p90:6680,p95:46505,p99:53872,p999:60348}},resources:{envoyGateway:{memory:{min:133.05,max:133.05,mean:133.05},cpu:{min:2.75,max:2.75,mean:2.75}},envoyProxy:{memory:{min:38.38,max:38.38,mean:38.38},cpu:{min:91.57,max:91.57,mean:91.57}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6076.78,totalRequests:182305,latency:{min:361,mean:6031,max:87502,pstdev:11819,percentiles:{p50:2675,p75:4203,p80:4751,p90:7118,p95:47147,p99:55078,p999:67106}},resources:{envoyGateway:{memory:{min:153.62,max:153.62,mean:153.62},cpu:{min:14.77,max:14.77,mean:14.77}},envoyProxy:{memory:{min:60.45,max:60.45,mean:60.45},cpu:{min:124.04,max:124.04,mean:124.04}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5928.89,totalRequests:177873,latency:{min:336,mean:6196,max:85643,pstdev:12032,percentiles:{p50:2803,p75:4338,p80:4852,p90:7143,p95:47726,p99:55619,p999:67780}},resources:{envoyGateway:{memory:{min:145.79,max:145.79,mean:145.79},cpu:{min:27.17,max:27.17,mean:27.17}},envoyProxy:{memory:{min:80.64,max:80.64,mean:80.64},cpu:{min:157.65,max:157.65,mean:157.65}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5843.64,totalRequests:175314,latency:{min:339,mean:6452,max:101912,pstdev:12482,percentiles:{p50:2790,p75:4509,p80:5136,p90:8012,p95:47702,p99:58542,p999:74014}},resources:{envoyGateway:{memory:{min:173.7,max:173.7,mean:173.7},cpu:{min:61.12,max:61.12,mean:61.12}},envoyProxy:{memory:{min:130.89,max:130.89,mean:130.89},cpu:{min:195.74,max:195.74,mean:195.74}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6096.9,totalRequests:182907,latency:{min:365,mean:5840,max:99377,pstdev:11326,percentiles:{p50:2735,p75:4188,p80:4674,p90:6654,p95:46344,p99:53444,p999:58591}},resources:{envoyGateway:{memory:{min:230.99,max:230.99,mean:230.99},cpu:{min:114.22,max:114.22,mean:114.22}},envoyProxy:{memory:{min:121.56,max:121.56,mean:121.56},cpu:{min:358.71,max:358.71,mean:358.71}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6151.76,totalRequests:184556,latency:{min:376,mean:5805,max:84885,pstdev:11572,percentiles:{p50:2520,p75:3969,p80:4498,p90:6842,p95:46837,p99:54761,p999:62570}},resources:{envoyGateway:{memory:{min:233.63,max:233.63,mean:233.63},cpu:{min:113.65,max:113.65,mean:113.65}},envoyProxy:{memory:{min:121.86,max:121.86,mean:121.86},cpu:{min:328.3,max:328.3,mean:328.3}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6157.53,totalRequests:184729,latency:{min:379,mean:5964,max:75988,pstdev:11502,percentiles:{p50:2743,p75:4204,p80:4695,p90:6941,p95:46497,p99:54179,p999:62005}},resources:{envoyGateway:{memory:{min:141.36,max:141.36,mean:141.36},cpu:{min:112.67,max:112.67,mean:112.67}},envoyProxy:{memory:{min:122.04,max:122.04,mean:122.04},cpu:{min:297.59,max:297.59,mean:297.59}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:6060.5,totalRequests:181818,latency:{min:360,mean:6022,max:92483,pstdev:11657,percentiles:{p50:2685,p75:4265,p80:4811,p90:7313,p95:46495,p99:54495,p999:64219}},resources:{envoyGateway:{memory:{min:150.71,max:150.71,mean:150.71},cpu:{min:102.4,max:102.4,mean:102.4}},envoyProxy:{memory:{min:130.9,max:130.9,mean:130.9},cpu:{min:265.29,max:265.29,mean:265.29}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5966.83,totalRequests:179008,latency:{min:343,mean:5962,max:102715,pstdev:11763,percentiles:{p50:2668,p75:4125,p80:4633,p90:6863,p95:46741,p99:54929,p999:67018}},resources:{envoyGateway:{memory:{min:162.62,max:162.62,mean:162.62},cpu:{min:91.03,max:91.03,mean:91.03}},envoyProxy:{memory:{min:131.05,max:131.05,mean:131.05},cpu:{min:232.55,max:232.55,mean:232.55}}},poolOverflow:363,upstreamConnections:37}]},Ooe={metadata:{version:"1.2.1",runId:"1.2.1-1750189826759",date:"2024-11-07",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6110.53,totalRequests:183316,latency:{min:337,mean:6415,max:92647,pstdev:11350,percentiles:{p50:3107,p75:5037,p80:5711,p90:8782,p95:45103,p99:53942,p999:60790}},resources:{envoyGateway:{memory:{min:111.18,max:111.18,mean:111.18},cpu:{min:.79,max:.79,mean:.79}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.62,max:30.62,mean:30.62}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6011.43,totalRequests:180343,latency:{min:377,mean:6244,max:72724,pstdev:11870,percentiles:{p50:2835,p75:4408,p80:4939,p90:7412,p95:47611,p99:54769,p999:61716}},resources:{envoyGateway:{memory:{min:116.45,max:116.45,mean:116.45},cpu:{min:1.59,max:1.59,mean:1.59}},envoyProxy:{memory:{min:30.41,max:30.41,mean:30.41},cpu:{min:61.42,max:61.42,mean:61.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5961.65,totalRequests:178854,latency:{min:370,mean:5979,max:81096,pstdev:11586,percentiles:{p50:2705,p75:4189,p80:4699,p90:7030,p95:46987,p99:54095,p999:61222}},resources:{envoyGateway:{memory:{min:128.02,max:128.02,mean:128.02},cpu:{min:3.04,max:3.04,mean:3.04}},envoyProxy:{memory:{min:36.55,max:36.55,mean:36.55},cpu:{min:92.49,max:92.49,mean:92.49}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5921.3,totalRequests:177639,latency:{min:376,mean:6208,max:100098,pstdev:11901,percentiles:{p50:2770,p75:4413,p80:5009,p90:7647,p95:46934,p99:55273,p999:68509}},resources:{envoyGateway:{memory:{min:144.93,max:144.93,mean:144.93},cpu:{min:15.11,max:15.11,mean:15.11}},envoyProxy:{memory:{min:58.75,max:58.75,mean:58.75},cpu:{min:125.9,max:125.9,mean:125.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5876.24,totalRequests:176290,latency:{min:365,mean:6248,max:80101,pstdev:12134,percentiles:{p50:2759,p75:4348,p80:4922,p90:7422,p95:47855,p99:56041,p999:67145}},resources:{envoyGateway:{memory:{min:155.94,max:155.94,mean:155.94},cpu:{min:27.72,max:27.72,mean:27.72}},envoyProxy:{memory:{min:80.95,max:80.95,mean:80.95},cpu:{min:159.58,max:159.58,mean:159.58}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5744.1,totalRequests:172323,latency:{min:380,mean:6374,max:100245,pstdev:12424,percentiles:{p50:2775,p75:4337,p80:4899,p90:7542,p95:47699,p99:59248,p999:71761}},resources:{envoyGateway:{memory:{min:184.41,max:184.41,mean:184.41},cpu:{min:61.5,max:61.5,mean:61.5}},envoyProxy:{memory:{min:129.19,max:129.19,mean:129.19},cpu:{min:199.75,max:199.75,mean:199.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6028.67,totalRequests:180864,latency:{min:361,mean:5919,max:75882,pstdev:11427,percentiles:{p50:2729,p75:4244,p80:4783,p90:6934,p95:46608,p99:53897,p999:59893}},resources:{envoyGateway:{memory:{min:229.41,max:229.41,mean:229.41},cpu:{min:114.16,max:114.16,mean:114.16}},envoyProxy:{memory:{min:121.69,max:121.69,mean:121.69},cpu:{min:363.78,max:363.78,mean:363.78}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6093.21,totalRequests:182799,latency:{min:364,mean:5859,max:73809,pstdev:11454,percentiles:{p50:2634,p75:4171,p80:4702,p90:7002,p95:46548,p99:53979,p999:62793}},resources:{envoyGateway:{memory:{min:236.91,max:236.91,mean:236.91},cpu:{min:113.6,max:113.6,mean:113.6}},envoyProxy:{memory:{min:122.3,max:122.3,mean:122.3},cpu:{min:333.22,max:333.22,mean:333.22}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6057.56,totalRequests:181727,latency:{min:366,mean:5898,max:83623,pstdev:11560,percentiles:{p50:2628,p75:4159,p80:4695,p90:6996,p95:46897,p99:54495,p999:61849}},resources:{envoyGateway:{memory:{min:143.71,max:143.71,mean:143.71},cpu:{min:112.58,max:112.58,mean:112.58}},envoyProxy:{memory:{min:121.84,max:121.84,mean:121.84},cpu:{min:302.58,max:302.58,mean:302.58}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5899.93,totalRequests:176998,latency:{min:329,mean:6218,max:88965,pstdev:12007,percentiles:{p50:2818,p75:4388,p80:4920,p90:7204,p95:47871,p99:55517,p999:65886}},resources:{envoyGateway:{memory:{min:154.24,max:154.24,mean:154.24},cpu:{min:102.3,max:102.3,mean:102.3}},envoyProxy:{memory:{min:129.34,max:129.34,mean:129.34},cpu:{min:270.21,max:270.21,mean:270.21}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5862.2,totalRequests:175868,latency:{min:359,mean:6106,max:107622,pstdev:11962,percentiles:{p50:2648,p75:4343,p80:4933,p90:7617,p95:47341,p99:55508,p999:69103}},resources:{envoyGateway:{memory:{min:153.72,max:153.72,mean:153.72},cpu:{min:91.07,max:91.07,mean:91.07}},envoyProxy:{memory:{min:129.18,max:129.18,mean:129.18},cpu:{min:237.04,max:237.04,mean:237.04}}},poolOverflow:363,upstreamConnections:37}]},koe={metadata:{version:"1.2.0",runId:"1.2.0-1750189826754",date:"2024-11-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6006.27,totalRequests:180191,latency:{min:359,mean:6202,max:74358,pstdev:11262,percentiles:{p50:2976,p75:4719,p80:5330,p90:8159,p95:44003,p99:54190,p999:59357}},resources:{envoyGateway:{memory:{min:113.66,max:113.66,mean:113.66},cpu:{min:.75,max:.75,mean:.75}},envoyProxy:{memory:{min:25.55,max:25.55,mean:25.55},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5988.15,totalRequests:179650,latency:{min:366,mean:6093,max:82386,pstdev:11670,percentiles:{p50:2838,p75:4283,p80:4798,p90:6972,p95:47523,p99:54038,p999:59813}},resources:{envoyGateway:{memory:{min:119.16,max:119.16,mean:119.16},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.71,max:31.71,mean:31.71},cpu:{min:61.03,max:61.03,mean:61.03}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.13,totalRequests:177905,latency:{min:374,mean:6182,max:93884,pstdev:11844,percentiles:{p50:2812,p75:4420,p80:4967,p90:7339,p95:47618,p99:54661,p999:61865}},resources:{envoyGateway:{memory:{min:123.35,max:123.35,mean:123.35},cpu:{min:2.89,max:2.89,mean:2.89}},envoyProxy:{memory:{min:37.86,max:37.86,mean:37.86},cpu:{min:91.87,max:91.87,mean:91.87}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5713.27,totalRequests:171401,latency:{min:384,mean:6405,max:105545,pstdev:12313,percentiles:{p50:2832,p75:4450,p80:5057,p90:7773,p95:48732,p99:56084,p999:66220}},resources:{envoyGateway:{memory:{min:150.92,max:150.92,mean:150.92},cpu:{min:15.08,max:15.08,mean:15.08}},envoyProxy:{memory:{min:60.05,max:60.05,mean:60.05},cpu:{min:125.09,max:125.09,mean:125.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5689.03,totalRequests:170675,latency:{min:365,mean:5939,max:98639,pstdev:11585,percentiles:{p50:2715,p75:4258,p80:4772,p90:7055,p95:45996,p99:54368,p999:68464}},resources:{envoyGateway:{memory:{min:156.97,max:156.97,mean:156.97},cpu:{min:27.62,max:27.62,mean:27.62}},envoyProxy:{memory:{min:82.26,max:82.26,mean:82.26},cpu:{min:158.86,max:158.86,mean:158.86}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5407.08,totalRequests:162220,latency:{min:371,mean:6424,max:131579,pstdev:12473,percentiles:{p50:2692,p75:4503,p80:5177,p90:8264,p95:47540,p99:58488,p999:72720}},resources:{envoyGateway:{memory:{min:215.93,max:215.93,mean:215.93},cpu:{min:61.56,max:61.56,mean:61.56}},envoyProxy:{memory:{min:130.5,max:130.5,mean:130.5},cpu:{min:197.45,max:197.45,mean:197.45}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5905.23,totalRequests:177157,latency:{min:396,mean:6205,max:92979,pstdev:12065,percentiles:{p50:2713,p75:4262,p80:4832,p90:7415,p95:48306,p99:55736,p999:63318}},resources:{envoyGateway:{memory:{min:233.71,max:233.71,mean:233.71},cpu:{min:114.53,max:114.53,mean:114.53}},envoyProxy:{memory:{min:118.94,max:118.94,mean:118.94},cpu:{min:360.39,max:360.39,mean:360.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5793.19,totalRequests:173800,latency:{min:385,mean:6501,max:86843,pstdev:12452,percentiles:{p50:2744,p75:4568,p80:5227,p90:8494,p95:48965,p99:56467,p999:65382}},resources:{envoyGateway:{memory:{min:202.08,max:202.08,mean:202.08},cpu:{min:113.96,max:113.96,mean:113.96}},envoyProxy:{memory:{min:121.24,max:121.24,mean:121.24},cpu:{min:329.91,max:329.91,mean:329.91}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5783.8,totalRequests:173514,latency:{min:385,mean:6179,max:85405,pstdev:11889,percentiles:{p50:2707,p75:4462,p80:5071,p90:7760,p95:47423,p99:54994,p999:64567}},resources:{envoyGateway:{memory:{min:144.59,max:144.59,mean:144.59},cpu:{min:112.93,max:112.93,mean:112.93}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:299.28,max:299.28,mean:299.28}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5804.51,totalRequests:174139,latency:{min:384,mean:6147,max:82661,pstdev:11892,percentiles:{p50:2807,p75:4284,p80:4791,p90:7039,p95:47558,p99:55162,p999:66723}},resources:{envoyGateway:{memory:{min:160.23,max:160.23,mean:160.23},cpu:{min:102.85,max:102.85,mean:102.85}},envoyProxy:{memory:{min:130.62,max:130.62,mean:130.62},cpu:{min:267.09,max:267.09,mean:267.09}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5804.87,totalRequests:174149,latency:{min:368,mean:5828,max:106119,pstdev:11561,percentiles:{p50:2647,p75:4078,p80:4553,p90:6656,p95:46047,p99:55025,p999:66633}},resources:{envoyGateway:{memory:{min:155.88,max:155.88,mean:155.88},cpu:{min:91.5,max:91.5,mean:91.5}},envoyProxy:{memory:{min:130.61,max:130.61,mean:130.61},cpu:{min:234.47,max:234.47,mean:234.47}}},poolOverflow:365,upstreamConnections:35}]},Coe={metadata:{version:"1.1.4",runId:"1.1.4-1750190329987",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5971.73,totalRequests:179152,latency:{min:354,mean:6247,max:97591,pstdev:11371,percentiles:{p50:2948,p75:4694,p80:5352,p90:8420,p95:44519,p99:54398,p999:62244}},resources:{envoyGateway:{memory:{min:82.79,max:82.79,mean:82.79},cpu:{min:1.5000000000000002,max:1.5000000000000002,mean:1.5000000000000002}},envoyProxy:{memory:{min:24.11,max:24.11,mean:24.11},cpu:{min:101.53333333333335,max:101.53333333333335,mean:101.53333333333335}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5957.22,totalRequests:178717,latency:{min:385,mean:6145,max:93360,pstdev:11838,percentiles:{p50:2751,p75:4352,p80:4922,p90:7436,p95:47679,p99:54878,p999:62414}},resources:{envoyGateway:{memory:{min:103.29,max:103.29,mean:103.29},cpu:{min:6.800000000000001,max:6.800000000000001,mean:6.800000000000001}},envoyProxy:{memory:{min:32.29,max:32.29,mean:32.29},cpu:{min:204,max:204,mean:204}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5896.53,totalRequests:176899,latency:{min:360,mean:6376,max:93995,pstdev:12077,percentiles:{p50:2905,p75:4542,p80:5112,p90:7699,p95:48019,p99:55472,p999:63707}},resources:{envoyGateway:{memory:{min:151.7,max:151.7,mean:151.7},cpu:{min:32.599999999999994,max:32.599999999999994,mean:32.599999999999994}},envoyProxy:{memory:{min:46.46,max:46.46,mean:46.46},cpu:{min:309.8,max:309.8,mean:309.8}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5885.1,totalRequests:176553,latency:{min:370,mean:6378,max:102457,pstdev:12096,percentiles:{p50:2834,p75:4508,p80:5093,p90:7817,p95:48099,p99:55572,p999:64329}},resources:{envoyGateway:{memory:{min:763.38,max:763.38,mean:763.38},cpu:{min:605.6333333333333,max:605.6333333333333,mean:605.6333333333333}},envoyProxy:{memory:{min:150.81,max:150.81,mean:150.81},cpu:{min:494.66666666666674,max:494.66666666666674,mean:494.66666666666674}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5642.37,totalRequests:169274,latency:{min:314,mean:6430,max:135987,pstdev:12216,percentiles:{p50:2801,p75:4489,p80:5175,p90:8673,p95:46690,p99:56358,p999:73814}},resources:{envoyGateway:{memory:{min:1603.28,max:1603.28,mean:1603.28},cpu:{min:41.63333333333333,max:41.63333333333333,mean:41.63333333333333}},envoyProxy:{memory:{min:289.75,max:289.75,mean:289.75},cpu:{min:727.1666666666666,max:727.1666666666666,mean:727.1666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5993.8,totalRequests:179822,latency:{min:381,mean:5965,max:84086,pstdev:11660,percentiles:{p50:2666,p75:4169,p80:4715,p90:6995,p95:47218,p99:54775,p999:61200}},resources:{envoyGateway:{memory:{min:117.16,max:117.16,mean:117.16},cpu:{min:518.0333333333333,max:518.0333333333333,mean:518.0333333333333}},envoyProxy:{memory:{min:278.72,max:278.72,mean:278.72},cpu:{min:1205.8,max:1205.8,mean:1205.8}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5947.1,totalRequests:178412,latency:{min:346,mean:5809,max:76681,pstdev:11155,percentiles:{p50:2707,p75:4164,p80:4684,p90:6938,p95:45451,p99:53227,p999:59303}},resources:{envoyGateway:{memory:{min:123.23,max:123.23,mean:123.23},cpu:{min:512.5333333333333,max:512.5333333333333,mean:512.5333333333333}},envoyProxy:{memory:{min:291.25,max:291.25,mean:291.25},cpu:{min:1103.6333333333334,max:1103.6333333333334,mean:1103.6333333333334}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4884.46,totalRequests:146534,latency:{min:362,mean:7148,max:137863,pstdev:11237,percentiles:{p50:3375,p75:6266,p80:7621,p90:17699,p95:31992,p99:59576,p999:83935}},resources:{envoyGateway:{memory:{min:338.12,max:338.12,mean:338.12},cpu:{min:488.1333333333333,max:488.1333333333333,mean:488.1333333333333}},envoyProxy:{memory:{min:294.41,max:294.41,mean:294.41},cpu:{min:993,max:993,mean:993}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5737.62,totalRequests:172120,latency:{min:345,mean:6192,max:117288,pstdev:11530,percentiles:{p50:2822,p75:4535,p80:5155,p90:8463,p95:42631,p99:55584,p999:70291}},resources:{envoyGateway:{memory:{min:679.73,max:679.73,mean:679.73},cpu:{min:18.76666666666667,max:18.76666666666667,mean:18.76666666666667}},envoyProxy:{memory:{min:285.93,max:285.93,mean:285.93},cpu:{min:833.4333333333334,max:833.4333333333334,mean:833.4333333333334}}},poolOverflow:363,upstreamConnections:37}]},_oe={metadata:{version:"1.1.3",runId:"1.1.3-1750190329984",date:"2024-11-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6070.53,totalRequests:182116,latency:{min:353,mean:6263,max:87117,pstdev:11274,percentiles:{p50:2994,p75:4783,p80:5441,p90:8506,p95:44029,p99:54130,p999:59291}},resources:{envoyGateway:{memory:{min:85.16,max:85.16,mean:85.16},cpu:{min:1.3666666666666665,max:1.3666666666666665,mean:1.3666666666666665}},envoyProxy:{memory:{min:26,max:26,mean:26},cpu:{min:101.43333333333334,max:101.43333333333334,mean:101.43333333333334}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5999.45,totalRequests:179985,latency:{min:368,mean:6117,max:76840,pstdev:11675,percentiles:{p50:2803,p75:4339,p80:4903,p90:7204,p95:47128,p99:54317,p999:60557}},resources:{envoyGateway:{memory:{min:102.18,max:102.18,mean:102.18},cpu:{min:7.033333333333333,max:7.033333333333333,mean:7.033333333333333}},envoyProxy:{memory:{min:34.18,max:34.18,mean:34.18},cpu:{min:203.56666666666666,max:203.56666666666666,mean:203.56666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6053.06,totalRequests:181592,latency:{min:390,mean:5889,max:94826,pstdev:11642,percentiles:{p50:2599,p75:4075,p80:4583,p90:6945,p95:47128,p99:54872,p999:62212}},resources:{envoyGateway:{memory:{min:151.34,max:151.34,mean:151.34},cpu:{min:31.633333333333336,max:31.633333333333336,mean:31.633333333333336}},envoyProxy:{memory:{min:48.34,max:48.34,mean:48.34},cpu:{min:309.06666666666666,max:309.06666666666666,mean:309.06666666666666}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5895.77,totalRequests:176873,latency:{min:378,mean:6220,max:100757,pstdev:12033,percentiles:{p50:2723,p75:4341,p80:4931,p90:7644,p95:47828,p99:55521,p999:67383}},resources:{envoyGateway:{memory:{min:687.16,max:687.16,mean:687.16},cpu:{min:578.2333333333332,max:578.2333333333332,mean:578.2333333333332}},envoyProxy:{memory:{min:150.69,max:150.69,mean:150.69},cpu:{min:488.20000000000005,max:488.20000000000005,mean:488.20000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5818.09,totalRequests:174543,latency:{min:356,mean:6109,max:107913,pstdev:11285,percentiles:{p50:2832,p75:4538,p80:5163,p90:8134,p95:42639,p99:54546,p999:67543}},resources:{envoyGateway:{memory:{min:1329.35,max:1329.35,mean:1329.35},cpu:{min:61.33333333333333,max:61.33333333333333,mean:61.33333333333333}},envoyProxy:{memory:{min:303.55,max:303.55,mean:303.55},cpu:{min:731.4333333333334,max:731.4333333333334,mean:731.4333333333334}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5996.79,totalRequests:179907,latency:{min:367,mean:6127,max:77688,pstdev:11777,percentiles:{p50:2745,p75:4292,p80:4835,p90:7317,p95:47597,p99:54706,p999:61323}},resources:{envoyGateway:{memory:{min:125.62,max:125.62,mean:125.62},cpu:{min:525.5,max:525.5,mean:525.5}},envoyProxy:{memory:{min:289.68,max:289.68,mean:289.68},cpu:{min:1239.6,max:1239.6,mean:1239.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5732.14,totalRequests:171956,latency:{min:336,mean:4876,max:76279,pstdev:10072,percentiles:{p50:2290,p75:3444,p80:3846,p90:5476,p95:24546,p99:51763,p999:57040}},resources:{envoyGateway:{memory:{min:132.64,max:132.64,mean:132.64},cpu:{min:520.8333333333333,max:520.8333333333333,mean:520.8333333333333}},envoyProxy:{memory:{min:291.68,max:291.68,mean:291.68},cpu:{min:1138.0333333333335,max:1138.0333333333335,mean:1138.0333333333335}}},poolOverflow:371,upstreamConnections:29},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5311.34,totalRequests:159332,latency:{min:362,mean:6219,max:144302,pstdev:11133,percentiles:{p50:2808,p75:4741,p80:5579,p90:10689,p95:37480,p99:53626,p999:73998}},resources:{envoyGateway:{memory:{min:179.01,max:179.01,mean:179.01},cpu:{min:497.9666666666666,max:497.9666666666666,mean:497.9666666666666}},envoyProxy:{memory:{min:298.77,max:298.77,mean:298.77},cpu:{min:1034.033333333333,max:1034.033333333333,mean:1034.033333333333}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5633.85,totalRequests:169021,latency:{min:369,mean:6266,max:106577,pstdev:11127,percentiles:{p50:2908,p75:4793,p80:5511,p90:9568,p95:36169,p99:54472,p999:68628}},resources:{envoyGateway:{memory:{min:487.12,max:487.12,mean:487.12},cpu:{min:27.133333333333336,max:27.133333333333336,mean:27.133333333333336}},envoyProxy:{memory:{min:299.84,max:299.84,mean:299.84},cpu:{min:837.8666666666668,max:837.8666666666668,mean:837.8666666666668}}},poolOverflow:363,upstreamConnections:37}]},Aoe={metadata:{version:"1.1.2",runId:"1.1.2-1750190329982",date:"2024-09-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5649.72,totalRequests:169493,latency:{min:356,mean:6560,max:72347,pstdev:11796,percentiles:{p50:3044,p75:5011,p80:5690,p90:8937,p95:46880,p99:54560,p999:59316}},resources:{envoyGateway:{memory:{min:86.72,max:86.72,mean:86.72},cpu:{min:1.5666666666666667,max:1.5666666666666667,mean:1.5666666666666667}},envoyProxy:{memory:{min:24.26,max:24.26,mean:24.26},cpu:{min:101.63333333333333,max:101.63333333333333,mean:101.63333333333333}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5594.14,totalRequests:167826,latency:{min:377,mean:6225,max:71024,pstdev:11980,percentiles:{p50:2812,p75:4378,p80:4905,p90:7214,p95:48160,p99:54513,p999:59850}},resources:{envoyGateway:{memory:{min:106.76,max:106.76,mean:106.76},cpu:{min:7.7,max:7.7,mean:7.7}},envoyProxy:{memory:{min:32.43,max:32.43,mean:32.43},cpu:{min:204.53333333333333,max:204.53333333333333,mean:204.53333333333333}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5523.65,totalRequests:165711,latency:{min:379,mean:6455,max:77815,pstdev:12317,percentiles:{p50:2868,p75:4510,p80:5086,p90:7645,p95:49127,p99:55048,p999:61448}},resources:{envoyGateway:{memory:{min:149.03,max:149.03,mean:149.03},cpu:{min:29.333333333333332,max:29.333333333333332,mean:29.333333333333332}},envoyProxy:{memory:{min:46.61,max:46.61,mean:46.61},cpu:{min:309.7666666666667,max:309.7666666666667,mean:309.7666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5554.01,totalRequests:166624,latency:{min:357,mean:6246,max:99753,pstdev:12051,percentiles:{p50:2841,p75:4416,p80:4960,p90:7177,p95:48371,p99:54800,p999:63275}},resources:{envoyGateway:{memory:{min:375.51,max:375.51,mean:375.51},cpu:{min:615.1,max:615.1,mean:615.1}},envoyProxy:{memory:{min:152.97,max:152.97,mean:152.97},cpu:{min:492.4666666666667,max:492.4666666666667,mean:492.4666666666667}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5475.04,totalRequests:164256,latency:{min:365,mean:6546,max:95539,pstdev:12646,percentiles:{p50:2834,p75:4484,p80:5075,p90:7891,p95:49397,p99:56231,p999:67629}},resources:{envoyGateway:{memory:{min:1340.6,max:1340.6,mean:1340.6},cpu:{min:38.333333333333336,max:38.333333333333336,mean:38.333333333333336}},envoyProxy:{memory:{min:281.71,max:281.71,mean:281.71},cpu:{min:718.0666666666666,max:718.0666666666666,mean:718.0666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5657.68,totalRequests:169734,latency:{min:355,mean:7320,max:87252,pstdev:13162,percentiles:{p50:3307,p75:5218,p80:5885,p90:9252,p95:50671,p99:56332,p999:62406}},resources:{envoyGateway:{memory:{min:371.29,max:371.29,mean:371.29},cpu:{min:578.7666666666667,max:578.7666666666667,mean:578.7666666666667}},envoyProxy:{memory:{min:273.57,max:273.57,mean:273.57},cpu:{min:1224,max:1224,mean:1224}}},poolOverflow:356,upstreamConnections:44},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5587.8,totalRequests:167636,latency:{min:356,mean:6346,max:68095,pstdev:12097,percentiles:{p50:2890,p75:4509,p80:5041,p90:7495,p95:48560,p99:54345,p999:60436}},resources:{envoyGateway:{memory:{min:342.8,max:342.8,mean:342.8},cpu:{min:573.3000000000001,max:573.3000000000001,mean:573.3000000000001}},envoyProxy:{memory:{min:274.84,max:274.84,mean:274.84},cpu:{min:1122.2333333333333,max:1122.2333333333333,mean:1122.2333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4098.74,totalRequests:122966,latency:{min:347,mean:3660,max:99745,pstdev:7371,percentiles:{p50:1658,p75:2735,p80:3147,p90:5306,p95:18030,p99:42778,p999:60440}},resources:{envoyGateway:{memory:{min:433.01,max:433.01,mean:433.01},cpu:{min:486.96666666666664,max:486.96666666666664,mean:486.96666666666664}},envoyProxy:{memory:{min:281.27,max:281.27,mean:281.27},cpu:{min:996.0333333333333,max:996.0333333333333,mean:996.0333333333333}}},poolOverflow:384,upstreamConnections:16},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5306.46,totalRequests:159194,latency:{min:360,mean:6884,max:106807,pstdev:12850,percentiles:{p50:2983,p75:4873,p80:5573,p90:9215,p95:49102,p99:58521,p999:70213}},resources:{envoyGateway:{memory:{min:232.76,max:232.76,mean:232.76},cpu:{min:16.299999999999997,max:16.299999999999997,mean:16.299999999999997}},envoyProxy:{memory:{min:282.68,max:282.68,mean:282.68},cpu:{min:825.4333333333333,max:825.4333333333333,mean:825.4333333333333}}},poolOverflow:361,upstreamConnections:39}]},Eoe={metadata:{version:"1.1.1",runId:"1.1.1-1750190329981",date:"2024-09-12",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6258.99,totalRequests:187774,latency:{min:333,mean:5933,max:71266,pstdev:10816,percentiles:{p50:2898,p75:4513,p80:5099,p90:7661,p95:40607,p99:53149,p999:58789}},resources:{envoyGateway:{memory:{min:84.04,max:84.04,mean:84.04},cpu:{min:1.5333333333333334,max:1.5333333333333334,mean:1.5333333333333334}},envoyProxy:{memory:{min:25.57,max:25.57,mean:25.57},cpu:{min:101.33333333333331,max:101.33333333333331,mean:101.33333333333331}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6118.28,totalRequests:183552,latency:{min:359,mean:5828,max:81178,pstdev:11437,percentiles:{p50:2646,p75:4049,p80:4561,p90:6666,p95:46723,p99:53913,p999:60094}},resources:{envoyGateway:{memory:{min:101.33,max:101.33,mean:101.33},cpu:{min:6.8999999999999995,max:6.8999999999999995,mean:6.8999999999999995}},envoyProxy:{memory:{min:33.75,max:33.75,mean:33.75},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6045.36,totalRequests:181361,latency:{min:377,mean:5908,max:88063,pstdev:11539,percentiles:{p50:2659,p75:4143,p80:4675,p90:6863,p95:46733,p99:54091,p999:63211}},resources:{envoyGateway:{memory:{min:115.34,max:115.34,mean:115.34},cpu:{min:32.800000000000004,max:32.800000000000004,mean:32.800000000000004}},envoyProxy:{memory:{min:47.79,max:47.79,mean:47.79},cpu:{min:308.96666666666664,max:308.96666666666664,mean:308.96666666666664}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5881.18,totalRequests:176436,latency:{min:327,mean:6376,max:130330,pstdev:12048,percentiles:{p50:2843,p75:4548,p80:5181,p90:8168,p95:47517,p99:55470,p999:66041}},resources:{envoyGateway:{memory:{min:608.65,max:608.65,mean:608.65},cpu:{min:625.6666666666666,max:625.6666666666666,mean:625.6666666666666}},envoyProxy:{memory:{min:152.29,max:152.29,mean:152.29},cpu:{min:492.5666666666667,max:492.5666666666667,mean:492.5666666666667}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5875.93,totalRequests:176280,latency:{min:381,mean:6086,max:86654,pstdev:11932,percentiles:{p50:2704,p75:4181,p80:4727,p90:7177,p95:47091,p99:55814,p999:68415}},resources:{envoyGateway:{memory:{min:1308.52,max:1308.52,mean:1308.52},cpu:{min:39.49999999999999,max:39.49999999999999,mean:39.49999999999999}},envoyProxy:{memory:{min:283.24,max:283.24,mean:283.24},cpu:{min:707.1333333333332,max:707.1333333333332,mean:707.1333333333332}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6077.56,totalRequests:182327,latency:{min:362,mean:6197,max:92372,pstdev:11720,percentiles:{p50:2824,p75:4438,p80:5e3,p90:7503,p95:47110,p99:54169,p999:60426}},resources:{envoyGateway:{memory:{min:121.13,max:121.13,mean:121.13},cpu:{min:544.5333333333334,max:544.5333333333334,mean:544.5333333333334}},envoyProxy:{memory:{min:277.29,max:277.29,mean:277.29},cpu:{min:1206.4666666666665,max:1206.4666666666665,mean:1206.4666666666665}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6047.67,totalRequests:181438,latency:{min:370,mean:6062,max:92168,pstdev:11743,percentiles:{p50:2733,p75:4268,p80:4801,p90:7226,p95:47095,p99:54886,p999:61917}},resources:{envoyGateway:{memory:{min:126.22,max:126.22,mean:126.22},cpu:{min:538.8333333333334,max:538.8333333333334,mean:538.8333333333334}},envoyProxy:{memory:{min:285.62,max:285.62,mean:285.62},cpu:{min:1104.3000000000002,max:1104.3000000000002,mean:1104.3000000000002}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4654.8,totalRequests:139655,latency:{min:336,mean:4675,max:107409,pstdev:9843,percentiles:{p50:2048,p75:3459,p80:4015,p90:6531,p95:19138,p99:57518,p999:73269}},resources:{envoyGateway:{memory:{min:480.36,max:480.36,mean:480.36},cpu:{min:377,max:377,mean:377}},envoyProxy:{memory:{min:289.51,max:289.51,mean:289.51},cpu:{min:969.2333333333332,max:969.2333333333332,mean:969.2333333333332}}},poolOverflow:377,upstreamConnections:23},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5676.68,totalRequests:170301,latency:{min:376,mean:6244,max:153264,pstdev:11618,percentiles:{p50:2797,p75:4618,p80:5324,p90:8807,p95:40232,p99:56496,p999:73506}},resources:{envoyGateway:{memory:{min:436.58,max:436.58,mean:436.58},cpu:{min:28.066666666666666,max:28.066666666666666,mean:28.066666666666666}},envoyProxy:{memory:{min:283.47,max:283.47,mean:283.47},cpu:{min:813.3666666666667,max:813.3666666666667,mean:813.3666666666667}}},poolOverflow:363,upstreamConnections:37}]},Toe={metadata:{version:"1.1.0",runId:"1.1.0-1750190329977",date:"2024-07-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6181.97,totalRequests:185463,latency:{min:362,mean:5902,max:73084,pstdev:11039,percentiles:{p50:2765,p75:4364,p80:4935,p90:7504,p95:41244,p99:53929,p999:61147}},resources:{envoyGateway:{memory:{min:86.2,max:86.2,mean:86.2},cpu:{min:1.4333333333333333,max:1.4333333333333333,mean:1.4333333333333333}},envoyProxy:{memory:{min:24.09,max:24.09,mean:24.09},cpu:{min:101.36666666666667,max:101.36666666666667,mean:101.36666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6103.97,totalRequests:183121,latency:{min:354,mean:5852,max:75943,pstdev:11382,percentiles:{p50:2681,p75:4083,p80:4601,p90:6825,p95:46262,p99:53862,p999:60651}},resources:{envoyGateway:{memory:{min:100.14,max:100.14,mean:100.14},cpu:{min:7.233333333333333,max:7.233333333333333,mean:7.233333333333333}},envoyProxy:{memory:{min:32.25,max:32.25,mean:32.25},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6074.87,totalRequests:182247,latency:{min:371,mean:5877,max:94171,pstdev:11399,percentiles:{p50:2732,p75:4191,p80:4677,p90:6801,p95:46481,p99:53866,p999:61036}},resources:{envoyGateway:{memory:{min:114.69,max:114.69,mean:114.69},cpu:{min:30,max:30,mean:30}},envoyProxy:{memory:{min:46.42,max:46.42,mean:46.42},cpu:{min:308.70000000000005,max:308.70000000000005,mean:308.70000000000005}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5993.57,totalRequests:179811,latency:{min:368,mean:6123,max:96571,pstdev:11831,percentiles:{p50:2753,p75:4261,p80:4799,p90:7247,p95:47368,p99:55248,p999:66586}},resources:{envoyGateway:{memory:{min:762.8,max:762.8,mean:762.8},cpu:{min:600.8666666666667,max:600.8666666666667,mean:600.8666666666667}},envoyProxy:{memory:{min:152.78,max:152.78,mean:152.78},cpu:{min:488.70000000000005,max:488.70000000000005,mean:488.70000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5812.8,totalRequests:174396,latency:{min:388,mean:6310,max:95719,pstdev:12246,percentiles:{p50:2729,p75:4334,p80:4905,p90:7607,p95:47970,p99:56811,p999:68165}},resources:{envoyGateway:{memory:{min:1593.56,max:1593.56,mean:1593.56},cpu:{min:36.56666666666667,max:36.56666666666667,mean:36.56666666666667}},envoyProxy:{memory:{min:289.79,max:289.79,mean:289.79},cpu:{min:715.6333333333333,max:715.6333333333333,mean:715.6333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5916.93,totalRequests:177517,latency:{min:385,mean:6352,max:82747,pstdev:12011,percentiles:{p50:2822,p75:4461,p80:5061,p90:7769,p95:47847,p99:55068,p999:62578}},resources:{envoyGateway:{memory:{min:124.07,max:124.07,mean:124.07},cpu:{min:519.6333333333332,max:519.6333333333332,mean:519.6333333333332}},envoyProxy:{memory:{min:284.03,max:284.03,mean:284.03},cpu:{min:1194.8666666666666,max:1194.8666666666666,mean:1194.8666666666666}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5876.35,totalRequests:176294,latency:{min:371,mean:6226,max:83869,pstdev:11816,percentiles:{p50:2770,p75:4396,p80:5e3,p90:7848,p95:47163,p99:55156,p999:64434}},resources:{envoyGateway:{memory:{min:131.62,max:131.62,mean:131.62},cpu:{min:513.6,max:513.6,mean:513.6}},envoyProxy:{memory:{min:291.73,max:291.73,mean:291.73},cpu:{min:1092.9333333333334,max:1092.9333333333334,mean:1092.9333333333334}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4820.43,totalRequests:144617,latency:{min:342,mean:7088,max:172031,pstdev:12642,percentiles:{p50:3156,p75:5480,p80:6443,p90:12007,p95:39675,p99:63842,p999:86532}},resources:{envoyGateway:{memory:{min:374.36,max:374.36,mean:374.36},cpu:{min:462.8,max:462.8,mean:462.8}},envoyProxy:{memory:{min:289.98,max:289.98,mean:289.98},cpu:{min:980.4,max:980.4,mean:980.4}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5746.71,totalRequests:172402,latency:{min:386,mean:6313,max:101535,pstdev:11578,percentiles:{p50:2875,p75:4579,p80:5222,p90:8617,p95:44341,p99:54996,p999:67178}},resources:{envoyGateway:{memory:{min:670.44,max:670.44,mean:670.44},cpu:{min:24.333333333333332,max:24.333333333333332,mean:24.333333333333332}},envoyProxy:{memory:{min:285.86,max:285.86,mean:285.86},cpu:{min:824.5666666666667,max:824.5666666666667,mean:824.5666666666667}}},poolOverflow:362,upstreamConnections:38}]},Gg=[doe,foe,poe,moe,hoe,voe,yoe,goe,xoe,woe,boe,Soe,Poe,Ooe,koe,Coe,_oe,Aoe,Eoe,Toe],joe=()=>Gg.map(e=>e.metadata.version),mi=Gg.find(e=>e.metadata.version==="1.4.1"),bt=(mi==null?void 0:mi.results)||[];mi!=null&&mi.metadata.testConfiguration;bt.length,bt.filter(e=>e.phase==="scaling-up").length,bt.filter(e=>e.phase==="scaling-down").length,bt.length>0&&Math.max(...bt.map(e=>e.routes)),bt.length>0&&Math.min(...bt.map(e=>e.routes)),bt.length>0&&bt.reduce((e,t)=>e+t.throughput,0)/bt.length,bt.length>0&&bt.reduce((e,t)=>e+t.latency.mean,0)/bt.length;bt.map(e=>({routes:e.routes,phase:e.phase,p50:e.latency.percentiles.p50/1e3,p75:e.latency.percentiles.p75/1e3,p90:e.latency.percentiles.p90/1e3,p95:e.latency.percentiles.p95/1e3,p99:e.latency.percentiles.p99/1e3,p999:e.latency.percentiles.p999/1e3}));bt.map(e=>({routes:e.routes,phase:e.phase,envoyGatewayMemory:e.resources.envoyGateway.memory.mean,envoyGatewayCpu:e.resources.envoyGateway.cpu.mean,envoyProxyMemory:e.resources.envoyProxy.memory.mean,envoyProxyCpu:e.resources.envoyProxy.cpu.mean}));bt.map(e=>({testName:e.testName,routes:e.routes,phase:e.phase,throughput:e.throughput,meanLatency:e.latency.mean/1e3,p95Latency:e.latency.percentiles.p95/1e3,totalMemory:e.resources.envoyGateway.memory.mean+e.resources.envoyProxy.memory.mean,totalCpu:e.resources.envoyGateway.cpu.mean+e.resources.envoyProxy.cpu.mean}));const $oe=()=>{const e=joe(),[t,n]=k.useState("latest"),[r,a]=k.useState(null),[o,i]=k.useState(!1),[s,l]=k.useState(null),u=f=>{f!=null&&f.error?(l(f.error),a(null)):(a(f),l(null))},p=k.useMemo(()=>t==="latest"&&r?(console.log("useVersionData: Processing latestApiData:",r),{metadata:r.metadata||{version:"latest",runId:"latest-api",date:new Date().toISOString(),environment:"production",description:"Latest benchmark data from API",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:r.results||[]}):Gg.find(f=>f.metadata.version===t),[t,r]),c=k.useMemo(()=>{if(t==="latest"&&o)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};if(t==="latest"&&s)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};if(!p)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};const f=p.results;return{benchmarkResults:f,testConfiguration:p.metadata.testConfiguration,performanceSummary:{totalTests:f.length,scaleUpTests:f.filter(d=>d.phase==="scaling-up").length,scaleDownTests:f.filter(d=>d.phase==="scaling-down").length,maxRoutes:f.length>0?Math.max(...f.map(d=>d.routes)):0,minRoutes:f.length>0?Math.min(...f.map(d=>d.routes)):0,avgThroughput:f.length>0?f.reduce((d,h)=>d+h.throughput,0)/f.length:0,avgLatency:f.length>0?f.reduce((d,h)=>d+h.latency.mean,0)/f.length:0},latencyPercentileComparison:f.map(d=>({routes:d.routes,phase:d.phase,p50:d.latency.percentiles.p50/1e3,p75:d.latency.percentiles.p75/1e3,p90:d.latency.percentiles.p90/1e3,p95:d.latency.percentiles.p95/1e3,p99:d.latency.percentiles.p99/1e3,p999:d.latency.percentiles.p999/1e3})),resourceTrends:f.map(d=>({routes:d.routes,phase:d.phase,envoyGatewayMemory:d.resources.envoyGateway.memory.mean,envoyGatewayCpu:d.resources.envoyGateway.cpu.mean,envoyProxyMemory:d.resources.envoyProxy.memory.mean,envoyProxyCpu:d.resources.envoyProxy.cpu.mean})),performanceMatrix:f.map(d=>({testName:d.testName,routes:d.routes,phase:d.phase,throughput:d.throughput,meanLatency:d.latency.mean/1e3,p95Latency:d.latency.percentiles.p95/1e3,totalMemory:d.resources.envoyGateway.memory.mean+d.resources.envoyProxy.memory.mean,totalCpu:d.resources.envoyGateway.cpu.mean+d.resources.envoyProxy.cpu.mean})),metadata:p.metadata}},[p,t,o,s]);return{selectedVersion:t,setSelectedVersion:n,availableVersions:e,isLoadingLatest:o,latestError:s,setLatestData:u,setIsLoadingLatest:i,setLatestError:l,...c}},Noe=({apiBase:e="https://envoy-gateway-benchmark-report.netlify.app/api",initialVersion:t="latest",theme:n="light",containerClassName:r="",features:a={header:!1,versionSelector:!0,summaryCards:!0,tabs:["overview","latency","resources"]}})=>{var i,s,l,u,p,c;const o=$oe();return k.useEffect(()=>{n==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[n]),k.useEffect(()=>{const f=document.createElement("style");return f.textContent=`
+      .benchmark-dashboard [data-radix-popper-content-wrapper] {
+        z-index: 9999 !important;
+      }
+      .benchmark-dashboard .relative.z-50 {
+        z-index: 9999 !important;
+      }
+    `,document.head.appendChild(f),()=>{document.head.removeChild(f)}},[]),b.jsxs("div",{className:`benchmark-dashboard ${n} ${r}`,"data-theme":n,children:[a.header&&b.jsxs("div",{className:"mb-8",children:[b.jsx("h2",{className:"text-3xl font-bold",children:"Performance Benchmark Report Explorer"}),b.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300",children:"Detailed performance analysis"})]}),a.versionSelector&&b.jsx("div",{className:"mb-6",children:b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full",children:b.jsx(BT,{selectedVersion:o.selectedVersion,availableVersions:o.availableVersions,onVersionChange:o.setSelectedVersion,metadata:o.metadata,onLatestDataLoaded:o.setLatestData})})}),a.summaryCards&&o.performanceSummary&&b.jsx("div",{className:"mb-8",children:b.jsx(GT,{performanceSummary:o.performanceSummary,benchmarkResults:o.benchmarkResults})}),a.tabs&&a.tabs.length>0&&b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden",children:b.jsxs(coe,{defaultValue:a.tabs[0],className:"w-full",children:[b.jsxs(WP,{className:`grid w-full ${a.tabs.length===1?"grid-cols-1":a.tabs.length===2?"grid-cols-2":"grid-cols-3"} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`,children:[((i=a.tabs)==null?void 0:i.includes("overview"))&&b.jsx(Mc,{value:"overview",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Overview"}),((s=a.tabs)==null?void 0:s.includes("latency"))&&b.jsx(Mc,{value:"latency",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Request RTT Analysis"}),((l=a.tabs)==null?void 0:l.includes("resources"))&&b.jsx(Mc,{value:"resources",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Resource Usage"})]}),b.jsxs("div",{className:"p-6",children:[((u=a.tabs)==null?void 0:u.includes("overview"))&&b.jsx(Rc,{value:"overview",children:b.jsx(Gae,{performanceMatrix:o.performanceMatrix,benchmarkResults:o.benchmarkResults,testConfiguration:o.testConfiguration,performanceSummary:o.performanceSummary,latencyPercentileComparison:o.latencyPercentileComparison})}),((p=a.tabs)==null?void 0:p.includes("latency"))&&b.jsx(Rc,{value:"latency",children:b.jsx(Uae,{latencyPercentileComparison:o.latencyPercentileComparison,benchmarkResults:o.benchmarkResults})}),((c=a.tabs)==null?void 0:c.includes("resources"))&&b.jsx(Rc,{value:"resources",children:b.jsx(Wae,{resourceTrends:o.resourceTrends,benchmarkResults:o.benchmarkResults})})]})]})})]})};class qP{static async getAllCSS(){const t="shadow-dom-css";if(this.cssCache.has(t))return this.cssCache.get(t);try{let n="";const r=this.getBundledCSS();if(r){n=this.transformCSSForShadowDOM(r);const a=`
+          ${this.getShadowDOMStyles()}
+          ${n}
+        `;return this.cssCache.set(t,a),a}else{const a=this.getFallbackCSS();return this.cssCache.set(t,a),a}}catch(n){return console.error("Error loading CSS for Shadow DOM:",n),this.getFallbackCSS()}}static getBundledCSS(){return window.__BENCHMARK_CSS__||null}static getCSSVariables(){return`
+      /* CSS Custom Properties for theming */
+      :host(.benchmark-dashboard) {
+        --background: 0 0% 100%;
+        --foreground: 222.2 84% 4.9%;
+        --card: 0 0% 100%;
+        --card-foreground: 222.2 84% 4.9%;
+        --popover: 0 0% 100%;
+        --popover-foreground: 222.2 84% 4.9%;
+        --primary: 222.2 47.4% 11.2%;
+        --primary-foreground: 210 40% 98%;
+        --secondary: 210 40% 96.1%;
+        --secondary-foreground: 222.2 47.4% 11.2%;
+        --muted: 210 40% 96.1%;
+        --muted-foreground: 215.4 16.3% 46.9%;
+        --accent: 210 40% 96.1%;
+        --accent-foreground: 222.2 47.4% 11.2%;
+        --destructive: 0 84.2% 60.2%;
+        --destructive-foreground: 210 40% 98%;
+        --border: 214.3 31.8% 91.4%;
+        --input: 214.3 31.8% 91.4%;
+        --ring: 222.2 84% 4.9%;
+        --radius: 0.5rem;
+        --sidebar-background: 0 0% 98%;
+        --sidebar-foreground: 240 5.3% 26.1%;
+        --sidebar-primary: 240 5.9% 10%;
+        --sidebar-primary-foreground: 0 0% 98%;
+        --sidebar-accent: 240 4.8% 95.9%;
+        --sidebar-accent-foreground: 240 5.9% 10%;
+        --sidebar-border: 220 13% 91%;
+        --sidebar-ring: 217.2 91.2% 59.8%;
+      }
+
+      :host(.benchmark-dashboard.dark) {
+        --background: 222.2 84% 4.9%;
+        --foreground: 210 40% 98%;
+        --card: 222.2 84% 4.9%;
+        --card-foreground: 210 40% 98%;
+        --popover: 222.2 84% 4.9%;
+        --popover-foreground: 210 40% 98%;
+        --primary: 210 40% 98%;
+        --primary-foreground: 222.2 47.4% 11.2%;
+        --secondary: 217.2 32.6% 17.5%;
+        --secondary-foreground: 210 40% 98%;
+        --muted: 217.2 32.6% 17.5%;
+        --muted-foreground: 215 20.2% 65.1%;
+        --accent: 217.2 32.6% 17.5%;
+        --accent-foreground: 210 40% 98%;
+        --destructive: 0 62.8% 30.6%;
+        --destructive-foreground: 210 40% 98%;
+        --border: 217.2 32.6% 17.5%;
+        --input: 217.2 32.6% 17.5%;
+        --ring: 212.7 26.8% 83.9%;
+        --sidebar-background: 240 5.9% 10%;
+        --sidebar-foreground: 240 4.8% 95.9%;
+        --sidebar-primary: 224.3 76.3% 48%;
+        --sidebar-primary-foreground: 0 0% 100%;
+        --sidebar-accent: 240 3.7% 15.9%;
+        --sidebar-accent-foreground: 240 4.8% 95.9%;
+        --sidebar-border: 240 3.7% 15.9%;
+        --sidebar-ring: 217.2 91.2% 59.8%;
+      }
+    `}static getShadowDOMStyles(){return`
+      /* Shadow DOM host styles */
+      :host {
+        all: initial;
+        display: block;
+        font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+        line-height: 1.5;
+        -webkit-font-smoothing: antialiased;
+        -moz-osx-font-smoothing: grayscale;
+        color: hsl(var(--foreground));
+        background: hsl(var(--background));
+      }
+
+      /* Reset all elements */
+      * {
+        box-sizing: border-box;
+      }
+
+      /* Shadow root container */
+      #shadow-root {
+        width: 100%;
+        min-height: 100%;
+        position: relative;
+      }
+
+      /* Ensure proper isolation */
+      :host([hidden]) {
+        display: none;
+      }
+    `}static transformCSSForShadowDOM(t){return t=t.replace(/:root\s*{([^}]*)}/g,":host {$1}"),t=t.replace(/\.dark\s*,\s*body\.dark\s*{([^}]*)}/g,":host(.dark) {$1}"),t=t.replace(/\.dark\s*{([^}]*)}/g,":host(.dark) {$1}"),t=t.replace(/body\.dark\s*{([^}]*)}/g,":host(.dark) {$1}"),t=t.replace(/body\s*{([^}]*)}/g,":host {$1}"),t}static getFallbackCSS(){return`
+      ${this.getShadowDOMStyles()}
+      ${this.getCSSVariables()}
+      ${this.getTailwindFallback()}
+    `}static getTailwindFallback(){return`
+      /* Tailwind-like reset */
+      *,
+      ::before,
+      ::after {
+        box-sizing: border-box;
+        border-width: 0;
+        border-style: solid;
+        border-color: hsl(var(--border));
+      }
+
+      /* Display utilities */
+      .flex { display: flex !important; }
+      .grid { display: grid !important; }
+      .block { display: block !important; }
+      .inline-block { display: inline-block !important; }
+      .inline { display: inline !important; }
+      .hidden { display: none !important; }
+      .inline-flex { display: inline-flex !important; }
+
+      /* Sizing utilities */
+      .w-full { width: 100% !important; }
+      .w-8 { width: 2rem !important; }
+      .w-auto { width: auto !important; }
+      .h-full { height: 100% !important; }
+      .h-8 { height: 2rem !important; }
+      .h-auto { height: auto !important; }
+      .min-h-full { min-height: 100% !important; }
+
+      /* Spacing utilities - Padding */
+      .p-0 { padding: 0 !important; }
+      .p-1 { padding: 0.25rem !important; }
+      .p-2 { padding: 0.5rem !important; }
+      .p-4 { padding: 1rem !important; }
+      .p-6 { padding: 1.5rem !important; }
+      .p-8 { padding: 2rem !important; }
+      .px-3 { padding-left: 0.75rem !important; padding-right: 0.75rem !important; }
+      .px-4 { padding-left: 1rem !important; padding-right: 1rem !important; }
+      .px-6 { padding-left: 1.5rem !important; padding-right: 1.5rem !important; }
+      .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; }
+      .py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; }
+      .py-12 { padding-top: 3rem !important; padding-bottom: 3rem !important; }
+
+      /* Spacing utilities - Margin */
+      .m-0 { margin: 0 !important; }
+      .m-1 { margin: 0.25rem !important; }
+      .m-2 { margin: 0.5rem !important; }
+      .m-4 { margin: 1rem !important; }
+      .m-6 { margin: 1.5rem !important; }
+      .m-8 { margin: 2rem !important; }
+      .mb-2 { margin-bottom: 0.5rem !important; }
+      .mb-4 { margin-bottom: 1rem !important; }
+      .mb-5 { margin-bottom: 1.25rem !important; }
+      .mb-6 { margin-bottom: 1.5rem !important; }
+      .mb-8 { margin-bottom: 2rem !important; }
+      .mt-4 { margin-top: 1rem !important; }
+      .mt-5 { margin-top: 1.25rem !important; }
+      .mr-3 { margin-right: 0.75rem !important; }
+
+      /* Typography */
+      .text-sm { font-size: 0.875rem !important; line-height: 1.25rem !important; }
+      .text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
+      .text-lg { font-size: 1.125rem !important; line-height: 1.75rem !important; }
+      .text-xl { font-size: 1.25rem !important; line-height: 1.75rem !important; }
+      .text-2xl { font-size: 1.5rem !important; line-height: 2rem !important; }
+      .text-3xl { font-size: 1.875rem !important; line-height: 2.25rem !important; }
+
+      .font-medium { font-weight: 500 !important; }
+      .font-semibold { font-weight: 600 !important; }
+      .font-bold { font-weight: 700 !important; }
+
+      /* Text colors */
+      .text-white { color: #ffffff !important; }
+      .text-gray-600 { color: hsl(var(--muted-foreground)) !important; }
+      .text-gray-700 { color: hsl(var(--foreground)) !important; }
+      .text-gray-800 { color: hsl(var(--foreground)) !important; }
+      .text-gray-900 { color: hsl(var(--foreground)) !important; }
+
+      /* Background colors */
+      .bg-white { background-color: hsl(var(--background)) !important; }
+      .bg-gray-50 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-100 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-700 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-800 { background-color: hsl(var(--card)) !important; }
+      .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)) !important; }
+
+      /* Gradient colors */
+      .from-purple-600 { --tw-gradient-from: #9333ea !important; --tw-gradient-to: rgb(147 51 234 / 0) !important; --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important; }
+      .to-indigo-600 { --tw-gradient-to: #4f46e5 !important; }
+
+      /* Border utilities */
+      .border { border-width: 1px !important; }
+      .border-b { border-bottom-width: 1px !important; }
+      .border-b-2 { border-bottom-width: 2px !important; }
+      .border-t-lg { border-top-width: 4px !important; }
+      .border-gray-200 { border-color: hsl(var(--border)) !important; }
+      .border-gray-300 { border-color: hsl(var(--border)) !important; }
+      .border-gray-700 { border-color: hsl(var(--border)) !important; }
+      .border-blue-600 { border-color: #2563eb !important; }
+      .border-purple-600 { border-color: #9333ea !important; }
+      .border-transparent { border-color: transparent !important; }
+
+      /* Border radius */
+      .rounded { border-radius: 0.25rem !important; }
+      .rounded-md { border-radius: 0.375rem !important; }
+      .rounded-lg { border-radius: 0.5rem !important; }
+      .rounded-xl { border-radius: 0.75rem !important; }
+      .rounded-2xl { border-radius: 1rem !important; }
+      .rounded-t-lg { border-top-left-radius: 0.5rem !important; border-top-right-radius: 0.5rem !important; }
+      .rounded-full { border-radius: 9999px !important; }
+      .rounded-none { border-radius: 0px !important; }
+
+      /* Box shadow */
+      .shadow { box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1) !important; }
+      .shadow-lg { box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) !important; }
+
+      /* Grid utilities */
+      .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
+      .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
+      .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
+
+      .gap-1 { gap: 0.25rem !important; }
+      .gap-2 { gap: 0.5rem !important; }
+      .gap-4 { gap: 1rem !important; }
+
+      /* Flexbox utilities */
+      .items-center { align-items: center !important; }
+      .items-start { align-items: flex-start !important; }
+      .justify-center { justify-content: center !important; }
+      .justify-between { justify-content: space-between !important; }
+      .justify-start { justify-content: flex-start !important; }
+
+      /* Position utilities */
+      .relative { position: relative !important; }
+      .absolute { position: absolute !important; }
+      .z-50 { z-index: 50 !important; }
+
+      /* Overflow utilities */
+      .overflow-hidden { overflow: hidden !important; }
+      .overflow-auto { overflow: auto !important; }
+
+      /* Cursor utilities */
+      .cursor-pointer { cursor: pointer !important; }
+
+      /* Transition utilities */
+      .transition-all { transition-property: all !important; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important; transition-duration: 150ms !important; }
+      .duration-200 { transition-duration: 200ms !important; }
+
+      /* Hover utilities */
+      .hover\\:bg-gray-50:hover { background-color: hsl(var(--muted)) !important; }
+      .hover\\:bg-gray-700:hover { background-color: hsl(var(--muted)) !important; }
+
+      /* Animation utilities */
+      @keyframes spin {
+        to {
+          transform: rotate(360deg);
+        }
+      }
+      .animate-spin {
+        animation: spin 1s linear infinite !important;
+      }
+
+      /* Dark mode utilities */
+      .dark\\:bg-gray-700 { background-color: hsl(var(--muted)) !important; }
+      .dark\\:bg-gray-800 { background-color: hsl(var(--card)) !important; }
+      .dark\\:border-gray-700 { border-color: hsl(var(--border)) !important; }
+      .dark\\:text-gray-300 { color: hsl(var(--muted-foreground)) !important; }
+      .dark\\:hover\\:bg-gray-700:hover { background-color: hsl(var(--muted)) !important; }
+
+      /* Data attribute utilities for Radix components */
+      [data-state="active"] {
+        background: linear-gradient(to right, #9333ea, #4f46e5) !important;
+        color: white !important;
+        box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) !important;
+        border-bottom: 2px solid #9333ea !important;
+      }
+
+      /* White space utilities */
+      .whitespace-nowrap { white-space: nowrap !important; }
+
+      /* Text alignment */
+      .text-center { text-align: center !important; }
+      .text-left { text-align: left !important; }
+
+      /* Responsive utilities (basic support) */
+      @media (min-width: 640px) {
+        .sm\\:text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
+      }
+    `}}Qg(qP,"cssCache",new Map);var Ad=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Ed=typeof window>"u"||"Deno"in globalThis;function An(){}function Moe(e,t){return typeof e=="function"?e(t):e}function Roe(e){return typeof e=="number"&&e>=0&&e!==1/0}function Ioe(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Sv(e,t){return typeof e=="function"?e(t):e}function Doe(e,t){return typeof e=="function"?e(t):e}function k2(e,t){const{type:n="all",exact:r,fetchStatus:a,predicate:o,queryKey:i,stale:s}=e;if(i){if(r){if(t.queryHash!==Ug(i,t.options))return!1}else if(!mu(t.queryKey,i))return!1}if(n!=="all"){const l=t.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||a&&a!==t.state.fetchStatus||o&&!o(t))}function C2(e,t){const{exact:n,status:r,predicate:a,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(n){if(du(t.options.mutationKey)!==du(o))return!1}else if(!mu(t.options.mutationKey,o))return!1}return!(r&&t.state.status!==r||a&&!a(t))}function Ug(e,t){return((t==null?void 0:t.queryKeyHashFn)||du)(e)}function du(e){return JSON.stringify(e,(t,n)=>Pv(n)?Object.keys(n).sort().reduce((r,a)=>(r[a]=n[a],r),{}):n)}function mu(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>mu(e[n],t[n])):!1}function VP(e,t){if(e===t)return e;const n=_2(e)&&_2(t);if(n||Pv(e)&&Pv(t)){const r=n?e:Object.keys(e),a=r.length,o=n?t:Object.keys(t),i=o.length,s=n?[]:{},l=new Set(r);let u=0;for(let p=0;p<i;p++){const c=n?p:o[p];(!n&&l.has(c)||n)&&e[c]===void 0&&t[c]===void 0?(s[c]=void 0,u++):(s[c]=VP(e[c],t[c]),s[c]===e[c]&&e[c]!==void 0&&u++)}return a===i&&u===a?e:s}return t}function _2(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function Pv(e){if(!A2(e))return!1;const t=e.constructor;if(t===void 0)return!0;const n=t.prototype;return!(!A2(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function A2(e){return Object.prototype.toString.call(e)==="[object Object]"}function Loe(e){return new Promise(t=>{setTimeout(t,e)})}function Foe(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?VP(e,t):t}function zoe(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function Boe(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var Wg=Symbol();function KP(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===Wg?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}var eo,aa,hi,N2,Hoe=(N2=class extends Ad{constructor(){super();me(this,eo);me(this,aa);me(this,hi);ne(this,hi,t=>{if(!Ed&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){B(this,aa)||this.setEventListener(B(this,hi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,aa))==null||t.call(this),ne(this,aa,void 0))}setEventListener(t){var n;ne(this,hi,t),(n=B(this,aa))==null||n.call(this),ne(this,aa,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){B(this,eo)!==t&&(ne(this,eo,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof B(this,eo)=="boolean"?B(this,eo):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},eo=new WeakMap,aa=new WeakMap,hi=new WeakMap,N2),XP=new Hoe,vi,oa,yi,M2,Goe=(M2=class extends Ad{constructor(){super();me(this,vi,!0);me(this,oa);me(this,yi);ne(this,yi,t=>{if(!Ed&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){B(this,oa)||this.setEventListener(B(this,yi))}onUnsubscribe(){var t;this.hasListeners()||((t=B(this,oa))==null||t.call(this),ne(this,oa,void 0))}setEventListener(t){var n;ne(this,yi,t),(n=B(this,oa))==null||n.call(this),ne(this,oa,t(this.setOnline.bind(this)))}setOnline(t){B(this,vi)!==t&&(ne(this,vi,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return B(this,vi)}},vi=new WeakMap,oa=new WeakMap,yi=new WeakMap,M2),vf=new Goe;function Uoe(){let e,t;const n=new Promise((a,o)=>{e=a,t=o});n.status="pending",n.catch(()=>{});function r(a){Object.assign(n,a),delete n.resolve,delete n.reject}return n.resolve=a=>{r({status:"fulfilled",value:a}),e(a)},n.reject=a=>{r({status:"rejected",reason:a}),t(a)},n}function Woe(e){return Math.min(1e3*2**e,3e4)}function YP(e){return(e??"online")==="online"?vf.isOnline():!0}var QP=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function Wm(e){return e instanceof QP}function ZP(e){let t=!1,n=0,r=!1,a;const o=Uoe(),i=m=>{var g;r||(f(new QP(m)),(g=e.abort)==null||g.call(e))},s=()=>{t=!0},l=()=>{t=!1},u=()=>XP.isFocused()&&(e.networkMode==="always"||vf.isOnline())&&e.canRun(),p=()=>YP(e.networkMode)&&e.canRun(),c=m=>{var g;r||(r=!0,(g=e.onSuccess)==null||g.call(e,m),a==null||a(),o.resolve(m))},f=m=>{var g;r||(r=!0,(g=e.onError)==null||g.call(e,m),a==null||a(),o.reject(m))},d=()=>new Promise(m=>{var g;a=v=>{(r||u())&&m(v)},(g=e.onPause)==null||g.call(e)}).then(()=>{var m;a=void 0,r||(m=e.onContinue)==null||m.call(e)}),h=()=>{if(r)return;let m;const g=n===0?e.initialPromise:void 0;try{m=g??e.fn()}catch(v){m=Promise.reject(v)}Promise.resolve(m).then(c).catch(v=>{var P;if(r)return;const y=e.retry??(Ed?0:3),x=e.retryDelay??Woe,S=typeof x=="function"?x(n,v):x,w=y===!0||typeof y=="number"&&n<y||typeof y=="function"&&y(n,v);if(t||!w){f(v);return}n++,(P=e.onFail)==null||P.call(e,n,v),Loe(S).then(()=>u()?void 0:d()).then(()=>{t?f(v):h()})})};return{promise:o,cancel:i,continue:()=>(a==null||a(),o),cancelRetry:s,continueRetry:l,canStart:p,start:()=>(p()?h():d().then(h),o)}}var qoe=e=>setTimeout(e,0);function Voe(){let e=[],t=0,n=s=>{s()},r=s=>{s()},a=qoe;const o=s=>{t?e.push(s):a(()=>{n(s)})},i=()=>{const s=e;e=[],s.length&&a(()=>{r(()=>{s.forEach(l=>{n(l)})})})};return{batch:s=>{let l;t++;try{l=s()}finally{t--,t||i()}return l},batchCalls:s=>(...l)=>{o(()=>{s(...l)})},schedule:o,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{a=s}}}var $t=Voe(),to,R2,JP=(R2=class{constructor(){me(this,to)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Roe(this.gcTime)&&ne(this,to,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Ed?1/0:5*60*1e3))}clearGcTimeout(){B(this,to)&&(clearTimeout(B(this,to)),ne(this,to,void 0))}},to=new WeakMap,R2),gi,no,cn,ro,St,hu,ao,En,xr,I2,Koe=(I2=class extends JP{constructor(t){super();me(this,En);me(this,gi);me(this,no);me(this,cn);me(this,ro);me(this,St);me(this,hu);me(this,ao);ne(this,ao,!1),ne(this,hu,t.defaultOptions),this.setOptions(t.options),this.observers=[],ne(this,ro,t.client),ne(this,cn,B(this,ro).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,ne(this,gi,Yoe(this.options)),this.state=t.state??B(this,gi),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=B(this,St))==null?void 0:t.promise}setOptions(t){this.options={...B(this,hu),...t},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&B(this,cn).remove(this)}setData(t,n){const r=Foe(this.state.data,t,this.options);return gt(this,En,xr).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){gt(this,En,xr).call(this,{type:"setState",state:t,setStateOptions:n})}cancel(t){var r,a;const n=(r=B(this,St))==null?void 0:r.promise;return(a=B(this,St))==null||a.cancel(t),n?n.then(An).catch(An):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(B(this,gi))}isActive(){return this.observers.some(t=>Doe(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Wg||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Sv(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!Ioe(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,St))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=B(this,St))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),B(this,cn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(B(this,St)&&(B(this,ao)?B(this,St).cancel({revert:!0}):B(this,St).cancelRetry()),this.scheduleGc()),B(this,cn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||gt(this,En,xr).call(this,{type:"invalidate"})}fetch(t,n){var u,p,c;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(B(this,St))return B(this,St).continueRetry(),B(this,St).promise}if(t&&this.setOptions(t),!this.options.queryFn){const f=this.observers.find(d=>d.options.queryFn);f&&this.setOptions(f.options)}const r=new AbortController,a=f=>{Object.defineProperty(f,"signal",{enumerable:!0,get:()=>(ne(this,ao,!0),r.signal)})},o=()=>{const f=KP(this.options,n),h=(()=>{const m={client:B(this,ro),queryKey:this.queryKey,meta:this.meta};return a(m),m})();return ne(this,ao,!1),this.options.persister?this.options.persister(f,h,this):f(h)},s=(()=>{const f={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:B(this,ro),state:this.state,fetchFn:o};return a(f),f})();(u=this.options.behavior)==null||u.onFetch(s,this),ne(this,no,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((p=s.fetchOptions)==null?void 0:p.meta))&&gt(this,En,xr).call(this,{type:"fetch",meta:(c=s.fetchOptions)==null?void 0:c.meta});const l=f=>{var d,h,m,g;Wm(f)&&f.silent||gt(this,En,xr).call(this,{type:"error",error:f}),Wm(f)||((h=(d=B(this,cn).config).onError)==null||h.call(d,f,this),(g=(m=B(this,cn).config).onSettled)==null||g.call(m,this.state.data,f,this)),this.scheduleGc()};return ne(this,St,ZP({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,abort:r.abort.bind(r),onSuccess:f=>{var d,h,m,g;if(f===void 0){l(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(f)}catch(v){l(v);return}(h=(d=B(this,cn).config).onSuccess)==null||h.call(d,f,this),(g=(m=B(this,cn).config).onSettled)==null||g.call(m,f,this.state.error,this),this.scheduleGc()},onError:l,onFail:(f,d)=>{gt(this,En,xr).call(this,{type:"failed",failureCount:f,error:d})},onPause:()=>{gt(this,En,xr).call(this,{type:"pause"})},onContinue:()=>{gt(this,En,xr).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0})),B(this,St).start()}},gi=new WeakMap,no=new WeakMap,cn=new WeakMap,ro=new WeakMap,St=new WeakMap,hu=new WeakMap,ao=new WeakMap,En=new WeakSet,xr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Xoe(r.data,this.options),fetchMeta:t.meta??null};case"success":return ne(this,no,void 0),{...r,data:t.data,dataUpdateCount:r.dataUpdateCount+1,dataUpdatedAt:t.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const a=t.error;return Wm(a)&&a.revert&&B(this,no)?{...B(this,no),fetchStatus:"idle"}:{...r,error:a,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:a,fetchStatus:"idle",status:"error"};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),$t.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),B(this,cn).notify({query:this,type:"updated",action:t})})},I2);function Xoe(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:YP(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function Yoe(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Qn,D2,Qoe=(D2=class extends Ad{constructor(t={}){super();me(this,Qn);this.config=t,ne(this,Qn,new Map)}build(t,n,r){const a=n.queryKey,o=n.queryHash??Ug(a,n);let i=this.get(o);return i||(i=new Koe({client:t,queryKey:a,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(a)}),this.add(i)),i}add(t){B(this,Qn).has(t.queryHash)||(B(this,Qn).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=B(this,Qn).get(t.queryHash);n&&(t.destroy(),n===t&&B(this,Qn).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){$t.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return B(this,Qn).get(t)}getAll(){return[...B(this,Qn).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>k2(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>k2(t,r)):n}notify(t){$t.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){$t.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){$t.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Qn=new WeakMap,D2),Zn,Tt,oo,Jn,Qr,L2,Zoe=(L2=class extends JP{constructor(t){super();me(this,Jn);me(this,Zn);me(this,Tt);me(this,oo);this.mutationId=t.mutationId,ne(this,Tt,t.mutationCache),ne(this,Zn,[]),this.state=t.state||Joe(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){B(this,Zn).includes(t)||(B(this,Zn).push(t),this.clearGcTimeout(),B(this,Tt).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){ne(this,Zn,B(this,Zn).filter(n=>n!==t)),this.scheduleGc(),B(this,Tt).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){B(this,Zn).length||(this.state.status==="pending"?this.scheduleGc():B(this,Tt).remove(this))}continue(){var t;return((t=B(this,oo))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var o,i,s,l,u,p,c,f,d,h,m,g,v,y,x,S,w,P,O,C;const n=()=>{gt(this,Jn,Qr).call(this,{type:"continue"})};ne(this,oo,ZP({fn:()=>this.options.mutationFn?this.options.mutationFn(t):Promise.reject(new Error("No mutationFn found")),onFail:(_,T)=>{gt(this,Jn,Qr).call(this,{type:"failed",failureCount:_,error:T})},onPause:()=>{gt(this,Jn,Qr).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>B(this,Tt).canRun(this)}));const r=this.state.status==="pending",a=!B(this,oo).canStart();try{if(r)n();else{gt(this,Jn,Qr).call(this,{type:"pending",variables:t,isPaused:a}),await((i=(o=B(this,Tt).config).onMutate)==null?void 0:i.call(o,t,this));const T=await((l=(s=this.options).onMutate)==null?void 0:l.call(s,t));T!==this.state.context&&gt(this,Jn,Qr).call(this,{type:"pending",context:T,variables:t,isPaused:a})}const _=await B(this,oo).start();return await((p=(u=B(this,Tt).config).onSuccess)==null?void 0:p.call(u,_,t,this.state.context,this)),await((f=(c=this.options).onSuccess)==null?void 0:f.call(c,_,t,this.state.context)),await((h=(d=B(this,Tt).config).onSettled)==null?void 0:h.call(d,_,null,this.state.variables,this.state.context,this)),await((g=(m=this.options).onSettled)==null?void 0:g.call(m,_,null,t,this.state.context)),gt(this,Jn,Qr).call(this,{type:"success",data:_}),_}catch(_){try{throw await((y=(v=B(this,Tt).config).onError)==null?void 0:y.call(v,_,t,this.state.context,this)),await((S=(x=this.options).onError)==null?void 0:S.call(x,_,t,this.state.context)),await((P=(w=B(this,Tt).config).onSettled)==null?void 0:P.call(w,void 0,_,this.state.variables,this.state.context,this)),await((C=(O=this.options).onSettled)==null?void 0:C.call(O,void 0,_,t,this.state.context)),_}finally{gt(this,Jn,Qr).call(this,{type:"error",error:_})}}finally{B(this,Tt).runNext(this)}}},Zn=new WeakMap,Tt=new WeakMap,oo=new WeakMap,Jn=new WeakSet,Qr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),$t.batch(()=>{B(this,Zn).forEach(r=>{r.onMutationUpdate(t)}),B(this,Tt).notify({mutation:this,type:"updated",action:t})})},L2);function Joe(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Sr,Tn,vu,F2,eie=(F2=class extends Ad{constructor(t={}){super();me(this,Sr);me(this,Tn);me(this,vu);this.config=t,ne(this,Sr,new Set),ne(this,Tn,new Map),ne(this,vu,0)}build(t,n,r){const a=new Zoe({mutationCache:this,mutationId:++Nu(this,vu)._,options:t.defaultMutationOptions(n),state:r});return this.add(a),a}add(t){B(this,Sr).add(t);const n=gc(t);if(typeof n=="string"){const r=B(this,Tn).get(n);r?r.push(t):B(this,Tn).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(B(this,Sr).delete(t)){const n=gc(t);if(typeof n=="string"){const r=B(this,Tn).get(n);if(r)if(r.length>1){const a=r.indexOf(t);a!==-1&&r.splice(a,1)}else r[0]===t&&B(this,Tn).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=gc(t);if(typeof n=="string"){const r=B(this,Tn).get(n),a=r==null?void 0:r.find(o=>o.state.status==="pending");return!a||a===t}else return!0}runNext(t){var r;const n=gc(t);if(typeof n=="string"){const a=(r=B(this,Tn).get(n))==null?void 0:r.find(o=>o!==t&&o.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){$t.batch(()=>{B(this,Sr).forEach(t=>{this.notify({type:"removed",mutation:t})}),B(this,Sr).clear(),B(this,Tn).clear()})}getAll(){return Array.from(B(this,Sr))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>C2(n,r))}findAll(t={}){return this.getAll().filter(n=>C2(t,n))}notify(t){$t.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return $t.batch(()=>Promise.all(t.map(n=>n.continue().catch(An))))}},Sr=new WeakMap,Tn=new WeakMap,vu=new WeakMap,F2);function gc(e){var t;return(t=e.options.scope)==null?void 0:t.id}function E2(e){return{onFetch:(t,n)=>{var p,c,f,d,h;const r=t.options,a=(f=(c=(p=t.fetchOptions)==null?void 0:p.meta)==null?void 0:c.fetchMore)==null?void 0:f.direction,o=((d=t.state.data)==null?void 0:d.pages)||[],i=((h=t.state.data)==null?void 0:h.pageParams)||[];let s={pages:[],pageParams:[]},l=0;const u=async()=>{let m=!1;const g=x=>{Object.defineProperty(x,"signal",{enumerable:!0,get:()=>(t.signal.aborted?m=!0:t.signal.addEventListener("abort",()=>{m=!0}),t.signal)})},v=KP(t.options,t.fetchOptions),y=async(x,S,w)=>{if(m)return Promise.reject();if(S==null&&x.pages.length)return Promise.resolve(x);const O=(()=>{const A={client:t.client,queryKey:t.queryKey,pageParam:S,direction:w?"backward":"forward",meta:t.options.meta};return g(A),A})(),C=await v(O),{maxPages:_}=t.options,T=w?Boe:zoe;return{pages:T(x.pages,C,_),pageParams:T(x.pageParams,S,_)}};if(a&&o.length){const x=a==="backward",S=x?tie:T2,w={pages:o,pageParams:i},P=S(r,w);s=await y(w,P,x)}else{const x=e??o.length;do{const S=l===0?i[0]??r.initialPageParam:T2(r,s);if(l>0&&S==null)break;s=await y(s,S),l++}while(l<x)}return s};t.options.persister?t.fetchFn=()=>{var m,g;return(g=(m=t.options).persister)==null?void 0:g.call(m,u,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=u}}}function T2(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function tie(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var We,ia,sa,xi,wi,la,bi,Si,z2,nie=(z2=class{constructor(e={}){me(this,We);me(this,ia);me(this,sa);me(this,xi);me(this,wi);me(this,la);me(this,bi);me(this,Si);ne(this,We,e.queryCache||new Qoe),ne(this,ia,e.mutationCache||new eie),ne(this,sa,e.defaultOptions||{}),ne(this,xi,new Map),ne(this,wi,new Map),ne(this,la,0)}mount(){Nu(this,la)._++,B(this,la)===1&&(ne(this,bi,XP.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onFocus())})),ne(this,Si,vf.subscribe(async e=>{e&&(await this.resumePausedMutations(),B(this,We).onOnline())})))}unmount(){var e,t;Nu(this,la)._--,B(this,la)===0&&((e=B(this,bi))==null||e.call(this),ne(this,bi,void 0),(t=B(this,Si))==null||t.call(this),ne(this,Si,void 0))}isFetching(e){return B(this,We).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return B(this,ia).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=B(this,We).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Sv(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return B(this,We).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),a=B(this,We).get(r.queryHash),o=a==null?void 0:a.state.data,i=Moe(t,o);if(i!==void 0)return B(this,We).build(this,r).setData(i,{...n,manual:!0})}setQueriesData(e,t,n){return $t.batch(()=>B(this,We).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=B(this,We).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=B(this,We);$t.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=B(this,We);return $t.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=$t.batch(()=>B(this,We).findAll(e).map(a=>a.cancel(n)));return Promise.all(r).then(An).catch(An)}invalidateQueries(e,t={}){return $t.batch(()=>(B(this,We).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=$t.batch(()=>B(this,We).findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let o=a.fetch(void 0,n);return n.throwOnError||(o=o.catch(An)),a.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(An)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=B(this,We).build(this,t);return n.isStaleByTime(Sv(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(An).catch(An)}fetchInfiniteQuery(e){return e.behavior=E2(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(An).catch(An)}ensureInfiniteQueryData(e){return e.behavior=E2(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return vf.isOnline()?B(this,ia).resumePausedMutations():Promise.resolve()}getQueryCache(){return B(this,We)}getMutationCache(){return B(this,ia)}getDefaultOptions(){return B(this,sa)}setDefaultOptions(e){ne(this,sa,e)}setQueryDefaults(e,t){B(this,xi).set(du(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...B(this,xi).values()],n={};return t.forEach(r=>{mu(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){B(this,wi).set(du(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...B(this,wi).values()],n={};return t.forEach(r=>{mu(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...B(this,sa).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=Ug(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===Wg&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...B(this,sa).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){B(this,We).clear(),B(this,ia).clear()}},We=new WeakMap,ia=new WeakMap,sa=new WeakMap,xi=new WeakMap,wi=new WeakMap,la=new WeakMap,bi=new WeakMap,Si=new WeakMap,z2),rie=k.createContext(void 0),aie=({client:e,children:t})=>(k.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),b.jsx(rie.Provider,{value:e,children:t})),[Td,Eie]=is("Tooltip",[If]),qg=If(),eO="TooltipProvider",oie=700,j2="tooltip.open",[iie,tO]=Td(eO),nO=e=>{const{__scopeTooltip:t,delayDuration:n=oie,skipDelayDuration:r=300,disableHoverableContent:a=!1,children:o}=e,i=k.useRef(!0),s=k.useRef(!1),l=k.useRef(0);return k.useEffect(()=>{const u=l.current;return()=>window.clearTimeout(u)},[]),b.jsx(iie,{scope:t,isOpenDelayedRef:i,delayDuration:n,onOpen:k.useCallback(()=>{window.clearTimeout(l.current),i.current=!1},[]),onClose:k.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(()=>i.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:k.useCallback(u=>{s.current=u},[]),disableHoverableContent:a,children:o})};nO.displayName=eO;var rO="Tooltip",[Tie,jd]=Td(rO),Ov="TooltipTrigger",sie=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=jd(Ov,n),o=tO(Ov,n),i=qg(n),s=k.useRef(null),l=Ye(t,s,a.onTriggerChange),u=k.useRef(!1),p=k.useRef(!1),c=k.useCallback(()=>u.current=!1,[]);return k.useEffect(()=>()=>document.removeEventListener("pointerup",c),[c]),b.jsx(_6,{asChild:!0,...i,children:b.jsx(Ae.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:l,onPointerMove:fe(e.onPointerMove,f=>{f.pointerType!=="touch"&&!p.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),p.current=!0)}),onPointerLeave:fe(e.onPointerLeave,()=>{a.onTriggerLeave(),p.current=!1}),onPointerDown:fe(e.onPointerDown,()=>{a.open&&a.onClose(),u.current=!0,document.addEventListener("pointerup",c,{once:!0})}),onFocus:fe(e.onFocus,()=>{u.current||a.onOpen()}),onBlur:fe(e.onBlur,a.onClose),onClick:fe(e.onClick,a.onClose)})})});sie.displayName=Ov;var lie="TooltipPortal",[jie,uie]=Td(lie,{forceMount:void 0}),ts="TooltipContent",aO=k.forwardRef((e,t)=>{const n=uie(ts,e.__scopeTooltip),{forceMount:r=n.forceMount,side:a="top",...o}=e,i=jd(ts,e.__scopeTooltip);return b.jsx(Bg,{present:r||i.open,children:i.disableHoverableContent?b.jsx(oO,{side:a,...o,ref:t}):b.jsx(cie,{side:a,...o,ref:t})})}),cie=k.forwardRef((e,t)=>{const n=jd(ts,e.__scopeTooltip),r=tO(ts,e.__scopeTooltip),a=k.useRef(null),o=Ye(t,a),[i,s]=k.useState(null),{trigger:l,onClose:u}=n,p=a.current,{onPointerInTransitChange:c}=r,f=k.useCallback(()=>{s(null),c(!1)},[c]),d=k.useCallback((h,m)=>{const g=h.currentTarget,v={x:h.clientX,y:h.clientY},y=hie(v,g.getBoundingClientRect()),x=vie(v,y),S=yie(m.getBoundingClientRect()),w=xie([...x,...S]);s(w),c(!0)},[c]);return k.useEffect(()=>()=>f(),[f]),k.useEffect(()=>{if(l&&p){const h=g=>d(g,p),m=g=>d(g,l);return l.addEventListener("pointerleave",h),p.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",h),p.removeEventListener("pointerleave",m)}}},[l,p,d,f]),k.useEffect(()=>{if(i){const h=m=>{const g=m.target,v={x:m.clientX,y:m.clientY},y=(l==null?void 0:l.contains(g))||(p==null?void 0:p.contains(g)),x=!gie(v,i);y?f():x&&(f(),u())};return document.addEventListener("pointermove",h),()=>document.removeEventListener("pointermove",h)}},[l,p,i,u,f]),b.jsx(oO,{...e,ref:o})}),[pie,fie]=Td(rO,{isInside:!1}),die=zC("TooltipContent"),oO=k.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:i,...s}=e,l=jd(ts,n),u=qg(n),{onClose:p}=l;return k.useEffect(()=>(document.addEventListener(j2,p),()=>document.removeEventListener(j2,p)),[p]),k.useEffect(()=>{if(l.trigger){const c=f=>{const d=f.target;d!=null&&d.contains(l.trigger)&&p()};return window.addEventListener("scroll",c,{capture:!0}),()=>window.removeEventListener("scroll",c,{capture:!0})}},[l.trigger,p]),b.jsx(wy,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:c=>c.preventDefault(),onDismiss:p,children:b.jsxs(A6,{"data-state":l.stateAttribute,...u,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[b.jsx(die,{children:r}),b.jsx(pie,{scope:n,isInside:!0,children:b.jsx(CA,{id:l.contentId,role:"tooltip",children:a||r})})]})})});aO.displayName=ts;var iO="TooltipArrow",mie=k.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=qg(n);return fie(iO,n).isInside?null:b.jsx(E6,{...a,...r,ref:t})});mie.displayName=iO;function hie(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(n,r,a,o)){case o:return"left";case a:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function vie(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function yie(e){const{top:t,right:n,bottom:r,left:a}=e;return[{x:a,y:t},{x:n,y:t},{x:n,y:r},{x:a,y:r}]}function gie(e,t){const{x:n,y:r}=e;let a=!1;for(let o=0,i=t.length-1;o<t.length;i=o++){const s=t[o],l=t[i],u=s.x,p=s.y,c=l.x,f=l.y;p>r!=f>r&&n<(c-u)*(r-p)/(f-p)+u&&(a=!a)}return a}function xie(e){const t=e.slice();return t.sort((n,r)=>n.x<r.x?-1:n.x>r.x?1:n.y<r.y?-1:n.y>r.y?1:0),wie(t)}function wie(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r<e.length;r++){const a=e[r];for(;t.length>=2;){const o=t[t.length-1],i=t[t.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))t.pop();else break}t.push(a)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const a=e[r];for(;n.length>=2;){const o=n[n.length-1],i=n[n.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))n.pop();else break}n.push(a)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var bie=nO,sO=aO;const Sie=bie,Pie=k.forwardRef(({className:e,sideOffset:t=4,...n},r)=>b.jsx(sO,{ref:r,sideOffset:t,className:Pe("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n}));Pie.displayName=sO.displayName;const Oie=e=>{const t=k.useRef(null),n=k.useRef(null),r=k.useRef(null);return k.useEffect(()=>{if(t.current){try{const a=t.current.attachShadow({mode:"open"});n.current=a;const o=document.createElement("div");o.id="shadow-root",o.className="benchmark-dashboard",a.appendChild(o),qP.getAllCSS().then(i=>{const s=document.createElement("style");s.textContent=i,a.insertBefore(s,o);const l=Ic.createRoot(o);r.current=l,l.render(b.jsx(E.StrictMode,{children:b.jsx(aie,{client:new nie,children:b.jsx(Sie,{children:b.jsx(Noe,{...e})})})}))}).catch(i=>{console.error("Failed to inject CSS into Shadow DOM:",i)})}catch(a){console.error("Failed to create Shadow DOM:",a)}return()=>{r.current&&r.current.unmount()}}},[]),b.jsx("div",{ref:t,style:{width:"100%",minHeight:"400px"}})},kie=`*, ::before, ::after {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-gradient-from-position:  ;
+  --tw-gradient-via-position:  ;
+  --tw-gradient-to-position:  ;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+  --tw-contain-size:  ;
+  --tw-contain-layout:  ;
+  --tw-contain-paint:  ;
+  --tw-contain-style:  ;
+}
+
+::backdrop {
+  --tw-border-spacing-x: 0;
+  --tw-border-spacing-y: 0;
+  --tw-translate-x: 0;
+  --tw-translate-y: 0;
+  --tw-rotate: 0;
+  --tw-skew-x: 0;
+  --tw-skew-y: 0;
+  --tw-scale-x: 1;
+  --tw-scale-y: 1;
+  --tw-pan-x:  ;
+  --tw-pan-y:  ;
+  --tw-pinch-zoom:  ;
+  --tw-scroll-snap-strictness: proximity;
+  --tw-gradient-from-position:  ;
+  --tw-gradient-via-position:  ;
+  --tw-gradient-to-position:  ;
+  --tw-ordinal:  ;
+  --tw-slashed-zero:  ;
+  --tw-numeric-figure:  ;
+  --tw-numeric-spacing:  ;
+  --tw-numeric-fraction:  ;
+  --tw-ring-inset:  ;
+  --tw-ring-offset-width: 0px;
+  --tw-ring-offset-color: #fff;
+  --tw-ring-color: rgb(59 130 246 / 0.5);
+  --tw-ring-offset-shadow: 0 0 #0000;
+  --tw-ring-shadow: 0 0 #0000;
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  --tw-blur:  ;
+  --tw-brightness:  ;
+  --tw-contrast:  ;
+  --tw-grayscale:  ;
+  --tw-hue-rotate:  ;
+  --tw-invert:  ;
+  --tw-saturate:  ;
+  --tw-sepia:  ;
+  --tw-drop-shadow:  ;
+  --tw-backdrop-blur:  ;
+  --tw-backdrop-brightness:  ;
+  --tw-backdrop-contrast:  ;
+  --tw-backdrop-grayscale:  ;
+  --tw-backdrop-hue-rotate:  ;
+  --tw-backdrop-invert:  ;
+  --tw-backdrop-opacity:  ;
+  --tw-backdrop-saturate:  ;
+  --tw-backdrop-sepia:  ;
+  --tw-contain-size:  ;
+  --tw-contain-layout:  ;
+  --tw-contain-paint:  ;
+  --tw-contain-style:  ;
+}
+
+:root {
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 84% 4.9%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+  --sidebar-background: 0 0% 98%;
+  --sidebar-foreground: 240 5.3% 26.1%;
+  --sidebar-primary: 240 5.9% 10%;
+  --sidebar-primary-foreground: 0 0% 98%;
+  --sidebar-accent: 240 4.8% 95.9%;
+  --sidebar-accent-foreground: 240 5.9% 10%;
+  --sidebar-border: 220 13% 91%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+body {
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --card: 0 0% 100%;
+  --card-foreground: 222.2 84% 4.9%;
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 214.3 31.8% 91.4%;
+  --input: 214.3 31.8% 91.4%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+  --sidebar-background: 0 0% 98%;
+  --sidebar-foreground: 240 5.3% 26.1%;
+  --sidebar-primary: 240 5.9% 10%;
+  --sidebar-primary-foreground: 0 0% 98%;
+  --sidebar-accent: 240 4.8% 95.9%;
+  --sidebar-accent-foreground: 240 5.9% 10%;
+  --sidebar-border: 220 13% 91%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+.dark, body.dark {
+  --background: 222.2 84% 4.9%;
+  --foreground: 210 40% 98%;
+  --card: 222.2 84% 4.9%;
+  --card-foreground: 210 40% 98%;
+  --popover: 222.2 84% 4.9%;
+  --popover-foreground: 210 40% 98%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 217.2 32.6% 17.5%;
+  --secondary-foreground: 210 40% 98%;
+  --muted: 217.2 32.6% 17.5%;
+  --muted-foreground: 215 20.2% 65.1%;
+  --accent: 217.2 32.6% 17.5%;
+  --accent-foreground: 210 40% 98%;
+  --destructive: 0 62.8% 30.6%;
+  --destructive-foreground: 210 40% 98%;
+  --border: 217.2 32.6% 17.5%;
+  --input: 217.2 32.6% 17.5%;
+  --ring: 212.7 26.8% 83.9%;
+  --sidebar-background: 240 5.9% 10%;
+  --sidebar-foreground: 240 4.8% 95.9%;
+  --sidebar-primary: 224.3 76.3% 48%;
+  --sidebar-primary-foreground: 0 0% 100%;
+  --sidebar-accent: 240 3.7% 15.9%;
+  --sidebar-accent-foreground: 240 4.8% 95.9%;
+  --sidebar-border: 240 3.7% 15.9%;
+  --sidebar-ring: 217.2 91.2% 59.8%;
+}
+
+* {
+  border-color: hsl(var(--border));
+}
+
+body {
+  background-color: hsl(var(--background));
+  color: hsl(var(--foreground));
+}
+
+.container {
+  width: 100%;
+  margin-right: auto;
+  margin-left: auto;
+  padding-right: 2rem;
+  padding-left: 2rem;
+}
+
+@media (min-width: 1400px) {
+  .container {
+    max-width: 1400px;
+  }
+}
+
+/* Radix popper content wrapper styling - these elements are rendered via React portals */
+
+[data-radix-popper-content-wrapper] {
+  /* Ensure high z-index for proper layering */
+  z-index: 9999 !important;
+  /* Apply CSS variables that should be inherited from the document */
+  --popover: 0 0% 100%;
+  --popover-foreground: 222.2 84% 4.9%;
+  --border: 214.3 31.8% 91.4%;
+  --background: 0 0% 100%;
+  --foreground: 222.2 84% 4.9%;
+  --muted: 210 40% 96.1%;
+  --muted-foreground: 215.4 16.3% 46.9%;
+  --accent: 210 40% 96.1%;
+  --accent-foreground: 222.2 47.4% 11.2%;
+  --destructive: 0 84.2% 60.2%;
+  --destructive-foreground: 210 40% 98%;
+  --primary: 222.2 47.4% 11.2%;
+  --primary-foreground: 210 40% 98%;
+  --secondary: 210 40% 96.1%;
+  --secondary-foreground: 222.2 47.4% 11.2%;
+  --ring: 222.2 84% 4.9%;
+  --radius: 0.5rem;
+}
+
+/* Dark mode support for portals */
+
+.dark [data-radix-popper-content-wrapper],
+  body.dark [data-radix-popper-content-wrapper] {
+  --popover: 222.2 84% 4.9%;
+  --popover-foreground: 210 40% 98%;
+  --border: 217.2 32.6% 17.5%;
+  --background: 222.2 84% 4.9%;
+  --foreground: 210 40% 98%;
+  --muted: 217.2 32.6% 17.5%;
+  --muted-foreground: 215 20.2% 65.1%;
+  --accent: 217.2 32.6% 17.5%;
+  --accent-foreground: 210 40% 98%;
+  --destructive: 0 62.8% 30.6%;
+  --destructive-foreground: 210 40% 98%;
+  --primary: 210 40% 98%;
+  --primary-foreground: 222.2 47.4% 11.2%;
+  --secondary: 217.2 32.6% 17.5%;
+  --secondary-foreground: 210 40% 98%;
+  --ring: 212.7 26.8% 83.9%;
+}
+
+/* Ensure portal content gets proper styling */
+
+[data-radix-popper-content-wrapper] .bg-popover {
+  background-color: hsl(var(--popover)) !important;
+}
+
+[data-radix-popper-content-wrapper] .text-popover-foreground {
+  color: hsl(var(--popover-foreground)) !important;
+}
+
+[data-radix-popper-content-wrapper] .border {
+  border-color: hsl(var(--border)) !important;
+}
+
+[data-radix-popper-content-wrapper] .shadow-md {
+  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+}
+
+[data-radix-popper-content-wrapper] .rounded-md {
+  border-radius: calc(var(--radius) - 2px) !important;
+}
+
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  padding: 0;
+  margin: -1px;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  white-space: nowrap;
+  border-width: 0;
+}
+
+.not-sr-only {
+  position: static;
+  width: auto;
+  height: auto;
+  padding: 0;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+  white-space: normal;
+}
+
+.pointer-events-none {
+  pointer-events: none;
+}
+
+.pointer-events-auto {
+  pointer-events: auto;
+}
+
+.visible {
+  visibility: visible;
+}
+
+.invisible {
+  visibility: hidden;
+}
+
+.static {
+  position: static;
+}
+
+.fixed {
+  position: fixed;
+}
+
+.absolute {
+  position: absolute;
+}
+
+.relative {
+  position: relative;
+}
+
+.sticky {
+  position: sticky;
+}
+
+.inset-0 {
+  inset: 0px;
+}
+
+.inset-x-0 {
+  left: 0px;
+  right: 0px;
+}
+
+.inset-y-0 {
+  top: 0px;
+  bottom: 0px;
+}
+
+.-bottom-12 {
+  bottom: -3rem;
+}
+
+.-left-12 {
+  left: -3rem;
+}
+
+.-right-12 {
+  right: -3rem;
+}
+
+.-top-12 {
+  top: -3rem;
+}
+
+.bottom-0 {
+  bottom: 0px;
+}
+
+.bottom-8 {
+  bottom: 2rem;
+}
+
+.left-0 {
+  left: 0px;
+}
+
+.left-1 {
+  left: 0.25rem;
+}
+
+.left-1\\/2 {
+  left: 50%;
+}
+
+.left-2 {
+  left: 0.5rem;
+}
+
+.left-4 {
+  left: 1rem;
+}
+
+.left-\\[50\\%\\] {
+  left: 50%;
+}
+
+.right-0 {
+  right: 0px;
+}
+
+.right-1 {
+  right: 0.25rem;
+}
+
+.right-2 {
+  right: 0.5rem;
+}
+
+.right-3 {
+  right: 0.75rem;
+}
+
+.right-4 {
+  right: 1rem;
+}
+
+.top-0 {
+  top: 0px;
+}
+
+.top-1\\.5 {
+  top: 0.375rem;
+}
+
+.top-1\\/2 {
+  top: 50%;
+}
+
+.top-2 {
+  top: 0.5rem;
+}
+
+.top-3\\.5 {
+  top: 0.875rem;
+}
+
+.top-4 {
+  top: 1rem;
+}
+
+.top-\\[1px\\] {
+  top: 1px;
+}
+
+.top-\\[50\\%\\] {
+  top: 50%;
+}
+
+.top-\\[60\\%\\] {
+  top: 60%;
+}
+
+.top-full {
+  top: 100%;
+}
+
+.z-10 {
+  z-index: 10;
+}
+
+.z-20 {
+  z-index: 20;
+}
+
+.z-50 {
+  z-index: 50;
+}
+
+.z-\\[100\\] {
+  z-index: 100;
+}
+
+.z-\\[1\\] {
+  z-index: 1;
+}
+
+.m-0 {
+  margin: 0px;
+}
+
+.m-1 {
+  margin: 0.25rem;
+}
+
+.m-2 {
+  margin: 0.5rem;
+}
+
+.m-4 {
+  margin: 1rem;
+}
+
+.m-6 {
+  margin: 1.5rem;
+}
+
+.m-8 {
+  margin: 2rem;
+}
+
+.-mx-1 {
+  margin-left: -0.25rem;
+  margin-right: -0.25rem;
+}
+
+.mx-1 {
+  margin-left: 0.25rem;
+  margin-right: 0.25rem;
+}
+
+.mx-2 {
+  margin-left: 0.5rem;
+  margin-right: 0.5rem;
+}
+
+.mx-3\\.5 {
+  margin-left: 0.875rem;
+  margin-right: 0.875rem;
+}
+
+.mx-auto {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.my-0\\.5 {
+  margin-top: 0.125rem;
+  margin-bottom: 0.125rem;
+}
+
+.my-1 {
+  margin-top: 0.25rem;
+  margin-bottom: 0.25rem;
+}
+
+.-ml-4 {
+  margin-left: -1rem;
+}
+
+.-mt-4 {
+  margin-top: -1rem;
+}
+
+.mb-1 {
+  margin-bottom: 0.25rem;
+}
+
+.mb-10 {
+  margin-bottom: 2.5rem;
+}
+
+.mb-12 {
+  margin-bottom: 3rem;
+}
+
+.mb-2 {
+  margin-bottom: 0.5rem;
+}
+
+.mb-3 {
+  margin-bottom: 0.75rem;
+}
+
+.mb-4 {
+  margin-bottom: 1rem;
+}
+
+.mb-5 {
+  margin-bottom: 1.25rem;
+}
+
+.mb-6 {
+  margin-bottom: 1.5rem;
+}
+
+.mb-8 {
+  margin-bottom: 2rem;
+}
+
+.ml-1 {
+  margin-left: 0.25rem;
+}
+
+.ml-3 {
+  margin-left: 0.75rem;
+}
+
+.ml-6 {
+  margin-left: 1.5rem;
+}
+
+.ml-auto {
+  margin-left: auto;
+}
+
+.mr-0 {
+  margin-right: 0px;
+}
+
+.mr-2 {
+  margin-right: 0.5rem;
+}
+
+.mr-3 {
+  margin-right: 0.75rem;
+}
+
+.mr-4 {
+  margin-right: 1rem;
+}
+
+.mt-0\\.5 {
+  margin-top: 0.125rem;
+}
+
+.mt-1 {
+  margin-top: 0.25rem;
+}
+
+.mt-1\\.5 {
+  margin-top: 0.375rem;
+}
+
+.mt-2 {
+  margin-top: 0.5rem;
+}
+
+.mt-24 {
+  margin-top: 6rem;
+}
+
+.mt-3 {
+  margin-top: 0.75rem;
+}
+
+.mt-4 {
+  margin-top: 1rem;
+}
+
+.mt-5 {
+  margin-top: 1.25rem;
+}
+
+.mt-6 {
+  margin-top: 1.5rem;
+}
+
+.mt-8 {
+  margin-top: 2rem;
+}
+
+.mt-auto {
+  margin-top: auto;
+}
+
+.block {
+  display: block;
+}
+
+.inline-block {
+  display: inline-block;
+}
+
+.inline {
+  display: inline;
+}
+
+.flex {
+  display: flex;
+}
+
+.inline-flex {
+  display: inline-flex;
+}
+
+.table {
+  display: table;
+}
+
+.grid {
+  display: grid;
+}
+
+.hidden {
+  display: none;
+}
+
+.aspect-square {
+  aspect-ratio: 1 / 1;
+}
+
+.aspect-video {
+  aspect-ratio: 16 / 9;
+}
+
+.size-4 {
+  width: 1rem;
+  height: 1rem;
+}
+
+.h-1\\.5 {
+  height: 0.375rem;
+}
+
+.h-10 {
+  height: 2.5rem;
+}
+
+.h-11 {
+  height: 2.75rem;
+}
+
+.h-12 {
+  height: 3rem;
+}
+
+.h-2 {
+  height: 0.5rem;
+}
+
+.h-2\\.5 {
+  height: 0.625rem;
+}
+
+.h-3 {
+  height: 0.75rem;
+}
+
+.h-3\\.5 {
+  height: 0.875rem;
+}
+
+.h-4 {
+  height: 1rem;
+}
+
+.h-5 {
+  height: 1.25rem;
+}
+
+.h-6 {
+  height: 1.5rem;
+}
+
+.h-7 {
+  height: 1.75rem;
+}
+
+.h-8 {
+  height: 2rem;
+}
+
+.h-9 {
+  height: 2.25rem;
+}
+
+.h-\\[1px\\] {
+  height: 1px;
+}
+
+.h-\\[var\\(--radix-navigation-menu-viewport-height\\)\\] {
+  height: var(--radix-navigation-menu-viewport-height);
+}
+
+.h-\\[var\\(--radix-select-trigger-height\\)\\] {
+  height: var(--radix-select-trigger-height);
+}
+
+.h-auto {
+  height: auto;
+}
+
+.h-full {
+  height: 100%;
+}
+
+.h-px {
+  height: 1px;
+}
+
+.h-svh {
+  height: 100svh;
+}
+
+.max-h-96 {
+  max-height: 24rem;
+}
+
+.max-h-\\[300px\\] {
+  max-height: 300px;
+}
+
+.max-h-screen {
+  max-height: 100vh;
+}
+
+.min-h-0 {
+  min-height: 0px;
+}
+
+.min-h-\\[400px\\] {
+  min-height: 400px;
+}
+
+.min-h-\\[80px\\] {
+  min-height: 80px;
+}
+
+.min-h-full {
+  min-height: 100%;
+}
+
+.min-h-svh {
+  min-height: 100svh;
+}
+
+.w-0 {
+  width: 0px;
+}
+
+.w-1 {
+  width: 0.25rem;
+}
+
+.w-10 {
+  width: 2.5rem;
+}
+
+.w-11 {
+  width: 2.75rem;
+}
+
+.w-12 {
+  width: 3rem;
+}
+
+.w-2 {
+  width: 0.5rem;
+}
+
+.w-2\\.5 {
+  width: 0.625rem;
+}
+
+.w-3 {
+  width: 0.75rem;
+}
+
+.w-3\\.5 {
+  width: 0.875rem;
+}
+
+.w-3\\/4 {
+  width: 75%;
+}
+
+.w-32 {
+  width: 8rem;
+}
+
+.w-4 {
+  width: 1rem;
+}
+
+.w-5 {
+  width: 1.25rem;
+}
+
+.w-6 {
+  width: 1.5rem;
+}
+
+.w-64 {
+  width: 16rem;
+}
+
+.w-7 {
+  width: 1.75rem;
+}
+
+.w-72 {
+  width: 18rem;
+}
+
+.w-8 {
+  width: 2rem;
+}
+
+.w-9 {
+  width: 2.25rem;
+}
+
+.w-\\[--sidebar-width\\] {
+  width: var(--sidebar-width);
+}
+
+.w-\\[100px\\] {
+  width: 100px;
+}
+
+.w-\\[1px\\] {
+  width: 1px;
+}
+
+.w-auto {
+  width: auto;
+}
+
+.w-fit {
+  width: -moz-fit-content;
+  width: fit-content;
+}
+
+.w-full {
+  width: 100%;
+}
+
+.w-max {
+  width: -moz-max-content;
+  width: max-content;
+}
+
+.w-px {
+  width: 1px;
+}
+
+.min-w-0 {
+  min-width: 0px;
+}
+
+.min-w-5 {
+  min-width: 1.25rem;
+}
+
+.min-w-\\[12rem\\] {
+  min-width: 12rem;
+}
+
+.min-w-\\[8rem\\] {
+  min-width: 8rem;
+}
+
+.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {
+  min-width: var(--radix-select-trigger-width);
+}
+
+.max-w-2xl {
+  max-width: 42rem;
+}
+
+.max-w-3xl {
+  max-width: 48rem;
+}
+
+.max-w-4xl {
+  max-width: 56rem;
+}
+
+.max-w-7xl {
+  max-width: 80rem;
+}
+
+.max-w-\\[--skeleton-width\\] {
+  max-width: var(--skeleton-width);
+}
+
+.max-w-lg {
+  max-width: 32rem;
+}
+
+.max-w-max {
+  max-width: -moz-max-content;
+  max-width: max-content;
+}
+
+.max-w-none {
+  max-width: none;
+}
+
+.max-w-sm {
+  max-width: 24rem;
+}
+
+.max-w-xs {
+  max-width: 20rem;
+}
+
+.flex-1 {
+  flex: 1 1 0%;
+}
+
+.flex-shrink-0 {
+  flex-shrink: 0;
+}
+
+.shrink-0 {
+  flex-shrink: 0;
+}
+
+.flex-grow {
+  flex-grow: 1;
+}
+
+.grow {
+  flex-grow: 1;
+}
+
+.grow-0 {
+  flex-grow: 0;
+}
+
+.basis-full {
+  flex-basis: 100%;
+}
+
+.caption-bottom {
+  caption-side: bottom;
+}
+
+.border-collapse {
+  border-collapse: collapse;
+}
+
+.-translate-x-1\\/2 {
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-x-px {
+  --tw-translate-x: -1px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.-translate-y-1\\/2 {
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-\\[-50\\%\\] {
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-x-px {
+  --tw-translate-x: 1px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.translate-y-\\[-50\\%\\] {
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-45 {
+  --tw-rotate: 45deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.rotate-90 {
+  --tw-rotate: 90deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.transform {
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes pulse {
+  50% {
+    opacity: .5;
+  }
+}
+
+.animate-pulse {
+  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
+}
+
+@keyframes spin {
+  to {
+    transform: rotate(360deg);
+  }
+}
+
+.animate-spin {
+  animation: spin 1s linear infinite;
+}
+
+.cursor-default {
+  cursor: default;
+}
+
+.cursor-pointer {
+  cursor: pointer;
+}
+
+.touch-none {
+  touch-action: none;
+}
+
+.select-none {
+  -webkit-user-select: none;
+     -moz-user-select: none;
+          user-select: none;
+}
+
+.list-none {
+  list-style-type: none;
+}
+
+.grid-cols-1 {
+  grid-template-columns: repeat(1, minmax(0, 1fr));
+}
+
+.grid-cols-2 {
+  grid-template-columns: repeat(2, minmax(0, 1fr));
+}
+
+.grid-cols-3 {
+  grid-template-columns: repeat(3, minmax(0, 1fr));
+}
+
+.flex-row {
+  flex-direction: row;
+}
+
+.flex-col {
+  flex-direction: column;
+}
+
+.flex-col-reverse {
+  flex-direction: column-reverse;
+}
+
+.flex-wrap {
+  flex-wrap: wrap;
+}
+
+.items-start {
+  align-items: flex-start;
+}
+
+.items-end {
+  align-items: flex-end;
+}
+
+.items-center {
+  align-items: center;
+}
+
+.items-stretch {
+  align-items: stretch;
+}
+
+.justify-start {
+  justify-content: flex-start;
+}
+
+.justify-center {
+  justify-content: center;
+}
+
+.justify-between {
+  justify-content: space-between;
+}
+
+.gap-1 {
+  gap: 0.25rem;
+}
+
+.gap-1\\.5 {
+  gap: 0.375rem;
+}
+
+.gap-2 {
+  gap: 0.5rem;
+}
+
+.gap-3 {
+  gap: 0.75rem;
+}
+
+.gap-4 {
+  gap: 1rem;
+}
+
+.gap-6 {
+  gap: 1.5rem;
+}
+
+.gap-8 {
+  gap: 2rem;
+}
+
+.space-x-1 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.25rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-2 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-3 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(0.75rem * var(--tw-space-x-reverse));
+  margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-x-4 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-x-reverse: 0;
+  margin-right: calc(1rem * var(--tw-space-x-reverse));
+  margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+}
+
+.space-y-0 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0px * var(--tw-space-y-reverse));
+}
+
+.space-y-1 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));
+}
+
+.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));
+}
+
+.space-y-2 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-3 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
+}
+
+.space-y-4 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(1rem * var(--tw-space-y-reverse));
+}
+
+.space-y-6 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));
+}
+
+.space-y-8 > :not([hidden]) ~ :not([hidden]) {
+  --tw-space-y-reverse: 0;
+  margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
+  margin-bottom: calc(2rem * var(--tw-space-y-reverse));
+}
+
+.self-start {
+  align-self: flex-start;
+}
+
+.overflow-auto {
+  overflow: auto;
+}
+
+.overflow-hidden {
+  overflow: hidden;
+}
+
+.overflow-x-auto {
+  overflow-x: auto;
+}
+
+.overflow-y-auto {
+  overflow-y: auto;
+}
+
+.overflow-x-hidden {
+  overflow-x: hidden;
+}
+
+.truncate {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.whitespace-nowrap {
+  white-space: nowrap;
+}
+
+.whitespace-pre-wrap {
+  white-space: pre-wrap;
+}
+
+.break-words {
+  overflow-wrap: break-word;
+}
+
+.rounded {
+  border-radius: 0.25rem;
+}
+
+.rounded-2xl {
+  border-radius: 1rem;
+}
+
+.rounded-\\[2px\\] {
+  border-radius: 2px;
+}
+
+.rounded-\\[inherit\\] {
+  border-radius: inherit;
+}
+
+.rounded-full {
+  border-radius: 9999px;
+}
+
+.rounded-lg {
+  border-radius: var(--radius);
+}
+
+.rounded-md {
+  border-radius: calc(var(--radius) - 2px);
+}
+
+.rounded-none {
+  border-radius: 0px;
+}
+
+.rounded-sm {
+  border-radius: calc(var(--radius) - 4px);
+}
+
+.rounded-xl {
+  border-radius: 0.75rem;
+}
+
+.rounded-t-\\[10px\\] {
+  border-top-left-radius: 10px;
+  border-top-right-radius: 10px;
+}
+
+.rounded-t-lg {
+  border-top-left-radius: var(--radius);
+  border-top-right-radius: var(--radius);
+}
+
+.rounded-tl-sm {
+  border-top-left-radius: calc(var(--radius) - 4px);
+}
+
+.border {
+  border-width: 1px;
+}
+
+.border-2 {
+  border-width: 2px;
+}
+
+.border-\\[1\\.5px\\] {
+  border-width: 1.5px;
+}
+
+.border-y {
+  border-top-width: 1px;
+  border-bottom-width: 1px;
+}
+
+.border-b {
+  border-bottom-width: 1px;
+}
+
+.border-b-2 {
+  border-bottom-width: 2px;
+}
+
+.border-l {
+  border-left-width: 1px;
+}
+
+.border-r {
+  border-right-width: 1px;
+}
+
+.border-t {
+  border-top-width: 1px;
+}
+
+.border-dashed {
+  border-style: dashed;
+}
+
+.border-\\[--color-border\\] {
+  border-color: var(--color-border);
+}
+
+.border-blue-100 {
+  --tw-border-opacity: 1;
+  border-color: rgb(219 234 254 / var(--tw-border-opacity, 1));
+}
+
+.border-blue-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(191 219 254 / var(--tw-border-opacity, 1));
+}
+
+.border-blue-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 197 253 / var(--tw-border-opacity, 1));
+}
+
+.border-blue-600 {
+  --tw-border-opacity: 1;
+  border-color: rgb(37 99 235 / var(--tw-border-opacity, 1));
+}
+
+.border-border\\/50 {
+  border-color: hsl(var(--border) / 0.5);
+}
+
+.border-destructive {
+  border-color: hsl(var(--destructive));
+}
+
+.border-destructive\\/50 {
+  border-color: hsl(var(--destructive) / 0.5);
+}
+
+.border-gray-100 {
+  --tw-border-opacity: 1;
+  border-color: rgb(243 244 246 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(229 231 235 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-200\\/30 {
+  border-color: rgb(229 231 235 / 0.3);
+}
+
+.border-gray-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
+}
+
+.border-gray-700 {
+  --tw-border-opacity: 1;
+  border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
+}
+
+.border-green-100 {
+  --tw-border-opacity: 1;
+  border-color: rgb(220 252 231 / var(--tw-border-opacity, 1));
+}
+
+.border-green-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(187 247 208 / var(--tw-border-opacity, 1));
+}
+
+.border-green-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(134 239 172 / var(--tw-border-opacity, 1));
+}
+
+.border-input {
+  border-color: hsl(var(--input));
+}
+
+.border-orange-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(254 215 170 / var(--tw-border-opacity, 1));
+}
+
+.border-primary {
+  border-color: hsl(var(--primary));
+}
+
+.border-purple-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(233 213 255 / var(--tw-border-opacity, 1));
+}
+
+.border-purple-600 {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 51 234 / var(--tw-border-opacity, 1));
+}
+
+.border-red-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(254 202 202 / var(--tw-border-opacity, 1));
+}
+
+.border-red-300 {
+  --tw-border-opacity: 1;
+  border-color: rgb(252 165 165 / var(--tw-border-opacity, 1));
+}
+
+.border-sidebar-border {
+  border-color: hsl(var(--sidebar-border));
+}
+
+.border-teal-200 {
+  --tw-border-opacity: 1;
+  border-color: rgb(153 246 228 / var(--tw-border-opacity, 1));
+}
+
+.border-transparent {
+  border-color: transparent;
+}
+
+.border-l-transparent {
+  border-left-color: transparent;
+}
+
+.border-t-transparent {
+  border-top-color: transparent;
+}
+
+.bg-\\[--color-bg\\] {
+  background-color: var(--color-bg);
+}
+
+.bg-accent {
+  background-color: hsl(var(--accent));
+}
+
+.bg-background {
+  background-color: hsl(var(--background));
+}
+
+.bg-black\\/80 {
+  background-color: rgb(0 0 0 / 0.8);
+}
+
+.bg-blue-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(219 234 254 / var(--tw-bg-opacity, 1));
+}
+
+.bg-blue-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(239 246 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-blue-50\\/50 {
+  background-color: rgb(239 246 255 / 0.5);
+}
+
+.bg-blue-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(37 99 235 / var(--tw-bg-opacity, 1));
+}
+
+.bg-border {
+  background-color: hsl(var(--border));
+}
+
+.bg-card {
+  background-color: hsl(var(--card));
+}
+
+.bg-destructive {
+  background-color: hsl(var(--destructive));
+}
+
+.bg-foreground {
+  background-color: hsl(var(--foreground));
+}
+
+.bg-gray-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(75 85 99 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-700 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-800 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.bg-gray-900 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(17 24 39 / var(--tw-bg-opacity, 1));
+}
+
+.bg-green-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
+}
+
+.bg-green-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));
+}
+
+.bg-green-600 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(22 163 74 / var(--tw-bg-opacity, 1));
+}
+
+.bg-indigo-600\\/40 {
+  background-color: rgb(79 70 229 / 0.4);
+}
+
+.bg-muted {
+  background-color: hsl(var(--muted));
+}
+
+.bg-muted\\/30 {
+  background-color: hsl(var(--muted) / 0.3);
+}
+
+.bg-muted\\/50 {
+  background-color: hsl(var(--muted) / 0.5);
+}
+
+.bg-orange-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(255 237 213 / var(--tw-bg-opacity, 1));
+}
+
+.bg-orange-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(255 247 237 / var(--tw-bg-opacity, 1));
+}
+
+.bg-popover {
+  background-color: hsl(var(--popover));
+}
+
+.bg-primary {
+  background-color: hsl(var(--primary));
+}
+
+.bg-purple-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(243 232 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-purple-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(250 245 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-red-100 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
+}
+
+.bg-red-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 242 242 / var(--tw-bg-opacity, 1));
+}
+
+.bg-secondary {
+  background-color: hsl(var(--secondary));
+}
+
+.bg-sidebar {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.bg-sidebar-border {
+  background-color: hsl(var(--sidebar-border));
+}
+
+.bg-teal-50 {
+  --tw-bg-opacity: 1;
+  background-color: rgb(240 253 250 / var(--tw-bg-opacity, 1));
+}
+
+.bg-transparent {
+  background-color: transparent;
+}
+
+.bg-white {
+  --tw-bg-opacity: 1;
+  background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));
+}
+
+.bg-white\\/10 {
+  background-color: rgb(255 255 255 / 0.1);
+}
+
+.bg-gradient-to-br {
+  background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));
+}
+
+.bg-gradient-to-r {
+  background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.from-blue-50 {
+  --tw-gradient-from: #eff6ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-blue-50\\/50 {
+  --tw-gradient-from: rgb(239 246 255 / 0.5) var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(239 246 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-green-50 {
+  --tw-gradient-from: #f0fdf4 var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(240 253 244 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-indigo-100 {
+  --tw-gradient-from: #e0e7ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(224 231 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-100 {
+  --tw-gradient-from: #f3e8ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(243 232 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-50 {
+  --tw-gradient-from: #faf5ff var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-50\\/50 {
+  --tw-gradient-from: rgb(250 245 255 / 0.5) var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(250 245 255 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-600 {
+  --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.from-purple-700 {
+  --tw-gradient-from: #7e22ce var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(126 34 206 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.via-white {
+  --tw-gradient-to: rgb(255 255 255 / 0)  var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to);
+}
+
+.to-blue-100 {
+  --tw-gradient-to: #dbeafe var(--tw-gradient-to-position);
+}
+
+.to-emerald-50 {
+  --tw-gradient-to: #ecfdf5 var(--tw-gradient-to-position);
+}
+
+.to-indigo-100 {
+  --tw-gradient-to: #e0e7ff var(--tw-gradient-to-position);
+}
+
+.to-indigo-50 {
+  --tw-gradient-to: #eef2ff var(--tw-gradient-to-position);
+}
+
+.to-indigo-50\\/50 {
+  --tw-gradient-to: rgb(238 242 255 / 0.5) var(--tw-gradient-to-position);
+}
+
+.to-indigo-600 {
+  --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position);
+}
+
+.to-indigo-700 {
+  --tw-gradient-to: #4338ca var(--tw-gradient-to-position);
+}
+
+.to-teal-50 {
+  --tw-gradient-to: #f0fdfa var(--tw-gradient-to-position);
+}
+
+.bg-clip-text {
+  -webkit-background-clip: text;
+          background-clip: text;
+}
+
+.fill-current {
+  fill: currentColor;
+}
+
+.p-0 {
+  padding: 0px;
+}
+
+.p-1 {
+  padding: 0.25rem;
+}
+
+.p-2 {
+  padding: 0.5rem;
+}
+
+.p-3 {
+  padding: 0.75rem;
+}
+
+.p-4 {
+  padding: 1rem;
+}
+
+.p-5 {
+  padding: 1.25rem;
+}
+
+.p-6 {
+  padding: 1.5rem;
+}
+
+.p-8 {
+  padding: 2rem;
+}
+
+.p-\\[1px\\] {
+  padding: 1px;
+}
+
+.px-1 {
+  padding-left: 0.25rem;
+  padding-right: 0.25rem;
+}
+
+.px-2 {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.px-2\\.5 {
+  padding-left: 0.625rem;
+  padding-right: 0.625rem;
+}
+
+.px-3 {
+  padding-left: 0.75rem;
+  padding-right: 0.75rem;
+}
+
+.px-4 {
+  padding-left: 1rem;
+  padding-right: 1rem;
+}
+
+.px-5 {
+  padding-left: 1.25rem;
+  padding-right: 1.25rem;
+}
+
+.px-6 {
+  padding-left: 1.5rem;
+  padding-right: 1.5rem;
+}
+
+.px-8 {
+  padding-left: 2rem;
+  padding-right: 2rem;
+}
+
+.py-0\\.5 {
+  padding-top: 0.125rem;
+  padding-bottom: 0.125rem;
+}
+
+.py-1 {
+  padding-top: 0.25rem;
+  padding-bottom: 0.25rem;
+}
+
+.py-1\\.5 {
+  padding-top: 0.375rem;
+  padding-bottom: 0.375rem;
+}
+
+.py-12 {
+  padding-top: 3rem;
+  padding-bottom: 3rem;
+}
+
+.py-2 {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
+
+.py-3 {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.py-4 {
+  padding-top: 1rem;
+  padding-bottom: 1rem;
+}
+
+.py-6 {
+  padding-top: 1.5rem;
+  padding-bottom: 1.5rem;
+}
+
+.py-8 {
+  padding-top: 2rem;
+  padding-bottom: 2rem;
+}
+
+.pb-2 {
+  padding-bottom: 0.5rem;
+}
+
+.pb-3 {
+  padding-bottom: 0.75rem;
+}
+
+.pb-4 {
+  padding-bottom: 1rem;
+}
+
+.pb-6 {
+  padding-bottom: 1.5rem;
+}
+
+.pl-2\\.5 {
+  padding-left: 0.625rem;
+}
+
+.pl-4 {
+  padding-left: 1rem;
+}
+
+.pl-8 {
+  padding-left: 2rem;
+}
+
+.pr-12 {
+  padding-right: 3rem;
+}
+
+.pr-2 {
+  padding-right: 0.5rem;
+}
+
+.pr-2\\.5 {
+  padding-right: 0.625rem;
+}
+
+.pr-8 {
+  padding-right: 2rem;
+}
+
+.pt-0 {
+  padding-top: 0px;
+}
+
+.pt-1 {
+  padding-top: 0.25rem;
+}
+
+.pt-2 {
+  padding-top: 0.5rem;
+}
+
+.pt-3 {
+  padding-top: 0.75rem;
+}
+
+.pt-4 {
+  padding-top: 1rem;
+}
+
+.pt-6 {
+  padding-top: 1.5rem;
+}
+
+.text-left {
+  text-align: left;
+}
+
+.text-center {
+  text-align: center;
+}
+
+.text-right {
+  text-align: right;
+}
+
+.align-middle {
+  vertical-align: middle;
+}
+
+.font-mono {
+  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+}
+
+.text-2xl {
+  font-size: 1.5rem;
+  line-height: 2rem;
+}
+
+.text-3xl {
+  font-size: 1.875rem;
+  line-height: 2.25rem;
+}
+
+.text-\\[0\\.8rem\\] {
+  font-size: 0.8rem;
+}
+
+.text-base {
+  font-size: 1rem;
+  line-height: 1.5rem;
+}
+
+.text-lg {
+  font-size: 1.125rem;
+  line-height: 1.75rem;
+}
+
+.text-sm {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.text-xl {
+  font-size: 1.25rem;
+  line-height: 1.75rem;
+}
+
+.text-xs {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.font-bold {
+  font-weight: 700;
+}
+
+.font-medium {
+  font-weight: 500;
+}
+
+.font-normal {
+  font-weight: 400;
+}
+
+.font-semibold {
+  font-weight: 600;
+}
+
+.capitalize {
+  text-transform: capitalize;
+}
+
+.tabular-nums {
+  --tw-numeric-spacing: tabular-nums;
+  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
+}
+
+.leading-none {
+  line-height: 1;
+}
+
+.leading-relaxed {
+  line-height: 1.625;
+}
+
+.tracking-tight {
+  letter-spacing: -0.025em;
+}
+
+.tracking-widest {
+  letter-spacing: 0.1em;
+}
+
+.text-accent-foreground {
+  color: hsl(var(--accent-foreground));
+}
+
+.text-blue-600 {
+  --tw-text-opacity: 1;
+  color: rgb(37 99 235 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-700 {
+  --tw-text-opacity: 1;
+  color: rgb(29 78 216 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-800 {
+  --tw-text-opacity: 1;
+  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
+}
+
+.text-blue-900 {
+  --tw-text-opacity: 1;
+  color: rgb(30 58 138 / var(--tw-text-opacity, 1));
+}
+
+.text-card-foreground {
+  color: hsl(var(--card-foreground));
+}
+
+.text-current {
+  color: currentColor;
+}
+
+.text-destructive {
+  color: hsl(var(--destructive));
+}
+
+.text-destructive-foreground {
+  color: hsl(var(--destructive-foreground));
+}
+
+.text-foreground {
+  color: hsl(var(--foreground));
+}
+
+.text-foreground\\/50 {
+  color: hsl(var(--foreground) / 0.5);
+}
+
+.text-gray-300 {
+  --tw-text-opacity: 1;
+  color: rgb(209 213 219 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-400 {
+  --tw-text-opacity: 1;
+  color: rgb(156 163 175 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-500 {
+  --tw-text-opacity: 1;
+  color: rgb(107 114 128 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-600 {
+  --tw-text-opacity: 1;
+  color: rgb(75 85 99 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-700 {
+  --tw-text-opacity: 1;
+  color: rgb(55 65 81 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-800 {
+  --tw-text-opacity: 1;
+  color: rgb(31 41 55 / var(--tw-text-opacity, 1));
+}
+
+.text-gray-900 {
+  --tw-text-opacity: 1;
+  color: rgb(17 24 39 / var(--tw-text-opacity, 1));
+}
+
+.text-green-400 {
+  --tw-text-opacity: 1;
+  color: rgb(74 222 128 / var(--tw-text-opacity, 1));
+}
+
+.text-green-600 {
+  --tw-text-opacity: 1;
+  color: rgb(22 163 74 / var(--tw-text-opacity, 1));
+}
+
+.text-green-700 {
+  --tw-text-opacity: 1;
+  color: rgb(21 128 61 / var(--tw-text-opacity, 1));
+}
+
+.text-green-800 {
+  --tw-text-opacity: 1;
+  color: rgb(22 101 52 / var(--tw-text-opacity, 1));
+}
+
+.text-green-900 {
+  --tw-text-opacity: 1;
+  color: rgb(20 83 45 / var(--tw-text-opacity, 1));
+}
+
+.text-indigo-600 {
+  --tw-text-opacity: 1;
+  color: rgb(79 70 229 / var(--tw-text-opacity, 1));
+}
+
+.text-muted-foreground {
+  color: hsl(var(--muted-foreground));
+}
+
+.text-orange-600 {
+  --tw-text-opacity: 1;
+  color: rgb(234 88 12 / var(--tw-text-opacity, 1));
+}
+
+.text-orange-700 {
+  --tw-text-opacity: 1;
+  color: rgb(194 65 12 / var(--tw-text-opacity, 1));
+}
+
+.text-orange-800 {
+  --tw-text-opacity: 1;
+  color: rgb(154 52 18 / var(--tw-text-opacity, 1));
+}
+
+.text-popover-foreground {
+  color: hsl(var(--popover-foreground));
+}
+
+.text-primary {
+  color: hsl(var(--primary));
+}
+
+.text-primary-foreground {
+  color: hsl(var(--primary-foreground));
+}
+
+.text-purple-100 {
+  --tw-text-opacity: 1;
+  color: rgb(243 232 255 / var(--tw-text-opacity, 1));
+}
+
+.text-purple-600 {
+  --tw-text-opacity: 1;
+  color: rgb(147 51 234 / var(--tw-text-opacity, 1));
+}
+
+.text-purple-700 {
+  --tw-text-opacity: 1;
+  color: rgb(126 34 206 / var(--tw-text-opacity, 1));
+}
+
+.text-red-500 {
+  --tw-text-opacity: 1;
+  color: rgb(239 68 68 / var(--tw-text-opacity, 1));
+}
+
+.text-red-600 {
+  --tw-text-opacity: 1;
+  color: rgb(220 38 38 / var(--tw-text-opacity, 1));
+}
+
+.text-red-700 {
+  --tw-text-opacity: 1;
+  color: rgb(185 28 28 / var(--tw-text-opacity, 1));
+}
+
+.text-red-800 {
+  --tw-text-opacity: 1;
+  color: rgb(153 27 27 / var(--tw-text-opacity, 1));
+}
+
+.text-secondary-foreground {
+  color: hsl(var(--secondary-foreground));
+}
+
+.text-sidebar-foreground {
+  color: hsl(var(--sidebar-foreground));
+}
+
+.text-sidebar-foreground\\/70 {
+  color: hsl(var(--sidebar-foreground) / 0.7);
+}
+
+.text-teal-600 {
+  --tw-text-opacity: 1;
+  color: rgb(13 148 136 / var(--tw-text-opacity, 1));
+}
+
+.text-transparent {
+  color: transparent;
+}
+
+.text-white {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.underline-offset-4 {
+  text-underline-offset: 4px;
+}
+
+.antialiased {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.opacity-0 {
+  opacity: 0;
+}
+
+.opacity-50 {
+  opacity: 0.5;
+}
+
+.opacity-60 {
+  opacity: 0.6;
+}
+
+.opacity-70 {
+  opacity: 0.7;
+}
+
+.opacity-90 {
+  opacity: 0.9;
+}
+
+.shadow {
+  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-border\\)\\)\\] {
+  --tw-shadow: 0 0 0 1px hsl(var(--sidebar-border));
+  --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-md {
+  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-none {
+  --tw-shadow: 0 0 #0000;
+  --tw-shadow-colored: 0 0 #0000;
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-sm {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.shadow-xl {
+  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.outline-none {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.outline {
+  outline-style: solid;
+}
+
+.ring-0 {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-2 {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.ring-ring {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.ring-sidebar-ring {
+  --tw-ring-color: hsl(var(--sidebar-ring));
+}
+
+.ring-offset-background {
+  --tw-ring-offset-color: hsl(var(--background));
+}
+
+.grayscale {
+  --tw-grayscale: grayscale(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);
+}
+
+.filter {
+  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
+}
+
+.transition {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[left\\2c right\\2c width\\] {
+  transition-property: left,right,width;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[margin\\2c opa\\] {
+  transition-property: margin,opa;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[width\\2c height\\2c padding\\] {
+  transition-property: width,height,padding;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-\\[width\\] {
+  transition-property: width;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-all {
+  transition-property: all;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-colors {
+  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-opacity {
+  transition-property: opacity;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-shadow {
+  transition-property: box-shadow;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.transition-transform {
+  transition-property: transform;
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+  transition-duration: 150ms;
+}
+
+.duration-1000 {
+  transition-duration: 1000ms;
+}
+
+.duration-200 {
+  transition-duration: 200ms;
+}
+
+.ease-in-out {
+  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.ease-linear {
+  transition-timing-function: linear;
+}
+
+@keyframes enter {
+  from {
+    opacity: var(--tw-enter-opacity, 1);
+    transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));
+  }
+}
+
+@keyframes exit {
+  to {
+    opacity: var(--tw-exit-opacity, 1);
+    transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));
+  }
+}
+
+.animate-in {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.fade-in-0 {
+  --tw-enter-opacity: 0;
+}
+
+.fade-in-80 {
+  --tw-enter-opacity: 0.8;
+}
+
+.zoom-in-95 {
+  --tw-enter-scale: .95;
+}
+
+.duration-1000 {
+  animation-duration: 1000ms;
+}
+
+.duration-200 {
+  animation-duration: 200ms;
+}
+
+.ease-in-out {
+  animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+}
+
+.ease-linear {
+  animation-timing-function: linear;
+}
+
+/* Definition of the design system. All colors, gradients, fonts, etc should be defined here. */
+
+/* Global styles for Radix UI portals rendered outside Shadow DOM */
+
+[data-radix-popper-content-wrapper] .hover\\:shadow-md:hover {
+  box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+}
+
+[data-radix-popper-content-wrapper] .group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:border {
+  border-color: hsl(var(--border)) !important;
+}
+
+.file\\:border-0::file-selector-button {
+  border-width: 0px;
+}
+
+.file\\:bg-transparent::file-selector-button {
+  background-color: transparent;
+}
+
+.file\\:text-sm::file-selector-button {
+  font-size: 0.875rem;
+  line-height: 1.25rem;
+}
+
+.file\\:font-medium::file-selector-button {
+  font-weight: 500;
+}
+
+.file\\:text-foreground::file-selector-button {
+  color: hsl(var(--foreground));
+}
+
+.placeholder\\:text-muted-foreground::-moz-placeholder {
+  color: hsl(var(--muted-foreground));
+}
+
+.placeholder\\:text-muted-foreground::placeholder {
+  color: hsl(var(--muted-foreground));
+}
+
+.after\\:absolute::after {
+  content: var(--tw-content);
+  position: absolute;
+}
+
+.after\\:-inset-2::after {
+  content: var(--tw-content);
+  inset: -0.5rem;
+}
+
+.after\\:inset-y-0::after {
+  content: var(--tw-content);
+  top: 0px;
+  bottom: 0px;
+}
+
+.after\\:left-1\\/2::after {
+  content: var(--tw-content);
+  left: 50%;
+}
+
+.after\\:w-1::after {
+  content: var(--tw-content);
+  width: 0.25rem;
+}
+
+.after\\:w-\\[2px\\]::after {
+  content: var(--tw-content);
+  width: 2px;
+}
+
+.after\\:-translate-x-1\\/2::after {
+  content: var(--tw-content);
+  --tw-translate-x: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.first\\:rounded-l-md:first-child {
+  border-top-left-radius: calc(var(--radius) - 2px);
+  border-bottom-left-radius: calc(var(--radius) - 2px);
+}
+
+.first\\:border-l:first-child {
+  border-left-width: 1px;
+}
+
+.last\\:rounded-r-md:last-child {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.focus-within\\:relative:focus-within {
+  position: relative;
+}
+
+.focus-within\\:z-20:focus-within {
+  z-index: 20;
+}
+
+.hover\\:-translate-y-0\\.5:hover {
+  --tw-translate-y: -0.125rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.hover\\:border-gray-400:hover {
+  --tw-border-opacity: 1;
+  border-color: rgb(156 163 175 / var(--tw-border-opacity, 1));
+}
+
+.hover\\:bg-accent:hover {
+  background-color: hsl(var(--accent));
+}
+
+.hover\\:bg-blue-700:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(29 78 216 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-destructive\\/80:hover {
+  background-color: hsl(var(--destructive) / 0.8);
+}
+
+.hover\\:bg-destructive\\/90:hover {
+  background-color: hsl(var(--destructive) / 0.9);
+}
+
+.hover\\:bg-gray-50:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-gray-700:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-gray-800:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-green-50:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(240 253 244 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-muted:hover {
+  background-color: hsl(var(--muted));
+}
+
+.hover\\:bg-muted\\/50:hover {
+  background-color: hsl(var(--muted) / 0.5);
+}
+
+.hover\\:bg-primary:hover {
+  background-color: hsl(var(--primary));
+}
+
+.hover\\:bg-primary\\/80:hover {
+  background-color: hsl(var(--primary) / 0.8);
+}
+
+.hover\\:bg-primary\\/90:hover {
+  background-color: hsl(var(--primary) / 0.9);
+}
+
+.hover\\:bg-red-100:hover {
+  --tw-bg-opacity: 1;
+  background-color: rgb(254 226 226 / var(--tw-bg-opacity, 1));
+}
+
+.hover\\:bg-secondary:hover {
+  background-color: hsl(var(--secondary));
+}
+
+.hover\\:bg-secondary\\/80:hover {
+  background-color: hsl(var(--secondary) / 0.8);
+}
+
+.hover\\:bg-sidebar-accent:hover {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.hover\\:text-accent-foreground:hover {
+  color: hsl(var(--accent-foreground));
+}
+
+.hover\\:text-blue-800:hover {
+  --tw-text-opacity: 1;
+  color: rgb(30 64 175 / var(--tw-text-opacity, 1));
+}
+
+.hover\\:text-foreground:hover {
+  color: hsl(var(--foreground));
+}
+
+.hover\\:text-muted-foreground:hover {
+  color: hsl(var(--muted-foreground));
+}
+
+.hover\\:text-primary-foreground:hover {
+  color: hsl(var(--primary-foreground));
+}
+
+.hover\\:text-sidebar-accent-foreground:hover {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.hover\\:text-white:hover {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.hover\\:underline:hover {
+  text-decoration-line: underline;
+}
+
+.hover\\:opacity-100:hover {
+  opacity: 1;
+}
+
+.hover\\:shadow-\\[0_0_0_1px_hsl\\(var\\(--sidebar-accent\\)\\)\\]:hover {
+  --tw-shadow: 0 0 0 1px hsl(var(--sidebar-accent));
+  --tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:shadow-md:hover {
+  --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:shadow-sm:hover {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:shadow-xl:hover {
+  --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.hover\\:after\\:bg-sidebar-border:hover::after {
+  content: var(--tw-content);
+  background-color: hsl(var(--sidebar-border));
+}
+
+.focus\\:bg-accent:focus {
+  background-color: hsl(var(--accent));
+}
+
+.focus\\:bg-primary:focus {
+  background-color: hsl(var(--primary));
+}
+
+.focus\\:text-accent-foreground:focus {
+  color: hsl(var(--accent-foreground));
+}
+
+.focus\\:text-primary-foreground:focus {
+  color: hsl(var(--primary-foreground));
+}
+
+.focus\\:opacity-100:focus {
+  opacity: 1;
+}
+
+.focus\\:outline-none:focus {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.focus\\:ring-2:focus {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus\\:ring-ring:focus {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.focus\\:ring-offset-2:focus {
+  --tw-ring-offset-width: 2px;
+}
+
+.focus-visible\\:outline-none:focus-visible {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.focus-visible\\:ring-1:focus-visible {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus-visible\\:ring-2:focus-visible {
+  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
+  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
+}
+
+.focus-visible\\:ring-ring:focus-visible {
+  --tw-ring-color: hsl(var(--ring));
+}
+
+.focus-visible\\:ring-sidebar-ring:focus-visible {
+  --tw-ring-color: hsl(var(--sidebar-ring));
+}
+
+.focus-visible\\:ring-offset-1:focus-visible {
+  --tw-ring-offset-width: 1px;
+}
+
+.focus-visible\\:ring-offset-2:focus-visible {
+  --tw-ring-offset-width: 2px;
+}
+
+.focus-visible\\:ring-offset-background:focus-visible {
+  --tw-ring-offset-color: hsl(var(--background));
+}
+
+.active\\:bg-sidebar-accent:active {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.active\\:text-sidebar-accent-foreground:active {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.disabled\\:pointer-events-none:disabled {
+  pointer-events: none;
+}
+
+.disabled\\:cursor-not-allowed:disabled {
+  cursor: not-allowed;
+}
+
+.disabled\\:opacity-50:disabled {
+  opacity: 0.5;
+}
+
+.group\\/menu-item:focus-within .group-focus-within\\/menu-item\\:opacity-100 {
+  opacity: 1;
+}
+
+.group\\/menu-item:hover .group-hover\\/menu-item\\:opacity-100 {
+  opacity: 1;
+}
+
+.group:hover .group-hover\\:opacity-100 {
+  opacity: 1;
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:border-muted\\/40 {
+  border-color: hsl(var(--muted) / 0.4);
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:border-border {
+  border-color: hsl(var(--border));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:bg-muted {
+  background-color: hsl(var(--muted));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:bg-primary {
+  background-color: hsl(var(--primary));
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:bg-background {
+  background-color: hsl(var(--background));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:text-red-300 {
+  --tw-text-opacity: 1;
+  color: rgb(252 165 165 / var(--tw-text-opacity, 1));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:text-muted-foreground {
+  color: hsl(var(--muted-foreground));
+}
+
+.group.toast .group-\\[\\.toast\\]\\:text-primary-foreground {
+  color: hsl(var(--primary-foreground));
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:text-foreground {
+  color: hsl(var(--foreground));
+}
+
+.group.toaster .group-\\[\\.toaster\\]\\:shadow-lg {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:border-destructive\\/30:hover {
+  border-color: hsl(var(--destructive) / 0.3);
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:bg-destructive:hover {
+  background-color: hsl(var(--destructive));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:text-destructive-foreground:hover {
+  color: hsl(var(--destructive-foreground));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:hover\\:text-red-50:hover {
+  --tw-text-opacity: 1;
+  color: rgb(254 242 242 / var(--tw-text-opacity, 1));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:focus\\:ring-destructive:focus {
+  --tw-ring-color: hsl(var(--destructive));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:focus\\:ring-red-400:focus {
+  --tw-ring-opacity: 1;
+  --tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1));
+}
+
+.group.destructive .group-\\[\\.destructive\\]\\:focus\\:ring-offset-red-600:focus {
+  --tw-ring-offset-color: #dc2626;
+}
+
+.peer\\/menu-button:hover ~ .peer-hover\\/menu-button\\:text-sidebar-accent-foreground {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {
+  cursor: not-allowed;
+}
+
+.peer:disabled ~ .peer-disabled\\:opacity-70 {
+  opacity: 0.7;
+}
+
+.has-\\[\\[data-variant\\=inset\\]\\]\\:bg-sidebar:has([data-variant=inset]) {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.has-\\[\\:disabled\\]\\:opacity-50:has(:disabled) {
+  opacity: 0.5;
+}
+
+.group\\/menu-item:has([data-sidebar=menu-action]) .group-has-\\[\\[data-sidebar\\=menu-action\\]\\]\\/menu-item\\:pr-8 {
+  padding-right: 2rem;
+}
+
+.aria-disabled\\:pointer-events-none[aria-disabled="true"] {
+  pointer-events: none;
+}
+
+.aria-disabled\\:opacity-50[aria-disabled="true"] {
+  opacity: 0.5;
+}
+
+.aria-selected\\:bg-accent[aria-selected="true"] {
+  background-color: hsl(var(--accent));
+}
+
+.aria-selected\\:bg-accent\\/50[aria-selected="true"] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.aria-selected\\:text-accent-foreground[aria-selected="true"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.aria-selected\\:text-muted-foreground[aria-selected="true"] {
+  color: hsl(var(--muted-foreground));
+}
+
+.aria-selected\\:opacity-100[aria-selected="true"] {
+  opacity: 1;
+}
+
+.aria-selected\\:opacity-30[aria-selected="true"] {
+  opacity: 0.3;
+}
+
+.data-\\[disabled\\=true\\]\\:pointer-events-none[data-disabled="true"] {
+  pointer-events: none;
+}
+
+.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {
+  pointer-events: none;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:h-px[data-panel-group-direction="vertical"] {
+  height: 1px;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:w-full[data-panel-group-direction="vertical"] {
+  width: 100%;
+}
+
+.data-\\[side\\=bottom\\]\\:translate-y-1[data-side="bottom"] {
+  --tw-translate-y: 0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[side\\=left\\]\\:-translate-x-1[data-side="left"] {
+  --tw-translate-x: -0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[side\\=right\\]\\:translate-x-1[data-side="right"] {
+  --tw-translate-x: 0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[side\\=top\\]\\:-translate-y-1[data-side="top"] {
+  --tw-translate-y: -0.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[state\\=checked\\]\\:translate-x-5[data-state="checked"] {
+  --tw-translate-x: 1.25rem;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state="unchecked"] {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[swipe\\=cancel\\]\\:translate-x-0[data-swipe="cancel"] {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[swipe\\=end\\]\\:translate-x-\\[var\\(--radix-toast-swipe-end-x\\)\\][data-swipe="end"] {
+  --tw-translate-x: var(--radix-toast-swipe-end-x);
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[swipe\\=move\\]\\:translate-x-\\[var\\(--radix-toast-swipe-move-x\\)\\][data-swipe="move"] {
+  --tw-translate-x: var(--radix-toast-swipe-move-x);
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+@keyframes accordion-up {
+  from {
+    height: var(--radix-accordion-content-height);
+  }
+
+  to {
+    height: 0;
+  }
+}
+
+.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state="closed"] {
+  animation: accordion-up 0.2s ease-out;
+}
+
+@keyframes accordion-down {
+  from {
+    height: 0;
+  }
+
+  to {
+    height: var(--radix-accordion-content-height);
+  }
+}
+
+.data-\\[state\\=open\\]\\:animate-accordion-down[data-state="open"] {
+  animation: accordion-down 0.2s ease-out;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:flex-col[data-panel-group-direction="vertical"] {
+  flex-direction: column;
+}
+
+.data-\\[state\\=active\\]\\:border-b-2[data-state="active"] {
+  border-bottom-width: 2px;
+}
+
+.data-\\[state\\=active\\]\\:border-purple-600[data-state="active"] {
+  --tw-border-opacity: 1;
+  border-color: rgb(147 51 234 / var(--tw-border-opacity, 1));
+}
+
+.data-\\[active\\=true\\]\\:bg-sidebar-accent[data-active="true"] {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.data-\\[active\\]\\:bg-accent\\/50[data-active] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.data-\\[selected\\=\\'true\\'\\]\\:bg-accent[data-selected='true'] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\\[state\\=active\\]\\:bg-background[data-state="active"] {
+  background-color: hsl(var(--background));
+}
+
+.data-\\[state\\=checked\\]\\:bg-primary[data-state="checked"] {
+  background-color: hsl(var(--primary));
+}
+
+.data-\\[state\\=on\\]\\:bg-accent[data-state="on"] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\\[state\\=open\\]\\:bg-accent[data-state="open"] {
+  background-color: hsl(var(--accent));
+}
+
+.data-\\[state\\=open\\]\\:bg-accent\\/50[data-state="open"] {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.data-\\[state\\=open\\]\\:bg-secondary[data-state="open"] {
+  background-color: hsl(var(--secondary));
+}
+
+.data-\\[state\\=selected\\]\\:bg-muted[data-state="selected"] {
+  background-color: hsl(var(--muted));
+}
+
+.data-\\[state\\=unchecked\\]\\:bg-input[data-state="unchecked"] {
+  background-color: hsl(var(--input));
+}
+
+.data-\\[state\\=active\\]\\:bg-gradient-to-r[data-state="active"] {
+  background-image: linear-gradient(to right, var(--tw-gradient-stops));
+}
+
+.data-\\[state\\=active\\]\\:from-purple-600[data-state="active"] {
+  --tw-gradient-from: #9333ea var(--tw-gradient-from-position);
+  --tw-gradient-to: rgb(147 51 234 / 0) var(--tw-gradient-to-position);
+  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);
+}
+
+.data-\\[state\\=active\\]\\:to-indigo-600[data-state="active"] {
+  --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position);
+}
+
+.data-\\[active\\=true\\]\\:font-medium[data-active="true"] {
+  font-weight: 500;
+}
+
+.data-\\[active\\=true\\]\\:text-sidebar-accent-foreground[data-active="true"] {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.data-\\[selected\\=true\\]\\:text-accent-foreground[data-selected="true"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\\[state\\=active\\]\\:text-foreground[data-state="active"] {
+  color: hsl(var(--foreground));
+}
+
+.data-\\[state\\=active\\]\\:text-white[data-state="active"] {
+  --tw-text-opacity: 1;
+  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
+}
+
+.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state="checked"] {
+  color: hsl(var(--primary-foreground));
+}
+
+.data-\\[state\\=on\\]\\:text-accent-foreground[data-state="on"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\\[state\\=open\\]\\:text-accent-foreground[data-state="open"] {
+  color: hsl(var(--accent-foreground));
+}
+
+.data-\\[state\\=open\\]\\:text-muted-foreground[data-state="open"] {
+  color: hsl(var(--muted-foreground));
+}
+
+.data-\\[disabled\\=true\\]\\:opacity-50[data-disabled="true"] {
+  opacity: 0.5;
+}
+
+.data-\\[disabled\\]\\:opacity-50[data-disabled] {
+  opacity: 0.5;
+}
+
+.data-\\[state\\=open\\]\\:opacity-100[data-state="open"] {
+  opacity: 1;
+}
+
+.data-\\[state\\=active\\]\\:shadow-lg[data-state="active"] {
+  --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.data-\\[state\\=active\\]\\:shadow-sm[data-state="active"] {
+  --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
+  --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.data-\\[swipe\\=move\\]\\:transition-none[data-swipe="move"] {
+  transition-property: none;
+}
+
+.data-\\[state\\=closed\\]\\:duration-300[data-state="closed"] {
+  transition-duration: 300ms;
+}
+
+.data-\\[state\\=open\\]\\:duration-500[data-state="open"] {
+  transition-duration: 500ms;
+}
+
+.data-\\[motion\\^\\=from-\\]\\:animate-in[data-motion^="from-"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\\[state\\=open\\]\\:animate-in[data-state="open"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\\[state\\=visible\\]\\:animate-in[data-state="visible"] {
+  animation-name: enter;
+  animation-duration: 150ms;
+  --tw-enter-opacity: initial;
+  --tw-enter-scale: initial;
+  --tw-enter-rotate: initial;
+  --tw-enter-translate-x: initial;
+  --tw-enter-translate-y: initial;
+}
+
+.data-\\[motion\\^\\=to-\\]\\:animate-out[data-motion^="to-"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[state\\=closed\\]\\:animate-out[data-state="closed"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[state\\=hidden\\]\\:animate-out[data-state="hidden"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[swipe\\=end\\]\\:animate-out[data-swipe="end"] {
+  animation-name: exit;
+  animation-duration: 150ms;
+  --tw-exit-opacity: initial;
+  --tw-exit-scale: initial;
+  --tw-exit-rotate: initial;
+  --tw-exit-translate-x: initial;
+  --tw-exit-translate-y: initial;
+}
+
+.data-\\[motion\\^\\=from-\\]\\:fade-in[data-motion^="from-"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\\[motion\\^\\=to-\\]\\:fade-out[data-motion^="to-"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\\[state\\=closed\\]\\:fade-out-0[data-state="closed"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\\[state\\=closed\\]\\:fade-out-80[data-state="closed"] {
+  --tw-exit-opacity: 0.8;
+}
+
+.data-\\[state\\=hidden\\]\\:fade-out[data-state="hidden"] {
+  --tw-exit-opacity: 0;
+}
+
+.data-\\[state\\=open\\]\\:fade-in-0[data-state="open"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\\[state\\=visible\\]\\:fade-in[data-state="visible"] {
+  --tw-enter-opacity: 0;
+}
+
+.data-\\[state\\=closed\\]\\:zoom-out-95[data-state="closed"] {
+  --tw-exit-scale: .95;
+}
+
+.data-\\[state\\=open\\]\\:zoom-in-90[data-state="open"] {
+  --tw-enter-scale: .9;
+}
+
+.data-\\[state\\=open\\]\\:zoom-in-95[data-state="open"] {
+  --tw-enter-scale: .95;
+}
+
+.data-\\[motion\\=from-end\\]\\:slide-in-from-right-52[data-motion="from-end"] {
+  --tw-enter-translate-x: 13rem;
+}
+
+.data-\\[motion\\=from-start\\]\\:slide-in-from-left-52[data-motion="from-start"] {
+  --tw-enter-translate-x: -13rem;
+}
+
+.data-\\[motion\\=to-end\\]\\:slide-out-to-right-52[data-motion="to-end"] {
+  --tw-exit-translate-x: 13rem;
+}
+
+.data-\\[motion\\=to-start\\]\\:slide-out-to-left-52[data-motion="to-start"] {
+  --tw-exit-translate-x: -13rem;
+}
+
+.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side="bottom"] {
+  --tw-enter-translate-y: -0.5rem;
+}
+
+.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side="left"] {
+  --tw-enter-translate-x: 0.5rem;
+}
+
+.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side="right"] {
+  --tw-enter-translate-x: -0.5rem;
+}
+
+.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side="top"] {
+  --tw-enter-translate-y: 0.5rem;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-bottom[data-state="closed"] {
+  --tw-exit-translate-y: 100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-left[data-state="closed"] {
+  --tw-exit-translate-x: -100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state="closed"] {
+  --tw-exit-translate-x: -50%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-right[data-state="closed"] {
+  --tw-exit-translate-x: 100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-right-full[data-state="closed"] {
+  --tw-exit-translate-x: 100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-top[data-state="closed"] {
+  --tw-exit-translate-y: -100%;
+}
+
+.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state="closed"] {
+  --tw-exit-translate-y: -48%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-bottom[data-state="open"] {
+  --tw-enter-translate-y: 100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-left[data-state="open"] {
+  --tw-enter-translate-x: -100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state="open"] {
+  --tw-enter-translate-x: -50%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-right[data-state="open"] {
+  --tw-enter-translate-x: 100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-top[data-state="open"] {
+  --tw-enter-translate-y: -100%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state="open"] {
+  --tw-enter-translate-y: -48%;
+}
+
+.data-\\[state\\=open\\]\\:slide-in-from-top-full[data-state="open"] {
+  --tw-enter-translate-y: -100%;
+}
+
+.data-\\[state\\=closed\\]\\:duration-300[data-state="closed"] {
+  animation-duration: 300ms;
+}
+
+.data-\\[state\\=open\\]\\:duration-500[data-state="open"] {
+  animation-duration: 500ms;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:left-0[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  left: 0px;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:h-1[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  height: 0.25rem;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:w-full[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  width: 100%;
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:-translate-y-1\\/2[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  --tw-translate-y: -50%;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[panel-group-direction\\=vertical\\]\\:after\\:translate-x-0[data-panel-group-direction="vertical"]::after {
+  content: var(--tw-content);
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.data-\\[state\\=open\\]\\:hover\\:bg-sidebar-accent:hover[data-state="open"] {
+  background-color: hsl(var(--sidebar-accent));
+}
+
+.data-\\[state\\=open\\]\\:hover\\:text-sidebar-accent-foreground:hover[data-state="open"] {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:left-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {
+  left: calc(var(--sidebar-width) * -1);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:right-\\[calc\\(var\\(--sidebar-width\\)\\*-1\\)\\] {
+  right: calc(var(--sidebar-width) * -1);
+}
+
+.group[data-side="left"] .group-data-\\[side\\=left\\]\\:-right-4 {
+  right: -1rem;
+}
+
+.group[data-side="right"] .group-data-\\[side\\=right\\]\\:left-0 {
+  left: 0px;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:-mt-8 {
+  margin-top: -2rem;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:hidden {
+  display: none;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:\\!size-8 {
+  width: 2rem !important;
+  height: 2rem !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:w-\\[--sidebar-width-icon\\] {
+  width: var(--sidebar-width-icon);
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)\\)\\] {
+  width: calc(var(--sidebar-width-icon) + 1rem);
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:w-\\[calc\\(var\\(--sidebar-width-icon\\)_\\+_theme\\(spacing\\.4\\)_\\+2px\\)\\] {
+  width: calc(var(--sidebar-width-icon) + 1rem + 2px);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:w-0 {
+  width: 0px;
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:translate-x-0 {
+  --tw-translate-x: 0px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-side="right"] .group-data-\\[side\\=right\\]\\:rotate-180 {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-state="open"] .group-data-\\[state\\=open\\]\\:rotate-180 {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:overflow-hidden {
+  overflow: hidden;
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:rounded-lg {
+  border-radius: var(--radius);
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:border {
+  border-width: 1px;
+}
+
+.group[data-side="left"] .group-data-\\[side\\=left\\]\\:border-r {
+  border-right-width: 1px;
+}
+
+.group[data-side="right"] .group-data-\\[side\\=right\\]\\:border-l {
+  border-left-width: 1px;
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:border-sidebar-border {
+  border-color: hsl(var(--sidebar-border));
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:\\!p-0 {
+  padding: 0px !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:\\!p-2 {
+  padding: 0.5rem !important;
+}
+
+.group[data-collapsible="icon"] .group-data-\\[collapsible\\=icon\\]\\:opacity-0 {
+  opacity: 0;
+}
+
+.group[data-variant="floating"] .group-data-\\[variant\\=floating\\]\\:shadow {
+  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:after\\:left-full::after {
+  content: var(--tw-content);
+  left: 100%;
+}
+
+.group[data-collapsible="offcanvas"] .group-data-\\[collapsible\\=offcanvas\\]\\:hover\\:bg-sidebar:hover {
+  background-color: hsl(var(--sidebar-background));
+}
+
+.peer\\/menu-button[data-size="default"] ~ .peer-data-\\[size\\=default\\]\\/menu-button\\:top-1\\.5 {
+  top: 0.375rem;
+}
+
+.peer\\/menu-button[data-size="lg"] ~ .peer-data-\\[size\\=lg\\]\\/menu-button\\:top-2\\.5 {
+  top: 0.625rem;
+}
+
+.peer\\/menu-button[data-size="sm"] ~ .peer-data-\\[size\\=sm\\]\\/menu-button\\:top-1 {
+  top: 0.25rem;
+}
+
+.peer[data-variant="inset"] ~ .peer-data-\\[variant\\=inset\\]\\:min-h-\\[calc\\(100svh-theme\\(spacing\\.4\\)\\)\\] {
+  min-height: calc(100svh - 1rem);
+}
+
+.peer\\/menu-button[data-active="true"] ~ .peer-data-\\[active\\=true\\]\\/menu-button\\:text-sidebar-accent-foreground {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.dark\\:border-destructive:is(.dark *) {
+  border-color: hsl(var(--destructive));
+}
+
+.dark\\:border-gray-700:is(.dark *) {
+  --tw-border-opacity: 1;
+  border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
+}
+
+.dark\\:bg-gray-800:is(.dark *) {
+  --tw-bg-opacity: 1;
+  background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));
+}
+
+.dark\\:text-gray-300:is(.dark *) {
+  --tw-text-opacity: 1;
+  color: rgb(209 213 219 / var(--tw-text-opacity, 1));
+}
+
+.dark\\:hover\\:bg-gray-700:hover:is(.dark *) {
+  --tw-bg-opacity: 1;
+  background-color: rgb(55 65 81 / var(--tw-bg-opacity, 1));
+}
+
+@media (min-width: 640px) {
+  .sm\\:bottom-0 {
+    bottom: 0px;
+  }
+
+  .sm\\:right-0 {
+    right: 0px;
+  }
+
+  .sm\\:top-auto {
+    top: auto;
+  }
+
+  .sm\\:col-span-2 {
+    grid-column: span 2 / span 2;
+  }
+
+  .sm\\:mb-0 {
+    margin-bottom: 0px;
+  }
+
+  .sm\\:mb-2 {
+    margin-bottom: 0.5rem;
+  }
+
+  .sm\\:mb-3 {
+    margin-bottom: 0.75rem;
+  }
+
+  .sm\\:mb-4 {
+    margin-bottom: 1rem;
+  }
+
+  .sm\\:mb-6 {
+    margin-bottom: 1.5rem;
+  }
+
+  .sm\\:mb-8 {
+    margin-bottom: 2rem;
+  }
+
+  .sm\\:mr-4 {
+    margin-right: 1rem;
+  }
+
+  .sm\\:mt-0 {
+    margin-top: 0px;
+  }
+
+  .sm\\:mt-4 {
+    margin-top: 1rem;
+  }
+
+  .sm\\:mt-8 {
+    margin-top: 2rem;
+  }
+
+  .sm\\:inline {
+    display: inline;
+  }
+
+  .sm\\:flex {
+    display: flex;
+  }
+
+  .sm\\:h-4 {
+    height: 1rem;
+  }
+
+  .sm\\:h-5 {
+    height: 1.25rem;
+  }
+
+  .sm\\:h-6 {
+    height: 1.5rem;
+  }
+
+  .sm\\:h-8 {
+    height: 2rem;
+  }
+
+  .sm\\:w-4 {
+    width: 1rem;
+  }
+
+  .sm\\:w-5 {
+    width: 1.25rem;
+  }
+
+  .sm\\:w-6 {
+    width: 1.5rem;
+  }
+
+  .sm\\:w-8 {
+    width: 2rem;
+  }
+
+  .sm\\:max-w-sm {
+    max-width: 24rem;
+  }
+
+  .sm\\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .sm\\:flex-row {
+    flex-direction: row;
+  }
+
+  .sm\\:flex-col {
+    flex-direction: column;
+  }
+
+  .sm\\:items-center {
+    align-items: center;
+  }
+
+  .sm\\:justify-start {
+    justify-content: flex-start;
+  }
+
+  .sm\\:justify-end {
+    justify-content: flex-end;
+  }
+
+  .sm\\:justify-between {
+    justify-content: space-between;
+  }
+
+  .sm\\:gap-2 {
+    gap: 0.5rem;
+  }
+
+  .sm\\:gap-2\\.5 {
+    gap: 0.625rem;
+  }
+
+  .sm\\:gap-4 {
+    gap: 1rem;
+  }
+
+  .sm\\:gap-6 {
+    gap: 1.5rem;
+  }
+
+  .sm\\:gap-8 {
+    gap: 2rem;
+  }
+
+  .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(0.5rem * var(--tw-space-x-reverse));
+    margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\\:space-x-3 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(0.75rem * var(--tw-space-x-reverse));
+    margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-x-reverse: 0;
+    margin-right: calc(1rem * var(--tw-space-x-reverse));
+    margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));
+  }
+
+  .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-y-reverse: 0;
+    margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));
+    margin-bottom: calc(0px * var(--tw-space-y-reverse));
+  }
+
+  .sm\\:space-y-2 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-y-reverse: 0;
+    margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));
+    margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));
+  }
+
+  .sm\\:space-y-3 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-y-reverse: 0;
+    margin-top: calc(0.75rem * calc(1 - var(--tw-space-y-reverse)));
+    margin-bottom: calc(0.75rem * var(--tw-space-y-reverse));
+  }
+
+  .sm\\:space-y-8 > :not([hidden]) ~ :not([hidden]) {
+    --tw-space-y-reverse: 0;
+    margin-top: calc(2rem * calc(1 - var(--tw-space-y-reverse)));
+    margin-bottom: calc(2rem * var(--tw-space-y-reverse));
+  }
+
+  .sm\\:self-auto {
+    align-self: auto;
+  }
+
+  .sm\\:rounded-lg {
+    border-radius: var(--radius);
+  }
+
+  .sm\\:p-3 {
+    padding: 0.75rem;
+  }
+
+  .sm\\:p-4 {
+    padding: 1rem;
+  }
+
+  .sm\\:p-6 {
+    padding: 1.5rem;
+  }
+
+  .sm\\:px-2 {
+    padding-left: 0.5rem;
+    padding-right: 0.5rem;
+  }
+
+  .sm\\:px-6 {
+    padding-left: 1.5rem;
+    padding-right: 1.5rem;
+  }
+
+  .sm\\:py-12 {
+    padding-top: 3rem;
+    padding-bottom: 3rem;
+  }
+
+  .sm\\:pb-6 {
+    padding-bottom: 1.5rem;
+  }
+
+  .sm\\:pt-4 {
+    padding-top: 1rem;
+  }
+
+  .sm\\:pt-6 {
+    padding-top: 1.5rem;
+  }
+
+  .sm\\:text-left {
+    text-align: left;
+  }
+
+  .sm\\:text-2xl {
+    font-size: 1.5rem;
+    line-height: 2rem;
+  }
+
+  .sm\\:text-4xl {
+    font-size: 2.25rem;
+    line-height: 2.5rem;
+  }
+
+  .sm\\:text-base {
+    font-size: 1rem;
+    line-height: 1.5rem;
+  }
+
+  .sm\\:text-lg {
+    font-size: 1.125rem;
+    line-height: 1.75rem;
+  }
+
+  .sm\\:text-sm {
+    font-size: 0.875rem;
+    line-height: 1.25rem;
+  }
+
+  .sm\\:text-xl {
+    font-size: 1.25rem;
+    line-height: 1.75rem;
+  }
+
+  .data-\\[state\\=open\\]\\:sm\\:slide-in-from-bottom-full[data-state="open"] {
+    --tw-enter-translate-y: 100%;
+  }
+}
+
+@media (min-width: 768px) {
+  .md\\:absolute {
+    position: absolute;
+  }
+
+  .md\\:block {
+    display: block;
+  }
+
+  .md\\:flex {
+    display: flex;
+  }
+
+  .md\\:w-\\[var\\(--radix-navigation-menu-viewport-width\\)\\] {
+    width: var(--radix-navigation-menu-viewport-width);
+  }
+
+  .md\\:w-auto {
+    width: auto;
+  }
+
+  .md\\:max-w-\\[420px\\] {
+    max-width: 420px;
+  }
+
+  .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\\:text-sm {
+    font-size: 0.875rem;
+    line-height: 1.25rem;
+  }
+
+  .md\\:opacity-0 {
+    opacity: 0;
+  }
+
+  .after\\:md\\:hidden::after {
+    content: var(--tw-content);
+    display: none;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:m-2 {
+    margin: 0.5rem;
+  }
+
+  .peer[data-state="collapsed"][data-variant="inset"] ~ .md\\:peer-data-\\[state\\=collapsed\\]\\:peer-data-\\[variant\\=inset\\]\\:ml-2 {
+    margin-left: 0.5rem;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:ml-0 {
+    margin-left: 0px;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:rounded-xl {
+    border-radius: 0.75rem;
+  }
+
+  .peer[data-variant="inset"] ~ .md\\:peer-data-\\[variant\\=inset\\]\\:shadow {
+    --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
+    --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
+    box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
+  }
+}
+
+@media (min-width: 1024px) {
+  .lg\\:col-span-1 {
+    grid-column: span 1 / span 1;
+  }
+
+  .lg\\:grid-cols-2 {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
+
+  .lg\\:grid-cols-3 {
+    grid-template-columns: repeat(3, minmax(0, 1fr));
+  }
+
+  .lg\\:px-8 {
+    padding-left: 2rem;
+    padding-right: 2rem;
+  }
+}
+
+.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {
+  background-color: hsl(var(--accent));
+}
+
+.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {
+  border-top-left-radius: calc(var(--radius) - 2px);
+  border-bottom-left-radius: calc(var(--radius) - 2px);
+}
+
+.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.\\[\\&\\:has\\(\\[aria-selected\\]\\.day-outside\\)\\]\\:bg-accent\\/50:has([aria-selected].day-outside) {
+  background-color: hsl(var(--accent) / 0.5);
+}
+
+.\\[\\&\\:has\\(\\[aria-selected\\]\\.day-range-end\\)\\]\\:rounded-r-md:has([aria-selected].day-range-end) {
+  border-top-right-radius: calc(var(--radius) - 2px);
+  border-bottom-right-radius: calc(var(--radius) - 2px);
+}
+
+.\\[\\&\\:has\\(\\[role\\=checkbox\\]\\)\\]\\:pr-0:has([role=checkbox]) {
+  padding-right: 0px;
+}
+
+.\\[\\&\\>button\\]\\:hidden>button {
+  display: none;
+}
+
+.\\[\\&\\>span\\:last-child\\]\\:truncate>span:last-child {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.\\[\\&\\>span\\]\\:line-clamp-1>span {
+  overflow: hidden;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 1;
+}
+
+.\\[\\&\\>svg\\+div\\]\\:translate-y-\\[-3px\\]>svg+div {
+  --tw-translate-y: -3px;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\\[\\&\\>svg\\]\\:absolute>svg {
+  position: absolute;
+}
+
+.\\[\\&\\>svg\\]\\:left-4>svg {
+  left: 1rem;
+}
+
+.\\[\\&\\>svg\\]\\:top-4>svg {
+  top: 1rem;
+}
+
+.\\[\\&\\>svg\\]\\:size-3\\.5>svg {
+  width: 0.875rem;
+  height: 0.875rem;
+}
+
+.\\[\\&\\>svg\\]\\:size-4>svg {
+  width: 1rem;
+  height: 1rem;
+}
+
+.\\[\\&\\>svg\\]\\:h-2\\.5>svg {
+  height: 0.625rem;
+}
+
+.\\[\\&\\>svg\\]\\:h-3>svg {
+  height: 0.75rem;
+}
+
+.\\[\\&\\>svg\\]\\:w-2\\.5>svg {
+  width: 0.625rem;
+}
+
+.\\[\\&\\>svg\\]\\:w-3>svg {
+  width: 0.75rem;
+}
+
+.\\[\\&\\>svg\\]\\:shrink-0>svg {
+  flex-shrink: 0;
+}
+
+.\\[\\&\\>svg\\]\\:text-destructive>svg {
+  color: hsl(var(--destructive));
+}
+
+.\\[\\&\\>svg\\]\\:text-foreground>svg {
+  color: hsl(var(--foreground));
+}
+
+.\\[\\&\\>svg\\]\\:text-muted-foreground>svg {
+  color: hsl(var(--muted-foreground));
+}
+
+.\\[\\&\\>svg\\]\\:text-sidebar-accent-foreground>svg {
+  color: hsl(var(--sidebar-accent-foreground));
+}
+
+.\\[\\&\\>svg\\~\\*\\]\\:pl-7>svg~* {
+  padding-left: 1.75rem;
+}
+
+.\\[\\&\\>tr\\]\\:last\\:border-b-0:last-child>tr {
+  border-bottom-width: 0px;
+}
+
+.\\[\\&\\[data-panel-group-direction\\=vertical\\]\\>div\\]\\:rotate-90[data-panel-group-direction=vertical]>div {
+  --tw-rotate: 90deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {
+  --tw-rotate: 180deg;
+  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
+}
+
+.\\[\\&_\\.recharts-cartesian-axis-tick_text\\]\\:fill-muted-foreground .recharts-cartesian-axis-tick text {
+  fill: hsl(var(--muted-foreground));
+}
+
+.\\[\\&_\\.recharts-cartesian-grid_line\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border\\/50 .recharts-cartesian-grid line[stroke='#ccc'] {
+  stroke: hsl(var(--border) / 0.5);
+}
+
+.\\[\\&_\\.recharts-curve\\.recharts-tooltip-cursor\\]\\:stroke-border .recharts-curve.recharts-tooltip-cursor {
+  stroke: hsl(var(--border));
+}
+
+.\\[\\&_\\.recharts-dot\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-dot[stroke='#fff'] {
+  stroke: transparent;
+}
+
+.\\[\\&_\\.recharts-layer\\]\\:outline-none .recharts-layer {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\\[\\&_\\.recharts-polar-grid_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-polar-grid [stroke='#ccc'] {
+  stroke: hsl(var(--border));
+}
+
+.\\[\\&_\\.recharts-radial-bar-background-sector\\]\\:fill-muted .recharts-radial-bar-background-sector {
+  fill: hsl(var(--muted));
+}
+
+.\\[\\&_\\.recharts-rectangle\\.recharts-tooltip-cursor\\]\\:fill-muted .recharts-rectangle.recharts-tooltip-cursor {
+  fill: hsl(var(--muted));
+}
+
+.\\[\\&_\\.recharts-reference-line_\\[stroke\\=\\'\\#ccc\\'\\]\\]\\:stroke-border .recharts-reference-line [stroke='#ccc'] {
+  stroke: hsl(var(--border));
+}
+
+.\\[\\&_\\.recharts-sector\\[stroke\\=\\'\\#fff\\'\\]\\]\\:stroke-transparent .recharts-sector[stroke='#fff'] {
+  stroke: transparent;
+}
+
+.\\[\\&_\\.recharts-sector\\]\\:outline-none .recharts-sector {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\\[\\&_\\.recharts-surface\\]\\:outline-none .recharts-surface {
+  outline: 2px solid transparent;
+  outline-offset: 2px;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {
+  padding-top: 0.375rem;
+  padding-bottom: 0.375rem;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {
+  font-size: 0.75rem;
+  line-height: 1rem;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {
+  font-weight: 500;
+}
+
+.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {
+  color: hsl(var(--muted-foreground));
+}
+
+.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {
+  padding-top: 0px;
+}
+
+.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {
+  height: 1.25rem;
+}
+
+.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {
+  width: 1.25rem;
+}
+
+.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {
+  height: 3rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {
+  padding-left: 0.5rem;
+  padding-right: 0.5rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {
+  padding-top: 0.75rem;
+  padding-bottom: 0.75rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {
+  height: 1.25rem;
+}
+
+.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {
+  width: 1.25rem;
+}
+
+.\\[\\&_p\\]\\:leading-relaxed p {
+  line-height: 1.625;
+}
+
+.\\[\\&_svg\\]\\:pointer-events-none svg {
+  pointer-events: none;
+}
+
+.\\[\\&_svg\\]\\:size-4 svg {
+  width: 1rem;
+  height: 1rem;
+}
+
+.\\[\\&_svg\\]\\:shrink-0 svg {
+  flex-shrink: 0;
+}
+
+.\\[\\&_tr\\:last-child\\]\\:border-0 tr:last-child {
+  border-width: 0px;
+}
+
+.\\[\\&_tr\\]\\:border-b tr {
+  border-bottom-width: 1px;
+}
+
+[data-side=left][data-collapsible=offcanvas] .\\[\\[data-side\\=left\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-right-2 {
+  right: -0.5rem;
+}
+
+[data-side=left][data-state=collapsed] .\\[\\[data-side\\=left\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-e-resize {
+  cursor: e-resize;
+}
+
+[data-side=left] .\\[\\[data-side\\=left\\]_\\&\\]\\:cursor-w-resize {
+  cursor: w-resize;
+}
+
+[data-side=right][data-collapsible=offcanvas] .\\[\\[data-side\\=right\\]\\[data-collapsible\\=offcanvas\\]_\\&\\]\\:-left-2 {
+  left: -0.5rem;
+}
+
+[data-side=right][data-state=collapsed] .\\[\\[data-side\\=right\\]\\[data-state\\=collapsed\\]_\\&\\]\\:cursor-w-resize {
+  cursor: w-resize;
+}
+
+[data-side=right] .\\[\\[data-side\\=right\\]_\\&\\]\\:cursor-e-resize {
+  cursor: e-resize;
+}
+`;window.__BENCHMARK_CSS__=kie;function Vg(){try{if(typeof window>"u")return;const e=document.querySelectorAll('[data-react-component="benchmark-dashboard"]');if(e.length===0)return;e.forEach((t,n)=>{var r;try{const a=t;if(a.dataset.reactInitialized==="true")return;const o={apiBase:a.dataset.apiBase,initialVersion:a.dataset.version||"latest",theme:a.dataset.theme||"light",containerClassName:a.dataset.containerClass||"",containerId:`benchmark-dashboard-${n}`,features:{header:a.dataset.showHeader==="true",versionSelector:a.dataset.showVersionSelector!=="false",summaryCards:a.dataset.showSummaryCards!=="false",tabs:((r=a.dataset.tabs)==null?void 0:r.split(",").map(s=>s.trim()))||["overview","latency","resources"]}};Ic.createRoot(a).render(b.jsx(E.StrictMode,{children:b.jsx(Oie,{...o})})),a.dataset.reactInitialized="true"}catch(a){console.error(`Error initializing benchmark dashboard ${n+1}:`,a)}})}catch(e){console.error("Error in benchmark dashboard initialization:",e)}}function $2(){setTimeout(()=>{Vg()},100)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",$2):$2();window.addEventListener("load",()=>{setTimeout(Vg,200)});window.initializeBenchmarkDashboardShadow=Vg;
diff --git a/site/tools/benchmark-dashboard/README.md b/site/tools/benchmark-dashboard/README.md
new file mode 100644
index 000000000..81902d5d1
--- /dev/null
+++ b/site/tools/benchmark-dashboard/README.md
@@ -0,0 +1,96 @@
+# Benchmark Explorer
+
+A web-based dashboard for visualizing and comparing performance benchmarks across different versions of your project.
+
+## What is it?
+
+The Benchmark Explorer is an interactive dashboard that helps you:
+
+- **📊 Visualize Performance Data** - View benchmark results in charts and graphs
+- **🔍 Compare Versions** - See how performance changes between different releases
+- **📈 Track Trends** - Monitor performance improvements or regressions over time
+- **🎯 Identify Issues** - Spot performance bottlenecks and areas for optimization
+
+## Key Features
+
+- Interactive charts showing latency, throughput, and resource usage
+- Version comparison to track performance changes
+- Responsive design that works on desktop and mobile
+- Light and dark theme support
+- Easy integration with Hugo static sites
+
+## How to Use
+
+### 1. Build the Dashboard
+
+```bash
+npm install
+npm run build
+```
+
+### 2. Add to Hugo Site
+
+Include the CSS and JavaScript files in your Hugo template:
+
+```html
+<link rel="stylesheet" href="/css/benchmark-dashboard.css">
+<script src="/js/benchmark-dashboard-shadow.js" defer></script>
+```
+
+### 3. Add the Dashboard to a Page
+
+```html
+<div data-react-component="benchmark-dashboard"
+     data-theme="light">
+</div>
+```
+
+## Configuration
+
+You can customize the dashboard behavior with these options:
+
+| Option | Description | Default |
+|--------|-------------|---------|
+| `data-theme` | Color theme (`light` or `dark`) | `light` |
+| `data-version` | Which version to show initially | First available version |
+| `data-tabs` | Which tabs to display | `overview,latency,resources` |
+| `data-show-header` | Show the dashboard title | `false` |
+
+## Example
+
+```html
+<div data-react-component="benchmark-dashboard"
+     data-theme="dark"
+     data-version="v2.1.0"
+     data-tabs="overview,latency"
+     data-show-header="true">
+</div>
+```
+
+## Development
+
+To work on the dashboard locally:
+
+```bash
+# Install dependencies
+npm install
+
+# Start development server
+npm run dev
+
+# Build for production
+npm run build
+```
+
+## Data Format
+
+The dashboard expects your benchmark data to be available via API endpoints:
+
+- `/api/versions` - List of available versions
+- `/api/data/{version}` - Performance data for a specific version
+
+See your project's API documentation for the exact data format expected.
+
+## Browser Support
+
+Works in all modern browsers (Chrome, Firefox, Safari, Edge). Internet Explorer is not supported.
diff --git a/site/tools/benchmark-dashboard/components.json b/site/tools/benchmark-dashboard/components.json
new file mode 100644
index 000000000..f29e3f161
--- /dev/null
+++ b/site/tools/benchmark-dashboard/components.json
@@ -0,0 +1,20 @@
+{
+  "$schema": "https://ui.shadcn.com/schema.json",
+  "style": "default",
+  "rsc": false,
+  "tsx": true,
+  "tailwind": {
+    "config": "tailwind.config.ts",
+    "css": "src/index.css",
+    "baseColor": "slate",
+    "cssVariables": true,
+    "prefix": ""
+  },
+  "aliases": {
+    "components": "@/components",
+    "utils": "@/lib/utils",
+    "ui": "@/components/ui",
+    "lib": "@/lib",
+    "hooks": "@/hooks"
+  }
+}
\ No newline at end of file
diff --git a/site/tools/benchmark-dashboard/eslint.config.js b/site/tools/benchmark-dashboard/eslint.config.js
new file mode 100644
index 000000000..e67846f70
--- /dev/null
+++ b/site/tools/benchmark-dashboard/eslint.config.js
@@ -0,0 +1,29 @@
+import js from "@eslint/js";
+import globals from "globals";
+import reactHooks from "eslint-plugin-react-hooks";
+import reactRefresh from "eslint-plugin-react-refresh";
+import tseslint from "typescript-eslint";
+
+export default tseslint.config(
+  { ignores: ["dist"] },
+  {
+    extends: [js.configs.recommended, ...tseslint.configs.recommended],
+    files: ["**/*.{ts,tsx}"],
+    languageOptions: {
+      ecmaVersion: 2020,
+      globals: globals.browser,
+    },
+    plugins: {
+      "react-hooks": reactHooks,
+      "react-refresh": reactRefresh,
+    },
+    rules: {
+      ...reactHooks.configs.recommended.rules,
+      "react-refresh/only-export-components": [
+        "warn",
+        { allowConstantExport: true },
+      ],
+      "@typescript-eslint/no-unused-vars": "off",
+    },
+  }
+);
diff --git a/site/tools/benchmark-dashboard/package.json b/site/tools/benchmark-dashboard/package.json
new file mode 100644
index 000000000..8a09f310d
--- /dev/null
+++ b/site/tools/benchmark-dashboard/package.json
@@ -0,0 +1,57 @@
+{
+  "name": "benchmark-dashboard",
+  "private": true,
+  "version": "0.0.0",
+  "type": "module",
+  "scripts": {
+    "dev": "vite --host 0.0.0.0 --port 8080",
+    "build": "npm run build:css:once && vite build && npm run postbuild",
+    "build:css:once": "tailwindcss -i ./src/index.css -o ./dist/benchmark-dashboard.css",
+    "build:css": "tailwindcss -i ./src/index.css -o ./dist/benchmark-dashboard.css --watch",
+    "postbuild": "cp dist/*.js ../../static/js/ && cp dist/*.css ../../static/css/",
+    "preview": "vite preview",
+    "typecheck": "tsc --noEmit"
+  },
+  "dependencies": {
+    "@headlessui/react": "^2.2.0",
+    "@heroicons/react": "^2.2.0",
+    "@radix-ui/react-accordion": "^1.2.1",
+    "@radix-ui/react-alert-dialog": "^1.1.2",
+    "@radix-ui/react-dialog": "^1.1.2",
+    "@radix-ui/react-dropdown-menu": "^2.1.2",
+    "@radix-ui/react-label": "^2.1.0",
+    "@radix-ui/react-popover": "^1.1.2",
+    "@radix-ui/react-select": "^2.1.2",
+    "@radix-ui/react-separator": "^1.1.0",
+    "@radix-ui/react-slot": "^1.1.0",
+    "@radix-ui/react-tabs": "^1.1.1",
+    "@radix-ui/react-tooltip": "^1.1.3",
+    "@tanstack/react-query": "^5.62.2",
+    "class-variance-authority": "^0.7.0",
+    "clsx": "^2.1.1",
+    "cmdk": "1.0.0",
+    "lucide-react": "^0.462.0",
+    "react": "^18.3.1",
+    "react-dom": "^18.3.1",
+    "recharts": "^2.13.3",
+    "tailwind-merge": "^2.5.4",
+    "tailwindcss-animate": "^1.0.7"
+  },
+  "devDependencies": {
+    "@eslint/js": "^9.17.0",
+    "@types/node": "^22.10.1",
+    "@types/react": "^18.3.17",
+    "@types/react-dom": "^18.3.5",
+    "@vitejs/plugin-react-swc": "^3.7.2",
+    "autoprefixer": "^10.4.20",
+    "eslint": "^9.17.0",
+    "eslint-plugin-react-hooks": "^5.0.0",
+    "eslint-plugin-react-refresh": "^0.4.16",
+    "globals": "^15.13.0",
+    "postcss": "^8.5.0",
+    "tailwindcss": "^3.4.17",
+    "typescript": "~5.6.2",
+    "typescript-eslint": "^8.17.0",
+    "vite": "^5.4.19"
+  }
+}
diff --git a/site/tools/benchmark-dashboard/postcss.config.js b/site/tools/benchmark-dashboard/postcss.config.js
new file mode 100644
index 000000000..2e7af2b7f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+  plugins: {
+    tailwindcss: {},
+    autoprefixer: {},
+  },
+}
diff --git a/site/tools/benchmark-dashboard/src/components/BenchmarkReport.tsx b/site/tools/benchmark-dashboard/src/components/BenchmarkReport.tsx
new file mode 100644
index 000000000..14edccb56
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/BenchmarkReport.tsx
@@ -0,0 +1,262 @@
+import React, { useState, useEffect } from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Button } from '@/components/ui/button';
+import { Badge } from '@/components/ui/badge';
+import { Separator } from '@/components/ui/separator';
+import { RefreshCw, Download, AlertCircle, CheckCircle, Clock } from 'lucide-react';
+import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
+
+interface BenchmarkData {
+  timestamp: string;
+  version: string;
+  report: {
+    title: string;
+    sections: Array<{
+      title: string;
+      content: string;
+      level: number;
+    }>;
+    metrics: Record<string, number>;
+    summary?: string;
+  };
+  rawMarkdown?: string;
+}
+
+interface BenchmarkReportProps {
+  className?: string;
+}
+
+export const BenchmarkReport: React.FC<BenchmarkReportProps> = ({ className }) => {
+  const [benchmarkData, setBenchmarkData] = useState<BenchmarkData | null>(null);
+  const [loading, setLoading] = useState(false);
+  const [error, setError] = useState<string | null>(null);
+  const [refreshing, setRefreshing] = useState(false);
+
+  // Fetch the latest benchmark report
+  const fetchLatestReport = async () => {
+    setLoading(true);
+    setError(null);
+
+    try {
+      const response = await fetch('/api/benchmark-report/latest');
+
+      if (!response.ok) {
+        const errorData = await response.json();
+        throw new Error(errorData.error || 'Failed to fetch benchmark report');
+      }
+
+      const data = await response.json();
+      setBenchmarkData(data);
+    } catch (err) {
+      setError(err instanceof Error ? err.message : 'An unknown error occurred');
+    } finally {
+      setLoading(false);
+    }
+  };
+
+  // Trigger a fresh fetch of the benchmark report from GitHub
+  const refreshReport = async () => {
+    setRefreshing(true);
+    setError(null);
+
+    try {
+      const response = await fetch('/api/benchmark-report', {
+        method: 'POST'
+      });
+
+      if (!response.ok) {
+        const errorData = await response.json();
+        throw new Error(errorData.error || 'Failed to refresh benchmark report');
+      }
+
+      const result = await response.json();
+
+      // After successful refresh, fetch the latest data
+      await fetchLatestReport();
+
+    } catch (err) {
+      setError(err instanceof Error ? err.message : 'An unknown error occurred');
+    } finally {
+      setRefreshing(false);
+    }
+  };
+
+  // Load data on component mount
+  useEffect(() => {
+    fetchLatestReport();
+  }, []);
+
+  const formatTimestamp = (timestamp: string) => {
+    return new Date(timestamp).toLocaleString();
+  };
+
+  const renderMetrics = (metrics: Record<string, number>) => {
+    return Object.entries(metrics).map(([key, value]) => (
+      <div key={key} className="flex justify-between items-center py-2">
+        <span className="text-sm font-medium capitalize">
+          {key.replace(/_/g, ' ')}
+        </span>
+        <Badge variant="outline">{value}</Badge>
+      </div>
+    ));
+  };
+
+  const renderSections = (sections: Array<{ title: string; content: string; level: number }>) => {
+    return sections.map((section, index) => (
+      <div key={index} className="mb-6">
+        <h3 className="text-lg font-semibold mb-3">{section.title}</h3>
+        <div className="prose prose-sm max-w-none">
+          <pre className="whitespace-pre-wrap text-sm bg-gray-50 p-4 rounded-lg">
+            {section.content}
+          </pre>
+        </div>
+      </div>
+    ));
+  };
+
+  return (
+    <div className={`space-y-6 ${className}`}>
+      <Card>
+        <CardHeader>
+          <div className="flex items-center justify-between">
+            <div>
+              <CardTitle className="flex items-center gap-2">
+                <span>Envoy Gateway Benchmark Report</span>
+                {benchmarkData && (
+                  <Badge variant="secondary">
+                    {benchmarkData.version}
+                  </Badge>
+                )}
+              </CardTitle>
+              <CardDescription>
+                Latest performance benchmarks from Envoy Gateway releases
+              </CardDescription>
+            </div>
+            <div className="flex gap-2">
+              <Button
+                variant="outline"
+                size="sm"
+                onClick={fetchLatestReport}
+                disabled={loading}
+              >
+                <RefreshCw className={`h-4 w-4 ${loading ? 'animate-spin' : ''}`} />
+                Reload
+              </Button>
+              <Button
+                variant="default"
+                size="sm"
+                onClick={refreshReport}
+                disabled={refreshing}
+              >
+                <Download className={`h-4 w-4 ${refreshing ? 'animate-spin' : ''}`} />
+                Fetch Latest
+              </Button>
+            </div>
+          </div>
+        </CardHeader>
+
+        <CardContent>
+          {error && (
+            <Alert className="mb-4">
+              <AlertCircle className="h-4 w-4" />
+              <AlertTitle>Error</AlertTitle>
+              <AlertDescription>{error}</AlertDescription>
+            </Alert>
+          )}
+
+          {loading && (
+            <div className="flex items-center justify-center py-8">
+              <RefreshCw className="h-6 w-6 animate-spin mr-2" />
+              <span>Loading benchmark report...</span>
+            </div>
+          )}
+
+          {refreshing && (
+            <Alert className="mb-4">
+              <Clock className="h-4 w-4" />
+              <AlertTitle>Fetching Latest Report</AlertTitle>
+              <AlertDescription>
+                Downloading and processing the latest benchmark report from GitHub...
+              </AlertDescription>
+            </Alert>
+          )}
+
+          {benchmarkData && !loading && (
+            <div className="space-y-6">
+              {/* Report Header */}
+              <div className="flex items-center justify-between">
+                <div>
+                  <h2 className="text-xl font-bold">{benchmarkData.report.title}</h2>
+                  <p className="text-sm text-muted-foreground mt-1">
+                    Last updated: {formatTimestamp(benchmarkData.timestamp)}
+                  </p>
+                </div>
+                <Alert className="w-auto">
+                  <CheckCircle className="h-4 w-4" />
+                  <AlertDescription>Report loaded successfully</AlertDescription>
+                </Alert>
+              </div>
+
+              <Separator />
+
+              {/* Metrics Overview */}
+              {benchmarkData.report.metrics && Object.keys(benchmarkData.report.metrics).length > 0 && (
+                <Card>
+                  <CardHeader>
+                    <CardTitle className="text-lg">Key Metrics</CardTitle>
+                  </CardHeader>
+                  <CardContent>
+                    <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
+                      {renderMetrics(benchmarkData.report.metrics)}
+                    </div>
+                  </CardContent>
+                </Card>
+              )}
+
+              {/* Report Sections */}
+              {benchmarkData.report.sections && benchmarkData.report.sections.length > 0 && (
+                <Card>
+                  <CardHeader>
+                    <CardTitle className="text-lg">Detailed Report</CardTitle>
+                  </CardHeader>
+                  <CardContent>
+                    {renderSections(benchmarkData.report.sections)}
+                  </CardContent>
+                </Card>
+              )}
+
+              {/* Raw Markdown */}
+              {benchmarkData.rawMarkdown && (
+                <Card>
+                  <CardHeader>
+                    <CardTitle className="text-lg">Raw Report</CardTitle>
+                    <CardDescription>
+                      Original markdown content from the benchmark report
+                    </CardDescription>
+                  </CardHeader>
+                  <CardContent>
+                    <pre className="whitespace-pre-wrap text-xs bg-gray-50 p-4 rounded-lg max-h-96 overflow-y-auto">
+                      {benchmarkData.rawMarkdown}
+                    </pre>
+                  </CardContent>
+                </Card>
+              )}
+            </div>
+          )}
+
+          {!benchmarkData && !loading && !error && (
+            <div className="text-center py-8">
+              <p className="text-muted-foreground mb-4">
+                No benchmark report available yet.
+              </p>
+              <Button onClick={refreshReport} disabled={refreshing}>
+                <Download className="h-4 w-4 mr-2" />
+                Fetch First Report
+              </Button>
+            </div>
+          )}
+        </CardContent>
+      </Card>
+    </div>
+  );
+};
diff --git a/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx b/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx
new file mode 100644
index 000000000..14645ac50
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/BenchmarkTakeaways.tsx
@@ -0,0 +1,295 @@
+
+import React from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Badge } from '@/components/ui/badge';
+import { Alert, AlertDescription } from '@/components/ui/alert';
+import { Separator } from '@/components/ui/separator';
+import {
+  CheckCircle,
+  Clock,
+  MemoryStick,
+  Cpu,
+  Zap,
+  TrendingUp,
+  Target,
+  Shield,
+  Database,
+  Server,
+  Users,
+  BookOpen,
+  Lightbulb,
+  Info
+} from 'lucide-react';
+
+interface BenchmarkTakeawaysProps {
+  version?: string;
+}
+
+export const BenchmarkTakeaways: React.FC<BenchmarkTakeawaysProps> = ({
+  version = '1.4.1'
+}) => {
+  const performanceInsights = [
+    {
+      icon: CheckCircle,
+      title: 'Throughput Stays Consistent',
+      description: 'Your request processing performance won\'t degrade as you add more routes (10-1000 routes tested)',
+      category: 'Performance'
+    },
+    {
+      icon: Clock,
+      title: 'User Experience Stays Reliable',
+      description: 'Total response time remains low (6-8ms mean, ~50ms P95) regardless of route count',
+      category: 'Performance'
+    },
+    {
+      icon: Target,
+      title: 'Consistently Fast Response Times',
+      description: 'Median response time stays around 3ms whether you have 10 routes or 1000 routes',
+      category: 'Latency'
+    },
+    {
+      icon: TrendingUp,
+      title: 'No Performance Degradation',
+      description: 'Adding more routes doesn\'t slow down your existing traffic',
+      category: 'Latency'
+    }
+  ];
+
+  const resourceInsights = [
+    {
+      icon: MemoryStick,
+      title: 'Predictable Infrastructure Costs',
+      description: 'Control plane memory grows predictably (~0.09MB per route) making capacity planning simple',
+      category: 'Planning'
+    },
+    {
+      icon: Zap,
+      title: 'Data Plane Gets More Efficient per Route',
+      description: 'Proxy memory plateaus around 128MB, so your per-route costs actually decrease as you add more routes',
+      category: 'Cost'
+    },
+    {
+      icon: Cpu,
+      title: 'Standard Kubernetes Resources Work Fine',
+      description: 'CPU stays manageable (<4% control plane, <17% data plane average) with 1 CPU core limits',
+      category: 'Infrastructure'
+    },
+    {
+      icon: TrendingUp,
+      title: 'Rolling Updates & Cleanup Are Low Risk',
+      description: 'Scale-down performs even better than scale-up, making route updates and cleanup safe',
+      category: 'Operations'
+    }
+  ];
+
+  const productionRecommendations = [
+    {
+      component: 'Envoy Gateway (Control Plane)',
+      icon: Database,
+      memory: '200-250MB (linear scaling ~0.09MB/route)',
+      cpu: '1 core (allow 2-4 cores for config update spikes)',
+      pattern: 'Predictable linear growth'
+    },
+    {
+      component: 'Envoy Proxy (Data Plane)',
+      icon: Server,
+      memory: '130MB plateau (step increases, then stable)',
+      cpu: '1 core avg (allow bursts to 100% during updates)',
+      pattern: 'Step-wise growth with plateau effect'
+    }
+  ];
+
+  return (
+    <div className="bg-muted/30 border-t">
+      <div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
+        {/* Header */}
+        <div className="text-center mb-12">
+          <div className="flex items-center justify-center mb-4">
+            <div className="bg-gradient-to-r from-purple-600 to-indigo-600 p-3 rounded-xl mr-4 shadow-sm">
+              <BookOpen className="h-6 w-6 text-white" />
+            </div>
+            <div className="text-left">
+              <h2 className="text-2xl font-bold text-foreground mb-1">
+                Key Takeaways
+              </h2>
+              <p className="text-sm text-muted-foreground">
+                Envoy Gateway v{version} Benchmark Report
+              </p>
+            </div>
+          </div>
+          <div className="max-w-4xl mx-auto">
+            <p className="text-base text-muted-foreground">
+              Essential insights and recommendations for production deployments
+            </p>
+          </div>
+        </div>
+
+        {/* Quick Summary Banner */}
+        <div className="mb-10">
+          <Alert className="border-2 border-blue-200 bg-blue-50/50">
+            <CheckCircle className="h-4 w-4 text-blue-600" />
+            <AlertDescription className="text-sm">
+              <strong className="font-semibold text-blue-800">Production Ready Summary:</strong>
+              <span className="text-blue-700"> Envoy Gateway v{version} demonstrates consistent performance across all scales (10-1000 routes)
+              with predictable resource usage and reliable latency characteristics suitable for enterprise production environments.</span>
+            </AlertDescription>
+          </Alert>
+        </div>
+
+        {/* Performance & Latency Insights */}
+        <div className="mb-10">
+          <div className="flex items-center gap-3 mb-6">
+            <Zap className="h-5 w-5 text-purple-600" />
+            <h3 className="text-lg font-bold text-foreground">Performance & User Experience</h3>
+          </div>
+
+          <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
+            {performanceInsights.map((insight, index) => {
+              const Icon = insight.icon;
+              return (
+                <Card key={index} className="hover:shadow-md transition-shadow duration-200">
+                  <CardContent className="p-4">
+                    <div className="flex items-start space-x-3">
+                      <div className="p-2 rounded-lg bg-gradient-to-r from-purple-100 to-indigo-100 flex-shrink-0">
+                        <Icon className="h-4 w-4 text-purple-600" />
+                      </div>
+                      <div className="flex-grow">
+                        <div className="flex items-center gap-2 mb-2">
+                          <h4 className="text-sm font-semibold text-foreground">
+                            {insight.title}
+                          </h4>
+                          <Badge variant="secondary" className="text-xs">
+                            {insight.category}
+                          </Badge>
+                        </div>
+                        <p className="text-xs text-muted-foreground leading-relaxed">
+                          {insight.description}
+                        </p>
+                      </div>
+                    </div>
+                  </CardContent>
+                </Card>
+              );
+            })}
+          </div>
+        </div>
+
+        {/* Resource Planning */}
+        <div className="mb-10">
+          <div className="flex items-center gap-3 mb-6">
+            <MemoryStick className="h-5 w-5 text-indigo-600" />
+            <h3 className="text-lg font-bold text-foreground">Resource Planning & Cost Optimization</h3>
+          </div>
+
+          <div className="grid grid-cols-1 lg:grid-cols-2 gap-4">
+            {resourceInsights.map((insight, index) => {
+              const Icon = insight.icon;
+              return (
+                <Card key={index} className="hover:shadow-md transition-shadow duration-200">
+                  <CardContent className="p-4">
+                    <div className="flex items-start space-x-3">
+                      <div className="p-2 rounded-lg bg-gradient-to-r from-indigo-100 to-blue-100 flex-shrink-0">
+                        <Icon className="h-4 w-4 text-indigo-600" />
+                      </div>
+                      <div className="flex-grow">
+                        <div className="flex items-center gap-2 mb-2">
+                          <h4 className="text-sm font-semibold text-foreground">
+                            {insight.title}
+                          </h4>
+                          <Badge variant="secondary" className="text-xs">
+                            {insight.category}
+                          </Badge>
+                        </div>
+                        <p className="text-xs text-muted-foreground leading-relaxed">
+                          {insight.description}
+                        </p>
+                      </div>
+                    </div>
+                  </CardContent>
+                </Card>
+              );
+            })}
+          </div>
+        </div>
+
+        {/* Production Sizing Recommendations */}
+        <Card className="mb-10 shadow-sm">
+          <CardHeader className="bg-gradient-to-r from-blue-50 to-indigo-50">
+            <div className="flex items-center gap-3">
+              <Server className="h-5 w-5 text-blue-600" />
+              <div>
+                <CardTitle className="text-lg">Production Sizing Recommendations</CardTitle>
+                <CardDescription className="text-sm mt-1">
+                  Concrete resource allocations based on benchmark results
+                </CardDescription>
+              </div>
+            </div>
+          </CardHeader>
+          <CardContent className="p-6">
+            <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+              {productionRecommendations.map((rec, index) => {
+                const Icon = rec.icon;
+                return (
+                  <div key={index} className="p-4 rounded-lg border bg-gradient-to-r from-blue-50/50 to-indigo-50/50 hover:shadow-sm transition-shadow">
+                    <div className="flex items-center gap-3 mb-4">
+                      <Icon className="h-5 w-5 text-blue-600" />
+                      <h4 className="text-base font-semibold text-foreground">{rec.component}</h4>
+                    </div>
+                    <div className="space-y-3">
+                      <div className="flex justify-between items-start">
+                        <span className="font-medium text-foreground text-sm">Memory:</span>
+                        <span className="text-muted-foreground text-right flex-1 ml-3 text-sm">{rec.memory}</span>
+                      </div>
+                      <div className="flex justify-between items-start">
+                        <span className="font-medium text-foreground text-sm">CPU:</span>
+                        <span className="text-muted-foreground text-right flex-1 ml-3 text-sm">{rec.cpu}</span>
+                      </div>
+                      <div className="flex justify-between items-start">
+                        <span className="font-medium text-foreground text-sm">Pattern:</span>
+                        <span className="text-muted-foreground text-right flex-1 ml-3 text-sm">{rec.pattern}</span>
+                      </div>
+                    </div>
+                  </div>
+                );
+              })}
+            </div>
+          </CardContent>
+        </Card>
+
+        {/* Bottom Line */}
+        <Card className="shadow-sm border-2 border-purple-200 bg-gradient-to-r from-purple-50/50 to-indigo-50/50">
+          <CardHeader className="text-center pb-3">
+            <div className="flex items-center justify-start gap-3 mb-3">
+              <div className="bg-gradient-to-r from-purple-600 to-indigo-600 p-3 rounded-xl shadow-sm">
+                <Lightbulb className="h-6 w-6 text-white" />
+              </div>
+              <div className="text-left">
+                <CardTitle className="text-xl text-foreground">Bottom Line</CardTitle>
+                <CardDescription className="text-sm text-muted-foreground mt-1">
+                  What this means for your production deployment
+                </CardDescription>
+              </div>
+            </div>
+          </CardHeader>
+          <CardContent className="px-6 pb-6">
+
+            <div className="bg-white rounded-lg p-5 shadow-sm border-2 border-purple-200">
+              <div className="flex items-start gap-3">
+                <div className="bg-gradient-to-r from-purple-600 to-indigo-600 p-2 rounded-lg shadow-sm flex-shrink-0">
+                  <CheckCircle className="h-4 w-4 text-white" />
+                </div>
+                <div>
+                  <h4 className="text-base font-bold text-foreground mb-2">Ready for Production</h4>
+                  <p className="text-muted-foreground text-sm leading-relaxed">
+                    Envoy Gateway v{version} demonstrates production-ready performance with predictable resource usage,
+                    consistent latency, and reliable throughput across all tested scales (10-1000 routes).
+                  </p>
+                </div>
+              </div>
+            </div>
+          </CardContent>
+        </Card>
+      </div>
+    </div>
+  );
+};
diff --git a/site/tools/benchmark-dashboard/src/components/DownloadLink.tsx b/site/tools/benchmark-dashboard/src/components/DownloadLink.tsx
new file mode 100644
index 000000000..a6e1fa05a
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/DownloadLink.tsx
@@ -0,0 +1,79 @@
+import React from 'react';
+import { Download, ExternalLink } from 'lucide-react';
+import { TestSuite } from '../data/types';
+
+interface DownloadLinkProps {
+  testSuite: TestSuite;
+  className?: string;
+  showIcon?: boolean;
+}
+
+export function DownloadLink({ testSuite, className = '', showIcon = true }: DownloadLinkProps) {
+  if (!testSuite.metadata.downloadUrl) {
+    return null;
+  }
+
+  return (
+    <a
+      href={testSuite.metadata.downloadUrl}
+      target="_blank"
+      rel="noopener noreferrer"
+      className={`inline-flex items-center gap-2 text-blue-600 hover:text-blue-800 hover:underline transition-colors ${className}`}
+      title={`Download raw benchmark data for version ${testSuite.metadata.version}`}
+    >
+      {showIcon && <Download size={16} />}
+      <span>Download Raw Data</span>
+      <ExternalLink size={14} className="opacity-60" />
+    </a>
+  );
+}
+
+interface DownloadButtonProps {
+  testSuite: TestSuite;
+  className?: string;
+  variant?: 'primary' | 'secondary' | 'outline';
+}
+
+export function DownloadButton({
+  testSuite,
+  className = '',
+  variant = 'outline'
+}: DownloadButtonProps) {
+  if (!testSuite.metadata.downloadUrl) {
+    return null;
+  }
+
+  const variantClasses = {
+    primary: 'bg-blue-600 text-white hover:bg-blue-700',
+    secondary: 'bg-gray-600 text-white hover:bg-gray-700',
+    outline: 'border border-gray-300 text-gray-700 hover:bg-gray-50'
+  };
+
+  return (
+    <a
+      href={testSuite.metadata.downloadUrl}
+      target="_blank"
+      rel="noopener noreferrer"
+      className={`inline-flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors ${variantClasses[variant]} ${className}`}
+      title={`Download raw benchmark data for version ${testSuite.metadata.version}`}
+    >
+      <Download size={16} />
+      <span>Download Data</span>
+    </a>
+  );
+}
+
+// Usage examples:
+//
+// Simple link:
+// <DownloadLink testSuite={testSuite} />
+//
+// Button style:
+// <DownloadButton testSuite={testSuite} variant="primary" />
+//
+// Custom styling:
+// <DownloadLink
+//   testSuite={testSuite}
+//   className="text-green-600 font-medium"
+//   showIcon={false}
+// />
diff --git a/site/tools/benchmark-dashboard/src/components/EmbeddableBenchmarkDashboard.tsx b/site/tools/benchmark-dashboard/src/components/EmbeddableBenchmarkDashboard.tsx
new file mode 100644
index 000000000..dabc6d25c
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/EmbeddableBenchmarkDashboard.tsx
@@ -0,0 +1,166 @@
+import React, { useState, useEffect } from 'react';
+import VersionSelector from './VersionSelector';
+import SummaryCards from './SummaryCards';
+import OverviewTab from './OverviewTab';
+import LatencyTab from './LatencyTab';
+import ResourcesTab from './ResourcesTab';
+import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
+import { useVersionData } from '@/hooks/useVersionData';
+
+export interface EmbeddableDashboardConfig {
+  apiBase?: string;
+  initialVersion?: string;
+  theme?: 'light' | 'dark';
+  containerClassName?: string;
+  features?: {
+    header?: boolean;
+    versionSelector?: boolean;
+    summaryCards?: boolean;
+    tabs?: string[]; // ['overview', 'latency', 'resources']
+  };
+}
+
+export const EmbeddableBenchmarkDashboard: React.FC<EmbeddableDashboardConfig> = ({
+  apiBase = 'https://envoy-gateway-benchmark-report.netlify.app/api',
+  initialVersion,
+  theme = 'light',
+  containerClassName = '',
+  features = {
+    header: false, // Let Hugo handle the header
+    versionSelector: true,
+    summaryCards: true,
+    tabs: ['overview', 'latency', 'resources']
+  }
+}) => {
+  // Use the existing useVersionData hook
+  const versionData = useVersionData();
+
+  // Apply theme class to container
+  useEffect(() => {
+    if (theme === 'dark') {
+      document.documentElement.classList.add('dark');
+    } else {
+      document.documentElement.classList.remove('dark');
+    }
+  }, [theme]);
+
+  // Add CSS to ensure proper z-index for dropdowns
+  useEffect(() => {
+    const style = document.createElement('style');
+    style.textContent = `
+      .benchmark-dashboard [data-radix-popper-content-wrapper] {
+        z-index: 9999 !important;
+      }
+      .benchmark-dashboard .relative.z-50 {
+        z-index: 9999 !important;
+      }
+    `;
+    document.head.appendChild(style);
+
+    return () => {
+      document.head.removeChild(style);
+    };
+  }, []);
+
+  return (
+    <div className={`benchmark-dashboard ${theme} ${containerClassName}`} data-theme={theme}>
+      {/* Conditional header - only show if Hugo requests it */}
+      {features.header && (
+        <div className="mb-8">
+          <h2 className="text-3xl font-bold">Performance Benchmark Report Explorer</h2>
+          <p className="text-xl text-gray-600 dark:text-gray-300">Detailed performance analysis</p>
+        </div>
+      )}
+
+      {/* Version selector */}
+      {features.versionSelector && (
+        <div className="mb-6">
+          <div className="bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full">
+            <VersionSelector
+              selectedVersion={versionData.selectedVersion}
+              availableVersions={versionData.availableVersions}
+              onVersionChange={versionData.setSelectedVersion}
+              metadata={versionData.metadata}
+            />
+          </div>
+        </div>
+      )}
+
+      {/* Summary cards */}
+      {features.summaryCards && versionData.performanceSummary && (
+        <div className="mb-8">
+          <SummaryCards
+            performanceSummary={versionData.performanceSummary}
+            benchmarkResults={versionData.benchmarkResults}
+          />
+        </div>
+      )}
+
+      {/* Tabs */}
+      {features.tabs && features.tabs.length > 0 && (
+        <div className="bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden">
+          <Tabs defaultValue={features.tabs[0]} className="w-full">
+            <TabsList className={`grid w-full ${features.tabs.length === 1 ? 'grid-cols-1' : features.tabs.length === 2 ? 'grid-cols-2' : 'grid-cols-3'} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`}>
+              {features.tabs?.includes('overview') && (
+                <TabsTrigger
+                  value="overview"
+                  className="data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium"
+                >
+                  Overview
+                </TabsTrigger>
+              )}
+              {features.tabs?.includes('latency') && (
+                <TabsTrigger
+                  value="latency"
+                  className="data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium"
+                >
+                  Request RTT Analysis
+                </TabsTrigger>
+              )}
+              {features.tabs?.includes('resources') && (
+                <TabsTrigger
+                  value="resources"
+                  className="data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium"
+                >
+                  Resource Usage
+                </TabsTrigger>
+              )}
+            </TabsList>
+
+            <div className="p-6">
+              {features.tabs?.includes('overview') && (
+                <TabsContent value="overview">
+                  <OverviewTab
+                    performanceMatrix={versionData.performanceMatrix}
+                    benchmarkResults={versionData.benchmarkResults}
+                    testConfiguration={versionData.testConfiguration}
+                    performanceSummary={versionData.performanceSummary}
+                    latencyPercentileComparison={versionData.latencyPercentileComparison}
+                  />
+                </TabsContent>
+              )}
+
+              {features.tabs?.includes('latency') && (
+                <TabsContent value="latency">
+                  <LatencyTab
+                    latencyPercentileComparison={versionData.latencyPercentileComparison}
+                    benchmarkResults={versionData.benchmarkResults}
+                  />
+                </TabsContent>
+              )}
+
+              {features.tabs?.includes('resources') && (
+                <TabsContent value="resources">
+                  <ResourcesTab
+                    resourceTrends={versionData.resourceTrends}
+                    benchmarkResults={versionData.benchmarkResults}
+                  />
+                </TabsContent>
+              )}
+            </div>
+          </Tabs>
+        </div>
+      )}
+    </div>
+  );
+};
diff --git a/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx b/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx
new file mode 100644
index 000000000..483f1a731
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/LatencyTab.tsx
@@ -0,0 +1,442 @@
+
+import React from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { Badge } from '@/components/ui/badge';
+import { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';
+import { ChartPlaceholder } from '@/components/common/DataPlaceholder';
+import ChartWatermark from '@/components/common/ChartWatermark';
+import { AreaChart, Area, LineChart, Line, BarChart, Bar, XAxis, YAxis, CartesianGrid } from 'recharts';
+import { Clock, Gauge, Target, TrendingUp, AlertTriangle, CheckCircle } from 'lucide-react';
+
+interface LatencyTabProps {
+  latencyPercentileComparison: any[];
+  benchmarkResults: any[];
+}
+
+const LatencyTab = ({ latencyPercentileComparison, benchmarkResults }: LatencyTabProps) => {
+  // Clean RTT data for scaling up phase
+  const latencyData = latencyPercentileComparison
+    .filter(item => item.phase === 'scaling-up')
+    .map(item => ({
+      routes: item.routes,
+      p50: Number(item.p50.toFixed(1)),
+      p95: Number(item.p95.toFixed(1)),
+      p99: Number(item.p99.toFixed(1))
+    }));
+
+  // Generate RTT distribution dynamically from benchmark results at max scale (worst case)
+  const generateLatencyDistribution = () => {
+    // If we have latencyPercentileComparison data, use it
+    if (latencyPercentileComparison && latencyPercentileComparison.length > 0) {
+      const maxScaleData = latencyPercentileComparison
+        .filter(item => item.phase === 'scaling-up')
+        .sort((a, b) => b.routes - a.routes)[0]; // Get highest route count
+
+      if (maxScaleData) {
+        return [
+          { percentile: 'P50', value: Number(maxScaleData.p50.toFixed(1)), category: 'Median', status: 'excellent' },
+          { percentile: 'P75', value: Number(maxScaleData.p75.toFixed(1)), category: '75th', status: 'excellent' },
+          { percentile: 'P90', value: Number(maxScaleData.p90.toFixed(1)), category: '90th', status: 'good' },
+          { percentile: 'P95', value: Number(maxScaleData.p95.toFixed(1)), category: '95th', status: 'watch' },
+          { percentile: 'P99', value: Number(maxScaleData.p99.toFixed(1)), category: '99th', status: 'alert' }
+        ];
+      }
+    }
+
+    // If we have benchmarkResults, extract from there
+    if (benchmarkResults && benchmarkResults.length > 0) {
+      const maxScaleData = benchmarkResults
+        .filter(item => item.phase === 'scaling-up')
+        .sort((a, b) => b.routes - a.routes)[0]; // Get highest route count
+
+      if (maxScaleData && maxScaleData.latency && maxScaleData.latency.percentiles) {
+        const percentiles = maxScaleData.latency.percentiles;
+        return [
+          { percentile: 'P50', value: Number((percentiles.p50 / 1000).toFixed(1)), category: 'Median', status: 'excellent' },
+          { percentile: 'P75', value: Number((percentiles.p75 / 1000).toFixed(1)), category: '75th', status: 'excellent' },
+          { percentile: 'P90', value: Number((percentiles.p90 / 1000).toFixed(1)), category: '90th', status: 'good' },
+          { percentile: 'P95', value: Number((percentiles.p95 / 1000).toFixed(1)), category: '95th', status: 'watch' },
+          { percentile: 'P99', value: Number((percentiles.p99 / 1000).toFixed(1)), category: '99th', status: 'alert' }
+        ];
+      }
+    }
+
+    // Return null when no data is available
+    return null;
+  };
+
+  const latencyDistribution = generateLatencyDistribution();
+
+  // RTT consistency across routes
+  const latencyConsistency = benchmarkResults
+    .filter(item => item.phase === 'scaling-up')
+    .map(item => ({
+      routes: item.routes,
+      mean: Number((item.latency.mean / 1000).toFixed(1)),
+      p95: Number((item.latency.percentiles.p95 / 1000).toFixed(1)),
+      ratio: Number((item.latency.percentiles.p95 / item.latency.mean).toFixed(1))
+    }));
+
+  // Generate performance comparison data dynamically
+  const generatePerformanceComparison = () => {
+    if (latencyPercentileComparison && latencyPercentileComparison.length > 0) {
+      return latencyPercentileComparison
+        .filter(item => item.phase === 'scaling-up')
+        .sort((a, b) => a.routes - b.routes) // Sort by routes ascending
+        .map(item => ({
+          scale: `${item.routes} Routes`,
+          p50: Number(item.p50.toFixed(1)),
+          p95: Number(item.p95.toFixed(1)),
+          p99: Number(item.p99.toFixed(1))
+        }));
+    }
+
+    // Return null when no data is available
+    return null;
+  };
+
+  const performanceComparison = generatePerformanceComparison();
+
+  const chartConfig = {
+    p50: {
+      label: "P50 (Median)",
+      color: "#8b5cf6", // Purple-500
+    },
+    p95: {
+      label: "P95",
+      color: "#6366f1", // Indigo-500
+    },
+    p99: {
+      label: "P99",
+      color: "#4f46e5", // Indigo-600
+    },
+    mean: {
+      label: "Mean",
+      color: "#a855f7", // Purple-400
+    },
+    ratio: {
+      label: "P95/Mean Ratio",
+      color: "#7c3aed", // Violet-600
+    },
+  };
+
+  // Calculate key metrics from actual data
+  const calculateKeyMetrics = () => {
+    if (latencyData.length === 0) {
+      return {
+        medianLatency: 0,
+        p95Latency: 0,
+        p99Latency: 0,
+        consistencyRatio: 0
+      };
+    }
+
+    // Use the highest scale data point (worst case) for display
+    const maxScaleData = latencyData[latencyData.length - 1];
+
+    // Calculate average P95/Mean ratio across all scales for consistency metric
+    const avgRatio = latencyConsistency.length > 0
+      ? latencyConsistency.reduce((sum, item) => sum + item.ratio, 0) / latencyConsistency.length
+      : 0;
+
+    return {
+      medianLatency: maxScaleData?.p50 || 0,
+      p95Latency: maxScaleData?.p95 || 0,
+      p99Latency: maxScaleData?.p99 || 0,
+      consistencyRatio: avgRatio
+    };
+  };
+
+  const keyMetrics = calculateKeyMetrics();
+
+  return (
+    <div className="space-y-6">
+      {/* Key RTT Metrics */}
+      <div className="grid grid-cols-1 md:grid-cols-4 gap-4">
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Median RTT</CardTitle>
+            <Target className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{keyMetrics.medianLatency.toFixed(1)}ms</div>
+            <p className="text-xs text-muted-foreground">
+              Consistent across all scales
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">P95 RTT</CardTitle>
+            <Gauge className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{keyMetrics.p95Latency.toFixed(1)}ms</div>
+            <p className="text-xs text-muted-foreground">
+              95% of requests under {keyMetrics.p95Latency.toFixed(0)}ms
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Tail RTT</CardTitle>
+            <AlertTriangle className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{keyMetrics.p99Latency.toFixed(1)}ms</div>
+            <p className="text-xs text-muted-foreground">
+              P99 RTT (1% of requests)
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Consistency</CardTitle>
+            <CheckCircle className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{keyMetrics.consistencyRatio.toFixed(1)}:1</div>
+            <p className="text-xs text-muted-foreground">
+              P95/Mean ratio
+            </p>
+          </CardContent>
+        </Card>
+      </div>
+
+      {/* Main RTT Charts */}
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+        {/* Key Percentiles Over Scale */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Request RTT Scaling Behavior</CardTitle>
+            <CardDescription>
+              How key percentiles perform as route count increases
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {latencyData && latencyData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <AreaChart data={latencyData}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="routes"
+                      type="number"
+                      scale="linear"
+                      domain={[0, 1100]}
+                      ticks={[10, 50, 100, 300, 500, 1000]}
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}ms`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent
+                        labelFormatter={(value) => `${value} routes`}
+                      />}
+                    />
+                    <Area
+                      dataKey="p99"
+                      stackId="latency"
+                      type="monotone"
+                      fill="#4f46e5"
+                      fillOpacity={0.3}
+                      stroke="#4f46e5"
+                      strokeWidth={1}
+                    />
+                    <Area
+                      dataKey="p95"
+                      stackId="latency"
+                      type="monotone"
+                      fill="#6366f1"
+                      fillOpacity={0.4}
+                      stroke="#6366f1"
+                      strokeWidth={2}
+                    />
+                    <Area
+                      dataKey="p50"
+                      stackId="latency"
+                      type="monotone"
+                      fill="#8b5cf6"
+                      fillOpacity={0.6}
+                      stroke="#8b5cf6"
+                      strokeWidth={3}
+                    />
+                  </AreaChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+
+        {/* RTT Distribution at Scale */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Request RTT Distribution</CardTitle>
+            <CardDescription>
+              Percentile breakdown at 1000 routes (worst case scenario)
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {latencyDistribution ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <BarChart data={latencyDistribution}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="percentile"
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}ms`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent
+                        formatter={(value, name) => [
+                          `${value}ms`,
+                          "RTT"
+                        ]}
+                        labelFormatter={(value) => `${value} Percentile`}
+                      />}
+                    />
+                    <Bar
+                      dataKey="value"
+                      fill="#6366f1"
+                      radius={[4, 4, 0, 0]}
+                    />
+                  </BarChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+      </div>
+
+      {/* Secondary Analysis */}
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+        {/* RTT Consistency */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Request RTT Consistency</CardTitle>
+            <CardDescription>
+              P95/Mean ratio shows how predictable RTT is
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {latencyConsistency && latencyConsistency.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <LineChart data={latencyConsistency}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="routes"
+                      type="number"
+                      scale="linear"
+                      domain={[0, 1100]}
+                      ticks={[10, 50, 100, 300, 500, 1000]}
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      yAxisId="ratio"
+                      orientation="left"
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}x`}
+                    />
+                    <YAxis
+                      yAxisId="latency"
+                      orientation="right"
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}ms`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent
+                        labelFormatter={(value) => `${value} routes`}
+                      />}
+                    />
+                    <Line
+                      yAxisId="latency"
+                      dataKey="mean"
+                      type="monotone"
+                      stroke="#a855f7"
+                      strokeWidth={2}
+                      dot={{ fill: "#a855f7", strokeWidth: 2, r: 3 }}
+                    />
+                    <Line
+                      yAxisId="ratio"
+                      dataKey="ratio"
+                      type="monotone"
+                      stroke="#7c3aed"
+                      strokeWidth={3}
+                      strokeDasharray="5 5"
+                      dot={{ fill: "#7c3aed", strokeWidth: 2, r: 4 }}
+                    />
+                  </LineChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+
+        {/* Performance Summary Table */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Performance Summary</CardTitle>
+            <CardDescription>
+              RTT performance at different scales
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {performanceComparison && performanceComparison.length > 0 ? (
+              <div className="space-y-4">
+                {performanceComparison.map((item, index) => (
+                  <div key={index} className="flex items-center justify-between p-3 bg-muted/30 rounded-lg">
+                    <div className="space-y-1">
+                      <p className="font-medium">{item.scale}</p>
+                      <div className="flex space-x-4 text-sm text-muted-foreground">
+                        <span>P50: {item.p50}ms</span>
+                        <span>P95: {item.p95}ms</span>
+                        <span>P99: {item.p99}ms</span>
+                      </div>
+                    </div>
+                  </div>
+                ))}
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+      </div>
+    </div>
+  );
+};
+
+export default LatencyTab;
diff --git a/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx b/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx
new file mode 100644
index 000000000..10c393918
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/OverviewTab.tsx
@@ -0,0 +1,440 @@
+
+import React from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';
+import { ChartPlaceholder } from '@/components/common/DataPlaceholder';
+import ChartWatermark from '@/components/common/ChartWatermark';
+import {
+  AreaChart,
+  Area,
+  LineChart,
+  Line,
+  BarChart,
+  Bar,
+  XAxis,
+  YAxis,
+  CartesianGrid,
+  ResponsiveContainer
+} from 'recharts';
+import { TrendingUp, Clock, CheckCircle, Lightbulb, MemoryStick, Cpu, Zap, Shield } from 'lucide-react';
+
+interface OverviewTabProps {
+  performanceMatrix: any[];
+  benchmarkResults: any[];
+  testConfiguration: any;
+  performanceSummary: any;
+  latencyPercentileComparison?: any[]; // Add optional latency data
+}
+
+const OverviewTab = ({
+  performanceMatrix,
+  benchmarkResults,
+  testConfiguration,
+  performanceSummary,
+  latencyPercentileComparison
+}: OverviewTabProps) => {
+  // Clean performance data for throughput over route scaling
+  const throughputData = performanceMatrix
+    .filter(item => item.phase === 'scaling-up')
+    .map(item => ({
+      routes: item.routes,
+      throughput: Math.round(item.throughput),
+      latency: Number(item.meanLatency.toFixed(1))
+    }));
+
+  // Memory usage data
+  const memoryData = benchmarkResults
+    .filter(item => item.phase === 'scaling-up')
+    .map(item => ({
+      routes: item.routes,
+      gateway: Math.round(item.resources.envoyGateway.memory.mean),
+      proxy: Math.round(item.resources.envoyProxy.memory.mean),
+      total: Math.round(item.resources.envoyGateway.memory.mean + item.resources.envoyProxy.memory.mean)
+    }));
+
+  // Generate latency distribution dynamically from benchmark results at max scale (worst case)
+  const generateLatencyDistribution = () => {
+    // If we have latencyPercentileComparison data, use it
+    if (latencyPercentileComparison && latencyPercentileComparison.length > 0) {
+      const maxScaleData = latencyPercentileComparison
+        .filter(item => item.phase === 'scaling-up')
+        .sort((a, b) => b.routes - a.routes)[0]; // Get highest route count
+
+      if (maxScaleData) {
+        return [
+          { percentile: 'P50', value: Number(maxScaleData.p50.toFixed(1)), status: 'excellent' },
+          { percentile: 'P75', value: Number(maxScaleData.p75.toFixed(1)), status: 'excellent' },
+          { percentile: 'P90', value: Number(maxScaleData.p90.toFixed(1)), status: 'good' },
+          { percentile: 'P95', value: Number(maxScaleData.p95.toFixed(1)), status: 'acceptable' },
+          { percentile: 'P99', value: Number(maxScaleData.p99.toFixed(1)), status: 'watch' }
+        ];
+      }
+    }
+
+    // If we have benchmarkResults, extract from there
+    if (benchmarkResults && benchmarkResults.length > 0) {
+      const maxScaleData = benchmarkResults
+        .filter(item => item.phase === 'scaling-up')
+        .sort((a, b) => b.routes - a.routes)[0]; // Get highest route count
+
+      if (maxScaleData && maxScaleData.latency && maxScaleData.latency.percentiles) {
+        const percentiles = maxScaleData.latency.percentiles;
+        return [
+          { percentile: 'P50', value: Number((percentiles.p50 / 1000).toFixed(1)), status: 'excellent' },
+          { percentile: 'P75', value: Number((percentiles.p75 / 1000).toFixed(1)), status: 'excellent' },
+          { percentile: 'P90', value: Number((percentiles.p90 / 1000).toFixed(1)), status: 'good' },
+          { percentile: 'P95', value: Number((percentiles.p95 / 1000).toFixed(1)), status: 'acceptable' },
+          { percentile: 'P99', value: Number((percentiles.p99 / 1000).toFixed(1)), status: 'watch' }
+        ];
+      }
+    }
+
+    // Return null when no data is available
+    return null;
+  };
+
+  const latencyDistribution = generateLatencyDistribution();
+
+  // Memory efficiency data (from ResourcesTab)
+  const memoryEfficiencyData = memoryData.map(item => ({
+    routes: item.routes,
+    gatewayPerRoute: Number((item.gateway / item.routes).toFixed(2)),
+    proxyPerRoute: Number((item.proxy / item.routes).toFixed(2)),
+    totalPerRoute: Number((item.total / item.routes).toFixed(2))
+  }));
+
+  const chartConfig = {
+    throughput: {
+      label: "Throughput",
+      color: "#8b5cf6", // Purple-500
+    },
+    latency: {
+      label: "Latency",
+      color: "#6366f1", // Indigo-500
+    },
+    gateway: {
+      label: "Gateway",
+      color: "#a855f7", // Purple-400
+    },
+    proxy: {
+      label: "Proxy",
+      color: "#4f46e5", // Indigo-600
+    },
+    totalPerRoute: {
+      label: "Total per Route",
+      color: "#8b5cf6", // Purple-500
+    },
+    gatewayPerRoute: {
+      label: "Gateway per Route",
+      color: "#a855f7", // Purple-400
+    },
+    proxyPerRoute: {
+      label: "Proxy per Route",
+      color: "#4f46e5", // Indigo-600
+    },
+  };
+
+  return (
+    <div className="space-y-6">
+      {/* Key Performance Metrics */}
+      <div className="grid grid-cols-1 md:grid-cols-4 gap-4">
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Avg Throughput</CardTitle>
+            <Zap className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{Math.round(performanceSummary.avgThroughput)} RPS</div>
+            <p className="text-xs text-muted-foreground">
+              Consistent across all scales
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Mean Response Time</CardTitle>
+            <Clock className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{(performanceSummary.avgLatency / 1000).toFixed(1)}ms</div>
+            <p className="text-xs text-muted-foreground">
+              End-to-end as measured by Nighthawk
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Max Routes in Test</CardTitle>
+            <TrendingUp className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{performanceSummary.maxRoutes}</div>
+            <p className="text-xs text-muted-foreground">
+              Routes tested successfully
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Reliability</CardTitle>
+            <Shield className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">100%</div>
+            <p className="text-xs text-muted-foreground">
+              Perfect system reliability
+            </p>
+          </CardContent>
+        </Card>
+      </div>
+
+      {/* Main Performance Charts */}
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+        {/* Throughput Performance */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Throughput Consistency</CardTitle>
+            <CardDescription>
+              Throughput remains stable across different route scales
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {throughputData && throughputData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <AreaChart data={throughputData}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="routes"
+                      type="number"
+                      scale="linear"
+                      domain={[0, 1100]}
+                      ticks={[10, 50, 100, 300, 500, 1000]}
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      domain={[0, 'dataMax']}
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent
+                        formatter={(value, name) => [
+                          `${value} RPS`,
+                          "Throughput"
+                        ]}
+                        labelFormatter={(value) => `${value} routes`}
+                      />}
+                    />
+                    <Area
+                      dataKey="throughput"
+                      type="monotone"
+                      fill="#8b5cf6"
+                      fillOpacity={0.4}
+                      stroke="#8b5cf6"
+                      strokeWidth={2}
+                    />
+                  </AreaChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+
+        {/* Memory Scaling */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Memory Usage</CardTitle>
+            <CardDescription>
+              Memory scaling patterns for Gateway and Proxy components
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {memoryData && memoryData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <AreaChart data={memoryData}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="routes"
+                      type="number"
+                      scale="linear"
+                      domain={[0, 1100]}
+                      ticks={[10, 50, 100, 300, 500, 1000]}
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}MB`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent />}
+                    />
+                    <Area
+                      dataKey="gateway"
+                      stackId="memory"
+                      type="monotone"
+                      fill="#a855f7"
+                      stroke="#a855f7"
+                    />
+                    <Area
+                      dataKey="proxy"
+                      stackId="memory"
+                      type="monotone"
+                      fill="#4f46e5"
+                      stroke="#4f46e5"
+                    />
+                  </AreaChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+      </div>
+
+      {/* Secondary Charts */}
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+        {/* Latency Distribution */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Request RTT Distribution</CardTitle>
+            <CardDescription>
+              Latency percentiles at 1000 routes (worst case)
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {latencyDistribution ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <BarChart data={latencyDistribution}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="percentile"
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}ms`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent
+                        formatter={(value, name) => [
+                          `${value}ms`,
+                          "Latency"
+                        ]}
+                      />}
+                    />
+                    <Bar
+                      dataKey="value"
+                      fill="#6366f1"
+                      radius={[4, 4, 0, 0]}
+                    />
+                  </BarChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+
+        {/* Memory Efficiency */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Memory Efficiency</CardTitle>
+            <CardDescription>
+              Memory usage per route shows how efficiently memory scales with route count
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {memoryEfficiencyData && memoryEfficiencyData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                  <LineChart data={memoryEfficiencyData}>
+                    <CartesianGrid strokeDasharray="3 3" />
+                    <XAxis
+                      dataKey="routes"
+                      type="number"
+                      scale="linear"
+                      domain={[0, 1100]}
+                      ticks={[10, 50, 100, 300, 500, 1000]}
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                    />
+                    <YAxis
+                      tickLine={false}
+                      axisLine={false}
+                      tickMargin={8}
+                      tickFormatter={(value) => `${value}MB`}
+                    />
+                    <ChartTooltip
+                      content={<ChartTooltipContent
+                        formatter={(value, name) => [
+                          `${value}MB per route`,
+                          name === 'gatewayPerRoute' ? 'Gateway' :
+                          name === 'proxyPerRoute' ? 'Proxy' : 'Total'
+                        ]}
+                        labelFormatter={(value) => `${value} routes`}
+                      />}
+                    />
+                    <Line
+                      dataKey="totalPerRoute"
+                      type="monotone"
+                      stroke="#8b5cf6"
+                      strokeWidth={3}
+                      dot={{ fill: "#8b5cf6", strokeWidth: 2, r: 4 }}
+                    />
+                    <Line
+                      dataKey="gatewayPerRoute"
+                      type="monotone"
+                      stroke="#a855f7"
+                      strokeWidth={2}
+                      strokeDasharray="5 5"
+                      dot={{ fill: "#a855f7", strokeWidth: 2, r: 3 }}
+                    />
+                    <Line
+                      dataKey="proxyPerRoute"
+                      type="monotone"
+                      stroke="#4f46e5"
+                      strokeWidth={2}
+                      strokeDasharray="3 3"
+                      dot={{ fill: "#4f46e5", strokeWidth: 2, r: 3 }}
+                    />
+                  </LineChart>
+                </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+      </div>
+    </div>
+  );
+};
+
+export default OverviewTab;
diff --git a/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx b/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx
new file mode 100644
index 000000000..60230f640
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ResourcesTab.tsx
@@ -0,0 +1,529 @@
+import React from 'react';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import { ChartContainer, ChartTooltip, ChartTooltipContent } from '@/components/ui/chart';
+import { ChartPlaceholder } from '@/components/common/DataPlaceholder';
+import ChartWatermark from '@/components/common/ChartWatermark';
+import { AreaChart, Area, LineChart, Line, BarChart, Bar, ComposedChart, XAxis, YAxis, CartesianGrid } from 'recharts';
+import { MemoryStick, Cpu, Server, Database, TrendingUp, Zap, Activity, CheckCircle } from 'lucide-react';
+
+interface ResourcesTabProps {
+  resourceTrends: any[];
+  benchmarkResults: any[];
+}
+
+const ResourcesTab = ({ resourceTrends, benchmarkResults }: ResourcesTabProps) => {
+  // Clean memory data for scaling up phase with proper numeric scaling
+  const memoryData = benchmarkResults
+    .filter(item => item.phase === 'scaling-up')
+    .map(item => ({
+      routes: item.routes, // Use actual route values
+      gateway: Math.round(item.resources.envoyGateway.memory.mean),
+      proxy: Math.round(item.resources.envoyProxy.memory.mean),
+      total: Math.round(item.resources.envoyGateway.memory.mean + item.resources.envoyProxy.memory.mean)
+    }));
+
+  // CPU usage data with proper numeric scaling
+  const cpuData = benchmarkResults
+    .filter(item => item.phase === 'scaling-up')
+    .map(item => ({
+      routes: item.routes, // Use actual route values
+      gatewayMean: Number(item.resources.envoyGateway.cpu.mean.toFixed(1)),
+      gatewayMax: Number(item.resources.envoyGateway.cpu.max.toFixed(1)),
+      proxyMean: Number(item.resources.envoyProxy.cpu.mean.toFixed(1)),
+      proxyMax: Number(item.resources.envoyProxy.cpu.max.toFixed(1))
+    }));
+
+  // Resource efficiency data with proper numeric scaling
+  const efficiencyData = memoryData.map(item => ({
+    routes: item.routes, // Use actual route values
+    gatewayPerRoute: Number((item.gateway / item.routes).toFixed(2)),
+    proxyPerRoute: Number((item.proxy / item.routes).toFixed(2)),
+    totalPerRoute: Number((item.total / item.routes).toFixed(2))
+  }));
+
+  // Resource scaling summary (calculated from actual data)
+  const calculateScalingSummary = () => {
+    if (memoryData.length === 0) {
+      return [
+        { component: 'Gateway', min: 0, max: 0, scaling: 'No Data', efficiency: 'Unknown' },
+        { component: 'Proxy', min: 0, max: 0, scaling: 'No Data', efficiency: 'Unknown' },
+        { component: 'Total', min: 0, max: 0, scaling: 'No Data', efficiency: 'Unknown' }
+      ];
+    }
+
+    const gatewayMemories = memoryData.map(d => d.gateway);
+    const proxyMemories = memoryData.map(d => d.proxy);
+    const totalMemories = memoryData.map(d => d.total);
+
+    return [
+      {
+        component: 'Gateway',
+        min: Math.min(...gatewayMemories),
+        max: Math.max(...gatewayMemories),
+        scaling: analyzeMemoryScalingPattern(memoryData.map(d => d.routes), gatewayMemories),
+        efficiency: analyzeMemoryEfficiency(memoryData.map(d => d.routes), gatewayMemories)
+      },
+      {
+        component: 'Proxy',
+        min: Math.min(...proxyMemories),
+        max: Math.max(...proxyMemories),
+        scaling: analyzeMemoryScalingPattern(memoryData.map(d => d.routes), proxyMemories),
+        efficiency: analyzeMemoryEfficiency(memoryData.map(d => d.routes), proxyMemories)
+      },
+      {
+        component: 'Total',
+        min: Math.min(...totalMemories),
+        max: Math.max(...totalMemories),
+        scaling: analyzeMemoryScalingPattern(memoryData.map(d => d.routes), totalMemories),
+        efficiency: analyzeMemoryEfficiency(memoryData.map(d => d.routes), totalMemories)
+      }
+    ];
+  };
+
+  // Function to analyze memory scaling patterns from actual data
+  const analyzeMemoryScalingPattern = (routes: number[], memoryValues: number[]) => {
+    if (routes.length < 3) return 'Insufficient Data';
+
+    // Calculate correlation coefficient for memory linearity
+    const n = routes.length;
+    const sumX = routes.reduce((sum, x) => sum + x, 0);
+    const sumY = memoryValues.reduce((sum, y) => sum + y, 0);
+    const sumXY = routes.reduce((sum, x, i) => sum + x * memoryValues[i], 0);
+    const sumX2 = routes.reduce((sum, x) => sum + x * x, 0);
+    const sumY2 = memoryValues.reduce((sum, y) => sum + y * y, 0);
+
+    const numerator = n * sumXY - sumX * sumY;
+    const denominator = Math.sqrt((n * sumX2 - sumX * sumX) * (n * sumY2 - sumY * sumY));
+    const correlation = denominator === 0 ? 0 : numerator / denominator;
+    const rSquared = correlation * correlation;
+
+    // Calculate differences between consecutive memory measurements to detect step-wise behavior
+    const memoryDifferences = [];
+    for (let i = 1; i < memoryValues.length; i++) {
+      memoryDifferences.push(memoryValues[i] - memoryValues[i - 1]);
+    }
+
+    // Coefficient of variation in memory differences (high = step-wise, low = smooth)
+    const avgDiff = memoryDifferences.reduce((sum, d) => sum + d, 0) / memoryDifferences.length;
+    const varianceDiff = memoryDifferences.reduce((sum, d) => sum + Math.pow(d - avgDiff, 2), 0) / memoryDifferences.length;
+    const stdDevDiff = Math.sqrt(varianceDiff);
+    const coefficientOfVariation = avgDiff === 0 ? 0 : Math.abs(stdDevDiff / avgDiff);
+
+    // Determine memory scaling pattern
+    if (rSquared > 0.95) {
+      return 'Highly Linear';
+    } else if (rSquared > 0.85) {
+      return 'Linear';
+    } else if (coefficientOfVariation > 1.5) {
+      return 'Step-wise';
+    } else if (rSquared > 0.7) {
+      return 'Moderately Linear';
+    } else {
+      return 'Variable';
+    }
+  };
+
+  // Function to analyze memory efficiency characteristics
+  const analyzeMemoryEfficiency = (routes: number[], memoryValues: number[]) => {
+    if (routes.length < 2) return 'Unknown';
+
+    // Calculate memory per route at different scales
+    const memoryPerRouteRatios = routes.map((route, i) => memoryValues[i] / route);
+
+    // Check if memory efficiency improves (memory-per-route decreases) with scale
+    const firstRatio = memoryPerRouteRatios[0];
+    const lastRatio = memoryPerRouteRatios[memoryPerRouteRatios.length - 1];
+    const memoryEfficiencyImprovement = (firstRatio - lastRatio) / firstRatio;
+
+    // Calculate consistency in memory usage (low standard deviation = more consistent)
+    const avgRatio = memoryPerRouteRatios.reduce((sum, r) => sum + r, 0) / memoryPerRouteRatios.length;
+    const variance = memoryPerRouteRatios.reduce((sum, r) => sum + Math.pow(r - avgRatio, 2), 0) / memoryPerRouteRatios.length;
+    const coefficientOfVariation = Math.sqrt(variance) / avgRatio;
+
+    if (memoryEfficiencyImprovement > 0.3) {
+      return 'Excellent';
+    } else if (memoryEfficiencyImprovement > 0.1 || coefficientOfVariation < 0.2) {
+      return 'Good';
+    } else if (coefficientOfVariation < 0.4) {
+      return 'Moderate';
+    } else {
+      return 'Variable';
+    }
+  };
+
+  const scalingSummary = calculateScalingSummary();
+
+    const chartConfig = {
+    gateway: {
+      label: "Gateway",
+      color: "#a855f7", // Purple-400
+    },
+    proxy: {
+      label: "Proxy",
+      color: "#4f46e5", // Indigo-600
+    },
+    gatewayMean: {
+      label: "Gateway Mean",
+      color: "#8b5cf6", // Purple-500
+    },
+    gatewayMax: {
+      label: "Gateway Peak",
+      color: "#c084fc", // Purple-300
+    },
+    proxyMean: {
+      label: "Proxy Mean",
+      color: "#6366f1", // Indigo-500
+    },
+    proxyMax: {
+      label: "Proxy Peak",
+      color: "#818cf8", // Indigo-400
+    },
+  };
+
+  // Calculate key resource metrics from actual data
+  const calculateResourceMetrics = () => {
+    if (memoryData.length === 0 || cpuData.length === 0 || efficiencyData.length === 0) {
+      return {
+        gatewayMemoryRange: '0-0MB',
+        proxyMemoryRange: '0-0MB',
+        peakCPU: 0,
+        memoryPerRouteAtScale: 0
+      };
+    }
+
+    // Calculate memory ranges
+    const gatewayMemories = memoryData.map(d => d.gateway);
+    const proxyMemories = memoryData.map(d => d.proxy);
+
+    const gatewayMin = Math.min(...gatewayMemories);
+    const gatewayMax = Math.max(...gatewayMemories);
+    const proxyMin = Math.min(...proxyMemories);
+    const proxyMax = Math.max(...proxyMemories);
+
+    // Calculate peak CPU from all components
+    const allCPUMaxValues = cpuData.flatMap(d => [d.gatewayMax, d.proxyMax]);
+    const peakCPU = Math.max(...allCPUMaxValues);
+
+    // Get memory per route at highest scale (most efficient point)
+    const highestScaleEfficiency = efficiencyData[efficiencyData.length - 1];
+    const memoryPerRouteAtScale = highestScaleEfficiency?.totalPerRoute || 0;
+
+    return {
+      gatewayMemoryRange: `${gatewayMin}-${gatewayMax}MB`,
+      proxyMemoryRange: `${proxyMin}-${proxyMax}MB`,
+      peakCPU: Math.round(peakCPU),
+      memoryPerRouteAtScale: memoryPerRouteAtScale
+    };
+  };
+
+  const resourceMetrics = calculateResourceMetrics();
+
+  return (
+    <div className="space-y-6">
+      {/* Key Resource Metrics */}
+      <div className="grid grid-cols-1 md:grid-cols-4 gap-4">
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Gateway Memory</CardTitle>
+            <Database className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{resourceMetrics.gatewayMemoryRange}</div>
+            <p className="text-xs text-muted-foreground">
+              Linear scaling pattern
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Proxy Memory</CardTitle>
+            <Server className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{resourceMetrics.proxyMemoryRange}</div>
+            <p className="text-xs text-muted-foreground">
+              Efficient step-wise scaling
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Peak CPU</CardTitle>
+            <Activity className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{resourceMetrics.peakCPU}%</div>
+            <p className="text-xs text-muted-foreground">
+              Brief spikes, stable avg
+            </p>
+          </CardContent>
+        </Card>
+
+        <Card>
+          <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
+            <CardTitle className="text-sm font-medium">Efficiency</CardTitle>
+            <TrendingUp className="h-4 w-4 text-muted-foreground" />
+          </CardHeader>
+          <CardContent>
+            <div className="text-2xl font-bold">{resourceMetrics.memoryPerRouteAtScale.toFixed(2)}MB</div>
+            <p className="text-xs text-muted-foreground">
+              Memory per route at scale
+            </p>
+          </CardContent>
+        </Card>
+      </div>
+
+      {/* Main Resource Charts */}
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+        {/* Memory Usage */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Memory Scaling</CardTitle>
+            <CardDescription>
+              How Gateway and Proxy memory usage grows with route count
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {memoryData && memoryData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                <AreaChart data={memoryData}>
+                  <CartesianGrid strokeDasharray="3 3" />
+                  <XAxis
+                    dataKey="routes"
+                    type="number"
+                    scale="linear"
+                    domain={[0, 1100]}
+                    ticks={[10, 50, 100, 300, 500, 1000]}
+                    tickLine={false}
+                    axisLine={false}
+                    tickMargin={8}
+                  />
+                  <YAxis
+                    tickLine={false}
+                    axisLine={false}
+                    tickMargin={8}
+                    tickFormatter={(value) => `${value}MB`}
+                  />
+                  <ChartTooltip
+                    content={<ChartTooltipContent
+                      labelFormatter={(value) => `${value} routes`}
+                    />}
+                  />
+                  <Area
+                    dataKey="gateway"
+                    stackId="memory"
+                    type="monotone"
+                    fill="#a855f7"
+                    fillOpacity={0.6}
+                    stroke="#a855f7"
+                    strokeWidth={2}
+                  />
+                  <Area
+                    dataKey="proxy"
+                    stackId="memory"
+                    type="monotone"
+                    fill="#4f46e5"
+                    fillOpacity={0.6}
+                    stroke="#4f46e5"
+                    strokeWidth={2}
+                  />
+                </AreaChart>
+              </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+
+        {/* CPU Usage */}
+        <Card>
+          <CardHeader>
+            <CardTitle>CPU Usage Patterns</CardTitle>
+            <CardDescription>
+              Mean vs peak CPU usage showing burst characteristics.
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {cpuData && cpuData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                <ComposedChart data={cpuData}>
+                  <CartesianGrid strokeDasharray="3 3" />
+                  <XAxis
+                    dataKey="routes"
+                    type="number"
+                    scale="linear"
+                    domain={[0, 1100]}
+                    ticks={[10, 50, 100, 300, 500, 1000]}
+                    tickLine={false}
+                    axisLine={false}
+                    tickMargin={8}
+                  />
+                  <YAxis
+                    tickLine={false}
+                    axisLine={false}
+                    tickMargin={8}
+                    tickFormatter={(value) => `${value}%`}
+                  />
+                  <ChartTooltip
+                    content={<ChartTooltipContent
+                      labelFormatter={(value) => `${value} routes`}
+                    />}
+                  />
+                  <Area
+                    dataKey="gatewayMax"
+                    type="monotone"
+                    fill="#c084fc"
+                    fillOpacity={0.1}
+                    stroke="#c084fc"
+                    strokeWidth={1}
+                    strokeDasharray="2 2"
+                  />
+                  <Area
+                    dataKey="proxyMax"
+                    type="monotone"
+                    fill="#818cf8"
+                    fillOpacity={0.1}
+                    stroke="#818cf8"
+                    strokeWidth={1}
+                    strokeDasharray="2 2"
+                  />
+                  <Line
+                    dataKey="gatewayMean"
+                    type="monotone"
+                    stroke="#8b5cf6"
+                    strokeWidth={3}
+                    dot={{ fill: "#8b5cf6", strokeWidth: 2, r: 4 }}
+                  />
+                  <Line
+                    dataKey="proxyMean"
+                    type="monotone"
+                    stroke="#6366f1"
+                    strokeWidth={3}
+                    dot={{ fill: "#6366f1", strokeWidth: 2, r: 4 }}
+                  />
+                </ComposedChart>
+              </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+      </div>
+
+      {/* Secondary Analysis */}
+      <div className="grid grid-cols-1 lg:grid-cols-2 gap-6">
+        {/* Memory Efficiency */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Memory Efficiency</CardTitle>
+            <CardDescription>
+              Memory usage per route shows how efficiently memory scales with route count
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            {efficiencyData && efficiencyData.length > 0 ? (
+              <div className="relative">
+                <ChartWatermark />
+                <ChartContainer config={chartConfig}>
+                <LineChart data={efficiencyData}>
+                  <CartesianGrid strokeDasharray="3 3" />
+                  <XAxis
+                    dataKey="routes"
+                    type="number"
+                    scale="linear"
+                    domain={[0, 1100]}
+                    ticks={[10, 50, 100, 300, 500, 1000]}
+                    tickLine={false}
+                    axisLine={false}
+                    tickMargin={8}
+                  />
+                  <YAxis
+                    tickLine={false}
+                    axisLine={false}
+                    tickMargin={8}
+                    tickFormatter={(value) => `${value}MB`}
+                  />
+                  <ChartTooltip
+                    content={<ChartTooltipContent
+                      formatter={(value, name) => [
+                        `${value}MB per route`,
+                        name === 'gatewayPerRoute' ? 'Gateway' :
+                        name === 'proxyPerRoute' ? 'Proxy' : 'Total'
+                      ]}
+                      labelFormatter={(value) => `${value} routes`}
+                    />}
+                  />
+                  <Line
+                    dataKey="totalPerRoute"
+                    type="monotone"
+                    stroke="#8b5cf6"
+                    strokeWidth={3}
+                    dot={{ fill: "#8b5cf6", strokeWidth: 2, r: 4 }}
+                  />
+                  <Line
+                    dataKey="gatewayPerRoute"
+                    type="monotone"
+                    stroke="#a855f7"
+                    strokeWidth={2}
+                    strokeDasharray="5 5"
+                    dot={{ fill: "#a855f7", strokeWidth: 2, r: 3 }}
+                  />
+                  <Line
+                    dataKey="proxyPerRoute"
+                    type="monotone"
+                    stroke="#4f46e5"
+                    strokeWidth={2}
+                    strokeDasharray="3 3"
+                    dot={{ fill: "#4f46e5", strokeWidth: 2, r: 3 }}
+                  />
+                </LineChart>
+              </ChartContainer>
+              </div>
+            ) : (
+              <ChartPlaceholder />
+            )}
+          </CardContent>
+        </Card>
+
+        {/* Scaling Summary */}
+        <Card>
+          <CardHeader>
+            <CardTitle>Memory Scaling Summary</CardTitle>
+            <CardDescription>
+              Memory usage characteristics and scaling patterns across different components
+            </CardDescription>
+          </CardHeader>
+          <CardContent>
+            <div className="space-y-4">
+              {scalingSummary.map((item, index) => (
+                <div key={index} className="flex items-center justify-between p-3 bg-muted/30 rounded-lg">
+                  <div className="space-y-1">
+                    <p className="font-medium">{item.component}</p>
+                    <div className="flex space-x-4 text-sm text-muted-foreground">
+                      <span>Range: {item.min}-{item.max}MB</span>
+                      <span>Pattern: {item.scaling}</span>
+                    </div>
+                  </div>
+                  <div className="flex items-center space-x-2">
+                    <CheckCircle className="h-4 w-4 text-green-600" />
+                    <span className="text-sm font-medium text-green-700">{item.efficiency}</span>
+                  </div>
+                </div>
+              ))}
+            </div>
+          </CardContent>
+        </Card>
+      </div>
+    </div>
+  );
+};
+
+export default ResourcesTab;
diff --git a/site/tools/benchmark-dashboard/src/components/ShadowDOMWrapper.tsx b/site/tools/benchmark-dashboard/src/components/ShadowDOMWrapper.tsx
new file mode 100644
index 000000000..e4b1aacac
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ShadowDOMWrapper.tsx
@@ -0,0 +1,79 @@
+import React, { useEffect, useRef } from 'react';
+import ReactDOM from 'react-dom/client';
+import { EmbeddableBenchmarkDashboard } from './EmbeddableBenchmarkDashboard';
+import { CSSInjector } from '../utils/cssInjector';
+import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
+import { TooltipProvider } from "@/components/ui/tooltip";
+
+interface ShadowDOMWrapperProps {
+  apiBase?: string;
+  initialVersion?: string;
+  theme?: 'light' | 'dark';
+  containerClassName?: string;
+  containerId?: string;
+  features?: {
+    header?: boolean;
+    versionSelector?: boolean;
+    summaryCards?: boolean;
+    tabs?: string[];
+  };
+}
+
+export const ShadowDOMWrapper: React.FC<ShadowDOMWrapperProps> = (props) => {
+  const containerRef = useRef<HTMLDivElement>(null);
+  const shadowRootRef = useRef<ShadowRoot | null>(null);
+  const reactRootRef = useRef<any>(null);
+
+  useEffect(() => {
+    if (!containerRef.current) return;
+
+    try {
+      // Create shadow DOM
+      const shadowRoot = containerRef.current.attachShadow({ mode: 'open' });
+      shadowRootRef.current = shadowRoot;
+
+      // Create container div in shadow DOM
+      const shadowContainer = document.createElement('div');
+      shadowContainer.id = 'shadow-root';
+      shadowContainer.className = 'benchmark-dashboard';
+      shadowRoot.appendChild(shadowContainer);
+
+      // Inject CSS into shadow DOM
+      CSSInjector.getAllCSS().then((css) => {
+        const style = document.createElement('style');
+        style.textContent = css;
+        shadowRoot.insertBefore(style, shadowContainer);
+
+        // Create React root and render
+        const root = ReactDOM.createRoot(shadowContainer);
+        reactRootRef.current = root;
+
+        root.render(
+          <React.StrictMode>
+            <QueryClientProvider client={new QueryClient()}>
+              <TooltipProvider>
+                <EmbeddableBenchmarkDashboard {...props} />
+              </TooltipProvider>
+            </QueryClientProvider>
+          </React.StrictMode>
+        );
+      }).catch((error) => {
+        console.error('Failed to inject CSS into Shadow DOM:', error);
+      });
+
+    } catch (error) {
+      console.error('Failed to create Shadow DOM:', error);
+    }
+
+    // Cleanup function
+    return () => {
+      if (reactRootRef.current) {
+        reactRootRef.current.unmount();
+      }
+    };
+  }, []);
+
+  return <div ref={containerRef} style={{ width: '100%', minHeight: '400px' }} />;
+};
+
+export default ShadowDOMWrapper;
diff --git a/site/tools/benchmark-dashboard/src/components/SummaryCards.tsx b/site/tools/benchmark-dashboard/src/components/SummaryCards.tsx
new file mode 100644
index 000000000..79bba6068
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/SummaryCards.tsx
@@ -0,0 +1,81 @@
+
+import React from 'react';
+import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
+import { Activity, Clock, MemoryStick, Server } from 'lucide-react';
+
+interface SummaryCardsProps {
+  performanceSummary: {
+    avgThroughput: number;
+    avgLatency: number;
+    maxRoutes: number;
+    totalTests: number;
+  };
+  benchmarkResults: any[];
+}
+
+const SummaryCards = ({ performanceSummary, benchmarkResults }: SummaryCardsProps) => {
+  // Calculate dynamic values from the actual data
+  const maxThroughput = Math.round(Math.max(...benchmarkResults.map(r => r.throughput)));
+  const meanLatencyMs = Math.round(performanceSummary.avgLatency / 1000);
+  const maxMemoryMB = Math.round(Math.max(...benchmarkResults.map(r =>
+    r.resources.envoyGateway.memory.mean + r.resources.envoyProxy.memory.mean
+  )));
+  const maxRoutes = performanceSummary.maxRoutes;
+  return (
+    <div className="grid grid-cols-1 md:grid-cols-4 gap-4 mb-8">
+      <Card className="bg-gradient-to-r from-purple-600 to-indigo-600 text-white">
+        <CardHeader className="pb-2">
+          <CardTitle className="text-sm font-medium flex items-center">
+            <Activity className="h-4 w-4 mr-2" />
+            Max Throughput in Test
+          </CardTitle>
+        </CardHeader>
+        <CardContent>
+          <div className="text-2xl font-bold">{maxThroughput.toLocaleString()} RPS</div>
+          <p className="text-purple-100 text-sm">Requests per second</p>
+        </CardContent>
+      </Card>
+
+      <Card className="bg-gradient-to-r from-purple-600 to-indigo-600 text-white">
+        <CardHeader className="pb-2">
+          <CardTitle className="text-sm font-medium flex items-center">
+            <Clock className="h-4 w-4 mr-2" />
+            Mean Response Time
+          </CardTitle>
+        </CardHeader>
+        <CardContent>
+          <div className="text-2xl font-bold">{meanLatencyMs}ms</div>
+          <p className="text-purple-100 text-sm">End-to-end via Nighthawk</p>
+        </CardContent>
+      </Card>
+
+      <Card className="bg-gradient-to-r from-purple-600 to-indigo-600 text-white">
+        <CardHeader className="pb-2">
+          <CardTitle className="text-sm font-medium flex items-center">
+            <MemoryStick className="h-4 w-4 mr-2" />
+            Memory Usage
+          </CardTitle>
+        </CardHeader>
+        <CardContent>
+          <div className="text-2xl font-bold">{maxMemoryMB}MB</div>
+          <p className="text-purple-100 text-sm">Peak at {maxRoutes} routes</p>
+        </CardContent>
+      </Card>
+
+      <Card className="bg-gradient-to-r from-purple-600 to-indigo-600 text-white">
+        <CardHeader className="pb-2">
+          <CardTitle className="text-sm font-medium flex items-center text">
+            <Server className="h-4 w-4 mr-2" />
+            Max Routes in Test
+          </CardTitle>
+        </CardHeader>
+        <CardContent>
+          <div className="text-2xl font-bold">{maxRoutes.toLocaleString()}</div>
+          <p className="text-purple-100 text-sm">HTTPRoutes tested</p>
+        </CardContent>
+      </Card>
+    </div>
+  );
+};
+
+export default SummaryCards;
diff --git a/site/tools/benchmark-dashboard/src/components/VersionSelector.tsx b/site/tools/benchmark-dashboard/src/components/VersionSelector.tsx
new file mode 100644
index 000000000..fbe6cd606
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/VersionSelector.tsx
@@ -0,0 +1,126 @@
+import React from 'react';
+import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
+import { Badge } from '@/components/ui/badge';
+import { Button } from '@/components/ui/button';
+import { Calendar, GitBranch, ExternalLink, Download, BarChart3 } from 'lucide-react';
+
+interface VersionSelectorProps {
+  selectedVersion: string;
+  availableVersions: string[];
+  onVersionChange: (version: string) => void;
+  metadata?: {
+    version: string;
+    runId: string;
+    date: string;
+    environment?: string;
+    description?: string;
+    gitCommit?: string;
+  } | null;
+  onDownloadReport?: () => void;
+}
+
+const VersionSelector = ({
+  selectedVersion,
+  availableVersions,
+  onVersionChange,
+  metadata,
+  onDownloadReport
+}: VersionSelectorProps) => {
+  const formatDate = (dateString: string) => {
+    try {
+      return new Date(dateString).toLocaleDateString();
+    } catch {
+      return dateString;
+    }
+  };
+
+  const getReleaseUrl = (version: string) => {
+    return `https://github.com/envoyproxy/gateway/releases/tag/v${version}`;
+  };
+
+  const getBenchmarkDownloadUrl = (version: string) => {
+    return `https://github.com/envoyproxy/gateway/releases/download/v${version}/benchmark_report.zip`;
+  };
+
+  const handleViewRelease = () => {
+    const releaseUrl = getReleaseUrl(selectedVersion);
+    window.open(releaseUrl, '_blank', 'noopener,noreferrer');
+  };
+
+  const handleDownloadBenchmarkReport = () => {
+    const downloadUrl = getBenchmarkDownloadUrl(selectedVersion);
+    window.open(downloadUrl, '_blank', 'noopener,noreferrer');
+  };
+
+  return (
+    <div className="flex flex-col sm:flex-row items-start sm:items-center gap-3">
+      <div className="flex items-center gap-2">
+        <label className="text-sm font-medium text-gray-700">Version:</label>
+        <Select value={selectedVersion} onValueChange={onVersionChange}>
+          <SelectTrigger className="w-32">
+            <SelectValue />
+          </SelectTrigger>
+          <SelectContent>
+            {availableVersions.map((version) => (
+              <SelectItem key={version} value={version}>
+                v{version}
+              </SelectItem>
+            ))}
+          </SelectContent>
+        </Select>
+      </div>
+
+      {metadata && (
+        <div className="flex flex-wrap items-center gap-2 text-xs text-gray-600">
+          <div className="flex items-center gap-1">
+            <Calendar className="h-3 w-3" />
+            <span>{formatDate(metadata.date)}</span>
+          </div>
+
+          {metadata.environment && (
+            <Badge variant="secondary" className="text-xs">
+              {metadata.environment}
+            </Badge>
+          )}
+
+          {metadata.gitCommit && (
+            <div className="flex items-center gap-1">
+              <GitBranch className="h-3 w-3" />
+              <span className="font-mono">{metadata.gitCommit.substring(0, 7)}</span>
+            </div>
+          )}
+
+          {metadata.description && (
+            <span className="hidden sm:inline max-w-xs truncate" title={metadata.description}>
+              {metadata.description}
+            </span>
+          )}
+        </div>
+      )}
+
+      <div className="flex items-center gap-2 ml-auto">
+        <Button
+          variant="outline"
+          size="sm"
+          onClick={handleViewRelease}
+          className="flex items-center gap-1 text-xs"
+        >
+          <ExternalLink className="h-3 w-3" />
+          View Release
+        </Button>
+
+        <Button
+          variant="outline"
+          size="sm"
+          onClick={handleDownloadBenchmarkReport}
+          className="flex items-center gap-1 text-xs"
+        >
+          <BarChart3 className="h-3 w-3" />
+          Download Benchmark
+        </Button>
+      </div>
+    </div>
+  );
+};
+
+export default VersionSelector;
diff --git a/site/tools/benchmark-dashboard/src/components/charts/AreaChart.tsx b/site/tools/benchmark-dashboard/src/components/charts/AreaChart.tsx
new file mode 100644
index 000000000..9f35e834b
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/charts/AreaChart.tsx
@@ -0,0 +1,163 @@
+import React from 'react';
+import { AreaChart as RechartsAreaChart, Area, ComposedChart, Line } from 'recharts';
+import { ChartConfig } from '@/components/ui/chart';
+import { BaseChart } from './BaseChart';
+import { CHART_STYLES, CHART_COLORS } from '@/config/chartConfig';
+import { APP_CONSTANTS } from '@/config/constants';
+
+interface AreaChartProps {
+  data: any[];
+  config: ChartConfig;
+  areas: {
+    dataKey: string;
+    stackId?: string;
+    fill?: string;
+    stroke?: string;
+    fillOpacity?: number;
+    strokeWidth?: number;
+  }[];
+  lines?: {
+    dataKey: string;
+    stroke?: string;
+    strokeWidth?: number;
+    strokeDasharray?: string;
+    dot?: boolean | object;
+  }[];
+  height?: number;
+  xAxisConfig?: {
+    dataKey: string;
+    type?: 'number' | 'category';
+    domain?: [number | string, number | string];
+    ticks?: number[];
+    formatter?: (value: any) => string;
+  };
+  yAxisConfig?: {
+    domain?: [number | string, number | string];
+    formatter?: (value: any) => string;
+  };
+  tooltipConfig?: {
+    labelFormatter?: (value: any) => string;
+    formatter?: (value: any, name: string) => [string, string];
+  };
+  showGrid?: boolean;
+  className?: string;
+}
+
+export const AreaChart: React.FC<AreaChartProps> = ({
+  data,
+  config,
+  areas,
+  lines,
+  height,
+  xAxisConfig,
+  yAxisConfig,
+  tooltipConfig,
+  showGrid = true,
+  className,
+}) => {
+  const ChartComponent = lines && lines.length > 0 ? ComposedChart : RechartsAreaChart;
+
+  return (
+    <BaseChart
+      data={data}
+      config={config}
+      height={height}
+      xAxisConfig={xAxisConfig}
+      yAxisConfig={yAxisConfig}
+      tooltipConfig={tooltipConfig}
+      showGrid={showGrid}
+      className={className}
+    >
+      <ChartComponent>
+        {/* Areas */}
+        {areas.map((area, index) => (
+          <Area
+            key={area.dataKey}
+            dataKey={area.dataKey}
+            stackId={area.stackId}
+            type="monotone"
+            fill={area.fill || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length]}
+            fillOpacity={area.fillOpacity || CHART_STYLES.AREA.FILL_OPACITY}
+            stroke={area.stroke || area.fill || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length]}
+            strokeWidth={area.strokeWidth || CHART_STYLES.AREA.STROKE_WIDTH}
+          />
+        ))}
+
+        {/* Lines (for ComposedChart) */}
+        {lines && lines.map((line, index) => (
+          <Line
+            key={line.dataKey}
+            dataKey={line.dataKey}
+            type="monotone"
+            stroke={line.stroke || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length]}
+            strokeWidth={line.strokeWidth || CHART_STYLES.LINE.STROKE_WIDTH}
+            strokeDasharray={line.strokeDasharray}
+            dot={line.dot !== undefined ? line.dot : {
+              fill: line.stroke || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length],
+              strokeWidth: CHART_STYLES.LINE.DOT_STROKE_WIDTH,
+              r: CHART_STYLES.LINE.DOT_RADIUS,
+            }}
+          />
+        ))}
+      </ChartComponent>
+    </BaseChart>
+  );
+};
+
+// Predefined area chart variants
+export const ThroughputAreaChart: React.FC<{
+  data: any[];
+  config?: ChartConfig;
+  height?: number;
+}> = ({ data, config, height }) => (
+  <AreaChart
+    data={data}
+    config={config || { throughput: { label: 'Throughput', color: CHART_COLORS.PRIMARY } }}
+    areas={[{ dataKey: 'throughput' }]}
+    height={height}
+    xAxisConfig={{
+      dataKey: 'routes',
+      type: 'number',
+      domain: APP_CONSTANTS.CHART.ROUTE_DOMAIN as [number, number],
+      ticks: APP_CONSTANTS.CHART.ROUTE_TICKS,
+    }}
+    yAxisConfig={{
+      formatter: (value) => `${value}`,
+    }}
+    tooltipConfig={{
+      formatter: (value, name) => [`${value} RPS`, 'Throughput'],
+      labelFormatter: (value) => `${value} routes`,
+    }}
+  />
+);
+
+export const MemoryAreaChart: React.FC<{
+  data: any[];
+  config?: ChartConfig;
+  height?: number;
+}> = ({ data, config, height }) => (
+  <AreaChart
+    data={data}
+    config={config || {
+      gateway: { label: 'Gateway', color: CHART_COLORS.ACCENT },
+      proxy: { label: 'Proxy', color: CHART_COLORS.DARK },
+    }}
+    areas={[
+      { dataKey: 'gateway', stackId: 'memory', fillOpacity: 0.6 },
+      { dataKey: 'proxy', stackId: 'memory', fillOpacity: 0.6 },
+    ]}
+    height={height}
+    xAxisConfig={{
+      dataKey: 'routes',
+      type: 'number',
+      domain: APP_CONSTANTS.CHART.ROUTE_DOMAIN as [number, number],
+      ticks: APP_CONSTANTS.CHART.ROUTE_TICKS,
+    }}
+    yAxisConfig={{
+      formatter: (value) => `${value}MB`,
+    }}
+    tooltipConfig={{
+      labelFormatter: (value) => `${value} routes`,
+    }}
+  />
+);
diff --git a/site/tools/benchmark-dashboard/src/components/charts/BarChart.tsx b/site/tools/benchmark-dashboard/src/components/charts/BarChart.tsx
new file mode 100644
index 000000000..e5c348df8
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/charts/BarChart.tsx
@@ -0,0 +1,120 @@
+import React from 'react';
+import { BarChart as RechartsBarChart, Bar } from 'recharts';
+import { ChartConfig } from '@/components/ui/chart';
+import { BaseChart } from './BaseChart';
+import { CHART_STYLES, CHART_COLORS } from '@/config/chartConfig';
+
+interface BarChartProps {
+  data: any[];
+  config: ChartConfig;
+  bars: {
+    dataKey: string;
+    fill?: string;
+    radius?: number;
+    stackId?: string;
+  }[];
+  height?: number;
+  xAxisConfig?: {
+    dataKey: string;
+    type?: 'number' | 'category';
+    domain?: [number | string, number | string];
+    ticks?: number[];
+    formatter?: (value: any) => string;
+  };
+  yAxisConfig?: {
+    domain?: [number | string, number | string];
+    formatter?: (value: any) => string;
+  };
+  tooltipConfig?: {
+    labelFormatter?: (value: any) => string;
+    formatter?: (value: any, name: string) => [string, string];
+  };
+  showGrid?: boolean;
+  className?: string;
+}
+
+export const BarChart: React.FC<BarChartProps> = ({
+  data,
+  config,
+  bars,
+  height,
+  xAxisConfig,
+  yAxisConfig,
+  tooltipConfig,
+  showGrid = true,
+  className,
+}) => {
+  return (
+    <BaseChart
+      data={data}
+      config={config}
+      height={height}
+      xAxisConfig={xAxisConfig}
+      yAxisConfig={yAxisConfig}
+      tooltipConfig={tooltipConfig}
+      showGrid={showGrid}
+      className={className}
+    >
+      <RechartsBarChart>
+        {bars.map((bar, index) => (
+          <Bar
+            key={bar.dataKey}
+            dataKey={bar.dataKey}
+            stackId={bar.stackId}
+            fill={bar.fill || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length]}
+            radius={bar.radius || CHART_STYLES.BAR.RADIUS}
+          />
+        ))}
+      </RechartsBarChart>
+    </BaseChart>
+  );
+};
+
+// Predefined bar chart variants
+export const LatencyDistributionBarChart: React.FC<{
+  data: any[];
+  config?: ChartConfig;
+  height?: number;
+}> = ({ data, config, height }) => (
+  <BarChart
+    data={data}
+    config={config || { value: { label: 'Latency', color: CHART_COLORS.PRIMARY } }}
+    bars={[{ dataKey: 'value' }]}
+    height={height}
+    xAxisConfig={{
+      dataKey: 'percentile',
+      type: 'category',
+    }}
+    yAxisConfig={{
+      formatter: (value) => `${value}ms`,
+    }}
+    tooltipConfig={{
+      formatter: (value, name) => [`${value}ms`, 'Latency'],
+      labelFormatter: (value) => value,
+    }}
+  />
+);
+
+export const MetricComparisonBarChart: React.FC<{
+  data: any[];
+  config?: ChartConfig;
+  height?: number;
+  dataKeys: string[];
+}> = ({ data, config, height, dataKeys }) => (
+  <BarChart
+    data={data}
+    config={config || dataKeys.reduce((acc, key, index) => ({
+      ...acc,
+      [key]: { label: key, color: Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length] }
+    }), {})}
+    bars={dataKeys.map(key => ({ dataKey: key }))}
+    height={height}
+    xAxisConfig={{
+      dataKey: 'name',
+      type: 'category',
+    }}
+    tooltipConfig={{
+      labelFormatter: (value) => value,
+    }}
+  />
+);
diff --git a/site/tools/benchmark-dashboard/src/components/charts/BaseChart.tsx b/site/tools/benchmark-dashboard/src/components/charts/BaseChart.tsx
new file mode 100644
index 000000000..b8a9d6aaa
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/charts/BaseChart.tsx
@@ -0,0 +1,116 @@
+
+import React from 'react';
+import { ChartContainer, ChartTooltip, ChartTooltipContent, ChartConfig } from '@/components/ui/chart';
+import { CartesianGrid, XAxis, YAxis, ResponsiveContainer } from 'recharts';
+import { APP_CONSTANTS } from '@/config/constants';
+import { CHART_STYLES } from '@/config/chartConfig';
+import { ErrorBoundary } from '@/components/common/ErrorBoundary';
+import { ChartPlaceholder } from '@/components/common/DataPlaceholder';
+import ChartWatermark from '@/components/common/ChartWatermark';
+
+interface BaseChartProps {
+  data: any[];
+  config: ChartConfig;
+  height?: number;
+  children: React.ReactNode;
+  xAxisConfig?: {
+    dataKey: string;
+    type?: 'number' | 'category';
+    domain?: [number | string, number | string];
+    ticks?: number[];
+    formatter?: (value: any) => string;
+  };
+  yAxisConfig?: {
+    domain?: [number | string, number | string];
+    formatter?: (value: any) => string;
+  };
+  tooltipConfig?: {
+    labelFormatter?: (value: any) => string;
+    formatter?: (value: any, name: string) => [string, string];
+  };
+  showGrid?: boolean;
+  className?: string;
+  showWatermark?: boolean;
+}
+
+export const BaseChart: React.FC<BaseChartProps> = ({
+  data,
+  config,
+  height = APP_CONSTANTS.CHART.DEFAULT_HEIGHT,
+  children,
+  xAxisConfig,
+  yAxisConfig,
+  tooltipConfig,
+  showGrid = true,
+  className,
+  showWatermark = false,
+}) => {
+  // Handle empty data
+  if (!data || data.length === 0) {
+    return <ChartPlaceholder />;
+  }
+
+  return (
+    <ErrorBoundary>
+      <div className={`relative ${className}`}>
+        {showWatermark && <ChartWatermark />}
+
+        <ChartContainer config={config}>
+          <ResponsiveContainer width="100%" height={height}>
+            {React.cloneElement(children as React.ReactElement, {
+              data,
+              children: [
+                // Grid
+                showGrid && (
+                  <CartesianGrid
+                    key="grid"
+                    strokeDasharray={CHART_STYLES.GRID.STROKE_DASH_ARRAY}
+                  />
+                ),
+
+                // X Axis
+                <XAxis
+                  key="xaxis"
+                  dataKey={xAxisConfig?.dataKey || 'x'}
+                  type={xAxisConfig?.type || 'category'}
+                  domain={xAxisConfig?.domain}
+                  ticks={xAxisConfig?.ticks}
+                  tickLine={false}
+                  axisLine={false}
+                  tickMargin={APP_CONSTANTS.CHART.DEFAULT_TICK_MARGIN}
+                  tickFormatter={xAxisConfig?.formatter}
+                />,
+
+                // Y Axis
+                <YAxis
+                  key="yaxis"
+                  domain={yAxisConfig?.domain || [0, 'dataMax']}
+                  tickLine={false}
+                  axisLine={false}
+                  tickMargin={APP_CONSTANTS.CHART.DEFAULT_TICK_MARGIN}
+                  tickFormatter={yAxisConfig?.formatter}
+                />,
+
+                // Tooltip
+                <ChartTooltip
+                  key="tooltip"
+                  content={
+                    <ChartTooltipContent
+                      formatter={tooltipConfig?.formatter}
+                      labelFormatter={tooltipConfig?.labelFormatter}
+                    />
+                  }
+                />,
+
+                // Chart content
+                ...(React.Children.toArray(
+                  (children as React.ReactElement).props.children
+                ) || []),
+              ].filter(Boolean),
+            })}
+          </ResponsiveContainer>
+        </ChartContainer>
+      </div>
+    </ErrorBoundary>
+  );
+};
diff --git a/site/tools/benchmark-dashboard/src/components/charts/LineChart.tsx b/site/tools/benchmark-dashboard/src/components/charts/LineChart.tsx
new file mode 100644
index 000000000..21e5f5a8c
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/charts/LineChart.tsx
@@ -0,0 +1,146 @@
+import React from 'react';
+import { LineChart as RechartsLineChart, Line } from 'recharts';
+import { ChartConfig } from '@/components/ui/chart';
+import { BaseChart } from './BaseChart';
+import { CHART_STYLES, CHART_COLORS } from '@/config/chartConfig';
+import { APP_CONSTANTS, STROKE_PATTERNS } from '@/config/constants';
+
+interface LineChartProps {
+  data: any[];
+  config: ChartConfig;
+  lines: {
+    dataKey: string;
+    stroke?: string;
+    strokeWidth?: number;
+    strokeDasharray?: string;
+    dot?: boolean | object;
+  }[];
+  height?: number;
+  xAxisConfig?: {
+    dataKey: string;
+    type?: 'number' | 'category';
+    domain?: [number | string, number | string];
+    ticks?: number[];
+    formatter?: (value: any) => string;
+  };
+  yAxisConfig?: {
+    domain?: [number | string, number | string];
+    formatter?: (value: any) => string;
+  };
+  tooltipConfig?: {
+    labelFormatter?: (value: any) => string;
+    formatter?: (value: any, name: string) => [string, string];
+  };
+  showGrid?: boolean;
+  className?: string;
+}
+
+export const LineChart: React.FC<LineChartProps> = ({
+  data,
+  config,
+  lines,
+  height,
+  xAxisConfig,
+  yAxisConfig,
+  tooltipConfig,
+  showGrid = true,
+  className,
+}) => {
+  return (
+    <BaseChart
+      data={data}
+      config={config}
+      height={height}
+      xAxisConfig={xAxisConfig}
+      yAxisConfig={yAxisConfig}
+      tooltipConfig={tooltipConfig}
+      showGrid={showGrid}
+      className={className}
+    >
+      <RechartsLineChart>
+        {lines.map((line, index) => (
+          <Line
+            key={line.dataKey}
+            dataKey={line.dataKey}
+            type="monotone"
+            stroke={line.stroke || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length]}
+            strokeWidth={line.strokeWidth || CHART_STYLES.LINE.STROKE_WIDTH}
+            strokeDasharray={line.strokeDasharray}
+            dot={line.dot !== undefined ? line.dot : {
+              fill: line.stroke || Object.values(CHART_COLORS)[index % Object.values(CHART_COLORS).length],
+              strokeWidth: CHART_STYLES.LINE.DOT_STROKE_WIDTH,
+              r: CHART_STYLES.LINE.DOT_RADIUS,
+            }}
+          />
+        ))}
+      </RechartsLineChart>
+    </BaseChart>
+  );
+};
+
+// Predefined line chart variants
+export const EfficiencyLineChart: React.FC<{
+  data: any[];
+  config?: ChartConfig;
+  height?: number;
+}> = ({ data, config, height }) => (
+  <LineChart
+    data={data}
+    config={config || {
+      totalPerRoute: { label: 'Total per Route', color: CHART_COLORS.PRIMARY },
+      gatewayPerRoute: { label: 'Gateway per Route', color: CHART_COLORS.ACCENT },
+      proxyPerRoute: { label: 'Proxy per Route', color: CHART_COLORS.DARK },
+    }}
+    lines={[
+      { dataKey: 'totalPerRoute', strokeWidth: 3, dot: { r: 4 } },
+      { dataKey: 'gatewayPerRoute', strokeWidth: 2, strokeDasharray: STROKE_PATTERNS.DASHED, dot: { r: 3 } },
+      { dataKey: 'proxyPerRoute', strokeWidth: 2, strokeDasharray: STROKE_PATTERNS.DOTTED, dot: { r: 3 } },
+    ]}
+    height={height}
+    xAxisConfig={{
+      dataKey: 'routes',
+      type: 'number',
+      domain: APP_CONSTANTS.CHART.ROUTE_DOMAIN as [number, number],
+      ticks: APP_CONSTANTS.CHART.ROUTE_TICKS,
+    }}
+    yAxisConfig={{
+      formatter: (value) => `${value}MB`,
+    }}
+    tooltipConfig={{
+      formatter: (value, name) => [
+        `${value}MB per route`,
+        name === 'gatewayPerRoute' ? 'Gateway' :
+        name === 'proxyPerRoute' ? 'Proxy' : 'Total'
+      ],
+      labelFormatter: (value) => `${value} routes`,
+    }}
+  />
+);
+
+export const LatencyLineChart: React.FC<{
+  data: any[];
+  config?: ChartConfig;
+  height?: number;
+}> = ({ data, config, height }) => (
+  <LineChart
+    data={data}
+    config={config || {
+      latency: { label: 'Latency', color: CHART_COLORS.PRIMARY },
+    }}
+    lines={[{ dataKey: 'latency' }]}
+    height={height}
+    xAxisConfig={{
+      dataKey: 'routes',
+      type: 'number',
+      domain: APP_CONSTANTS.CHART.ROUTE_DOMAIN as [number, number],
+      ticks: APP_CONSTANTS.CHART.ROUTE_TICKS,
+    }}
+    yAxisConfig={{
+      formatter: (value) => `${value}ms`,
+    }}
+    tooltipConfig={{
+      formatter: (value, name) => [`${value}ms`, 'Latency'],
+      labelFormatter: (value) => `${value} routes`,
+    }}
+  />
+);
diff --git a/site/tools/benchmark-dashboard/src/components/charts/index.ts b/site/tools/benchmark-dashboard/src/components/charts/index.ts
new file mode 100644
index 000000000..23064c153
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/charts/index.ts
@@ -0,0 +1,16 @@
+export { BaseChart } from './BaseChart';
+export {
+  AreaChart,
+  ThroughputAreaChart,
+  MemoryAreaChart
+} from './AreaChart';
+export {
+  LineChart,
+  EfficiencyLineChart,
+  LatencyLineChart
+} from './LineChart';
+export {
+  BarChart,
+  LatencyDistributionBarChart,
+  MetricComparisonBarChart
+} from './BarChart';
diff --git a/site/tools/benchmark-dashboard/src/components/common/ChartWatermark.tsx b/site/tools/benchmark-dashboard/src/components/common/ChartWatermark.tsx
new file mode 100644
index 000000000..1d6bc8fb7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/common/ChartWatermark.tsx
@@ -0,0 +1,44 @@
+import React from 'react';
+import { GitBranch } from 'lucide-react';
+
+interface ChartWatermarkProps {
+  text?: string;
+  position?: 'bottom-center' | 'bottom-left' | 'bottom-right' | 'top-center' | 'top-left' | 'top-right';
+  className?: string;
+}
+
+const ChartWatermark: React.FC<ChartWatermarkProps> = ({
+  text = "Kind Cluster / GitHub CI",
+  position = "top-center",
+  className = ""
+}) => {
+  const getPositionClasses = () => {
+    switch (position) {
+      case 'bottom-left':
+        return 'bottom-8 left-4';
+      case 'bottom-right':
+        return 'bottom-8 right-4';
+      case 'bottom-center':
+        return 'bottom-8 left-1/2 transform -translate-x-1/2';
+      case 'top-left':
+        return 'top-4 left-4';
+      case 'top-right':
+        return 'top-4 right-4';
+      case 'top-center':
+        return 'left-1/2 transform -translate-x-1/2 -translate-y-1/2';
+      default:
+        return 'bottom-8 left-1/2 transform -translate-x-1/2';
+    }
+  };
+
+  return (
+    <div
+      className={`absolute ${getPositionClasses()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${className}`}
+    >
+      <GitBranch className="h-3 w-3 text-white" />
+      <span className="text-xs text-white font-medium">{text}</span>
+    </div>
+  );
+};
+
+export default ChartWatermark;
diff --git a/site/tools/benchmark-dashboard/src/components/common/DataPlaceholder.tsx b/site/tools/benchmark-dashboard/src/components/common/DataPlaceholder.tsx
new file mode 100644
index 000000000..09a167f3a
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/common/DataPlaceholder.tsx
@@ -0,0 +1,108 @@
+import React from 'react';
+import { BarChart3, Database, AlertCircle, RefreshCw } from 'lucide-react';
+import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
+import { Button } from '@/components/ui/button';
+
+interface DataPlaceholderProps {
+  type?: 'empty' | 'error' | 'loading' | 'no-data';
+  title?: string;
+  description?: string;
+  action?: {
+    label: string;
+    onClick: () => void;
+  };
+  className?: string;
+}
+
+const placeholderConfig = {
+  empty: {
+    icon: Database,
+    title: 'No Data Available',
+    description: 'There is no data to display at the moment.',
+  },
+  error: {
+    icon: AlertCircle,
+    title: 'Failed to Load Data',
+    description: 'An error occurred while loading the data. Please try again.',
+  },
+  loading: {
+    icon: RefreshCw,
+    title: 'Loading Data',
+    description: 'Please wait while we fetch the latest information.',
+  },
+  'no-data': {
+    icon: BarChart3,
+    title: 'No Chart Data',
+    description: 'No data available to display in the chart.',
+  },
+};
+
+export const DataPlaceholder: React.FC<DataPlaceholderProps> = ({
+  type = 'empty',
+  title,
+  description,
+  action,
+  className,
+}) => {
+  const config = placeholderConfig[type];
+  const Icon = config.icon;
+
+  return (
+    <Card className={`border-dashed ${className}`}>
+      <CardContent className="flex flex-col items-center justify-center py-12 px-6 text-center">
+        <div className="rounded-full bg-gray-100 p-3 mb-4">
+          <Icon
+            className={`h-8 w-8 text-gray-400 ${type === 'loading' ? 'animate-spin' : ''}`}
+          />
+        </div>
+        <CardTitle className="text-lg font-medium text-gray-900 mb-2">
+          {title || config.title}
+        </CardTitle>
+        <p className="text-sm text-gray-500 mb-6 max-w-sm">
+          {description || config.description}
+        </p>
+        {action && (
+          <Button
+            onClick={action.onClick}
+            variant="outline"
+            size="sm"
+          >
+            <RefreshCw className="h-4 w-4 mr-2" />
+            {action.label}
+          </Button>
+        )}
+      </CardContent>
+    </Card>
+  );
+};
+
+// Specific placeholder components for common use cases
+export const ChartPlaceholder: React.FC<{ onRetry?: () => void }> = ({ onRetry }) => (
+  <DataPlaceholder
+    type="no-data"
+    title="No Chart Data"
+    description="Unable to generate chart with the current data set."
+    action={onRetry ? { label: 'Retry', onClick: onRetry } : undefined}
+  />
+);
+
+export const ErrorPlaceholder: React.FC<{ onRetry?: () => void }> = ({ onRetry }) => (
+  <DataPlaceholder
+    type="error"
+    action={onRetry ? { label: 'Try Again', onClick: onRetry } : undefined}
+  />
+);
+
+export const EmptyPlaceholder: React.FC<{
+  title?: string;
+  description?: string;
+  onAction?: () => void;
+  actionLabel?: string;
+}> = ({ title, description, onAction, actionLabel }) => (
+  <DataPlaceholder
+    type="empty"
+    title={title}
+    description={description}
+    action={onAction && actionLabel ? { label: actionLabel, onClick: onAction } : undefined}
+  />
+);
diff --git a/site/tools/benchmark-dashboard/src/components/common/ErrorBoundary.tsx b/site/tools/benchmark-dashboard/src/components/common/ErrorBoundary.tsx
new file mode 100644
index 000000000..6db7a9e3f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/common/ErrorBoundary.tsx
@@ -0,0 +1,108 @@
+import React from 'react';
+import { AlertTriangle, RefreshCw } from 'lucide-react';
+import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
+import { Button } from '@/components/ui/button';
+
+interface ErrorBoundaryState {
+  hasError: boolean;
+  error?: Error;
+  errorInfo?: React.ErrorInfo;
+}
+
+interface ErrorBoundaryProps {
+  children: React.ReactNode;
+  fallback?: React.ComponentType<ErrorFallbackProps>;
+}
+
+interface ErrorFallbackProps {
+  error?: Error;
+  resetError: () => void;
+}
+
+export class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {
+  constructor(props: ErrorBoundaryProps) {
+    super(props);
+    this.state = { hasError: false };
+  }
+
+  static getDerivedStateFromError(error: Error): ErrorBoundaryState {
+    return {
+      hasError: true,
+      error,
+    };
+  }
+
+  componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
+    console.error('ErrorBoundary caught an error:', error, errorInfo);
+    this.setState({
+      error,
+      errorInfo,
+    });
+  }
+
+  resetError = () => {
+    this.setState({ hasError: false, error: undefined, errorInfo: undefined });
+  };
+
+  render() {
+    if (this.state.hasError) {
+      const FallbackComponent = this.props.fallback || DefaultErrorFallback;
+      return <FallbackComponent error={this.state.error} resetError={this.resetError} />;
+    }
+
+    return this.props.children;
+  }
+}
+
+const DefaultErrorFallback: React.FC<ErrorFallbackProps> = ({ error, resetError }) => (
+  <Card className="border-red-200 bg-red-50">
+    <CardHeader>
+      <CardTitle className="flex items-center gap-2 text-red-800">
+        <AlertTriangle className="h-5 w-5" />
+        Something went wrong
+      </CardTitle>
+    </CardHeader>
+    <CardContent>
+      <div className="space-y-4">
+        <p className="text-sm text-red-600">
+          An error occurred while rendering this component. Please try refreshing or contact support if the problem persists.
+        </p>
+        {error && process.env.NODE_ENV === 'development' && (
+          <details className="text-xs text-red-500 bg-red-100 p-2 rounded">
+            <summary className="cursor-pointer font-medium">Error Details</summary>
+            <pre className="mt-2 whitespace-pre-wrap">{error.message}</pre>
+            {error.stack && (
+              <pre className="mt-2 text-xs whitespace-pre-wrap overflow-x-auto">
+                {error.stack}
+              </pre>
+            )}
+          </details>
+        )}
+        <Button
+          onClick={resetError}
+          variant="outline"
+          size="sm"
+          className="border-red-300 text-red-700 hover:bg-red-100"
+        >
+          <RefreshCw className="h-4 w-4 mr-2" />
+          Try Again
+        </Button>
+      </div>
+    </CardContent>
+  </Card>
+);
+
+// Functional error boundary hook for specific components
+export const withErrorBoundary = <P extends object>(
+  Component: React.ComponentType<P>,
+  fallback?: React.ComponentType<ErrorFallbackProps>
+) => {
+  const WrappedComponent: React.FC<P> = (props) => (
+    <ErrorBoundary fallback={fallback}>
+      <Component {...props} />
+    </ErrorBoundary>
+  );
+
+  WrappedComponent.displayName = `withErrorBoundary(${Component.displayName || Component.name})`;
+  return WrappedComponent;
+};
diff --git a/site/tools/benchmark-dashboard/src/components/common/LoadingSpinner.tsx b/site/tools/benchmark-dashboard/src/components/common/LoadingSpinner.tsx
new file mode 100644
index 000000000..3f9a9d239
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/common/LoadingSpinner.tsx
@@ -0,0 +1,71 @@
+import React from 'react';
+import { Loader2 } from 'lucide-react';
+import { cn } from '@/lib/utils';
+
+interface LoadingSpinnerProps {
+  size?: 'sm' | 'md' | 'lg' | 'xl';
+  variant?: 'default' | 'muted' | 'primary';
+  className?: string;
+  text?: string;
+}
+
+const sizeClasses = {
+  sm: 'h-4 w-4',
+  md: 'h-6 w-6',
+  lg: 'h-8 w-8',
+  xl: 'h-12 w-12',
+};
+
+const variantClasses = {
+  default: 'text-gray-500',
+  muted: 'text-gray-400',
+  primary: 'text-purple-600',
+};
+
+export const LoadingSpinner: React.FC<LoadingSpinnerProps> = ({
+  size = 'md',
+  variant = 'default',
+  className,
+  text,
+}) => {
+  return (
+    <div className={cn('flex items-center justify-center', className)}>
+      <div className="flex flex-col items-center gap-2">
+        <Loader2
+          className={cn(
+            'animate-spin',
+            sizeClasses[size],
+            variantClasses[variant]
+          )}
+        />
+        {text && (
+          <span className={cn('text-sm', variantClasses[variant])}>
+            {text}
+          </span>
+        )}
+      </div>
+    </div>
+  );
+};
+
+// Full-page loading component
+export const PageLoading: React.FC<{ text?: string }> = ({ text = 'Loading...' }) => (
+  <div className="min-h-[400px] flex items-center justify-center">
+    <LoadingSpinner size="lg" variant="primary" text={text} />
+  </div>
+);
+
+// Card loading component
+export const CardLoading: React.FC<{ text?: string }> = ({ text = 'Loading data...' }) => (
+  <div className="p-8 flex items-center justify-center">
+    <LoadingSpinner size="md" variant="muted" text={text} />
+  </div>
+);
+
+// Inline loading component
+export const InlineLoading: React.FC<{ text?: string }> = ({ text }) => (
+  <span className="inline-flex items-center gap-2">
+    <Loader2 className="h-4 w-4 animate-spin text-gray-500" />
+    {text && <span className="text-sm text-gray-500">{text}</span>}
+  </span>
+);
diff --git a/site/tools/benchmark-dashboard/src/components/common/index.ts b/site/tools/benchmark-dashboard/src/components/common/index.ts
new file mode 100644
index 000000000..a2db4a63a
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/common/index.ts
@@ -0,0 +1,13 @@
+export { ErrorBoundary, withErrorBoundary } from './ErrorBoundary';
+export {
+  LoadingSpinner,
+  PageLoading,
+  CardLoading,
+  InlineLoading
+} from './LoadingSpinner';
+export {
+  DataPlaceholder,
+  ChartPlaceholder,
+  ErrorPlaceholder,
+  EmptyPlaceholder
+} from './DataPlaceholder';
diff --git a/site/tools/benchmark-dashboard/src/components/config/chartConfig.ts b/site/tools/benchmark-dashboard/src/components/config/chartConfig.ts
new file mode 100644
index 000000000..78ab158ee
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/config/chartConfig.ts
@@ -0,0 +1,141 @@
+import { ChartConfig } from '@/components/ui/chart';
+
+// Standardized color palette
+export const CHART_COLORS = {
+  PRIMARY: '#8b5cf6',     // Purple-500
+  SECONDARY: '#6366f1',   // Indigo-500
+  ACCENT: '#a855f7',      // Purple-400
+  DARK: '#4f46e5',        // Indigo-600
+  LIGHT: '#c084fc',       // Purple-300
+  VARIANT: '#7c3aed',     // Violet-600
+  MUTED: '#818cf8',       // Indigo-400
+} as const;
+
+// Standard chart configurations
+export const DEFAULT_CHART_CONFIG: ChartConfig = {
+  throughput: {
+    label: "Throughput",
+    color: CHART_COLORS.PRIMARY,
+  },
+  latency: {
+    label: "Latency",
+    color: CHART_COLORS.SECONDARY,
+  },
+  gateway: {
+    label: "Gateway",
+    color: CHART_COLORS.ACCENT,
+  },
+  proxy: {
+    label: "Proxy",
+    color: CHART_COLORS.DARK,
+  },
+  memory: {
+    label: "Memory",
+    color: CHART_COLORS.PRIMARY,
+  },
+  cpu: {
+    label: "CPU",
+    color: CHART_COLORS.SECONDARY,
+  },
+  efficiency: {
+    label: "Efficiency",
+    color: CHART_COLORS.VARIANT,
+  },
+};
+
+// Specific chart configurations
+export const PERFORMANCE_CHART_CONFIG: ChartConfig = {
+  throughput: {
+    label: "Throughput",
+    color: CHART_COLORS.PRIMARY,
+  },
+  latency: {
+    label: "Latency",
+    color: CHART_COLORS.SECONDARY,
+  },
+  gateway: {
+    label: "Gateway",
+    color: CHART_COLORS.ACCENT,
+  },
+  proxy: {
+    label: "Proxy",
+    color: CHART_COLORS.DARK,
+  },
+  rpsPerMB: {
+    label: "RPS per MB",
+    color: CHART_COLORS.VARIANT,
+  },
+};
+
+export const RESOURCE_CHART_CONFIG: ChartConfig = {
+  gateway: {
+    label: "Gateway",
+    color: CHART_COLORS.ACCENT,
+  },
+  proxy: {
+    label: "Proxy",
+    color: CHART_COLORS.DARK,
+  },
+  gatewayMean: {
+    label: "Gateway Mean",
+    color: CHART_COLORS.PRIMARY,
+  },
+  proxyMean: {
+    label: "Proxy Mean",
+    color: CHART_COLORS.SECONDARY,
+  },
+  gatewayMax: {
+    label: "Gateway Max",
+    color: CHART_COLORS.LIGHT,
+  },
+  proxyMax: {
+    label: "Proxy Max",
+    color: CHART_COLORS.MUTED,
+  },
+};
+
+export const LATENCY_CHART_CONFIG: ChartConfig = {
+  latency: {
+    label: "Latency",
+    color: CHART_COLORS.PRIMARY,
+  },
+  p50: {
+    label: "P50",
+    color: CHART_COLORS.PRIMARY,
+  },
+  p75: {
+    label: "P75",
+    color: CHART_COLORS.SECONDARY,
+  },
+  p90: {
+    label: "P90",
+    color: CHART_COLORS.DARK,
+  },
+  p95: {
+    label: "P95",
+    color: CHART_COLORS.ACCENT,
+  },
+  p99: {
+    label: "P99",
+    color: CHART_COLORS.VARIANT,
+  },
+};
+
+// Chart styling configurations
+export const CHART_STYLES = {
+  AREA: {
+    FILL_OPACITY: 0.4,
+    STROKE_WIDTH: 2,
+  },
+  LINE: {
+    STROKE_WIDTH: 3,
+    DOT_RADIUS: 3,
+    DOT_STROKE_WIDTH: 2,
+  },
+  BAR: {
+    RADIUS: 4,
+  },
+  GRID: {
+    STROKE_DASH_ARRAY: '3 3',
+  },
+} as const;
diff --git a/site/tools/benchmark-dashboard/src/components/config/constants.ts b/site/tools/benchmark-dashboard/src/components/config/constants.ts
new file mode 100644
index 000000000..db172e272
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/config/constants.ts
@@ -0,0 +1,43 @@
+// Application-wide constants
+export const APP_CONSTANTS = {
+  CHART: {
+    DEFAULT_HEIGHT: 400,
+    DEFAULT_TICK_MARGIN: 8,
+    ROUTE_TICKS: [10, 50, 100, 300, 500, 1000],
+    ROUTE_DOMAIN: [0, 1100],
+  },
+  PERFORMANCE: {
+    MAX_ROUTES: 1000,
+    MIN_ROUTES: 10,
+    DEFAULT_RPS: 10000,
+    DEFAULT_CONNECTIONS: 100,
+    DEFAULT_DURATION: 30,
+  },
+  FORMATS: {
+    MEMORY: 'MB',
+    CPU: '%',
+    LATENCY: 'ms',
+    THROUGHPUT: 'RPS',
+  }
+};
+
+// Route definitions
+export const ROUTES = {
+  HOME: '/',
+  TESTING_DETAILS: '/testing-details',
+  RESILIENCE_DETAILS: '/resilience-details',
+  CONFORMANCE_DETAILS: '/conformance-details',
+} as const;
+
+// Test phases
+export const TEST_PHASES = {
+  SCALING_UP: 'scaling-up',
+  SCALING_DOWN: 'scaling-down',
+} as const;
+
+// Chart stroke patterns
+export const STROKE_PATTERNS = {
+  SOLID: 'none',
+  DASHED: '5 5',
+  DOTTED: '3 3',
+} as const;
diff --git a/site/tools/benchmark-dashboard/src/components/config/index.ts b/site/tools/benchmark-dashboard/src/components/config/index.ts
new file mode 100644
index 000000000..7818d07fb
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/config/index.ts
@@ -0,0 +1,15 @@
+export {
+  APP_CONSTANTS,
+  ROUTES,
+  TEST_PHASES,
+  STROKE_PATTERNS
+} from './constants';
+
+export {
+  CHART_COLORS,
+  DEFAULT_CHART_CONFIG,
+  PERFORMANCE_CHART_CONFIG,
+  RESOURCE_CHART_CONFIG,
+  LATENCY_CHART_CONFIG,
+  CHART_STYLES
+} from './chartConfig';
diff --git a/site/tools/benchmark-dashboard/src/components/ui/accordion.tsx b/site/tools/benchmark-dashboard/src/components/ui/accordion.tsx
new file mode 100644
index 000000000..e6a723d06
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/accordion.tsx
@@ -0,0 +1,56 @@
+import * as React from "react"
+import * as AccordionPrimitive from "@radix-ui/react-accordion"
+import { ChevronDown } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Accordion = AccordionPrimitive.Root
+
+const AccordionItem = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
+>(({ className, ...props }, ref) => (
+  <AccordionPrimitive.Item
+    ref={ref}
+    className={cn("border-b", className)}
+    {...props}
+  />
+))
+AccordionItem.displayName = "AccordionItem"
+
+const AccordionTrigger = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Trigger>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>
+>(({ className, children, ...props }, ref) => (
+  <AccordionPrimitive.Header className="flex">
+    <AccordionPrimitive.Trigger
+      ref={ref}
+      className={cn(
+        "flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      <ChevronDown className="h-4 w-4 shrink-0 transition-transform duration-200" />
+    </AccordionPrimitive.Trigger>
+  </AccordionPrimitive.Header>
+))
+AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName
+
+const AccordionContent = React.forwardRef<
+  React.ElementRef<typeof AccordionPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>
+>(({ className, children, ...props }, ref) => (
+  <AccordionPrimitive.Content
+    ref={ref}
+    className="overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
+    {...props}
+  >
+    <div className={cn("pb-4 pt-0", className)}>{children}</div>
+  </AccordionPrimitive.Content>
+))
+
+AccordionContent.displayName = AccordionPrimitive.Content.displayName
+
+export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/alert-dialog.tsx b/site/tools/benchmark-dashboard/src/components/ui/alert-dialog.tsx
new file mode 100644
index 000000000..8722561cf
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/alert-dialog.tsx
@@ -0,0 +1,139 @@
+import * as React from "react"
+import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog"
+
+import { cn } from "@/lib/utils"
+import { buttonVariants } from "@/components/ui/button"
+
+const AlertDialog = AlertDialogPrimitive.Root
+
+const AlertDialogTrigger = AlertDialogPrimitive.Trigger
+
+const AlertDialogPortal = AlertDialogPrimitive.Portal
+
+const AlertDialogOverlay = React.forwardRef<
+  React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
+  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
+>(({ className, ...props }, ref) => (
+  <AlertDialogPrimitive.Overlay
+    className={cn(
+      "fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
+      className
+    )}
+    {...props}
+    ref={ref}
+  />
+))
+AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName
+
+const AlertDialogContent = React.forwardRef<
+  React.ElementRef<typeof AlertDialogPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
+>(({ className, ...props }, ref) => (
+  <AlertDialogPortal>
+    <AlertDialogOverlay />
+    <AlertDialogPrimitive.Content
+      ref={ref}
+      className={cn(
+        "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
+        className
+      )}
+      {...props}
+    />
+  </AlertDialogPortal>
+))
+AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName
+
+const AlertDialogHeader = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn(
+      "flex flex-col space-y-2 text-center sm:text-left",
+      className
+    )}
+    {...props}
+  />
+)
+AlertDialogHeader.displayName = "AlertDialogHeader"
+
+const AlertDialogFooter = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn(
+      "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
+      className
+    )}
+    {...props}
+  />
+)
+AlertDialogFooter.displayName = "AlertDialogFooter"
+
+const AlertDialogTitle = React.forwardRef<
+  React.ElementRef<typeof AlertDialogPrimitive.Title>,
+  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
+>(({ className, ...props }, ref) => (
+  <AlertDialogPrimitive.Title
+    ref={ref}
+    className={cn("text-lg font-semibold", className)}
+    {...props}
+  />
+))
+AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName
+
+const AlertDialogDescription = React.forwardRef<
+  React.ElementRef<typeof AlertDialogPrimitive.Description>,
+  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
+>(({ className, ...props }, ref) => (
+  <AlertDialogPrimitive.Description
+    ref={ref}
+    className={cn("text-sm text-muted-foreground", className)}
+    {...props}
+  />
+))
+AlertDialogDescription.displayName =
+  AlertDialogPrimitive.Description.displayName
+
+const AlertDialogAction = React.forwardRef<
+  React.ElementRef<typeof AlertDialogPrimitive.Action>,
+  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
+>(({ className, ...props }, ref) => (
+  <AlertDialogPrimitive.Action
+    ref={ref}
+    className={cn(buttonVariants(), className)}
+    {...props}
+  />
+))
+AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName
+
+const AlertDialogCancel = React.forwardRef<
+  React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
+  React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
+>(({ className, ...props }, ref) => (
+  <AlertDialogPrimitive.Cancel
+    ref={ref}
+    className={cn(
+      buttonVariants({ variant: "outline" }),
+      "mt-2 sm:mt-0",
+      className
+    )}
+    {...props}
+  />
+))
+AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName
+
+export {
+  AlertDialog,
+  AlertDialogPortal,
+  AlertDialogOverlay,
+  AlertDialogTrigger,
+  AlertDialogContent,
+  AlertDialogHeader,
+  AlertDialogFooter,
+  AlertDialogTitle,
+  AlertDialogDescription,
+  AlertDialogAction,
+  AlertDialogCancel,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/alert.tsx b/site/tools/benchmark-dashboard/src/components/ui/alert.tsx
new file mode 100644
index 000000000..41fa7e056
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/alert.tsx
@@ -0,0 +1,59 @@
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const alertVariants = cva(
+  "relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
+  {
+    variants: {
+      variant: {
+        default: "bg-background text-foreground",
+        destructive:
+          "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+    },
+  }
+)
+
+const Alert = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants>
+>(({ className, variant, ...props }, ref) => (
+  <div
+    ref={ref}
+    role="alert"
+    className={cn(alertVariants({ variant }), className)}
+    {...props}
+  />
+))
+Alert.displayName = "Alert"
+
+const AlertTitle = React.forwardRef<
+  HTMLParagraphElement,
+  React.HTMLAttributes<HTMLHeadingElement>
+>(({ className, ...props }, ref) => (
+  <h5
+    ref={ref}
+    className={cn("mb-1 font-medium leading-none tracking-tight", className)}
+    {...props}
+  />
+))
+AlertTitle.displayName = "AlertTitle"
+
+const AlertDescription = React.forwardRef<
+  HTMLParagraphElement,
+  React.HTMLAttributes<HTMLParagraphElement>
+>(({ className, ...props }, ref) => (
+  <div
+    ref={ref}
+    className={cn("text-sm [&_p]:leading-relaxed", className)}
+    {...props}
+  />
+))
+AlertDescription.displayName = "AlertDescription"
+
+export { Alert, AlertTitle, AlertDescription }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/aspect-ratio.tsx b/site/tools/benchmark-dashboard/src/components/ui/aspect-ratio.tsx
new file mode 100644
index 000000000..c4abbf37f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/aspect-ratio.tsx
@@ -0,0 +1,5 @@
+import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio"
+
+const AspectRatio = AspectRatioPrimitive.Root
+
+export { AspectRatio }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/avatar.tsx b/site/tools/benchmark-dashboard/src/components/ui/avatar.tsx
new file mode 100644
index 000000000..991f56ecb
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/avatar.tsx
@@ -0,0 +1,48 @@
+import * as React from "react"
+import * as AvatarPrimitive from "@radix-ui/react-avatar"
+
+import { cn } from "@/lib/utils"
+
+const Avatar = React.forwardRef<
+  React.ElementRef<typeof AvatarPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
+>(({ className, ...props }, ref) => (
+  <AvatarPrimitive.Root
+    ref={ref}
+    className={cn(
+      "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
+      className
+    )}
+    {...props}
+  />
+))
+Avatar.displayName = AvatarPrimitive.Root.displayName
+
+const AvatarImage = React.forwardRef<
+  React.ElementRef<typeof AvatarPrimitive.Image>,
+  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
+>(({ className, ...props }, ref) => (
+  <AvatarPrimitive.Image
+    ref={ref}
+    className={cn("aspect-square h-full w-full", className)}
+    {...props}
+  />
+))
+AvatarImage.displayName = AvatarPrimitive.Image.displayName
+
+const AvatarFallback = React.forwardRef<
+  React.ElementRef<typeof AvatarPrimitive.Fallback>,
+  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
+>(({ className, ...props }, ref) => (
+  <AvatarPrimitive.Fallback
+    ref={ref}
+    className={cn(
+      "flex h-full w-full items-center justify-center rounded-full bg-muted",
+      className
+    )}
+    {...props}
+  />
+))
+AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
+
+export { Avatar, AvatarImage, AvatarFallback }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/badge.tsx b/site/tools/benchmark-dashboard/src/components/ui/badge.tsx
new file mode 100644
index 000000000..f000e3ef5
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/badge.tsx
@@ -0,0 +1,36 @@
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const badgeVariants = cva(
+  "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
+  {
+    variants: {
+      variant: {
+        default:
+          "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
+        secondary:
+          "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
+        destructive:
+          "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
+        outline: "text-foreground",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+    },
+  }
+)
+
+export interface BadgeProps
+  extends React.HTMLAttributes<HTMLDivElement>,
+    VariantProps<typeof badgeVariants> {}
+
+function Badge({ className, variant, ...props }: BadgeProps) {
+  return (
+    <div className={cn(badgeVariants({ variant }), className)} {...props} />
+  )
+}
+
+export { Badge, badgeVariants }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/breadcrumb.tsx b/site/tools/benchmark-dashboard/src/components/ui/breadcrumb.tsx
new file mode 100644
index 000000000..71a5c325c
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/breadcrumb.tsx
@@ -0,0 +1,115 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { ChevronRight, MoreHorizontal } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Breadcrumb = React.forwardRef<
+  HTMLElement,
+  React.ComponentPropsWithoutRef<"nav"> & {
+    separator?: React.ReactNode
+  }
+>(({ ...props }, ref) => <nav ref={ref} aria-label="breadcrumb" {...props} />)
+Breadcrumb.displayName = "Breadcrumb"
+
+const BreadcrumbList = React.forwardRef<
+  HTMLOListElement,
+  React.ComponentPropsWithoutRef<"ol">
+>(({ className, ...props }, ref) => (
+  <ol
+    ref={ref}
+    className={cn(
+      "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",
+      className
+    )}
+    {...props}
+  />
+))
+BreadcrumbList.displayName = "BreadcrumbList"
+
+const BreadcrumbItem = React.forwardRef<
+  HTMLLIElement,
+  React.ComponentPropsWithoutRef<"li">
+>(({ className, ...props }, ref) => (
+  <li
+    ref={ref}
+    className={cn("inline-flex items-center gap-1.5", className)}
+    {...props}
+  />
+))
+BreadcrumbItem.displayName = "BreadcrumbItem"
+
+const BreadcrumbLink = React.forwardRef<
+  HTMLAnchorElement,
+  React.ComponentPropsWithoutRef<"a"> & {
+    asChild?: boolean
+  }
+>(({ asChild, className, ...props }, ref) => {
+  const Comp = asChild ? Slot : "a"
+
+  return (
+    <Comp
+      ref={ref}
+      className={cn("transition-colors hover:text-foreground", className)}
+      {...props}
+    />
+  )
+})
+BreadcrumbLink.displayName = "BreadcrumbLink"
+
+const BreadcrumbPage = React.forwardRef<
+  HTMLSpanElement,
+  React.ComponentPropsWithoutRef<"span">
+>(({ className, ...props }, ref) => (
+  <span
+    ref={ref}
+    role="link"
+    aria-disabled="true"
+    aria-current="page"
+    className={cn("font-normal text-foreground", className)}
+    {...props}
+  />
+))
+BreadcrumbPage.displayName = "BreadcrumbPage"
+
+const BreadcrumbSeparator = ({
+  children,
+  className,
+  ...props
+}: React.ComponentProps<"li">) => (
+  <li
+    role="presentation"
+    aria-hidden="true"
+    className={cn("[&>svg]:size-3.5", className)}
+    {...props}
+  >
+    {children ?? <ChevronRight />}
+  </li>
+)
+BreadcrumbSeparator.displayName = "BreadcrumbSeparator"
+
+const BreadcrumbEllipsis = ({
+  className,
+  ...props
+}: React.ComponentProps<"span">) => (
+  <span
+    role="presentation"
+    aria-hidden="true"
+    className={cn("flex h-9 w-9 items-center justify-center", className)}
+    {...props}
+  >
+    <MoreHorizontal className="h-4 w-4" />
+    <span className="sr-only">More</span>
+  </span>
+)
+BreadcrumbEllipsis.displayName = "BreadcrumbElipssis"
+
+export {
+  Breadcrumb,
+  BreadcrumbList,
+  BreadcrumbItem,
+  BreadcrumbLink,
+  BreadcrumbPage,
+  BreadcrumbSeparator,
+  BreadcrumbEllipsis,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/button.tsx b/site/tools/benchmark-dashboard/src/components/ui/button.tsx
new file mode 100644
index 000000000..36496a287
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/button.tsx
@@ -0,0 +1,56 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const buttonVariants = cva(
+  "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
+  {
+    variants: {
+      variant: {
+        default: "bg-primary text-primary-foreground hover:bg-primary/90",
+        destructive:
+          "bg-destructive text-destructive-foreground hover:bg-destructive/90",
+        outline:
+          "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
+        secondary:
+          "bg-secondary text-secondary-foreground hover:bg-secondary/80",
+        ghost: "hover:bg-accent hover:text-accent-foreground",
+        link: "text-primary underline-offset-4 hover:underline",
+      },
+      size: {
+        default: "h-10 px-4 py-2",
+        sm: "h-9 rounded-md px-3",
+        lg: "h-11 rounded-md px-8",
+        icon: "h-10 w-10",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+export interface ButtonProps
+  extends React.ButtonHTMLAttributes<HTMLButtonElement>,
+    VariantProps<typeof buttonVariants> {
+  asChild?: boolean
+}
+
+const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
+  ({ className, variant, size, asChild = false, ...props }, ref) => {
+    const Comp = asChild ? Slot : "button"
+    return (
+      <Comp
+        className={cn(buttonVariants({ variant, size, className }))}
+        ref={ref}
+        {...props}
+      />
+    )
+  }
+)
+Button.displayName = "Button"
+
+export { Button, buttonVariants }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/calendar.tsx b/site/tools/benchmark-dashboard/src/components/ui/calendar.tsx
new file mode 100644
index 000000000..3160ad0f3
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/calendar.tsx
@@ -0,0 +1,64 @@
+import * as React from "react";
+import { ChevronLeft, ChevronRight } from "lucide-react";
+import { DayPicker } from "react-day-picker";
+
+import { cn } from "@/lib/utils";
+import { buttonVariants } from "@/components/ui/button";
+
+export type CalendarProps = React.ComponentProps<typeof DayPicker>;
+
+function Calendar({
+  className,
+  classNames,
+  showOutsideDays = true,
+  ...props
+}: CalendarProps) {
+  return (
+    <DayPicker
+      showOutsideDays={showOutsideDays}
+      className={cn("p-3", className)}
+      classNames={{
+        months: "flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0",
+        month: "space-y-4",
+        caption: "flex justify-center pt-1 relative items-center",
+        caption_label: "text-sm font-medium",
+        nav: "space-x-1 flex items-center",
+        nav_button: cn(
+          buttonVariants({ variant: "outline" }),
+          "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
+        ),
+        nav_button_previous: "absolute left-1",
+        nav_button_next: "absolute right-1",
+        table: "w-full border-collapse space-y-1",
+        head_row: "flex",
+        head_cell:
+          "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]",
+        row: "flex w-full mt-2",
+        cell: "h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20",
+        day: cn(
+          buttonVariants({ variant: "ghost" }),
+          "h-9 w-9 p-0 font-normal aria-selected:opacity-100"
+        ),
+        day_range_end: "day-range-end",
+        day_selected:
+          "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
+        day_today: "bg-accent text-accent-foreground",
+        day_outside:
+          "day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30",
+        day_disabled: "text-muted-foreground opacity-50",
+        day_range_middle:
+          "aria-selected:bg-accent aria-selected:text-accent-foreground",
+        day_hidden: "invisible",
+        ...classNames,
+      }}
+      components={{
+        IconLeft: ({ ..._props }) => <ChevronLeft className="h-4 w-4" />,
+        IconRight: ({ ..._props }) => <ChevronRight className="h-4 w-4" />,
+      }}
+      {...props}
+    />
+  );
+}
+Calendar.displayName = "Calendar";
+
+export { Calendar };
diff --git a/site/tools/benchmark-dashboard/src/components/ui/card.tsx b/site/tools/benchmark-dashboard/src/components/ui/card.tsx
new file mode 100644
index 000000000..afa13ecfa
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/card.tsx
@@ -0,0 +1,79 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Card = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+  <div
+    ref={ref}
+    className={cn(
+      "rounded-lg border bg-card text-card-foreground shadow-sm",
+      className
+    )}
+    {...props}
+  />
+))
+Card.displayName = "Card"
+
+const CardHeader = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+  <div
+    ref={ref}
+    className={cn("flex flex-col space-y-1.5 p-6", className)}
+    {...props}
+  />
+))
+CardHeader.displayName = "CardHeader"
+
+const CardTitle = React.forwardRef<
+  HTMLParagraphElement,
+  React.HTMLAttributes<HTMLHeadingElement>
+>(({ className, ...props }, ref) => (
+  <h3
+    ref={ref}
+    className={cn(
+      "text-2xl font-semibold leading-none tracking-tight",
+      className
+    )}
+    {...props}
+  />
+))
+CardTitle.displayName = "CardTitle"
+
+const CardDescription = React.forwardRef<
+  HTMLParagraphElement,
+  React.HTMLAttributes<HTMLParagraphElement>
+>(({ className, ...props }, ref) => (
+  <p
+    ref={ref}
+    className={cn("text-sm text-muted-foreground", className)}
+    {...props}
+  />
+))
+CardDescription.displayName = "CardDescription"
+
+const CardContent = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+  <div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
+))
+CardContent.displayName = "CardContent"
+
+const CardFooter = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => (
+  <div
+    ref={ref}
+    className={cn("flex items-center p-6 pt-0", className)}
+    {...props}
+  />
+))
+CardFooter.displayName = "CardFooter"
+
+export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/carousel.tsx b/site/tools/benchmark-dashboard/src/components/ui/carousel.tsx
new file mode 100644
index 000000000..9c2b9bf37
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/carousel.tsx
@@ -0,0 +1,260 @@
+import * as React from "react"
+import useEmblaCarousel, {
+  type UseEmblaCarouselType,
+} from "embla-carousel-react"
+import { ArrowLeft, ArrowRight } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+import { Button } from "@/components/ui/button"
+
+type CarouselApi = UseEmblaCarouselType[1]
+type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
+type CarouselOptions = UseCarouselParameters[0]
+type CarouselPlugin = UseCarouselParameters[1]
+
+type CarouselProps = {
+  opts?: CarouselOptions
+  plugins?: CarouselPlugin
+  orientation?: "horizontal" | "vertical"
+  setApi?: (api: CarouselApi) => void
+}
+
+type CarouselContextProps = {
+  carouselRef: ReturnType<typeof useEmblaCarousel>[0]
+  api: ReturnType<typeof useEmblaCarousel>[1]
+  scrollPrev: () => void
+  scrollNext: () => void
+  canScrollPrev: boolean
+  canScrollNext: boolean
+} & CarouselProps
+
+const CarouselContext = React.createContext<CarouselContextProps | null>(null)
+
+function useCarousel() {
+  const context = React.useContext(CarouselContext)
+
+  if (!context) {
+    throw new Error("useCarousel must be used within a <Carousel />")
+  }
+
+  return context
+}
+
+const Carousel = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement> & CarouselProps
+>(
+  (
+    {
+      orientation = "horizontal",
+      opts,
+      setApi,
+      plugins,
+      className,
+      children,
+      ...props
+    },
+    ref
+  ) => {
+    const [carouselRef, api] = useEmblaCarousel(
+      {
+        ...opts,
+        axis: orientation === "horizontal" ? "x" : "y",
+      },
+      plugins
+    )
+    const [canScrollPrev, setCanScrollPrev] = React.useState(false)
+    const [canScrollNext, setCanScrollNext] = React.useState(false)
+
+    const onSelect = React.useCallback((api: CarouselApi) => {
+      if (!api) {
+        return
+      }
+
+      setCanScrollPrev(api.canScrollPrev())
+      setCanScrollNext(api.canScrollNext())
+    }, [])
+
+    const scrollPrev = React.useCallback(() => {
+      api?.scrollPrev()
+    }, [api])
+
+    const scrollNext = React.useCallback(() => {
+      api?.scrollNext()
+    }, [api])
+
+    const handleKeyDown = React.useCallback(
+      (event: React.KeyboardEvent<HTMLDivElement>) => {
+        if (event.key === "ArrowLeft") {
+          event.preventDefault()
+          scrollPrev()
+        } else if (event.key === "ArrowRight") {
+          event.preventDefault()
+          scrollNext()
+        }
+      },
+      [scrollPrev, scrollNext]
+    )
+
+    React.useEffect(() => {
+      if (!api || !setApi) {
+        return
+      }
+
+      setApi(api)
+    }, [api, setApi])
+
+    React.useEffect(() => {
+      if (!api) {
+        return
+      }
+
+      onSelect(api)
+      api.on("reInit", onSelect)
+      api.on("select", onSelect)
+
+      return () => {
+        api?.off("select", onSelect)
+      }
+    }, [api, onSelect])
+
+    return (
+      <CarouselContext.Provider
+        value={{
+          carouselRef,
+          api: api,
+          opts,
+          orientation:
+            orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
+          scrollPrev,
+          scrollNext,
+          canScrollPrev,
+          canScrollNext,
+        }}
+      >
+        <div
+          ref={ref}
+          onKeyDownCapture={handleKeyDown}
+          className={cn("relative", className)}
+          role="region"
+          aria-roledescription="carousel"
+          {...props}
+        >
+          {children}
+        </div>
+      </CarouselContext.Provider>
+    )
+  }
+)
+Carousel.displayName = "Carousel"
+
+const CarouselContent = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => {
+  const { carouselRef, orientation } = useCarousel()
+
+  return (
+    <div ref={carouselRef} className="overflow-hidden">
+      <div
+        ref={ref}
+        className={cn(
+          "flex",
+          orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
+          className
+        )}
+        {...props}
+      />
+    </div>
+  )
+})
+CarouselContent.displayName = "CarouselContent"
+
+const CarouselItem = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => {
+  const { orientation } = useCarousel()
+
+  return (
+    <div
+      ref={ref}
+      role="group"
+      aria-roledescription="slide"
+      className={cn(
+        "min-w-0 shrink-0 grow-0 basis-full",
+        orientation === "horizontal" ? "pl-4" : "pt-4",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+CarouselItem.displayName = "CarouselItem"
+
+const CarouselPrevious = React.forwardRef<
+  HTMLButtonElement,
+  React.ComponentProps<typeof Button>
+>(({ className, variant = "outline", size = "icon", ...props }, ref) => {
+  const { orientation, scrollPrev, canScrollPrev } = useCarousel()
+
+  return (
+    <Button
+      ref={ref}
+      variant={variant}
+      size={size}
+      className={cn(
+        "absolute  h-8 w-8 rounded-full",
+        orientation === "horizontal"
+          ? "-left-12 top-1/2 -translate-y-1/2"
+          : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
+        className
+      )}
+      disabled={!canScrollPrev}
+      onClick={scrollPrev}
+      {...props}
+    >
+      <ArrowLeft className="h-4 w-4" />
+      <span className="sr-only">Previous slide</span>
+    </Button>
+  )
+})
+CarouselPrevious.displayName = "CarouselPrevious"
+
+const CarouselNext = React.forwardRef<
+  HTMLButtonElement,
+  React.ComponentProps<typeof Button>
+>(({ className, variant = "outline", size = "icon", ...props }, ref) => {
+  const { orientation, scrollNext, canScrollNext } = useCarousel()
+
+  return (
+    <Button
+      ref={ref}
+      variant={variant}
+      size={size}
+      className={cn(
+        "absolute h-8 w-8 rounded-full",
+        orientation === "horizontal"
+          ? "-right-12 top-1/2 -translate-y-1/2"
+          : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
+        className
+      )}
+      disabled={!canScrollNext}
+      onClick={scrollNext}
+      {...props}
+    >
+      <ArrowRight className="h-4 w-4" />
+      <span className="sr-only">Next slide</span>
+    </Button>
+  )
+})
+CarouselNext.displayName = "CarouselNext"
+
+export {
+  type CarouselApi,
+  Carousel,
+  CarouselContent,
+  CarouselItem,
+  CarouselPrevious,
+  CarouselNext,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/chart.tsx b/site/tools/benchmark-dashboard/src/components/ui/chart.tsx
new file mode 100644
index 000000000..a21d77ee7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/chart.tsx
@@ -0,0 +1,363 @@
+import * as React from "react"
+import * as RechartsPrimitive from "recharts"
+
+import { cn } from "@/lib/utils"
+
+// Format: { THEME_NAME: CSS_SELECTOR }
+const THEMES = { light: "", dark: ".dark" } as const
+
+export type ChartConfig = {
+  [k in string]: {
+    label?: React.ReactNode
+    icon?: React.ComponentType
+  } & (
+    | { color?: string; theme?: never }
+    | { color?: never; theme: Record<keyof typeof THEMES, string> }
+  )
+}
+
+type ChartContextProps = {
+  config: ChartConfig
+}
+
+const ChartContext = React.createContext<ChartContextProps | null>(null)
+
+function useChart() {
+  const context = React.useContext(ChartContext)
+
+  if (!context) {
+    throw new Error("useChart must be used within a <ChartContainer />")
+  }
+
+  return context
+}
+
+const ChartContainer = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div"> & {
+    config: ChartConfig
+    children: React.ComponentProps<
+      typeof RechartsPrimitive.ResponsiveContainer
+    >["children"]
+  }
+>(({ id, className, children, config, ...props }, ref) => {
+  const uniqueId = React.useId()
+  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`
+
+  return (
+    <ChartContext.Provider value={{ config }}>
+      <div
+        data-chart={chartId}
+        ref={ref}
+        className={cn(
+          "flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",
+          className
+        )}
+        {...props}
+      >
+        <ChartStyle id={chartId} config={config} />
+        <RechartsPrimitive.ResponsiveContainer>
+          {children}
+        </RechartsPrimitive.ResponsiveContainer>
+      </div>
+    </ChartContext.Provider>
+  )
+})
+ChartContainer.displayName = "Chart"
+
+const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
+  const colorConfig = Object.entries(config).filter(
+    ([_, config]) => config.theme || config.color
+  )
+
+  if (!colorConfig.length) {
+    return null
+  }
+
+  return (
+    <style
+      dangerouslySetInnerHTML={{
+        __html: Object.entries(THEMES)
+          .map(
+            ([theme, prefix]) => `
+${prefix} [data-chart=${id}] {
+${colorConfig
+  .map(([key, itemConfig]) => {
+    const color =
+      itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||
+      itemConfig.color
+    return color ? `  --color-${key}: ${color};` : null
+  })
+  .join("\n")}
+}
+`
+          )
+          .join("\n"),
+      }}
+    />
+  )
+}
+
+const ChartTooltip = RechartsPrimitive.Tooltip
+
+const ChartTooltipContent = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
+    React.ComponentProps<"div"> & {
+      hideLabel?: boolean
+      hideIndicator?: boolean
+      indicator?: "line" | "dot" | "dashed"
+      nameKey?: string
+      labelKey?: string
+    }
+>(
+  (
+    {
+      active,
+      payload,
+      className,
+      indicator = "dot",
+      hideLabel = false,
+      hideIndicator = false,
+      label,
+      labelFormatter,
+      labelClassName,
+      formatter,
+      color,
+      nameKey,
+      labelKey,
+    },
+    ref
+  ) => {
+    const { config } = useChart()
+
+    const tooltipLabel = React.useMemo(() => {
+      if (hideLabel || !payload?.length) {
+        return null
+      }
+
+      const [item] = payload
+      const key = `${labelKey || item.dataKey || item.name || "value"}`
+      const itemConfig = getPayloadConfigFromPayload(config, item, key)
+      const value =
+        !labelKey && typeof label === "string"
+          ? config[label as keyof typeof config]?.label || label
+          : itemConfig?.label
+
+      if (labelFormatter) {
+        return (
+          <div className={cn("font-medium", labelClassName)}>
+            {labelFormatter(value, payload)}
+          </div>
+        )
+      }
+
+      if (!value) {
+        return null
+      }
+
+      return <div className={cn("font-medium", labelClassName)}>{value}</div>
+    }, [
+      label,
+      labelFormatter,
+      payload,
+      hideLabel,
+      labelClassName,
+      config,
+      labelKey,
+    ])
+
+    if (!active || !payload?.length) {
+      return null
+    }
+
+    const nestLabel = payload.length === 1 && indicator !== "dot"
+
+    return (
+      <div
+        ref={ref}
+        className={cn(
+          "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
+          className
+        )}
+      >
+        {!nestLabel ? tooltipLabel : null}
+        <div className="grid gap-1.5">
+          {payload.map((item, index) => {
+            const key = `${nameKey || item.name || item.dataKey || "value"}`
+            const itemConfig = getPayloadConfigFromPayload(config, item, key)
+            const indicatorColor = color || item.payload.fill || item.color
+
+            return (
+              <div
+                key={item.dataKey}
+                className={cn(
+                  "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
+                  indicator === "dot" && "items-center"
+                )}
+              >
+                {formatter && item?.value !== undefined && item.name ? (
+                  formatter(item.value, item.name, item, index, item.payload)
+                ) : (
+                  <>
+                    {itemConfig?.icon ? (
+                      <itemConfig.icon />
+                    ) : (
+                      !hideIndicator && (
+                        <div
+                          className={cn(
+                            "shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",
+                            {
+                              "h-2.5 w-2.5": indicator === "dot",
+                              "w-1": indicator === "line",
+                              "w-0 border-[1.5px] border-dashed bg-transparent":
+                                indicator === "dashed",
+                              "my-0.5": nestLabel && indicator === "dashed",
+                            }
+                          )}
+                          style={
+                            {
+                              "--color-bg": indicatorColor,
+                              "--color-border": indicatorColor,
+                            } as React.CSSProperties
+                          }
+                        />
+                      )
+                    )}
+                    <div
+                      className={cn(
+                        "flex flex-1 justify-between leading-none",
+                        nestLabel ? "items-end" : "items-center"
+                      )}
+                    >
+                      <div className="grid gap-1.5">
+                        {nestLabel ? tooltipLabel : null}
+                        <span className="text-muted-foreground">
+                          {itemConfig?.label || item.name}
+                        </span>
+                      </div>
+                      {item.value && (
+                        <span className="font-mono font-medium tabular-nums text-foreground">
+                          {item.value.toLocaleString()}
+                        </span>
+                      )}
+                    </div>
+                  </>
+                )}
+              </div>
+            )
+          })}
+        </div>
+      </div>
+    )
+  }
+)
+ChartTooltipContent.displayName = "ChartTooltip"
+
+const ChartLegend = RechartsPrimitive.Legend
+
+const ChartLegendContent = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div"> &
+    Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
+      hideIcon?: boolean
+      nameKey?: string
+    }
+>(
+  (
+    { className, hideIcon = false, payload, verticalAlign = "bottom", nameKey },
+    ref
+  ) => {
+    const { config } = useChart()
+
+    if (!payload?.length) {
+      return null
+    }
+
+    return (
+      <div
+        ref={ref}
+        className={cn(
+          "flex items-center justify-center gap-4",
+          verticalAlign === "top" ? "pb-3" : "pt-3",
+          className
+        )}
+      >
+        {payload.map((item) => {
+          const key = `${nameKey || item.dataKey || "value"}`
+          const itemConfig = getPayloadConfigFromPayload(config, item, key)
+
+          return (
+            <div
+              key={item.value}
+              className={cn(
+                "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
+              )}
+            >
+              {itemConfig?.icon && !hideIcon ? (
+                <itemConfig.icon />
+              ) : (
+                <div
+                  className="h-2 w-2 shrink-0 rounded-[2px]"
+                  style={{
+                    backgroundColor: item.color,
+                  }}
+                />
+              )}
+              {itemConfig?.label}
+            </div>
+          )
+        })}
+      </div>
+    )
+  }
+)
+ChartLegendContent.displayName = "ChartLegend"
+
+// Helper to extract item config from a payload.
+function getPayloadConfigFromPayload(
+  config: ChartConfig,
+  payload: unknown,
+  key: string
+) {
+  if (typeof payload !== "object" || payload === null) {
+    return undefined
+  }
+
+  const payloadPayload =
+    "payload" in payload &&
+    typeof payload.payload === "object" &&
+    payload.payload !== null
+      ? payload.payload
+      : undefined
+
+  let configLabelKey: string = key
+
+  if (
+    key in payload &&
+    typeof payload[key as keyof typeof payload] === "string"
+  ) {
+    configLabelKey = payload[key as keyof typeof payload] as string
+  } else if (
+    payloadPayload &&
+    key in payloadPayload &&
+    typeof payloadPayload[key as keyof typeof payloadPayload] === "string"
+  ) {
+    configLabelKey = payloadPayload[
+      key as keyof typeof payloadPayload
+    ] as string
+  }
+
+  return configLabelKey in config
+    ? config[configLabelKey]
+    : config[key as keyof typeof config]
+}
+
+export {
+  ChartContainer,
+  ChartTooltip,
+  ChartTooltipContent,
+  ChartLegend,
+  ChartLegendContent,
+  ChartStyle,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/checkbox.tsx b/site/tools/benchmark-dashboard/src/components/ui/checkbox.tsx
new file mode 100644
index 000000000..ddbdd01d8
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/checkbox.tsx
@@ -0,0 +1,28 @@
+import * as React from "react"
+import * as CheckboxPrimitive from "@radix-ui/react-checkbox"
+import { Check } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Checkbox = React.forwardRef<
+  React.ElementRef<typeof CheckboxPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>
+>(({ className, ...props }, ref) => (
+  <CheckboxPrimitive.Root
+    ref={ref}
+    className={cn(
+      "peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
+      className
+    )}
+    {...props}
+  >
+    <CheckboxPrimitive.Indicator
+      className={cn("flex items-center justify-center text-current")}
+    >
+      <Check className="h-4 w-4" />
+    </CheckboxPrimitive.Indicator>
+  </CheckboxPrimitive.Root>
+))
+Checkbox.displayName = CheckboxPrimitive.Root.displayName
+
+export { Checkbox }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/collapsible.tsx b/site/tools/benchmark-dashboard/src/components/ui/collapsible.tsx
new file mode 100644
index 000000000..a23e7a281
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/collapsible.tsx
@@ -0,0 +1,9 @@
+import * as CollapsiblePrimitive from "@radix-ui/react-collapsible"
+
+const Collapsible = CollapsiblePrimitive.Root
+
+const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger
+
+const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent
+
+export { Collapsible, CollapsibleTrigger, CollapsibleContent }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/command.tsx b/site/tools/benchmark-dashboard/src/components/ui/command.tsx
new file mode 100644
index 000000000..56a0979c0
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/command.tsx
@@ -0,0 +1,153 @@
+import * as React from "react"
+import { type DialogProps } from "@radix-ui/react-dialog"
+import { Command as CommandPrimitive } from "cmdk"
+import { Search } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+import { Dialog, DialogContent } from "@/components/ui/dialog"
+
+const Command = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive>
+>(({ className, ...props }, ref) => (
+  <CommandPrimitive
+    ref={ref}
+    className={cn(
+      "flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",
+      className
+    )}
+    {...props}
+  />
+))
+Command.displayName = CommandPrimitive.displayName
+
+interface CommandDialogProps extends DialogProps {}
+
+const CommandDialog = ({ children, ...props }: CommandDialogProps) => {
+  return (
+    <Dialog {...props}>
+      <DialogContent className="overflow-hidden p-0 shadow-lg">
+        <Command className="[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5">
+          {children}
+        </Command>
+      </DialogContent>
+    </Dialog>
+  )
+}
+
+const CommandInput = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive.Input>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>
+>(({ className, ...props }, ref) => (
+  <div className="flex items-center border-b px-3" cmdk-input-wrapper="">
+    <Search className="mr-2 h-4 w-4 shrink-0 opacity-50" />
+    <CommandPrimitive.Input
+      ref={ref}
+      className={cn(
+        "flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",
+        className
+      )}
+      {...props}
+    />
+  </div>
+))
+
+CommandInput.displayName = CommandPrimitive.Input.displayName
+
+const CommandList = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive.List>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>
+>(({ className, ...props }, ref) => (
+  <CommandPrimitive.List
+    ref={ref}
+    className={cn("max-h-[300px] overflow-y-auto overflow-x-hidden", className)}
+    {...props}
+  />
+))
+
+CommandList.displayName = CommandPrimitive.List.displayName
+
+const CommandEmpty = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive.Empty>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>
+>((props, ref) => (
+  <CommandPrimitive.Empty
+    ref={ref}
+    className="py-6 text-center text-sm"
+    {...props}
+  />
+))
+
+CommandEmpty.displayName = CommandPrimitive.Empty.displayName
+
+const CommandGroup = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive.Group>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>
+>(({ className, ...props }, ref) => (
+  <CommandPrimitive.Group
+    ref={ref}
+    className={cn(
+      "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
+      className
+    )}
+    {...props}
+  />
+))
+
+CommandGroup.displayName = CommandPrimitive.Group.displayName
+
+const CommandSeparator = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive.Separator>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>
+>(({ className, ...props }, ref) => (
+  <CommandPrimitive.Separator
+    ref={ref}
+    className={cn("-mx-1 h-px bg-border", className)}
+    {...props}
+  />
+))
+CommandSeparator.displayName = CommandPrimitive.Separator.displayName
+
+const CommandItem = React.forwardRef<
+  React.ElementRef<typeof CommandPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>
+>(({ className, ...props }, ref) => (
+  <CommandPrimitive.Item
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50",
+      className
+    )}
+    {...props}
+  />
+))
+
+CommandItem.displayName = CommandPrimitive.Item.displayName
+
+const CommandShortcut = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLSpanElement>) => {
+  return (
+    <span
+      className={cn(
+        "ml-auto text-xs tracking-widest text-muted-foreground",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+CommandShortcut.displayName = "CommandShortcut"
+
+export {
+  Command,
+  CommandDialog,
+  CommandInput,
+  CommandList,
+  CommandEmpty,
+  CommandGroup,
+  CommandItem,
+  CommandShortcut,
+  CommandSeparator,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/context-menu.tsx b/site/tools/benchmark-dashboard/src/components/ui/context-menu.tsx
new file mode 100644
index 000000000..3e5299917
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/context-menu.tsx
@@ -0,0 +1,198 @@
+import * as React from "react"
+import * as ContextMenuPrimitive from "@radix-ui/react-context-menu"
+import { Check, ChevronRight, Circle } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const ContextMenu = ContextMenuPrimitive.Root
+
+const ContextMenuTrigger = ContextMenuPrimitive.Trigger
+
+const ContextMenuGroup = ContextMenuPrimitive.Group
+
+const ContextMenuPortal = ContextMenuPrimitive.Portal
+
+const ContextMenuSub = ContextMenuPrimitive.Sub
+
+const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
+
+const ContextMenuSubTrigger = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubTrigger> & {
+    inset?: boolean
+  }
+>(({ className, inset, children, ...props }, ref) => (
+  <ContextMenuPrimitive.SubTrigger
+    ref={ref}
+    className={cn(
+      "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  >
+    {children}
+    <ChevronRight className="ml-auto h-4 w-4" />
+  </ContextMenuPrimitive.SubTrigger>
+))
+ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName
+
+const ContextMenuSubContent = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.SubContent>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.SubContent>
+>(({ className, ...props }, ref) => (
+  <ContextMenuPrimitive.SubContent
+    ref={ref}
+    className={cn(
+      "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+      className
+    )}
+    {...props}
+  />
+))
+ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName
+
+const ContextMenuContent = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content>
+>(({ className, ...props }, ref) => (
+  <ContextMenuPrimitive.Portal>
+    <ContextMenuPrimitive.Content
+      ref={ref}
+      className={cn(
+        "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+        className
+      )}
+      {...props}
+    />
+  </ContextMenuPrimitive.Portal>
+))
+ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName
+
+const ContextMenuItem = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {
+    inset?: boolean
+  }
+>(({ className, inset, ...props }, ref) => (
+  <ContextMenuPrimitive.Item
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  />
+))
+ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName
+
+const ContextMenuCheckboxItem = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.CheckboxItem>
+>(({ className, children, checked, ...props }, ref) => (
+  <ContextMenuPrimitive.CheckboxItem
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    checked={checked}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <ContextMenuPrimitive.ItemIndicator>
+        <Check className="h-4 w-4" />
+      </ContextMenuPrimitive.ItemIndicator>
+    </span>
+    {children}
+  </ContextMenuPrimitive.CheckboxItem>
+))
+ContextMenuCheckboxItem.displayName =
+  ContextMenuPrimitive.CheckboxItem.displayName
+
+const ContextMenuRadioItem = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.RadioItem>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.RadioItem>
+>(({ className, children, ...props }, ref) => (
+  <ContextMenuPrimitive.RadioItem
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <ContextMenuPrimitive.ItemIndicator>
+        <Circle className="h-2 w-2 fill-current" />
+      </ContextMenuPrimitive.ItemIndicator>
+    </span>
+    {children}
+  </ContextMenuPrimitive.RadioItem>
+))
+ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName
+
+const ContextMenuLabel = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.Label>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Label> & {
+    inset?: boolean
+  }
+>(({ className, inset, ...props }, ref) => (
+  <ContextMenuPrimitive.Label
+    ref={ref}
+    className={cn(
+      "px-2 py-1.5 text-sm font-semibold text-foreground",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  />
+))
+ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName
+
+const ContextMenuSeparator = React.forwardRef<
+  React.ElementRef<typeof ContextMenuPrimitive.Separator>,
+  React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Separator>
+>(({ className, ...props }, ref) => (
+  <ContextMenuPrimitive.Separator
+    ref={ref}
+    className={cn("-mx-1 my-1 h-px bg-border", className)}
+    {...props}
+  />
+))
+ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName
+
+const ContextMenuShortcut = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLSpanElement>) => {
+  return (
+    <span
+      className={cn(
+        "ml-auto text-xs tracking-widest text-muted-foreground",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+ContextMenuShortcut.displayName = "ContextMenuShortcut"
+
+export {
+  ContextMenu,
+  ContextMenuTrigger,
+  ContextMenuContent,
+  ContextMenuItem,
+  ContextMenuCheckboxItem,
+  ContextMenuRadioItem,
+  ContextMenuLabel,
+  ContextMenuSeparator,
+  ContextMenuShortcut,
+  ContextMenuGroup,
+  ContextMenuPortal,
+  ContextMenuSub,
+  ContextMenuSubContent,
+  ContextMenuSubTrigger,
+  ContextMenuRadioGroup,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/dialog.tsx b/site/tools/benchmark-dashboard/src/components/ui/dialog.tsx
new file mode 100644
index 000000000..c23630eb8
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/dialog.tsx
@@ -0,0 +1,120 @@
+import * as React from "react"
+import * as DialogPrimitive from "@radix-ui/react-dialog"
+import { X } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Dialog = DialogPrimitive.Root
+
+const DialogTrigger = DialogPrimitive.Trigger
+
+const DialogPortal = DialogPrimitive.Portal
+
+const DialogClose = DialogPrimitive.Close
+
+const DialogOverlay = React.forwardRef<
+  React.ElementRef<typeof DialogPrimitive.Overlay>,
+  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
+>(({ className, ...props }, ref) => (
+  <DialogPrimitive.Overlay
+    ref={ref}
+    className={cn(
+      "fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
+      className
+    )}
+    {...props}
+  />
+))
+DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
+
+const DialogContent = React.forwardRef<
+  React.ElementRef<typeof DialogPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>
+>(({ className, children, ...props }, ref) => (
+  <DialogPortal>
+    <DialogOverlay />
+    <DialogPrimitive.Content
+      ref={ref}
+      className={cn(
+        "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
+        className
+      )}
+      {...props}
+    >
+      {children}
+      <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground">
+        <X className="h-4 w-4" />
+        <span className="sr-only">Close</span>
+      </DialogPrimitive.Close>
+    </DialogPrimitive.Content>
+  </DialogPortal>
+))
+DialogContent.displayName = DialogPrimitive.Content.displayName
+
+const DialogHeader = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn(
+      "flex flex-col space-y-1.5 text-center sm:text-left",
+      className
+    )}
+    {...props}
+  />
+)
+DialogHeader.displayName = "DialogHeader"
+
+const DialogFooter = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn(
+      "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
+      className
+    )}
+    {...props}
+  />
+)
+DialogFooter.displayName = "DialogFooter"
+
+const DialogTitle = React.forwardRef<
+  React.ElementRef<typeof DialogPrimitive.Title>,
+  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
+>(({ className, ...props }, ref) => (
+  <DialogPrimitive.Title
+    ref={ref}
+    className={cn(
+      "text-lg font-semibold leading-none tracking-tight",
+      className
+    )}
+    {...props}
+  />
+))
+DialogTitle.displayName = DialogPrimitive.Title.displayName
+
+const DialogDescription = React.forwardRef<
+  React.ElementRef<typeof DialogPrimitive.Description>,
+  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
+>(({ className, ...props }, ref) => (
+  <DialogPrimitive.Description
+    ref={ref}
+    className={cn("text-sm text-muted-foreground", className)}
+    {...props}
+  />
+))
+DialogDescription.displayName = DialogPrimitive.Description.displayName
+
+export {
+  Dialog,
+  DialogPortal,
+  DialogOverlay,
+  DialogClose,
+  DialogTrigger,
+  DialogContent,
+  DialogHeader,
+  DialogFooter,
+  DialogTitle,
+  DialogDescription,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/drawer.tsx b/site/tools/benchmark-dashboard/src/components/ui/drawer.tsx
new file mode 100644
index 000000000..c17b0ccaa
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/drawer.tsx
@@ -0,0 +1,116 @@
+import * as React from "react"
+import { Drawer as DrawerPrimitive } from "vaul"
+
+import { cn } from "@/lib/utils"
+
+const Drawer = ({
+  shouldScaleBackground = true,
+  ...props
+}: React.ComponentProps<typeof DrawerPrimitive.Root>) => (
+  <DrawerPrimitive.Root
+    shouldScaleBackground={shouldScaleBackground}
+    {...props}
+  />
+)
+Drawer.displayName = "Drawer"
+
+const DrawerTrigger = DrawerPrimitive.Trigger
+
+const DrawerPortal = DrawerPrimitive.Portal
+
+const DrawerClose = DrawerPrimitive.Close
+
+const DrawerOverlay = React.forwardRef<
+  React.ElementRef<typeof DrawerPrimitive.Overlay>,
+  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay>
+>(({ className, ...props }, ref) => (
+  <DrawerPrimitive.Overlay
+    ref={ref}
+    className={cn("fixed inset-0 z-50 bg-black/80", className)}
+    {...props}
+  />
+))
+DrawerOverlay.displayName = DrawerPrimitive.Overlay.displayName
+
+const DrawerContent = React.forwardRef<
+  React.ElementRef<typeof DrawerPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Content>
+>(({ className, children, ...props }, ref) => (
+  <DrawerPortal>
+    <DrawerOverlay />
+    <DrawerPrimitive.Content
+      ref={ref}
+      className={cn(
+        "fixed inset-x-0 bottom-0 z-50 mt-24 flex h-auto flex-col rounded-t-[10px] border bg-background",
+        className
+      )}
+      {...props}
+    >
+      <div className="mx-auto mt-4 h-2 w-[100px] rounded-full bg-muted" />
+      {children}
+    </DrawerPrimitive.Content>
+  </DrawerPortal>
+))
+DrawerContent.displayName = "DrawerContent"
+
+const DrawerHeader = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn("grid gap-1.5 p-4 text-center sm:text-left", className)}
+    {...props}
+  />
+)
+DrawerHeader.displayName = "DrawerHeader"
+
+const DrawerFooter = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn("mt-auto flex flex-col gap-2 p-4", className)}
+    {...props}
+  />
+)
+DrawerFooter.displayName = "DrawerFooter"
+
+const DrawerTitle = React.forwardRef<
+  React.ElementRef<typeof DrawerPrimitive.Title>,
+  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Title>
+>(({ className, ...props }, ref) => (
+  <DrawerPrimitive.Title
+    ref={ref}
+    className={cn(
+      "text-lg font-semibold leading-none tracking-tight",
+      className
+    )}
+    {...props}
+  />
+))
+DrawerTitle.displayName = DrawerPrimitive.Title.displayName
+
+const DrawerDescription = React.forwardRef<
+  React.ElementRef<typeof DrawerPrimitive.Description>,
+  React.ComponentPropsWithoutRef<typeof DrawerPrimitive.Description>
+>(({ className, ...props }, ref) => (
+  <DrawerPrimitive.Description
+    ref={ref}
+    className={cn("text-sm text-muted-foreground", className)}
+    {...props}
+  />
+))
+DrawerDescription.displayName = DrawerPrimitive.Description.displayName
+
+export {
+  Drawer,
+  DrawerPortal,
+  DrawerOverlay,
+  DrawerTrigger,
+  DrawerClose,
+  DrawerContent,
+  DrawerHeader,
+  DrawerFooter,
+  DrawerTitle,
+  DrawerDescription,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/dropdown-menu.tsx b/site/tools/benchmark-dashboard/src/components/ui/dropdown-menu.tsx
new file mode 100644
index 000000000..769ff7aa7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/dropdown-menu.tsx
@@ -0,0 +1,198 @@
+import * as React from "react"
+import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
+import { Check, ChevronRight, Circle } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const DropdownMenu = DropdownMenuPrimitive.Root
+
+const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger
+
+const DropdownMenuGroup = DropdownMenuPrimitive.Group
+
+const DropdownMenuPortal = DropdownMenuPrimitive.Portal
+
+const DropdownMenuSub = DropdownMenuPrimitive.Sub
+
+const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup
+
+const DropdownMenuSubTrigger = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {
+    inset?: boolean
+  }
+>(({ className, inset, children, ...props }, ref) => (
+  <DropdownMenuPrimitive.SubTrigger
+    ref={ref}
+    className={cn(
+      "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  >
+    {children}
+    <ChevronRight className="ml-auto h-4 w-4" />
+  </DropdownMenuPrimitive.SubTrigger>
+))
+DropdownMenuSubTrigger.displayName =
+  DropdownMenuPrimitive.SubTrigger.displayName
+
+const DropdownMenuSubContent = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>
+>(({ className, ...props }, ref) => (
+  <DropdownMenuPrimitive.SubContent
+    ref={ref}
+    className={cn(
+      "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+      className
+    )}
+    {...props}
+  />
+))
+DropdownMenuSubContent.displayName =
+  DropdownMenuPrimitive.SubContent.displayName
+
+const DropdownMenuContent = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>
+>(({ className, sideOffset = 4, ...props }, ref) => (
+  <DropdownMenuPrimitive.Portal>
+    <DropdownMenuPrimitive.Content
+      ref={ref}
+      sideOffset={sideOffset}
+      className={cn(
+        "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+        className
+      )}
+      {...props}
+    />
+  </DropdownMenuPrimitive.Portal>
+))
+DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName
+
+const DropdownMenuItem = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {
+    inset?: boolean
+  }
+>(({ className, inset, ...props }, ref) => (
+  <DropdownMenuPrimitive.Item
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  />
+))
+DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName
+
+const DropdownMenuCheckboxItem = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>
+>(({ className, children, checked, ...props }, ref) => (
+  <DropdownMenuPrimitive.CheckboxItem
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    checked={checked}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <DropdownMenuPrimitive.ItemIndicator>
+        <Check className="h-4 w-4" />
+      </DropdownMenuPrimitive.ItemIndicator>
+    </span>
+    {children}
+  </DropdownMenuPrimitive.CheckboxItem>
+))
+DropdownMenuCheckboxItem.displayName =
+  DropdownMenuPrimitive.CheckboxItem.displayName
+
+const DropdownMenuRadioItem = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>
+>(({ className, children, ...props }, ref) => (
+  <DropdownMenuPrimitive.RadioItem
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <DropdownMenuPrimitive.ItemIndicator>
+        <Circle className="h-2 w-2 fill-current" />
+      </DropdownMenuPrimitive.ItemIndicator>
+    </span>
+    {children}
+  </DropdownMenuPrimitive.RadioItem>
+))
+DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName
+
+const DropdownMenuLabel = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.Label>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {
+    inset?: boolean
+  }
+>(({ className, inset, ...props }, ref) => (
+  <DropdownMenuPrimitive.Label
+    ref={ref}
+    className={cn(
+      "px-2 py-1.5 text-sm font-semibold",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  />
+))
+DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName
+
+const DropdownMenuSeparator = React.forwardRef<
+  React.ElementRef<typeof DropdownMenuPrimitive.Separator>,
+  React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>
+>(({ className, ...props }, ref) => (
+  <DropdownMenuPrimitive.Separator
+    ref={ref}
+    className={cn("-mx-1 my-1 h-px bg-muted", className)}
+    {...props}
+  />
+))
+DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName
+
+const DropdownMenuShortcut = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLSpanElement>) => {
+  return (
+    <span
+      className={cn("ml-auto text-xs tracking-widest opacity-60", className)}
+      {...props}
+    />
+  )
+}
+DropdownMenuShortcut.displayName = "DropdownMenuShortcut"
+
+export {
+  DropdownMenu,
+  DropdownMenuTrigger,
+  DropdownMenuContent,
+  DropdownMenuItem,
+  DropdownMenuCheckboxItem,
+  DropdownMenuRadioItem,
+  DropdownMenuLabel,
+  DropdownMenuSeparator,
+  DropdownMenuShortcut,
+  DropdownMenuGroup,
+  DropdownMenuPortal,
+  DropdownMenuSub,
+  DropdownMenuSubContent,
+  DropdownMenuSubTrigger,
+  DropdownMenuRadioGroup,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/form.tsx b/site/tools/benchmark-dashboard/src/components/ui/form.tsx
new file mode 100644
index 000000000..4603f8b3d
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/form.tsx
@@ -0,0 +1,176 @@
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import { Slot } from "@radix-ui/react-slot"
+import {
+  Controller,
+  ControllerProps,
+  FieldPath,
+  FieldValues,
+  FormProvider,
+  useFormContext,
+} from "react-hook-form"
+
+import { cn } from "@/lib/utils"
+import { Label } from "@/components/ui/label"
+
+const Form = FormProvider
+
+type FormFieldContextValue<
+  TFieldValues extends FieldValues = FieldValues,
+  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
+> = {
+  name: TName
+}
+
+const FormFieldContext = React.createContext<FormFieldContextValue>(
+  {} as FormFieldContextValue
+)
+
+const FormField = <
+  TFieldValues extends FieldValues = FieldValues,
+  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
+>({
+  ...props
+}: ControllerProps<TFieldValues, TName>) => {
+  return (
+    <FormFieldContext.Provider value={{ name: props.name }}>
+      <Controller {...props} />
+    </FormFieldContext.Provider>
+  )
+}
+
+const useFormField = () => {
+  const fieldContext = React.useContext(FormFieldContext)
+  const itemContext = React.useContext(FormItemContext)
+  const { getFieldState, formState } = useFormContext()
+
+  const fieldState = getFieldState(fieldContext.name, formState)
+
+  if (!fieldContext) {
+    throw new Error("useFormField should be used within <FormField>")
+  }
+
+  const { id } = itemContext
+
+  return {
+    id,
+    name: fieldContext.name,
+    formItemId: `${id}-form-item`,
+    formDescriptionId: `${id}-form-item-description`,
+    formMessageId: `${id}-form-item-message`,
+    ...fieldState,
+  }
+}
+
+type FormItemContextValue = {
+  id: string
+}
+
+const FormItemContext = React.createContext<FormItemContextValue>(
+  {} as FormItemContextValue
+)
+
+const FormItem = React.forwardRef<
+  HTMLDivElement,
+  React.HTMLAttributes<HTMLDivElement>
+>(({ className, ...props }, ref) => {
+  const id = React.useId()
+
+  return (
+    <FormItemContext.Provider value={{ id }}>
+      <div ref={ref} className={cn("space-y-2", className)} {...props} />
+    </FormItemContext.Provider>
+  )
+})
+FormItem.displayName = "FormItem"
+
+const FormLabel = React.forwardRef<
+  React.ElementRef<typeof LabelPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>
+>(({ className, ...props }, ref) => {
+  const { error, formItemId } = useFormField()
+
+  return (
+    <Label
+      ref={ref}
+      className={cn(error && "text-destructive", className)}
+      htmlFor={formItemId}
+      {...props}
+    />
+  )
+})
+FormLabel.displayName = "FormLabel"
+
+const FormControl = React.forwardRef<
+  React.ElementRef<typeof Slot>,
+  React.ComponentPropsWithoutRef<typeof Slot>
+>(({ ...props }, ref) => {
+  const { error, formItemId, formDescriptionId, formMessageId } = useFormField()
+
+  return (
+    <Slot
+      ref={ref}
+      id={formItemId}
+      aria-describedby={
+        !error
+          ? `${formDescriptionId}`
+          : `${formDescriptionId} ${formMessageId}`
+      }
+      aria-invalid={!!error}
+      {...props}
+    />
+  )
+})
+FormControl.displayName = "FormControl"
+
+const FormDescription = React.forwardRef<
+  HTMLParagraphElement,
+  React.HTMLAttributes<HTMLParagraphElement>
+>(({ className, ...props }, ref) => {
+  const { formDescriptionId } = useFormField()
+
+  return (
+    <p
+      ref={ref}
+      id={formDescriptionId}
+      className={cn("text-sm text-muted-foreground", className)}
+      {...props}
+    />
+  )
+})
+FormDescription.displayName = "FormDescription"
+
+const FormMessage = React.forwardRef<
+  HTMLParagraphElement,
+  React.HTMLAttributes<HTMLParagraphElement>
+>(({ className, children, ...props }, ref) => {
+  const { error, formMessageId } = useFormField()
+  const body = error ? String(error?.message) : children
+
+  if (!body) {
+    return null
+  }
+
+  return (
+    <p
+      ref={ref}
+      id={formMessageId}
+      className={cn("text-sm font-medium text-destructive", className)}
+      {...props}
+    >
+      {body}
+    </p>
+  )
+})
+FormMessage.displayName = "FormMessage"
+
+export {
+  useFormField,
+  Form,
+  FormItem,
+  FormLabel,
+  FormControl,
+  FormDescription,
+  FormMessage,
+  FormField,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/hover-card.tsx b/site/tools/benchmark-dashboard/src/components/ui/hover-card.tsx
new file mode 100644
index 000000000..863ff0148
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/hover-card.tsx
@@ -0,0 +1,27 @@
+import * as React from "react"
+import * as HoverCardPrimitive from "@radix-ui/react-hover-card"
+
+import { cn } from "@/lib/utils"
+
+const HoverCard = HoverCardPrimitive.Root
+
+const HoverCardTrigger = HoverCardPrimitive.Trigger
+
+const HoverCardContent = React.forwardRef<
+  React.ElementRef<typeof HoverCardPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>
+>(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
+  <HoverCardPrimitive.Content
+    ref={ref}
+    align={align}
+    sideOffset={sideOffset}
+    className={cn(
+      "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+      className
+    )}
+    {...props}
+  />
+))
+HoverCardContent.displayName = HoverCardPrimitive.Content.displayName
+
+export { HoverCard, HoverCardTrigger, HoverCardContent }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/input-otp.tsx b/site/tools/benchmark-dashboard/src/components/ui/input-otp.tsx
new file mode 100644
index 000000000..ebf5c281e
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/input-otp.tsx
@@ -0,0 +1,69 @@
+import * as React from "react"
+import { OTPInput, OTPInputContext } from "input-otp"
+import { Dot } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const InputOTP = React.forwardRef<
+  React.ElementRef<typeof OTPInput>,
+  React.ComponentPropsWithoutRef<typeof OTPInput>
+>(({ className, containerClassName, ...props }, ref) => (
+  <OTPInput
+    ref={ref}
+    containerClassName={cn(
+      "flex items-center gap-2 has-[:disabled]:opacity-50",
+      containerClassName
+    )}
+    className={cn("disabled:cursor-not-allowed", className)}
+    {...props}
+  />
+))
+InputOTP.displayName = "InputOTP"
+
+const InputOTPGroup = React.forwardRef<
+  React.ElementRef<"div">,
+  React.ComponentPropsWithoutRef<"div">
+>(({ className, ...props }, ref) => (
+  <div ref={ref} className={cn("flex items-center", className)} {...props} />
+))
+InputOTPGroup.displayName = "InputOTPGroup"
+
+const InputOTPSlot = React.forwardRef<
+  React.ElementRef<"div">,
+  React.ComponentPropsWithoutRef<"div"> & { index: number }
+>(({ index, className, ...props }, ref) => {
+  const inputOTPContext = React.useContext(OTPInputContext)
+  const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index]
+
+  return (
+    <div
+      ref={ref}
+      className={cn(
+        "relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md",
+        isActive && "z-10 ring-2 ring-ring ring-offset-background",
+        className
+      )}
+      {...props}
+    >
+      {char}
+      {hasFakeCaret && (
+        <div className="pointer-events-none absolute inset-0 flex items-center justify-center">
+          <div className="h-4 w-px animate-caret-blink bg-foreground duration-1000" />
+        </div>
+      )}
+    </div>
+  )
+})
+InputOTPSlot.displayName = "InputOTPSlot"
+
+const InputOTPSeparator = React.forwardRef<
+  React.ElementRef<"div">,
+  React.ComponentPropsWithoutRef<"div">
+>(({ ...props }, ref) => (
+  <div ref={ref} role="separator" {...props}>
+    <Dot />
+  </div>
+))
+InputOTPSeparator.displayName = "InputOTPSeparator"
+
+export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/input.tsx b/site/tools/benchmark-dashboard/src/components/ui/input.tsx
new file mode 100644
index 000000000..68551b927
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/input.tsx
@@ -0,0 +1,22 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Input = React.forwardRef<HTMLInputElement, React.ComponentProps<"input">>(
+  ({ className, type, ...props }, ref) => {
+    return (
+      <input
+        type={type}
+        className={cn(
+          "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
+          className
+        )}
+        ref={ref}
+        {...props}
+      />
+    )
+  }
+)
+Input.displayName = "Input"
+
+export { Input }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/label.tsx b/site/tools/benchmark-dashboard/src/components/ui/label.tsx
new file mode 100644
index 000000000..683faa793
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/label.tsx
@@ -0,0 +1,24 @@
+import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const labelVariants = cva(
+  "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
+)
+
+const Label = React.forwardRef<
+  React.ElementRef<typeof LabelPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &
+    VariantProps<typeof labelVariants>
+>(({ className, ...props }, ref) => (
+  <LabelPrimitive.Root
+    ref={ref}
+    className={cn(labelVariants(), className)}
+    {...props}
+  />
+))
+Label.displayName = LabelPrimitive.Root.displayName
+
+export { Label }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/menubar.tsx b/site/tools/benchmark-dashboard/src/components/ui/menubar.tsx
new file mode 100644
index 000000000..d11c2993f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/menubar.tsx
@@ -0,0 +1,234 @@
+import * as React from "react"
+import * as MenubarPrimitive from "@radix-ui/react-menubar"
+import { Check, ChevronRight, Circle } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const MenubarMenu = MenubarPrimitive.Menu
+
+const MenubarGroup = MenubarPrimitive.Group
+
+const MenubarPortal = MenubarPrimitive.Portal
+
+const MenubarSub = MenubarPrimitive.Sub
+
+const MenubarRadioGroup = MenubarPrimitive.RadioGroup
+
+const Menubar = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Root>
+>(({ className, ...props }, ref) => (
+  <MenubarPrimitive.Root
+    ref={ref}
+    className={cn(
+      "flex h-10 items-center space-x-1 rounded-md border bg-background p-1",
+      className
+    )}
+    {...props}
+  />
+))
+Menubar.displayName = MenubarPrimitive.Root.displayName
+
+const MenubarTrigger = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.Trigger>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Trigger>
+>(({ className, ...props }, ref) => (
+  <MenubarPrimitive.Trigger
+    ref={ref}
+    className={cn(
+      "flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
+      className
+    )}
+    {...props}
+  />
+))
+MenubarTrigger.displayName = MenubarPrimitive.Trigger.displayName
+
+const MenubarSubTrigger = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.SubTrigger>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubTrigger> & {
+    inset?: boolean
+  }
+>(({ className, inset, children, ...props }, ref) => (
+  <MenubarPrimitive.SubTrigger
+    ref={ref}
+    className={cn(
+      "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  >
+    {children}
+    <ChevronRight className="ml-auto h-4 w-4" />
+  </MenubarPrimitive.SubTrigger>
+))
+MenubarSubTrigger.displayName = MenubarPrimitive.SubTrigger.displayName
+
+const MenubarSubContent = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.SubContent>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.SubContent>
+>(({ className, ...props }, ref) => (
+  <MenubarPrimitive.SubContent
+    ref={ref}
+    className={cn(
+      "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+      className
+    )}
+    {...props}
+  />
+))
+MenubarSubContent.displayName = MenubarPrimitive.SubContent.displayName
+
+const MenubarContent = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Content>
+>(
+  (
+    { className, align = "start", alignOffset = -4, sideOffset = 8, ...props },
+    ref
+  ) => (
+    <MenubarPrimitive.Portal>
+      <MenubarPrimitive.Content
+        ref={ref}
+        align={align}
+        alignOffset={alignOffset}
+        sideOffset={sideOffset}
+        className={cn(
+          "z-50 min-w-[12rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+          className
+        )}
+        {...props}
+      />
+    </MenubarPrimitive.Portal>
+  )
+)
+MenubarContent.displayName = MenubarPrimitive.Content.displayName
+
+const MenubarItem = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Item> & {
+    inset?: boolean
+  }
+>(({ className, inset, ...props }, ref) => (
+  <MenubarPrimitive.Item
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  />
+))
+MenubarItem.displayName = MenubarPrimitive.Item.displayName
+
+const MenubarCheckboxItem = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.CheckboxItem>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.CheckboxItem>
+>(({ className, children, checked, ...props }, ref) => (
+  <MenubarPrimitive.CheckboxItem
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    checked={checked}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <MenubarPrimitive.ItemIndicator>
+        <Check className="h-4 w-4" />
+      </MenubarPrimitive.ItemIndicator>
+    </span>
+    {children}
+  </MenubarPrimitive.CheckboxItem>
+))
+MenubarCheckboxItem.displayName = MenubarPrimitive.CheckboxItem.displayName
+
+const MenubarRadioItem = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.RadioItem>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.RadioItem>
+>(({ className, children, ...props }, ref) => (
+  <MenubarPrimitive.RadioItem
+    ref={ref}
+    className={cn(
+      "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <MenubarPrimitive.ItemIndicator>
+        <Circle className="h-2 w-2 fill-current" />
+      </MenubarPrimitive.ItemIndicator>
+    </span>
+    {children}
+  </MenubarPrimitive.RadioItem>
+))
+MenubarRadioItem.displayName = MenubarPrimitive.RadioItem.displayName
+
+const MenubarLabel = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.Label>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Label> & {
+    inset?: boolean
+  }
+>(({ className, inset, ...props }, ref) => (
+  <MenubarPrimitive.Label
+    ref={ref}
+    className={cn(
+      "px-2 py-1.5 text-sm font-semibold",
+      inset && "pl-8",
+      className
+    )}
+    {...props}
+  />
+))
+MenubarLabel.displayName = MenubarPrimitive.Label.displayName
+
+const MenubarSeparator = React.forwardRef<
+  React.ElementRef<typeof MenubarPrimitive.Separator>,
+  React.ComponentPropsWithoutRef<typeof MenubarPrimitive.Separator>
+>(({ className, ...props }, ref) => (
+  <MenubarPrimitive.Separator
+    ref={ref}
+    className={cn("-mx-1 my-1 h-px bg-muted", className)}
+    {...props}
+  />
+))
+MenubarSeparator.displayName = MenubarPrimitive.Separator.displayName
+
+const MenubarShortcut = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLSpanElement>) => {
+  return (
+    <span
+      className={cn(
+        "ml-auto text-xs tracking-widest text-muted-foreground",
+        className
+      )}
+      {...props}
+    />
+  )
+}
+MenubarShortcut.displayname = "MenubarShortcut"
+
+export {
+  Menubar,
+  MenubarMenu,
+  MenubarTrigger,
+  MenubarContent,
+  MenubarItem,
+  MenubarSeparator,
+  MenubarLabel,
+  MenubarCheckboxItem,
+  MenubarRadioGroup,
+  MenubarRadioItem,
+  MenubarPortal,
+  MenubarSubContent,
+  MenubarSubTrigger,
+  MenubarGroup,
+  MenubarSub,
+  MenubarShortcut,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/navigation-menu.tsx b/site/tools/benchmark-dashboard/src/components/ui/navigation-menu.tsx
new file mode 100644
index 000000000..1419f5669
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/navigation-menu.tsx
@@ -0,0 +1,128 @@
+import * as React from "react"
+import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"
+import { cva } from "class-variance-authority"
+import { ChevronDown } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const NavigationMenu = React.forwardRef<
+  React.ElementRef<typeof NavigationMenuPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>
+>(({ className, children, ...props }, ref) => (
+  <NavigationMenuPrimitive.Root
+    ref={ref}
+    className={cn(
+      "relative z-10 flex max-w-max flex-1 items-center justify-center",
+      className
+    )}
+    {...props}
+  >
+    {children}
+    <NavigationMenuViewport />
+  </NavigationMenuPrimitive.Root>
+))
+NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName
+
+const NavigationMenuList = React.forwardRef<
+  React.ElementRef<typeof NavigationMenuPrimitive.List>,
+  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>
+>(({ className, ...props }, ref) => (
+  <NavigationMenuPrimitive.List
+    ref={ref}
+    className={cn(
+      "group flex flex-1 list-none items-center justify-center space-x-1",
+      className
+    )}
+    {...props}
+  />
+))
+NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName
+
+const NavigationMenuItem = NavigationMenuPrimitive.Item
+
+const navigationMenuTriggerStyle = cva(
+  "group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50"
+)
+
+const NavigationMenuTrigger = React.forwardRef<
+  React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,
+  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>
+>(({ className, children, ...props }, ref) => (
+  <NavigationMenuPrimitive.Trigger
+    ref={ref}
+    className={cn(navigationMenuTriggerStyle(), "group", className)}
+    {...props}
+  >
+    {children}{" "}
+    <ChevronDown
+      className="relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180"
+      aria-hidden="true"
+    />
+  </NavigationMenuPrimitive.Trigger>
+))
+NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName
+
+const NavigationMenuContent = React.forwardRef<
+  React.ElementRef<typeof NavigationMenuPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
+>(({ className, ...props }, ref) => (
+  <NavigationMenuPrimitive.Content
+    ref={ref}
+    className={cn(
+      "left-0 top-0 w-full data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 md:absolute md:w-auto ",
+      className
+    )}
+    {...props}
+  />
+))
+NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName
+
+const NavigationMenuLink = NavigationMenuPrimitive.Link
+
+const NavigationMenuViewport = React.forwardRef<
+  React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
+  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>
+>(({ className, ...props }, ref) => (
+  <div className={cn("absolute left-0 top-full flex justify-center")}>
+    <NavigationMenuPrimitive.Viewport
+      className={cn(
+        "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]",
+        className
+      )}
+      ref={ref}
+      {...props}
+    />
+  </div>
+))
+NavigationMenuViewport.displayName =
+  NavigationMenuPrimitive.Viewport.displayName
+
+const NavigationMenuIndicator = React.forwardRef<
+  React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,
+  React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>
+>(({ className, ...props }, ref) => (
+  <NavigationMenuPrimitive.Indicator
+    ref={ref}
+    className={cn(
+      "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in",
+      className
+    )}
+    {...props}
+  >
+    <div className="relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" />
+  </NavigationMenuPrimitive.Indicator>
+))
+NavigationMenuIndicator.displayName =
+  NavigationMenuPrimitive.Indicator.displayName
+
+export {
+  navigationMenuTriggerStyle,
+  NavigationMenu,
+  NavigationMenuList,
+  NavigationMenuItem,
+  NavigationMenuContent,
+  NavigationMenuTrigger,
+  NavigationMenuLink,
+  NavigationMenuIndicator,
+  NavigationMenuViewport,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/pagination.tsx b/site/tools/benchmark-dashboard/src/components/ui/pagination.tsx
new file mode 100644
index 000000000..ea40d196d
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/pagination.tsx
@@ -0,0 +1,117 @@
+import * as React from "react"
+import { ChevronLeft, ChevronRight, MoreHorizontal } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+import { ButtonProps, buttonVariants } from "@/components/ui/button"
+
+const Pagination = ({ className, ...props }: React.ComponentProps<"nav">) => (
+  <nav
+    role="navigation"
+    aria-label="pagination"
+    className={cn("mx-auto flex w-full justify-center", className)}
+    {...props}
+  />
+)
+Pagination.displayName = "Pagination"
+
+const PaginationContent = React.forwardRef<
+  HTMLUListElement,
+  React.ComponentProps<"ul">
+>(({ className, ...props }, ref) => (
+  <ul
+    ref={ref}
+    className={cn("flex flex-row items-center gap-1", className)}
+    {...props}
+  />
+))
+PaginationContent.displayName = "PaginationContent"
+
+const PaginationItem = React.forwardRef<
+  HTMLLIElement,
+  React.ComponentProps<"li">
+>(({ className, ...props }, ref) => (
+  <li ref={ref} className={cn("", className)} {...props} />
+))
+PaginationItem.displayName = "PaginationItem"
+
+type PaginationLinkProps = {
+  isActive?: boolean
+} & Pick<ButtonProps, "size"> &
+  React.ComponentProps<"a">
+
+const PaginationLink = ({
+  className,
+  isActive,
+  size = "icon",
+  ...props
+}: PaginationLinkProps) => (
+  <a
+    aria-current={isActive ? "page" : undefined}
+    className={cn(
+      buttonVariants({
+        variant: isActive ? "outline" : "ghost",
+        size,
+      }),
+      className
+    )}
+    {...props}
+  />
+)
+PaginationLink.displayName = "PaginationLink"
+
+const PaginationPrevious = ({
+  className,
+  ...props
+}: React.ComponentProps<typeof PaginationLink>) => (
+  <PaginationLink
+    aria-label="Go to previous page"
+    size="default"
+    className={cn("gap-1 pl-2.5", className)}
+    {...props}
+  >
+    <ChevronLeft className="h-4 w-4" />
+    <span>Previous</span>
+  </PaginationLink>
+)
+PaginationPrevious.displayName = "PaginationPrevious"
+
+const PaginationNext = ({
+  className,
+  ...props
+}: React.ComponentProps<typeof PaginationLink>) => (
+  <PaginationLink
+    aria-label="Go to next page"
+    size="default"
+    className={cn("gap-1 pr-2.5", className)}
+    {...props}
+  >
+    <span>Next</span>
+    <ChevronRight className="h-4 w-4" />
+  </PaginationLink>
+)
+PaginationNext.displayName = "PaginationNext"
+
+const PaginationEllipsis = ({
+  className,
+  ...props
+}: React.ComponentProps<"span">) => (
+  <span
+    aria-hidden
+    className={cn("flex h-9 w-9 items-center justify-center", className)}
+    {...props}
+  >
+    <MoreHorizontal className="h-4 w-4" />
+    <span className="sr-only">More pages</span>
+  </span>
+)
+PaginationEllipsis.displayName = "PaginationEllipsis"
+
+export {
+  Pagination,
+  PaginationContent,
+  PaginationEllipsis,
+  PaginationItem,
+  PaginationLink,
+  PaginationNext,
+  PaginationPrevious,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/popover.tsx b/site/tools/benchmark-dashboard/src/components/ui/popover.tsx
new file mode 100644
index 000000000..bbba7e0eb
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/popover.tsx
@@ -0,0 +1,29 @@
+import * as React from "react"
+import * as PopoverPrimitive from "@radix-ui/react-popover"
+
+import { cn } from "@/lib/utils"
+
+const Popover = PopoverPrimitive.Root
+
+const PopoverTrigger = PopoverPrimitive.Trigger
+
+const PopoverContent = React.forwardRef<
+  React.ElementRef<typeof PopoverPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>
+>(({ className, align = "center", sideOffset = 4, ...props }, ref) => (
+  <PopoverPrimitive.Portal>
+    <PopoverPrimitive.Content
+      ref={ref}
+      align={align}
+      sideOffset={sideOffset}
+      className={cn(
+        "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+        className
+      )}
+      {...props}
+    />
+  </PopoverPrimitive.Portal>
+))
+PopoverContent.displayName = PopoverPrimitive.Content.displayName
+
+export { Popover, PopoverTrigger, PopoverContent }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/progress.tsx b/site/tools/benchmark-dashboard/src/components/ui/progress.tsx
new file mode 100644
index 000000000..105fb6500
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/progress.tsx
@@ -0,0 +1,26 @@
+import * as React from "react"
+import * as ProgressPrimitive from "@radix-ui/react-progress"
+
+import { cn } from "@/lib/utils"
+
+const Progress = React.forwardRef<
+  React.ElementRef<typeof ProgressPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>
+>(({ className, value, ...props }, ref) => (
+  <ProgressPrimitive.Root
+    ref={ref}
+    className={cn(
+      "relative h-4 w-full overflow-hidden rounded-full bg-secondary",
+      className
+    )}
+    {...props}
+  >
+    <ProgressPrimitive.Indicator
+      className="h-full w-full flex-1 bg-primary transition-all"
+      style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
+    />
+  </ProgressPrimitive.Root>
+))
+Progress.displayName = ProgressPrimitive.Root.displayName
+
+export { Progress }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/radio-group.tsx b/site/tools/benchmark-dashboard/src/components/ui/radio-group.tsx
new file mode 100644
index 000000000..43b43b48b
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/radio-group.tsx
@@ -0,0 +1,42 @@
+import * as React from "react"
+import * as RadioGroupPrimitive from "@radix-ui/react-radio-group"
+import { Circle } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const RadioGroup = React.forwardRef<
+  React.ElementRef<typeof RadioGroupPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>
+>(({ className, ...props }, ref) => {
+  return (
+    <RadioGroupPrimitive.Root
+      className={cn("grid gap-2", className)}
+      {...props}
+      ref={ref}
+    />
+  )
+})
+RadioGroup.displayName = RadioGroupPrimitive.Root.displayName
+
+const RadioGroupItem = React.forwardRef<
+  React.ElementRef<typeof RadioGroupPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>
+>(({ className, ...props }, ref) => {
+  return (
+    <RadioGroupPrimitive.Item
+      ref={ref}
+      className={cn(
+        "aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
+        className
+      )}
+      {...props}
+    >
+      <RadioGroupPrimitive.Indicator className="flex items-center justify-center">
+        <Circle className="h-2.5 w-2.5 fill-current text-current" />
+      </RadioGroupPrimitive.Indicator>
+    </RadioGroupPrimitive.Item>
+  )
+})
+RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName
+
+export { RadioGroup, RadioGroupItem }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/resizable.tsx b/site/tools/benchmark-dashboard/src/components/ui/resizable.tsx
new file mode 100644
index 000000000..cd3cb0ec7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/resizable.tsx
@@ -0,0 +1,43 @@
+import { GripVertical } from "lucide-react"
+import * as ResizablePrimitive from "react-resizable-panels"
+
+import { cn } from "@/lib/utils"
+
+const ResizablePanelGroup = ({
+  className,
+  ...props
+}: React.ComponentProps<typeof ResizablePrimitive.PanelGroup>) => (
+  <ResizablePrimitive.PanelGroup
+    className={cn(
+      "flex h-full w-full data-[panel-group-direction=vertical]:flex-col",
+      className
+    )}
+    {...props}
+  />
+)
+
+const ResizablePanel = ResizablePrimitive.Panel
+
+const ResizableHandle = ({
+  withHandle,
+  className,
+  ...props
+}: React.ComponentProps<typeof ResizablePrimitive.PanelResizeHandle> & {
+  withHandle?: boolean
+}) => (
+  <ResizablePrimitive.PanelResizeHandle
+    className={cn(
+      "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
+      className
+    )}
+    {...props}
+  >
+    {withHandle && (
+      <div className="z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border">
+        <GripVertical className="h-2.5 w-2.5" />
+      </div>
+    )}
+  </ResizablePrimitive.PanelResizeHandle>
+)
+
+export { ResizablePanelGroup, ResizablePanel, ResizableHandle }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/scroll-area.tsx b/site/tools/benchmark-dashboard/src/components/ui/scroll-area.tsx
new file mode 100644
index 000000000..cf253cf17
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/scroll-area.tsx
@@ -0,0 +1,46 @@
+import * as React from "react"
+import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"
+
+import { cn } from "@/lib/utils"
+
+const ScrollArea = React.forwardRef<
+  React.ElementRef<typeof ScrollAreaPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
+>(({ className, children, ...props }, ref) => (
+  <ScrollAreaPrimitive.Root
+    ref={ref}
+    className={cn("relative overflow-hidden", className)}
+    {...props}
+  >
+    <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
+      {children}
+    </ScrollAreaPrimitive.Viewport>
+    <ScrollBar />
+    <ScrollAreaPrimitive.Corner />
+  </ScrollAreaPrimitive.Root>
+))
+ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
+
+const ScrollBar = React.forwardRef<
+  React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
+  React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
+>(({ className, orientation = "vertical", ...props }, ref) => (
+  <ScrollAreaPrimitive.ScrollAreaScrollbar
+    ref={ref}
+    orientation={orientation}
+    className={cn(
+      "flex touch-none select-none transition-colors",
+      orientation === "vertical" &&
+        "h-full w-2.5 border-l border-l-transparent p-[1px]",
+      orientation === "horizontal" &&
+        "h-2.5 flex-col border-t border-t-transparent p-[1px]",
+      className
+    )}
+    {...props}
+  >
+    <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
+  </ScrollAreaPrimitive.ScrollAreaScrollbar>
+))
+ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
+
+export { ScrollArea, ScrollBar }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/select.tsx b/site/tools/benchmark-dashboard/src/components/ui/select.tsx
new file mode 100644
index 000000000..b1c42387f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/select.tsx
@@ -0,0 +1,193 @@
+import * as React from "react"
+import * as SelectPrimitive from "@radix-ui/react-select"
+import { Check, ChevronDown, ChevronUp } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Select = SelectPrimitive.Root
+
+const SelectGroup = SelectPrimitive.Group
+
+const SelectValue = SelectPrimitive.Value
+
+const SelectTrigger = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.Trigger>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>
+>(({ className, children, ...props }, ref) => (
+  <SelectPrimitive.Trigger
+    ref={ref}
+    className={cn(
+      "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
+      className
+    )}
+    {...props}
+  >
+    {children}
+    <SelectPrimitive.Icon asChild>
+      <ChevronDown className="h-4 w-4 opacity-50" />
+    </SelectPrimitive.Icon>
+  </SelectPrimitive.Trigger>
+))
+SelectTrigger.displayName = SelectPrimitive.Trigger.displayName
+
+const SelectScrollUpButton = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>
+>(({ className, ...props }, ref) => (
+  <SelectPrimitive.ScrollUpButton
+    ref={ref}
+    className={cn(
+      "flex cursor-default items-center justify-center py-1",
+      className
+    )}
+    {...props}
+  >
+    <ChevronUp className="h-4 w-4" />
+  </SelectPrimitive.ScrollUpButton>
+))
+SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName
+
+const SelectScrollDownButton = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>
+>(({ className, ...props }, ref) => (
+  <SelectPrimitive.ScrollDownButton
+    ref={ref}
+    className={cn(
+      "flex cursor-default items-center justify-center py-1",
+      className
+    )}
+    {...props}
+  >
+    <ChevronDown className="h-4 w-4" />
+  </SelectPrimitive.ScrollDownButton>
+))
+SelectScrollDownButton.displayName =
+  SelectPrimitive.ScrollDownButton.displayName
+
+const SelectContent = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>
+>(({ className, children, position = "popper", ...props }, ref) => {
+  // Apply styles to portal wrapper when content mounts
+  React.useEffect(() => {
+    const applyPortalStyles = () => {
+      // Target the Radix popper content wrapper
+      const wrappers = document.querySelectorAll('[data-radix-popper-content-wrapper]');
+      wrappers.forEach((wrapper) => {
+        const element = wrapper as HTMLElement;
+        // Apply the CSS variables needed for proper styling
+        element.style.setProperty('--popover', '0 0% 100%');
+        element.style.setProperty('--popover-foreground', '222.2 84% 4.9%');
+        element.style.setProperty('--border', '214.3 31.8% 91.4%');
+        element.style.setProperty('--background', '0 0% 100%');
+        element.style.setProperty('--foreground', '222.2 84% 4.9%');
+
+        // Also check for dark mode on document
+        if (document.documentElement.classList.contains('dark') ||
+            document.body.classList.contains('dark')) {
+          element.style.setProperty('--popover', '222.2 84% 4.9%');
+          element.style.setProperty('--popover-foreground', '210 40% 98%');
+          element.style.setProperty('--border', '217.2 32.6% 17.5%');
+          element.style.setProperty('--background', '222.2 84% 4.9%');
+          element.style.setProperty('--foreground', '210 40% 98%');
+        }
+      });
+    };
+
+    // Apply styles immediately and after a short delay to catch dynamically created elements
+    applyPortalStyles();
+    const timer = setTimeout(applyPortalStyles, 100);
+
+    return () => clearTimeout(timer);
+  });
+
+  return (
+    <SelectPrimitive.Portal>
+      <SelectPrimitive.Content
+        ref={ref}
+        className={cn(
+          "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+          position === "popper" &&
+            "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
+          className
+        )}
+        position={position}
+        {...props}
+      >
+        <SelectScrollUpButton />
+        <SelectPrimitive.Viewport
+          className={cn(
+            "p-1",
+            position === "popper" &&
+              "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
+          )}
+        >
+          {children}
+        </SelectPrimitive.Viewport>
+        <SelectScrollDownButton />
+      </SelectPrimitive.Content>
+    </SelectPrimitive.Portal>
+  )
+})
+SelectContent.displayName = SelectPrimitive.Content.displayName
+
+const SelectLabel = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.Label>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>
+>(({ className, ...props }, ref) => (
+  <SelectPrimitive.Label
+    ref={ref}
+    className={cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className)}
+    {...props}
+  />
+))
+SelectLabel.displayName = SelectPrimitive.Label.displayName
+
+const SelectItem = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>
+>(({ className, children, ...props }, ref) => (
+  <SelectPrimitive.Item
+    ref={ref}
+    className={cn(
+      "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
+      className
+    )}
+    {...props}
+  >
+    <span className="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
+      <SelectPrimitive.ItemIndicator>
+        <Check className="h-4 w-4" />
+      </SelectPrimitive.ItemIndicator>
+    </span>
+
+    <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
+  </SelectPrimitive.Item>
+))
+SelectItem.displayName = SelectPrimitive.Item.displayName
+
+const SelectSeparator = React.forwardRef<
+  React.ElementRef<typeof SelectPrimitive.Separator>,
+  React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>
+>(({ className, ...props }, ref) => (
+  <SelectPrimitive.Separator
+    ref={ref}
+    className={cn("-mx-1 my-1 h-px bg-muted", className)}
+    {...props}
+  />
+))
+SelectSeparator.displayName = SelectPrimitive.Separator.displayName
+
+export {
+  Select,
+  SelectGroup,
+  SelectValue,
+  SelectTrigger,
+  SelectContent,
+  SelectLabel,
+  SelectItem,
+  SelectSeparator,
+  SelectScrollUpButton,
+  SelectScrollDownButton,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/separator.tsx b/site/tools/benchmark-dashboard/src/components/ui/separator.tsx
new file mode 100644
index 000000000..6d7f12265
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/separator.tsx
@@ -0,0 +1,29 @@
+import * as React from "react"
+import * as SeparatorPrimitive from "@radix-ui/react-separator"
+
+import { cn } from "@/lib/utils"
+
+const Separator = React.forwardRef<
+  React.ElementRef<typeof SeparatorPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>
+>(
+  (
+    { className, orientation = "horizontal", decorative = true, ...props },
+    ref
+  ) => (
+    <SeparatorPrimitive.Root
+      ref={ref}
+      decorative={decorative}
+      orientation={orientation}
+      className={cn(
+        "shrink-0 bg-border",
+        orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
+        className
+      )}
+      {...props}
+    />
+  )
+)
+Separator.displayName = SeparatorPrimitive.Root.displayName
+
+export { Separator }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/sheet.tsx b/site/tools/benchmark-dashboard/src/components/ui/sheet.tsx
new file mode 100644
index 000000000..5d2388295
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/sheet.tsx
@@ -0,0 +1,138 @@
+import * as React from "react"
+import * as SheetPrimitive from "@radix-ui/react-dialog"
+import { cva, type VariantProps } from "class-variance-authority"
+import { X } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const Sheet = SheetPrimitive.Root
+
+const SheetTrigger = SheetPrimitive.Trigger
+
+const SheetClose = SheetPrimitive.Close
+
+const SheetPortal = SheetPrimitive.Portal
+
+const sheetVariants = cva(
+  "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
+  {
+    variants: {
+      side: {
+        top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
+        bottom:
+          "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
+        left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
+        right:
+          "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",
+      },
+    },
+    defaultVariants: {
+      side: "right",
+    },
+  }
+)
+
+interface SheetContentProps
+  extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
+    VariantProps<typeof sheetVariants> {}
+
+const SheetContent = React.forwardRef<
+  React.ElementRef<typeof SheetPrimitive.Content>,
+  SheetContentProps
+>(({ side = "right", className, children, ...props }, ref) => (
+  <SheetPortal>
+    <SheetOverlay />
+    <SheetPrimitive.Content
+      ref={ref}
+      className={cn(sheetVariants({ side }), className)}
+      {...props}
+    >
+      {children}
+      <SheetPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary">
+        <X className="h-4 w-4" />
+        <span className="sr-only">Close</span>
+      </SheetPrimitive.Close>
+    </SheetPrimitive.Content>
+  </SheetPortal>
+))
+SheetContent.displayName = SheetPrimitive.Content.displayName
+
+const SheetOverlay = React.forwardRef<
+  React.ElementRef<typeof SheetPrimitive.Overlay>,
+  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>
+>(({ className, ...props }, ref) => (
+  <SheetPrimitive.Overlay
+    className={cn(
+      "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
+      className
+    )}
+    {...props}
+    ref={ref}
+  />
+))
+SheetOverlay.displayName = SheetPrimitive.Overlay.displayName
+
+const SheetHeader = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn(
+      "flex flex-col space-y-2 text-center sm:text-left",
+      className
+    )}
+    {...props}
+  />
+)
+SheetHeader.displayName = "SheetHeader"
+
+const SheetFooter = ({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) => (
+  <div
+    className={cn(
+      "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
+      className
+    )}
+    {...props}
+  />
+)
+SheetFooter.displayName = "SheetFooter"
+
+const SheetTitle = React.forwardRef<
+  React.ElementRef<typeof SheetPrimitive.Title>,
+  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>
+>(({ className, ...props }, ref) => (
+  <SheetPrimitive.Title
+    ref={ref}
+    className={cn("text-lg font-semibold text-foreground", className)}
+    {...props}
+  />
+))
+SheetTitle.displayName = SheetPrimitive.Title.displayName
+
+const SheetDescription = React.forwardRef<
+  React.ElementRef<typeof SheetPrimitive.Description>,
+  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>
+>(({ className, ...props }, ref) => (
+  <SheetPrimitive.Description
+    ref={ref}
+    className={cn("text-sm text-muted-foreground", className)}
+    {...props}
+  />
+))
+SheetDescription.displayName = SheetPrimitive.Description.displayName
+
+export {
+  Sheet,
+  SheetPortal,
+  SheetOverlay,
+  SheetTrigger,
+  SheetClose,
+  SheetContent,
+  SheetHeader,
+  SheetFooter,
+  SheetTitle,
+  SheetDescription,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/sidebar.tsx b/site/tools/benchmark-dashboard/src/components/ui/sidebar.tsx
new file mode 100644
index 000000000..1a566bf55
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/sidebar.tsx
@@ -0,0 +1,761 @@
+import * as React from "react"
+import { Slot } from "@radix-ui/react-slot"
+import { VariantProps, cva } from "class-variance-authority"
+import { PanelLeft } from "lucide-react"
+
+import { useIsMobile } from "@/hooks/use-mobile"
+import { cn } from "@/lib/utils"
+import { Button } from "@/components/ui/button"
+import { Input } from "@/components/ui/input"
+import { Separator } from "@/components/ui/separator"
+import { Sheet, SheetContent } from "@/components/ui/sheet"
+import { Skeleton } from "@/components/ui/skeleton"
+import {
+  Tooltip,
+  TooltipContent,
+  TooltipProvider,
+  TooltipTrigger,
+} from "@/components/ui/tooltip"
+
+const SIDEBAR_COOKIE_NAME = "sidebar:state"
+const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
+const SIDEBAR_WIDTH = "16rem"
+const SIDEBAR_WIDTH_MOBILE = "18rem"
+const SIDEBAR_WIDTH_ICON = "3rem"
+const SIDEBAR_KEYBOARD_SHORTCUT = "b"
+
+type SidebarContext = {
+  state: "expanded" | "collapsed"
+  open: boolean
+  setOpen: (open: boolean) => void
+  openMobile: boolean
+  setOpenMobile: (open: boolean) => void
+  isMobile: boolean
+  toggleSidebar: () => void
+}
+
+const SidebarContext = React.createContext<SidebarContext | null>(null)
+
+function useSidebar() {
+  const context = React.useContext(SidebarContext)
+  if (!context) {
+    throw new Error("useSidebar must be used within a SidebarProvider.")
+  }
+
+  return context
+}
+
+const SidebarProvider = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div"> & {
+    defaultOpen?: boolean
+    open?: boolean
+    onOpenChange?: (open: boolean) => void
+  }
+>(
+  (
+    {
+      defaultOpen = true,
+      open: openProp,
+      onOpenChange: setOpenProp,
+      className,
+      style,
+      children,
+      ...props
+    },
+    ref
+  ) => {
+    const isMobile = useIsMobile()
+    const [openMobile, setOpenMobile] = React.useState(false)
+
+    // This is the internal state of the sidebar.
+    // We use openProp and setOpenProp for control from outside the component.
+    const [_open, _setOpen] = React.useState(defaultOpen)
+    const open = openProp ?? _open
+    const setOpen = React.useCallback(
+      (value: boolean | ((value: boolean) => boolean)) => {
+        const openState = typeof value === "function" ? value(open) : value
+        if (setOpenProp) {
+          setOpenProp(openState)
+        } else {
+          _setOpen(openState)
+        }
+
+        // This sets the cookie to keep the sidebar state.
+        document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`
+      },
+      [setOpenProp, open]
+    )
+
+    // Helper to toggle the sidebar.
+    const toggleSidebar = React.useCallback(() => {
+      return isMobile
+        ? setOpenMobile((open) => !open)
+        : setOpen((open) => !open)
+    }, [isMobile, setOpen, setOpenMobile])
+
+    // Adds a keyboard shortcut to toggle the sidebar.
+    React.useEffect(() => {
+      const handleKeyDown = (event: KeyboardEvent) => {
+        if (
+          event.key === SIDEBAR_KEYBOARD_SHORTCUT &&
+          (event.metaKey || event.ctrlKey)
+        ) {
+          event.preventDefault()
+          toggleSidebar()
+        }
+      }
+
+      window.addEventListener("keydown", handleKeyDown)
+      return () => window.removeEventListener("keydown", handleKeyDown)
+    }, [toggleSidebar])
+
+    // We add a state so that we can do data-state="expanded" or "collapsed".
+    // This makes it easier to style the sidebar with Tailwind classes.
+    const state = open ? "expanded" : "collapsed"
+
+    const contextValue = React.useMemo<SidebarContext>(
+      () => ({
+        state,
+        open,
+        setOpen,
+        isMobile,
+        openMobile,
+        setOpenMobile,
+        toggleSidebar,
+      }),
+      [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
+    )
+
+    return (
+      <SidebarContext.Provider value={contextValue}>
+        <TooltipProvider delayDuration={0}>
+          <div
+            style={
+              {
+                "--sidebar-width": SIDEBAR_WIDTH,
+                "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
+                ...style,
+              } as React.CSSProperties
+            }
+            className={cn(
+              "group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar",
+              className
+            )}
+            ref={ref}
+            {...props}
+          >
+            {children}
+          </div>
+        </TooltipProvider>
+      </SidebarContext.Provider>
+    )
+  }
+)
+SidebarProvider.displayName = "SidebarProvider"
+
+const Sidebar = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div"> & {
+    side?: "left" | "right"
+    variant?: "sidebar" | "floating" | "inset"
+    collapsible?: "offcanvas" | "icon" | "none"
+  }
+>(
+  (
+    {
+      side = "left",
+      variant = "sidebar",
+      collapsible = "offcanvas",
+      className,
+      children,
+      ...props
+    },
+    ref
+  ) => {
+    const { isMobile, state, openMobile, setOpenMobile } = useSidebar()
+
+    if (collapsible === "none") {
+      return (
+        <div
+          className={cn(
+            "flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",
+            className
+          )}
+          ref={ref}
+          {...props}
+        >
+          {children}
+        </div>
+      )
+    }
+
+    if (isMobile) {
+      return (
+        <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>
+          <SheetContent
+            data-sidebar="sidebar"
+            data-mobile="true"
+            className="w-[--sidebar-width] bg-sidebar p-0 text-sidebar-foreground [&>button]:hidden"
+            style={
+              {
+                "--sidebar-width": SIDEBAR_WIDTH_MOBILE,
+              } as React.CSSProperties
+            }
+            side={side}
+          >
+            <div className="flex h-full w-full flex-col">{children}</div>
+          </SheetContent>
+        </Sheet>
+      )
+    }
+
+    return (
+      <div
+        ref={ref}
+        className="group peer hidden md:block text-sidebar-foreground"
+        data-state={state}
+        data-collapsible={state === "collapsed" ? collapsible : ""}
+        data-variant={variant}
+        data-side={side}
+      >
+        {/* This is what handles the sidebar gap on desktop */}
+        <div
+          className={cn(
+            "duration-200 relative h-svh w-[--sidebar-width] bg-transparent transition-[width] ease-linear",
+            "group-data-[collapsible=offcanvas]:w-0",
+            "group-data-[side=right]:rotate-180",
+            variant === "floating" || variant === "inset"
+              ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4))]"
+              : "group-data-[collapsible=icon]:w-[--sidebar-width-icon]"
+          )}
+        />
+        <div
+          className={cn(
+            "duration-200 fixed inset-y-0 z-10 hidden h-svh w-[--sidebar-width] transition-[left,right,width] ease-linear md:flex",
+            side === "left"
+              ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]"
+              : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]",
+            // Adjust the padding for floating and inset variants.
+            variant === "floating" || variant === "inset"
+              ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)_+_theme(spacing.4)_+2px)]"
+              : "group-data-[collapsible=icon]:w-[--sidebar-width-icon] group-data-[side=left]:border-r group-data-[side=right]:border-l",
+            className
+          )}
+          {...props}
+        >
+          <div
+            data-sidebar="sidebar"
+            className="flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow"
+          >
+            {children}
+          </div>
+        </div>
+      </div>
+    )
+  }
+)
+Sidebar.displayName = "Sidebar"
+
+const SidebarTrigger = React.forwardRef<
+  React.ElementRef<typeof Button>,
+  React.ComponentProps<typeof Button>
+>(({ className, onClick, ...props }, ref) => {
+  const { toggleSidebar } = useSidebar()
+
+  return (
+    <Button
+      ref={ref}
+      data-sidebar="trigger"
+      variant="ghost"
+      size="icon"
+      className={cn("h-7 w-7", className)}
+      onClick={(event) => {
+        onClick?.(event)
+        toggleSidebar()
+      }}
+      {...props}
+    >
+      <PanelLeft />
+      <span className="sr-only">Toggle Sidebar</span>
+    </Button>
+  )
+})
+SidebarTrigger.displayName = "SidebarTrigger"
+
+const SidebarRail = React.forwardRef<
+  HTMLButtonElement,
+  React.ComponentProps<"button">
+>(({ className, ...props }, ref) => {
+  const { toggleSidebar } = useSidebar()
+
+  return (
+    <button
+      ref={ref}
+      data-sidebar="rail"
+      aria-label="Toggle Sidebar"
+      tabIndex={-1}
+      onClick={toggleSidebar}
+      title="Toggle Sidebar"
+      className={cn(
+        "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] hover:after:bg-sidebar-border group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex",
+        "[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize",
+        "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
+        "group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar",
+        "[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
+        "[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarRail.displayName = "SidebarRail"
+
+const SidebarInset = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"main">
+>(({ className, ...props }, ref) => {
+  return (
+    <main
+      ref={ref}
+      className={cn(
+        "relative flex min-h-svh flex-1 flex-col bg-background",
+        "peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))] md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarInset.displayName = "SidebarInset"
+
+const SidebarInput = React.forwardRef<
+  React.ElementRef<typeof Input>,
+  React.ComponentProps<typeof Input>
+>(({ className, ...props }, ref) => {
+  return (
+    <Input
+      ref={ref}
+      data-sidebar="input"
+      className={cn(
+        "h-8 w-full bg-background shadow-none focus-visible:ring-2 focus-visible:ring-sidebar-ring",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarInput.displayName = "SidebarInput"
+
+const SidebarHeader = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div">
+>(({ className, ...props }, ref) => {
+  return (
+    <div
+      ref={ref}
+      data-sidebar="header"
+      className={cn("flex flex-col gap-2 p-2", className)}
+      {...props}
+    />
+  )
+})
+SidebarHeader.displayName = "SidebarHeader"
+
+const SidebarFooter = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div">
+>(({ className, ...props }, ref) => {
+  return (
+    <div
+      ref={ref}
+      data-sidebar="footer"
+      className={cn("flex flex-col gap-2 p-2", className)}
+      {...props}
+    />
+  )
+})
+SidebarFooter.displayName = "SidebarFooter"
+
+const SidebarSeparator = React.forwardRef<
+  React.ElementRef<typeof Separator>,
+  React.ComponentProps<typeof Separator>
+>(({ className, ...props }, ref) => {
+  return (
+    <Separator
+      ref={ref}
+      data-sidebar="separator"
+      className={cn("mx-2 w-auto bg-sidebar-border", className)}
+      {...props}
+    />
+  )
+})
+SidebarSeparator.displayName = "SidebarSeparator"
+
+const SidebarContent = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div">
+>(({ className, ...props }, ref) => {
+  return (
+    <div
+      ref={ref}
+      data-sidebar="content"
+      className={cn(
+        "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarContent.displayName = "SidebarContent"
+
+const SidebarGroup = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div">
+>(({ className, ...props }, ref) => {
+  return (
+    <div
+      ref={ref}
+      data-sidebar="group"
+      className={cn("relative flex w-full min-w-0 flex-col p-2", className)}
+      {...props}
+    />
+  )
+})
+SidebarGroup.displayName = "SidebarGroup"
+
+const SidebarGroupLabel = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div"> & { asChild?: boolean }
+>(({ className, asChild = false, ...props }, ref) => {
+  const Comp = asChild ? Slot : "div"
+
+  return (
+    <Comp
+      ref={ref}
+      data-sidebar="group-label"
+      className={cn(
+        "duration-200 flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 outline-none ring-sidebar-ring transition-[margin,opa] ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
+        "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarGroupLabel.displayName = "SidebarGroupLabel"
+
+const SidebarGroupAction = React.forwardRef<
+  HTMLButtonElement,
+  React.ComponentProps<"button"> & { asChild?: boolean }
+>(({ className, asChild = false, ...props }, ref) => {
+  const Comp = asChild ? Slot : "button"
+
+  return (
+    <Comp
+      ref={ref}
+      data-sidebar="group-action"
+      className={cn(
+        "absolute right-3 top-3.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
+        // Increases the hit area of the button on mobile.
+        "after:absolute after:-inset-2 after:md:hidden",
+        "group-data-[collapsible=icon]:hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarGroupAction.displayName = "SidebarGroupAction"
+
+const SidebarGroupContent = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div">
+>(({ className, ...props }, ref) => (
+  <div
+    ref={ref}
+    data-sidebar="group-content"
+    className={cn("w-full text-sm", className)}
+    {...props}
+  />
+))
+SidebarGroupContent.displayName = "SidebarGroupContent"
+
+const SidebarMenu = React.forwardRef<
+  HTMLUListElement,
+  React.ComponentProps<"ul">
+>(({ className, ...props }, ref) => (
+  <ul
+    ref={ref}
+    data-sidebar="menu"
+    className={cn("flex w-full min-w-0 flex-col gap-1", className)}
+    {...props}
+  />
+))
+SidebarMenu.displayName = "SidebarMenu"
+
+const SidebarMenuItem = React.forwardRef<
+  HTMLLIElement,
+  React.ComponentProps<"li">
+>(({ className, ...props }, ref) => (
+  <li
+    ref={ref}
+    data-sidebar="menu-item"
+    className={cn("group/menu-item relative", className)}
+    {...props}
+  />
+))
+SidebarMenuItem.displayName = "SidebarMenuItem"
+
+const sidebarMenuButtonVariants = cva(
+  "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-none ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
+  {
+    variants: {
+      variant: {
+        default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
+        outline:
+          "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
+      },
+      size: {
+        default: "h-8 text-sm",
+        sm: "h-7 text-xs",
+        lg: "h-12 text-sm group-data-[collapsible=icon]:!p-0",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+const SidebarMenuButton = React.forwardRef<
+  HTMLButtonElement,
+  React.ComponentProps<"button"> & {
+    asChild?: boolean
+    isActive?: boolean
+    tooltip?: string | React.ComponentProps<typeof TooltipContent>
+  } & VariantProps<typeof sidebarMenuButtonVariants>
+>(
+  (
+    {
+      asChild = false,
+      isActive = false,
+      variant = "default",
+      size = "default",
+      tooltip,
+      className,
+      ...props
+    },
+    ref
+  ) => {
+    const Comp = asChild ? Slot : "button"
+    const { isMobile, state } = useSidebar()
+
+    const button = (
+      <Comp
+        ref={ref}
+        data-sidebar="menu-button"
+        data-size={size}
+        data-active={isActive}
+        className={cn(sidebarMenuButtonVariants({ variant, size }), className)}
+        {...props}
+      />
+    )
+
+    if (!tooltip) {
+      return button
+    }
+
+    if (typeof tooltip === "string") {
+      tooltip = {
+        children: tooltip,
+      }
+    }
+
+    return (
+      <Tooltip>
+        <TooltipTrigger asChild>{button}</TooltipTrigger>
+        <TooltipContent
+          side="right"
+          align="center"
+          hidden={state !== "collapsed" || isMobile}
+          {...tooltip}
+        />
+      </Tooltip>
+    )
+  }
+)
+SidebarMenuButton.displayName = "SidebarMenuButton"
+
+const SidebarMenuAction = React.forwardRef<
+  HTMLButtonElement,
+  React.ComponentProps<"button"> & {
+    asChild?: boolean
+    showOnHover?: boolean
+  }
+>(({ className, asChild = false, showOnHover = false, ...props }, ref) => {
+  const Comp = asChild ? Slot : "button"
+
+  return (
+    <Comp
+      ref={ref}
+      data-sidebar="menu-action"
+      className={cn(
+        "absolute right-1 top-1.5 flex aspect-square w-5 items-center justify-center rounded-md p-0 text-sidebar-foreground outline-none ring-sidebar-ring transition-transform hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 peer-hover/menu-button:text-sidebar-accent-foreground [&>svg]:size-4 [&>svg]:shrink-0",
+        // Increases the hit area of the button on mobile.
+        "after:absolute after:-inset-2 after:md:hidden",
+        "peer-data-[size=sm]/menu-button:top-1",
+        "peer-data-[size=default]/menu-button:top-1.5",
+        "peer-data-[size=lg]/menu-button:top-2.5",
+        "group-data-[collapsible=icon]:hidden",
+        showOnHover &&
+          "group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarMenuAction.displayName = "SidebarMenuAction"
+
+const SidebarMenuBadge = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div">
+>(({ className, ...props }, ref) => (
+  <div
+    ref={ref}
+    data-sidebar="menu-badge"
+    className={cn(
+      "absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums text-sidebar-foreground select-none pointer-events-none",
+      "peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground",
+      "peer-data-[size=sm]/menu-button:top-1",
+      "peer-data-[size=default]/menu-button:top-1.5",
+      "peer-data-[size=lg]/menu-button:top-2.5",
+      "group-data-[collapsible=icon]:hidden",
+      className
+    )}
+    {...props}
+  />
+))
+SidebarMenuBadge.displayName = "SidebarMenuBadge"
+
+const SidebarMenuSkeleton = React.forwardRef<
+  HTMLDivElement,
+  React.ComponentProps<"div"> & {
+    showIcon?: boolean
+  }
+>(({ className, showIcon = false, ...props }, ref) => {
+  // Random width between 50 to 90%.
+  const width = React.useMemo(() => {
+    return `${Math.floor(Math.random() * 40) + 50}%`
+  }, [])
+
+  return (
+    <div
+      ref={ref}
+      data-sidebar="menu-skeleton"
+      className={cn("rounded-md h-8 flex gap-2 px-2 items-center", className)}
+      {...props}
+    >
+      {showIcon && (
+        <Skeleton
+          className="size-4 rounded-md"
+          data-sidebar="menu-skeleton-icon"
+        />
+      )}
+      <Skeleton
+        className="h-4 flex-1 max-w-[--skeleton-width]"
+        data-sidebar="menu-skeleton-text"
+        style={
+          {
+            "--skeleton-width": width,
+          } as React.CSSProperties
+        }
+      />
+    </div>
+  )
+})
+SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton"
+
+const SidebarMenuSub = React.forwardRef<
+  HTMLUListElement,
+  React.ComponentProps<"ul">
+>(({ className, ...props }, ref) => (
+  <ul
+    ref={ref}
+    data-sidebar="menu-sub"
+    className={cn(
+      "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2.5 py-0.5",
+      "group-data-[collapsible=icon]:hidden",
+      className
+    )}
+    {...props}
+  />
+))
+SidebarMenuSub.displayName = "SidebarMenuSub"
+
+const SidebarMenuSubItem = React.forwardRef<
+  HTMLLIElement,
+  React.ComponentProps<"li">
+>(({ ...props }, ref) => <li ref={ref} {...props} />)
+SidebarMenuSubItem.displayName = "SidebarMenuSubItem"
+
+const SidebarMenuSubButton = React.forwardRef<
+  HTMLAnchorElement,
+  React.ComponentProps<"a"> & {
+    asChild?: boolean
+    size?: "sm" | "md"
+    isActive?: boolean
+  }
+>(({ asChild = false, size = "md", isActive, className, ...props }, ref) => {
+  const Comp = asChild ? Slot : "a"
+
+  return (
+    <Comp
+      ref={ref}
+      data-sidebar="menu-sub-button"
+      data-size={size}
+      data-active={isActive}
+      className={cn(
+        "flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground outline-none ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
+        "data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground",
+        size === "sm" && "text-xs",
+        size === "md" && "text-sm",
+        "group-data-[collapsible=icon]:hidden",
+        className
+      )}
+      {...props}
+    />
+  )
+})
+SidebarMenuSubButton.displayName = "SidebarMenuSubButton"
+
+export {
+  Sidebar,
+  SidebarContent,
+  SidebarFooter,
+  SidebarGroup,
+  SidebarGroupAction,
+  SidebarGroupContent,
+  SidebarGroupLabel,
+  SidebarHeader,
+  SidebarInput,
+  SidebarInset,
+  SidebarMenu,
+  SidebarMenuAction,
+  SidebarMenuBadge,
+  SidebarMenuButton,
+  SidebarMenuItem,
+  SidebarMenuSkeleton,
+  SidebarMenuSub,
+  SidebarMenuSubButton,
+  SidebarMenuSubItem,
+  SidebarProvider,
+  SidebarRail,
+  SidebarSeparator,
+  SidebarTrigger,
+  useSidebar,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/skeleton.tsx b/site/tools/benchmark-dashboard/src/components/ui/skeleton.tsx
new file mode 100644
index 000000000..01b8b6d4f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/skeleton.tsx
@@ -0,0 +1,15 @@
+import { cn } from "@/lib/utils"
+
+function Skeleton({
+  className,
+  ...props
+}: React.HTMLAttributes<HTMLDivElement>) {
+  return (
+    <div
+      className={cn("animate-pulse rounded-md bg-muted", className)}
+      {...props}
+    />
+  )
+}
+
+export { Skeleton }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/slider.tsx b/site/tools/benchmark-dashboard/src/components/ui/slider.tsx
new file mode 100644
index 000000000..e161daec0
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/slider.tsx
@@ -0,0 +1,26 @@
+import * as React from "react"
+import * as SliderPrimitive from "@radix-ui/react-slider"
+
+import { cn } from "@/lib/utils"
+
+const Slider = React.forwardRef<
+  React.ElementRef<typeof SliderPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root>
+>(({ className, ...props }, ref) => (
+  <SliderPrimitive.Root
+    ref={ref}
+    className={cn(
+      "relative flex w-full touch-none select-none items-center",
+      className
+    )}
+    {...props}
+  >
+    <SliderPrimitive.Track className="relative h-2 w-full grow overflow-hidden rounded-full bg-secondary">
+      <SliderPrimitive.Range className="absolute h-full bg-primary" />
+    </SliderPrimitive.Track>
+    <SliderPrimitive.Thumb className="block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" />
+  </SliderPrimitive.Root>
+))
+Slider.displayName = SliderPrimitive.Root.displayName
+
+export { Slider }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/sonner.tsx b/site/tools/benchmark-dashboard/src/components/ui/sonner.tsx
new file mode 100644
index 000000000..35418149c
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/sonner.tsx
@@ -0,0 +1,29 @@
+import { useTheme } from "next-themes"
+import { Toaster as Sonner, toast } from "sonner"
+
+type ToasterProps = React.ComponentProps<typeof Sonner>
+
+const Toaster = ({ ...props }: ToasterProps) => {
+  const { theme = "system" } = useTheme()
+
+  return (
+    <Sonner
+      theme={theme as ToasterProps["theme"]}
+      className="toaster group"
+      toastOptions={{
+        classNames: {
+          toast:
+            "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
+          description: "group-[.toast]:text-muted-foreground",
+          actionButton:
+            "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
+          cancelButton:
+            "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
+        },
+      }}
+      {...props}
+    />
+  )
+}
+
+export { Toaster, toast }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/switch.tsx b/site/tools/benchmark-dashboard/src/components/ui/switch.tsx
new file mode 100644
index 000000000..aa58baa29
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/switch.tsx
@@ -0,0 +1,27 @@
+import * as React from "react"
+import * as SwitchPrimitives from "@radix-ui/react-switch"
+
+import { cn } from "@/lib/utils"
+
+const Switch = React.forwardRef<
+  React.ElementRef<typeof SwitchPrimitives.Root>,
+  React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
+>(({ className, ...props }, ref) => (
+  <SwitchPrimitives.Root
+    className={cn(
+      "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
+      className
+    )}
+    {...props}
+    ref={ref}
+  >
+    <SwitchPrimitives.Thumb
+      className={cn(
+        "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
+      )}
+    />
+  </SwitchPrimitives.Root>
+))
+Switch.displayName = SwitchPrimitives.Root.displayName
+
+export { Switch }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/table.tsx b/site/tools/benchmark-dashboard/src/components/ui/table.tsx
new file mode 100644
index 000000000..7f3502f8b
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/table.tsx
@@ -0,0 +1,117 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+const Table = React.forwardRef<
+  HTMLTableElement,
+  React.HTMLAttributes<HTMLTableElement>
+>(({ className, ...props }, ref) => (
+  <div className="relative w-full overflow-auto">
+    <table
+      ref={ref}
+      className={cn("w-full caption-bottom text-sm", className)}
+      {...props}
+    />
+  </div>
+))
+Table.displayName = "Table"
+
+const TableHeader = React.forwardRef<
+  HTMLTableSectionElement,
+  React.HTMLAttributes<HTMLTableSectionElement>
+>(({ className, ...props }, ref) => (
+  <thead ref={ref} className={cn("[&_tr]:border-b", className)} {...props} />
+))
+TableHeader.displayName = "TableHeader"
+
+const TableBody = React.forwardRef<
+  HTMLTableSectionElement,
+  React.HTMLAttributes<HTMLTableSectionElement>
+>(({ className, ...props }, ref) => (
+  <tbody
+    ref={ref}
+    className={cn("[&_tr:last-child]:border-0", className)}
+    {...props}
+  />
+))
+TableBody.displayName = "TableBody"
+
+const TableFooter = React.forwardRef<
+  HTMLTableSectionElement,
+  React.HTMLAttributes<HTMLTableSectionElement>
+>(({ className, ...props }, ref) => (
+  <tfoot
+    ref={ref}
+    className={cn(
+      "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
+      className
+    )}
+    {...props}
+  />
+))
+TableFooter.displayName = "TableFooter"
+
+const TableRow = React.forwardRef<
+  HTMLTableRowElement,
+  React.HTMLAttributes<HTMLTableRowElement>
+>(({ className, ...props }, ref) => (
+  <tr
+    ref={ref}
+    className={cn(
+      "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
+      className
+    )}
+    {...props}
+  />
+))
+TableRow.displayName = "TableRow"
+
+const TableHead = React.forwardRef<
+  HTMLTableCellElement,
+  React.ThHTMLAttributes<HTMLTableCellElement>
+>(({ className, ...props }, ref) => (
+  <th
+    ref={ref}
+    className={cn(
+      "h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
+      className
+    )}
+    {...props}
+  />
+))
+TableHead.displayName = "TableHead"
+
+const TableCell = React.forwardRef<
+  HTMLTableCellElement,
+  React.TdHTMLAttributes<HTMLTableCellElement>
+>(({ className, ...props }, ref) => (
+  <td
+    ref={ref}
+    className={cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className)}
+    {...props}
+  />
+))
+TableCell.displayName = "TableCell"
+
+const TableCaption = React.forwardRef<
+  HTMLTableCaptionElement,
+  React.HTMLAttributes<HTMLTableCaptionElement>
+>(({ className, ...props }, ref) => (
+  <caption
+    ref={ref}
+    className={cn("mt-4 text-sm text-muted-foreground", className)}
+    {...props}
+  />
+))
+TableCaption.displayName = "TableCaption"
+
+export {
+  Table,
+  TableHeader,
+  TableBody,
+  TableFooter,
+  TableHead,
+  TableRow,
+  TableCell,
+  TableCaption,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/tabs.tsx b/site/tools/benchmark-dashboard/src/components/ui/tabs.tsx
new file mode 100644
index 000000000..f57fffdb5
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/tabs.tsx
@@ -0,0 +1,53 @@
+import * as React from "react"
+import * as TabsPrimitive from "@radix-ui/react-tabs"
+
+import { cn } from "@/lib/utils"
+
+const Tabs = TabsPrimitive.Root
+
+const TabsList = React.forwardRef<
+  React.ElementRef<typeof TabsPrimitive.List>,
+  React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>
+>(({ className, ...props }, ref) => (
+  <TabsPrimitive.List
+    ref={ref}
+    className={cn(
+      "inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",
+      className
+    )}
+    {...props}
+  />
+))
+TabsList.displayName = TabsPrimitive.List.displayName
+
+const TabsTrigger = React.forwardRef<
+  React.ElementRef<typeof TabsPrimitive.Trigger>,
+  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>
+>(({ className, ...props }, ref) => (
+  <TabsPrimitive.Trigger
+    ref={ref}
+    className={cn(
+      "inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
+      className
+    )}
+    {...props}
+  />
+))
+TabsTrigger.displayName = TabsPrimitive.Trigger.displayName
+
+const TabsContent = React.forwardRef<
+  React.ElementRef<typeof TabsPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>
+>(({ className, ...props }, ref) => (
+  <TabsPrimitive.Content
+    ref={ref}
+    className={cn(
+      "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
+      className
+    )}
+    {...props}
+  />
+))
+TabsContent.displayName = TabsPrimitive.Content.displayName
+
+export { Tabs, TabsList, TabsTrigger, TabsContent }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/textarea.tsx b/site/tools/benchmark-dashboard/src/components/ui/textarea.tsx
new file mode 100644
index 000000000..9f9a6dc56
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/textarea.tsx
@@ -0,0 +1,24 @@
+import * as React from "react"
+
+import { cn } from "@/lib/utils"
+
+export interface TextareaProps
+  extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}
+
+const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
+  ({ className, ...props }, ref) => {
+    return (
+      <textarea
+        className={cn(
+          "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
+          className
+        )}
+        ref={ref}
+        {...props}
+      />
+    )
+  }
+)
+Textarea.displayName = "Textarea"
+
+export { Textarea }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/toast.tsx b/site/tools/benchmark-dashboard/src/components/ui/toast.tsx
new file mode 100644
index 000000000..a82247753
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/toast.tsx
@@ -0,0 +1,127 @@
+import * as React from "react"
+import * as ToastPrimitives from "@radix-ui/react-toast"
+import { cva, type VariantProps } from "class-variance-authority"
+import { X } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+const ToastProvider = ToastPrimitives.Provider
+
+const ToastViewport = React.forwardRef<
+  React.ElementRef<typeof ToastPrimitives.Viewport>,
+  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>
+>(({ className, ...props }, ref) => (
+  <ToastPrimitives.Viewport
+    ref={ref}
+    className={cn(
+      "fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",
+      className
+    )}
+    {...props}
+  />
+))
+ToastViewport.displayName = ToastPrimitives.Viewport.displayName
+
+const toastVariants = cva(
+  "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",
+  {
+    variants: {
+      variant: {
+        default: "border bg-background text-foreground",
+        destructive:
+          "destructive group border-destructive bg-destructive text-destructive-foreground",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+    },
+  }
+)
+
+const Toast = React.forwardRef<
+  React.ElementRef<typeof ToastPrimitives.Root>,
+  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &
+    VariantProps<typeof toastVariants>
+>(({ className, variant, ...props }, ref) => {
+  return (
+    <ToastPrimitives.Root
+      ref={ref}
+      className={cn(toastVariants({ variant }), className)}
+      {...props}
+    />
+  )
+})
+Toast.displayName = ToastPrimitives.Root.displayName
+
+const ToastAction = React.forwardRef<
+  React.ElementRef<typeof ToastPrimitives.Action>,
+  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>
+>(({ className, ...props }, ref) => (
+  <ToastPrimitives.Action
+    ref={ref}
+    className={cn(
+      "inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",
+      className
+    )}
+    {...props}
+  />
+))
+ToastAction.displayName = ToastPrimitives.Action.displayName
+
+const ToastClose = React.forwardRef<
+  React.ElementRef<typeof ToastPrimitives.Close>,
+  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>
+>(({ className, ...props }, ref) => (
+  <ToastPrimitives.Close
+    ref={ref}
+    className={cn(
+      "absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",
+      className
+    )}
+    toast-close=""
+    {...props}
+  >
+    <X className="h-4 w-4" />
+  </ToastPrimitives.Close>
+))
+ToastClose.displayName = ToastPrimitives.Close.displayName
+
+const ToastTitle = React.forwardRef<
+  React.ElementRef<typeof ToastPrimitives.Title>,
+  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>
+>(({ className, ...props }, ref) => (
+  <ToastPrimitives.Title
+    ref={ref}
+    className={cn("text-sm font-semibold", className)}
+    {...props}
+  />
+))
+ToastTitle.displayName = ToastPrimitives.Title.displayName
+
+const ToastDescription = React.forwardRef<
+  React.ElementRef<typeof ToastPrimitives.Description>,
+  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>
+>(({ className, ...props }, ref) => (
+  <ToastPrimitives.Description
+    ref={ref}
+    className={cn("text-sm opacity-90", className)}
+    {...props}
+  />
+))
+ToastDescription.displayName = ToastPrimitives.Description.displayName
+
+type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>
+
+type ToastActionElement = React.ReactElement<typeof ToastAction>
+
+export {
+  type ToastProps,
+  type ToastActionElement,
+  ToastProvider,
+  ToastViewport,
+  Toast,
+  ToastTitle,
+  ToastDescription,
+  ToastClose,
+  ToastAction,
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/toaster.tsx b/site/tools/benchmark-dashboard/src/components/ui/toaster.tsx
new file mode 100644
index 000000000..6c67edff6
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/toaster.tsx
@@ -0,0 +1,33 @@
+import { useToast } from "@/hooks/use-toast"
+import {
+  Toast,
+  ToastClose,
+  ToastDescription,
+  ToastProvider,
+  ToastTitle,
+  ToastViewport,
+} from "@/components/ui/toast"
+
+export function Toaster() {
+  const { toasts } = useToast()
+
+  return (
+    <ToastProvider>
+      {toasts.map(function ({ id, title, description, action, ...props }) {
+        return (
+          <Toast key={id} {...props}>
+            <div className="grid gap-1">
+              {title && <ToastTitle>{title}</ToastTitle>}
+              {description && (
+                <ToastDescription>{description}</ToastDescription>
+              )}
+            </div>
+            {action}
+            <ToastClose />
+          </Toast>
+        )
+      })}
+      <ToastViewport />
+    </ToastProvider>
+  )
+}
diff --git a/site/tools/benchmark-dashboard/src/components/ui/toggle-group.tsx b/site/tools/benchmark-dashboard/src/components/ui/toggle-group.tsx
new file mode 100644
index 000000000..afe5da625
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/toggle-group.tsx
@@ -0,0 +1,59 @@
+import * as React from "react"
+import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"
+import { type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+import { toggleVariants } from "@/components/ui/toggle"
+
+const ToggleGroupContext = React.createContext<
+  VariantProps<typeof toggleVariants>
+>({
+  size: "default",
+  variant: "default",
+})
+
+const ToggleGroup = React.forwardRef<
+  React.ElementRef<typeof ToggleGroupPrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &
+    VariantProps<typeof toggleVariants>
+>(({ className, variant, size, children, ...props }, ref) => (
+  <ToggleGroupPrimitive.Root
+    ref={ref}
+    className={cn("flex items-center justify-center gap-1", className)}
+    {...props}
+  >
+    <ToggleGroupContext.Provider value={{ variant, size }}>
+      {children}
+    </ToggleGroupContext.Provider>
+  </ToggleGroupPrimitive.Root>
+))
+
+ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName
+
+const ToggleGroupItem = React.forwardRef<
+  React.ElementRef<typeof ToggleGroupPrimitive.Item>,
+  React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &
+    VariantProps<typeof toggleVariants>
+>(({ className, children, variant, size, ...props }, ref) => {
+  const context = React.useContext(ToggleGroupContext)
+
+  return (
+    <ToggleGroupPrimitive.Item
+      ref={ref}
+      className={cn(
+        toggleVariants({
+          variant: context.variant || variant,
+          size: context.size || size,
+        }),
+        className
+      )}
+      {...props}
+    >
+      {children}
+    </ToggleGroupPrimitive.Item>
+  )
+})
+
+ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName
+
+export { ToggleGroup, ToggleGroupItem }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/toggle.tsx b/site/tools/benchmark-dashboard/src/components/ui/toggle.tsx
new file mode 100644
index 000000000..9ecac28ee
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/toggle.tsx
@@ -0,0 +1,43 @@
+import * as React from "react"
+import * as TogglePrimitive from "@radix-ui/react-toggle"
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "@/lib/utils"
+
+const toggleVariants = cva(
+  "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
+  {
+    variants: {
+      variant: {
+        default: "bg-transparent",
+        outline:
+          "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground",
+      },
+      size: {
+        default: "h-10 px-3",
+        sm: "h-9 px-2.5",
+        lg: "h-11 px-5",
+      },
+    },
+    defaultVariants: {
+      variant: "default",
+      size: "default",
+    },
+  }
+)
+
+const Toggle = React.forwardRef<
+  React.ElementRef<typeof TogglePrimitive.Root>,
+  React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> &
+    VariantProps<typeof toggleVariants>
+>(({ className, variant, size, ...props }, ref) => (
+  <TogglePrimitive.Root
+    ref={ref}
+    className={cn(toggleVariants({ variant, size, className }))}
+    {...props}
+  />
+))
+
+Toggle.displayName = TogglePrimitive.Root.displayName
+
+export { Toggle, toggleVariants }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/tooltip.tsx b/site/tools/benchmark-dashboard/src/components/ui/tooltip.tsx
new file mode 100644
index 000000000..e121f0aea
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/tooltip.tsx
@@ -0,0 +1,28 @@
+import * as React from "react"
+import * as TooltipPrimitive from "@radix-ui/react-tooltip"
+
+import { cn } from "@/lib/utils"
+
+const TooltipProvider = TooltipPrimitive.Provider
+
+const Tooltip = TooltipPrimitive.Root
+
+const TooltipTrigger = TooltipPrimitive.Trigger
+
+const TooltipContent = React.forwardRef<
+  React.ElementRef<typeof TooltipPrimitive.Content>,
+  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
+>(({ className, sideOffset = 4, ...props }, ref) => (
+  <TooltipPrimitive.Content
+    ref={ref}
+    sideOffset={sideOffset}
+    className={cn(
+      "z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+      className
+    )}
+    {...props}
+  />
+))
+TooltipContent.displayName = TooltipPrimitive.Content.displayName
+
+export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
diff --git a/site/tools/benchmark-dashboard/src/components/ui/use-toast.ts b/site/tools/benchmark-dashboard/src/components/ui/use-toast.ts
new file mode 100644
index 000000000..b0aef21be
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/components/ui/use-toast.ts
@@ -0,0 +1,3 @@
+import { useToast, toast } from "@/hooks/use-toast";
+
+export { useToast, toast };
diff --git a/site/tools/benchmark-dashboard/src/data/benchmarkDataTemplate.ts b/site/tools/benchmark-dashboard/src/data/benchmarkDataTemplate.ts
new file mode 100644
index 000000000..2ac91d016
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/benchmarkDataTemplate.ts
@@ -0,0 +1,349 @@
+// Benchmark Data Template - Use this as a template for generating new test data
+
+export interface TestConfiguration {
+  rps: number;
+  connections: number;
+  duration: number;
+  cpuLimit: string;
+  memoryLimit: string;
+}
+
+export interface LatencyMetrics {
+  min: number; // microseconds
+  mean: number; // microseconds
+  max: number; // microseconds
+  pstdev: number; // microseconds
+  percentiles: {
+    p50: number;
+    p75: number;
+    p80: number;
+    p90: number;
+    p95: number;
+    p99: number;
+    p999: number;
+  };
+}
+
+export interface ResourceMetrics {
+  envoyGateway: {
+    memory: { min: number; max: number; mean: number }; // MiB
+    cpu: { min: number; max: number; mean: number }; // percentage
+  };
+  envoyProxy: {
+    memory: { min: number; max: number; mean: number }; // MiB
+    cpu: { min: number; max: number; mean: number }; // percentage
+  };
+}
+
+export interface TestResult {
+  testName: string;
+  routes: number;
+  routesPerHostname: number;
+  phase: 'scaling-up' | 'scaling-down';
+
+  // Performance metrics
+  throughput: number; // requests per second
+  totalRequests: number;
+
+  // Latency data
+  latency: LatencyMetrics;
+
+  // Resource usage
+  resources: ResourceMetrics;
+
+  // Additional counters
+  poolOverflow: number;
+  upstreamConnections: number;
+}
+
+// ========================================
+// TEMPLATE CONFIGURATION
+// ========================================
+
+export const testConfigurationTemplate: TestConfiguration = {
+  rps: 10000,        // Target requests per second
+  connections: 100,   // Number of connections
+  duration: 30,      // Test duration in seconds
+  cpuLimit: '1000m', // CPU limit for containers
+  memoryLimit: '2000Mi' // Memory limit for containers
+};
+
+// ========================================
+// TEMPLATE TEST RESULTS
+// ========================================
+
+// Example template for a single test result
+export const testResultTemplate: TestResult = {
+  testName: 'scaling up httproutes to {ROUTES} with {ROUTES_PER_HOSTNAME} routes per hostname',
+  routes: 0, // FILL: Number of routes in this test
+  routesPerHostname: 0, // FILL: Routes per hostname
+  phase: 'scaling-up', // FILL: 'scaling-up' or 'scaling-down'
+
+  // FILL: Extract from benchmark tool output
+  throughput: 0, // requests per second (from benchmark.http_2xx counter / duration)
+  totalRequests: 0, // total successful requests (from benchmark.http_2xx counter)
+
+  // FILL: Extract from latency section of benchmark output
+  latency: {
+    min: 0,    // minimum latency in microseconds
+    mean: 0,   // mean latency in microseconds
+    max: 0,    // maximum latency in microseconds
+    pstdev: 0, // standard deviation in microseconds
+    percentiles: {
+      p50: 0,   // 50th percentile (median)
+      p75: 0,   // 75th percentile
+      p80: 0,   // 80th percentile
+      p90: 0,   // 90th percentile
+      p95: 0,   // 95th percentile
+      p99: 0,   // 99th percentile
+      p999: 0   // 99.9th percentile
+    }
+  },
+
+  // FILL: Extract from metrics table
+  resources: {
+    envoyGateway: {
+      memory: { min: 0, max: 0, mean: 0 }, // Memory usage in MiB
+      cpu: { min: 0, max: 0, mean: 0 }     // CPU usage in percentage
+    },
+    envoyProxy: {
+      memory: { min: 0, max: 0, mean: 0 }, // Memory usage in MiB
+      cpu: { min: 0, max: 0, mean: 0 }     // CPU usage in percentage
+    }
+  },
+
+  // FILL: Extract from counters section
+  poolOverflow: 0,         // benchmark.pool_overflow value
+  upstreamConnections: 0   // upstream_cx_total value
+};
+
+// ========================================
+// DATA EXTRACTION HELPERS
+// ========================================
+
+/**
+ * Helper function to parse latency data from benchmark output
+ * Use this to extract percentile data from the benchmark latency section
+ */
+export function parseLatencyData(
+  min: string,           // "0s 000ms 335us"
+  mean: string,          // "0s 006ms 565us"
+  max: string,           // "0s 066ms 668us"
+  pstdev: string,        // "0s 011ms 480us"
+  p50: string,           // "0s 003ms 258us"
+  p75: string,           // "0s 005ms 079us"
+  p80: string,           // "0s 005ms 722us"
+  p90: string,           // "0s 008ms 679us"
+  p95: string,           // "0s 045ms 924us"
+  p99: string,           // "0s 053ms 512us"
+  p999: string           // "0s 058ms 220us"
+): LatencyMetrics {
+
+  // Helper to convert time string to microseconds
+  const parseTimeToMicroseconds = (timeStr: string): number => {
+    const match = timeStr.match(/(\d+)s (\d+)ms (\d+)us/);
+    if (!match) return 0;
+    const [, seconds, milliseconds, microseconds] = match;
+    return parseInt(seconds) * 1000000 + parseInt(milliseconds) * 1000 + parseInt(microseconds);
+  };
+
+  return {
+    min: parseTimeToMicroseconds(min),
+    mean: parseTimeToMicroseconds(mean),
+    max: parseTimeToMicroseconds(max),
+    pstdev: parseTimeToMicroseconds(pstdev),
+    percentiles: {
+      p50: parseTimeToMicroseconds(p50),
+      p75: parseTimeToMicroseconds(p75),
+      p80: parseTimeToMicroseconds(p80),
+      p90: parseTimeToMicroseconds(p90),
+      p95: parseTimeToMicroseconds(p95),
+      p99: parseTimeToMicroseconds(p99),
+      p999: parseTimeToMicroseconds(p999)
+    }
+  };
+}
+
+/**
+ * Helper function to parse resource metrics from the metrics table
+ */
+export function parseResourceMetrics(
+  envoyGatewayMemory: string,  // "128.02 / 151.26 / 147.41"
+  envoyGatewayCpu: string,     // "0.27 / 0.67 / 0.45"
+  envoyProxyMemory: string,    // "0.00 / 26.92 / 22.58"
+  envoyProxyCpu: string        // "0.00 / 99.73 / 6.02"
+): ResourceMetrics {
+
+  const parseMinMaxMean = (str: string) => {
+    const [min, max, mean] = str.split(' / ').map(s => parseFloat(s.trim()));
+    return { min, max, mean };
+  };
+
+  return {
+    envoyGateway: {
+      memory: parseMinMaxMean(envoyGatewayMemory),
+      cpu: parseMinMaxMean(envoyGatewayCpu)
+    },
+    envoyProxy: {
+      memory: parseMinMaxMean(envoyProxyMemory),
+      cpu: parseMinMaxMean(envoyProxyCpu)
+    }
+  };
+}
+
+/**
+ * Helper to calculate throughput from counter data
+ */
+export function calculateThroughput(httpSuccessCount: number, testDuration: number): number {
+  return Number((httpSuccessCount / testDuration).toFixed(2));
+}
+
+// ========================================
+// TEMPLATE DATA ARRAY
+// ========================================
+
+// Template array structure - replace with your actual test results
+export const benchmarkResultsTemplate: TestResult[] = [
+  // Scaling Up Tests
+  {
+    testName: 'scaling up httproutes to 10 with 2 routes per hostname',
+    routes: 10,
+    routesPerHostname: 2,
+    phase: 'scaling-up',
+    throughput: 5440.31, // EXAMPLE - replace with actual
+    totalRequests: 163209, // EXAMPLE - replace with actual
+    latency: {
+      // EXAMPLE DATA - replace with actual parsed values
+      min: 335,
+      mean: 6565,
+      max: 66668,
+      pstdev: 11480,
+      percentiles: {
+        p50: 3258,
+        p75: 5079,
+        p80: 5722,
+        p90: 8679,
+        p95: 45924,
+        p99: 53512,
+        p999: 58220
+      }
+    },
+    resources: {
+      // EXAMPLE DATA - replace with actual parsed values
+      envoyGateway: {
+        memory: { min: 128.02, max: 151.26, mean: 147.41 },
+        cpu: { min: 0.27, max: 0.67, mean: 0.45 }
+      },
+      envoyProxy: {
+        memory: { min: 0.00, max: 26.92, mean: 22.58 },
+        cpu: { min: 0.00, max: 99.73, mean: 6.02 }
+      }
+    },
+    poolOverflow: 362, // EXAMPLE - replace with actual
+    upstreamConnections: 38 // EXAMPLE - replace with actual
+  }
+  // ADD MORE TEST RESULTS HERE...
+];
+
+// ========================================
+// AUTO-GENERATED SUMMARY DATA
+// ========================================
+
+// These will be automatically calculated from your test results
+export function generatePerformanceSummary(results: TestResult[]) {
+  return {
+    totalTests: results.length,
+    scaleUpTests: results.filter(r => r.phase === 'scaling-up').length,
+    scaleDownTests: results.filter(r => r.phase === 'scaling-down').length,
+    maxRoutes: Math.max(...results.map(r => r.routes)),
+    minRoutes: Math.min(...results.map(r => r.routes)),
+    avgThroughput: results.reduce((sum, r) => sum + r.throughput, 0) / results.length,
+    avgLatency: results.reduce((sum, r) => sum + r.latency.mean, 0) / results.length
+  };
+}
+
+export function generateLatencyPercentileComparison(results: TestResult[]) {
+  return results.map(result => ({
+    routes: result.routes,
+    phase: result.phase,
+    p50: result.latency.percentiles.p50 / 1000, // convert to ms
+    p75: result.latency.percentiles.p75 / 1000,
+    p90: result.latency.percentiles.p90 / 1000,
+    p95: result.latency.percentiles.p95 / 1000,
+    p99: result.latency.percentiles.p99 / 1000,
+    p999: result.latency.percentiles.p999 / 1000
+  }));
+}
+
+export function generateResourceTrends(results: TestResult[]) {
+  return results.map(result => ({
+    routes: result.routes,
+    phase: result.phase,
+    envoyGatewayMemory: result.resources.envoyGateway.memory.mean,
+    envoyGatewayCpu: result.resources.envoyGateway.cpu.mean,
+    envoyProxyMemory: result.resources.envoyProxy.memory.mean,
+    envoyProxyCpu: result.resources.envoyProxy.cpu.mean
+  }));
+}
+
+export function generatePerformanceMatrix(results: TestResult[]) {
+  return results.map(result => ({
+    testName: result.testName,
+    routes: result.routes,
+    phase: result.phase,
+    throughput: result.throughput,
+    meanLatency: result.latency.mean / 1000, // convert to ms
+    p95Latency: result.latency.percentiles.p95 / 1000, // convert to ms
+    totalMemory: result.resources.envoyGateway.memory.mean + result.resources.envoyProxy.memory.mean,
+    totalCpu: result.resources.envoyGateway.cpu.mean + result.resources.envoyProxy.cpu.mean
+  }));
+}
+
+// ========================================
+// USAGE INSTRUCTIONS
+// ========================================
+
+/*
+HOW TO USE THIS TEMPLATE:
+
+1. Copy this file to a new file (e.g., `newBenchmarkData.ts`)
+
+2. Update testConfigurationTemplate with your test settings
+
+3. For each test run:
+   - Copy the testResultTemplate structure
+   - Fill in the route configuration (routes, routesPerHostname, phase)
+   - Extract performance data from benchmark output using the helper functions
+   - Parse latency data using parseLatencyData()
+   - Parse resource metrics using parseResourceMetrics()
+   - Extract counter values for poolOverflow and upstreamConnections
+
+4. Add all your test results to the benchmarkResultsTemplate array
+
+5. Generate summary data using the provided helper functions:
+   ```typescript
+   export const performanceSummary = generatePerformanceSummary(benchmarkResultsTemplate);
+   export const latencyPercentileComparison = generateLatencyPercentileComparison(benchmarkResultsTemplate);
+   export const resourceTrends = generateResourceTrends(benchmarkResultsTemplate);
+   export const performanceMatrix = generatePerformanceMatrix(benchmarkResultsTemplate);
+   ```
+
+6. Update your components to import from the new data file
+
+EXAMPLE EXTRACTION FROM BENCHMARK OUTPUT:
+
+From this benchmark output:
+```
+benchmark_http_client.latency_2xx (163209 samples)
+  min: 0s 000ms 335us | mean: 0s 006ms 565us | max: 0s 066ms 668us
+
+Counter                   Value       Per second
+benchmark.http_2xx        163209      5440.31
+```
+
+You would extract:
+- throughput: 5440.31
+- totalRequests: 163209
+- latency.min: parseTimeToMicroseconds("0s 000ms 335us") = 335
+- latency.mean: parseTimeToMicroseconds("0s 006ms 565us") = 6565
+*/
diff --git a/site/tools/benchmark-dashboard/src/data/extractedBenchmarkData.ts b/site/tools/benchmark-dashboard/src/data/extractedBenchmarkData.ts
new file mode 100644
index 000000000..23c7a9251
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/extractedBenchmarkData.ts
@@ -0,0 +1,499 @@
+// Extracted benchmark data from the comprehensive markdown report
+
+export interface TestConfiguration {
+  rps: number;
+  connections: number;
+  duration: number;
+  cpuLimit: string;
+  memoryLimit: string;
+}
+
+export interface LatencyMetrics {
+  min: number; // microseconds
+  mean: number; // microseconds
+  max: number; // microseconds
+  pstdev: number; // microseconds
+  percentiles: {
+    p50: number;
+    p75: number;
+    p80: number;
+    p90: number;
+    p95: number;
+    p99: number;
+    p999: number;
+  };
+}
+
+export interface ResourceMetrics {
+  envoyGateway: {
+    memory: { min: number; max: number; mean: number }; // MiB
+    cpu: { min: number; max: number; mean: number }; // percentage
+  };
+  envoyProxy: {
+    memory: { min: number; max: number; mean: number }; // MiB
+    cpu: { min: number; max: number; mean: number }; // percentage
+  };
+}
+
+export interface TestResult {
+  testName: string;
+  routes: number;
+  routesPerHostname: number;
+  phase: 'scaling-up' | 'scaling-down';
+
+  // Performance metrics
+  throughput: number; // requests per second
+  totalRequests: number;
+
+  // Latency data
+  latency: LatencyMetrics;
+
+  // Resource usage
+  resources: ResourceMetrics;
+
+  // Additional counters
+  poolOverflow: number;
+  upstreamConnections: number;
+}
+
+export const testConfiguration: TestConfiguration = {
+  rps: 10000,
+  connections: 100,
+  duration: 30,
+  cpuLimit: '1000m',
+  memoryLimit: '2000Mi'
+};
+
+export const benchmarkResults: TestResult[] = [
+  {
+    testName: 'scaling up httproutes to 10 with 2 routes per hostname',
+    routes: 10,
+    routesPerHostname: 2,
+    phase: 'scaling-up',
+    throughput: 5440.31,
+    totalRequests: 163209,
+    latency: {
+      min: 335,
+      mean: 6565,
+      max: 66668,
+      pstdev: 11480,
+      percentiles: {
+        p50: 3258,
+        p75: 5079,
+        p80: 5722,
+        p90: 8679,
+        p95: 45924,
+        p99: 53512,
+        p999: 58220
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 128.02, max: 151.26, mean: 147.41 },
+        cpu: { min: 0.27, max: 0.67, mean: 0.45 }
+      },
+      envoyProxy: {
+        memory: { min: 0.00, max: 26.92, mean: 22.58 },
+        cpu: { min: 0.00, max: 99.73, mean: 6.02 }
+      }
+    },
+    poolOverflow: 362,
+    upstreamConnections: 38
+  },
+  {
+    testName: 'scaling up httproutes to 50 with 10 routes per hostname',
+    routes: 50,
+    routesPerHostname: 10,
+    phase: 'scaling-up',
+    throughput: 5429.88,
+    totalRequests: 162900,
+    latency: {
+      min: 345,
+      mean: 6468,
+      max: 70791,
+      pstdev: 11793,
+      percentiles: {
+        p50: 3170,
+        p75: 4794,
+        p80: 5311,
+        p90: 7534,
+        p95: 47400,
+        p99: 53536,
+        p999: 58034
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 151.26, max: 170.78, mean: 161.92 },
+        cpu: { min: 0.40, max: 4.33, mean: 0.97 }
+      },
+      envoyProxy: {
+        memory: { min: 26.73, max: 33.13, mean: 31.63 },
+        cpu: { min: 0.00, max: 99.94, mean: 3.35 }
+      }
+    },
+    poolOverflow: 363,
+    upstreamConnections: 37
+  },
+  {
+    testName: 'scaling up httproutes to 100 with 20 routes per hostname',
+    routes: 100,
+    routesPerHostname: 20,
+    phase: 'scaling-up',
+    throughput: 5499.86,
+    totalRequests: 164996,
+    latency: {
+      min: 391,
+      mean: 8147,
+      max: 99663,
+      pstdev: 13319,
+      percentiles: {
+        p50: 3957,
+        p75: 6308,
+        p80: 7120,
+        p90: 11799,
+        p95: 49942,
+        p99: 56190,
+        p999: 62709
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 161.19, max: 165.52, mean: 163.96 },
+        cpu: { min: 0.40, max: 8.67, mean: 1.36 }
+      },
+      envoyProxy: {
+        memory: { min: 32.98, max: 39.18, mean: 38.14 },
+        cpu: { min: 0.00, max: 99.97, mean: 8.67 }
+      }
+    },
+    poolOverflow: 353,
+    upstreamConnections: 47
+  },
+  {
+    testName: 'scaling up httproutes to 300 with 60 routes per hostname',
+    routes: 300,
+    routesPerHostname: 60,
+    phase: 'scaling-up',
+    throughput: 5335.10,
+    totalRequests: 160053,
+    latency: {
+      min: 365,
+      mean: 6734,
+      max: 90963,
+      pstdev: 12096,
+      percentiles: {
+        p50: 3228,
+        p75: 5042,
+        p80: 5649,
+        p90: 8465,
+        p95: 47704,
+        p99: 54396,
+        p999: 61714
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 183.87, max: 223.25, mean: 206.96 },
+        cpu: { min: 0.47, max: 79.87, mean: 3.90 }
+      },
+      envoyProxy: {
+        memory: { min: 57.15, max: 57.52, mean: 57.34 },
+        cpu: { min: 0.00, max: 99.97, mean: 13.49 }
+      }
+    },
+    poolOverflow: 362,
+    upstreamConnections: 38
+  },
+  {
+    testName: 'scaling up httproutes to 500 with 100 routes per hostname',
+    routes: 500,
+    routesPerHostname: 100,
+    phase: 'scaling-up',
+    throughput: 5256.52,
+    totalRequests: 157696,
+    latency: {
+      min: 389,
+      mean: 6320,
+      max: 77848,
+      pstdev: 11829,
+      percentiles: {
+        p50: 2974,
+        p75: 4705,
+        p80: 5292,
+        p90: 7729,
+        p95: 47173,
+        p99: 54317,
+        p999: 64679
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 186.16, max: 199.19, mean: 195.68 },
+        cpu: { min: 0.40, max: 1.20, mean: 0.75 }
+      },
+      envoyProxy: {
+        memory: { min: 63.26, max: 79.43, mean: 79.04 },
+        cpu: { min: 0.00, max: 99.86, mean: 17.64 }
+      }
+    },
+    poolOverflow: 365,
+    upstreamConnections: 35
+  },
+  {
+    testName: 'scaling up httproutes to 1000 with 200 routes per hostname',
+    routes: 1000,
+    routesPerHostname: 200,
+    phase: 'scaling-up',
+    throughput: 5280.09,
+    totalRequests: 158409,
+    latency: {
+      min: 387,
+      mean: 6871,
+      max: 94064,
+      pstdev: 12441,
+      percentiles: {
+        p50: 3186,
+        p75: 5019,
+        p80: 5651,
+        p90: 8766,
+        p95: 48361,
+        p99: 55758,
+        p999: 67403
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 230.81, max: 243.68, mean: 238.65 },
+        cpu: { min: 0.13, max: 1.13, mean: 0.80 }
+      },
+      envoyProxy: {
+        memory: { min: 127.63, max: 127.86, mean: 127.72 },
+        cpu: { min: 0.00, max: 85.57, mean: 6.19 }
+      }
+    },
+    poolOverflow: 362,
+    upstreamConnections: 38
+  },
+  // Scaling down tests
+  {
+    testName: 'scaling down httproutes to 500 with 100 routes per hostname',
+    routes: 500,
+    routesPerHostname: 100,
+    phase: 'scaling-down',
+    throughput: 5334.03,
+    totalRequests: 160024,
+    latency: {
+      min: 392,
+      mean: 6782,
+      max: 132493,
+      pstdev: 12373,
+      percentiles: {
+        p50: 3182,
+        p75: 4977,
+        p80: 5586,
+        p90: 8359,
+        p95: 48365,
+        p99: 55252,
+        p999: 64712
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 203.37, max: 217.03, mean: 209.04 },
+        cpu: { min: 0.67, max: 5.67, mean: 1.33 }
+      },
+      envoyProxy: {
+        memory: { min: 127.65, max: 127.84, mean: 127.72 },
+        cpu: { min: 0.00, max: 99.86, mean: 9.91 }
+      }
+    },
+    poolOverflow: 362,
+    upstreamConnections: 38
+  },
+  {
+    testName: 'scaling down httproutes to 300 with 60 routes per hostname',
+    routes: 300,
+    routesPerHostname: 60,
+    phase: 'scaling-down',
+    throughput: 5360.33,
+    totalRequests: 160815,
+    latency: {
+      min: 354,
+      mean: 6538,
+      max: 92344,
+      pstdev: 12045,
+      percentiles: {
+        p50: 3068,
+        p75: 4770,
+        p80: 5341,
+        p90: 7974,
+        p95: 47742,
+        p99: 54480,
+        p999: 62144
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 180.27, max: 192.65, mean: 189.01 },
+        cpu: { min: 0.67, max: 46.53, mean: 4.41 }
+      },
+      envoyProxy: {
+        memory: { min: 127.66, max: 127.84, mean: 127.72 },
+        cpu: { min: 0.00, max: 100.03, mean: 9.14 }
+      }
+    },
+    poolOverflow: 363,
+    upstreamConnections: 37
+  },
+  {
+    testName: 'scaling down httproutes to 100 with 20 routes per hostname',
+    routes: 100,
+    routesPerHostname: 20,
+    phase: 'scaling-down',
+    throughput: 5452.96,
+    totalRequests: 163589,
+    latency: {
+      min: 395,
+      mean: 7694,
+      max: 97460,
+      pstdev: 12949,
+      percentiles: {
+        p50: 3636,
+        p75: 5828,
+        p80: 6627,
+        p90: 10929,
+        p95: 49506,
+        p99: 55681,
+        p999: 62369
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 166.64, max: 195.48, mean: 174.79 },
+        cpu: { min: 0.80, max: 38.20, mean: 5.63 }
+      },
+      envoyProxy: {
+        memory: { min: 111.80, max: 112.36, mean: 111.95 },
+        cpu: { min: 0.00, max: 35.17, mean: 2.77 }
+      }
+    },
+    poolOverflow: 356,
+    upstreamConnections: 44
+  },
+  {
+    testName: 'scaling down httproutes to 50 with 10 routes per hostname',
+    routes: 50,
+    routesPerHostname: 10,
+    phase: 'scaling-down',
+    throughput: 5506.49,
+    totalRequests: 165195,
+    latency: {
+      min: 386,
+      mean: 8319,
+      max: 85860,
+      pstdev: 13567,
+      percentiles: {
+        p50: 3951,
+        p75: 6305,
+        p80: 7155,
+        p90: 12741,
+        p95: 50714,
+        p99: 57303,
+        p999: 63928
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 165.63, max: 175.23, mean: 169.06 },
+        cpu: { min: 0.80, max: 7.53, mean: 1.54 }
+      },
+      envoyProxy: {
+        memory: { min: 111.91, max: 121.36, mean: 113.46 },
+        cpu: { min: 0.00, max: 99.75, mean: 7.62 }
+      }
+    },
+    poolOverflow: 352,
+    upstreamConnections: 48
+  },
+  {
+    testName: 'scaling down httproutes to 10 with 2 routes per hostname',
+    routes: 10,
+    routesPerHostname: 2,
+    phase: 'scaling-down',
+    throughput: 5430.18,
+    totalRequests: 162909,
+    latency: {
+      min: 376,
+      mean: 6679,
+      max: 79630,
+      pstdev: 12142,
+      percentiles: {
+        p50: 3147,
+        p75: 5015,
+        p80: 5630,
+        p90: 8374,
+        p95: 48377,
+        p99: 54654,
+        p999: 59858
+      }
+    },
+    resources: {
+      envoyGateway: {
+        memory: { min: 164.61, max: 169.75, mean: 165.39 },
+        cpu: { min: 0.80, max: 3.47, mean: 1.14 }
+      },
+      envoyProxy: {
+        memory: { min: 121.22, max: 121.61, mean: 121.30 },
+        cpu: { min: 0.00, max: 99.74, mean: 8.02 }
+      }
+    },
+    poolOverflow: 362,
+    upstreamConnections: 38
+  }
+];
+
+// Summary data for aggregated views
+export const performanceSummary = {
+  totalTests: benchmarkResults.length,
+  scaleUpTests: benchmarkResults.filter(r => r.phase === 'scaling-up').length,
+  scaleDownTests: benchmarkResults.filter(r => r.phase === 'scaling-down').length,
+  maxRoutes: Math.max(...benchmarkResults.map(r => r.routes)),
+  minRoutes: Math.min(...benchmarkResults.map(r => r.routes)),
+  avgThroughput: benchmarkResults.reduce((sum, r) => sum + r.throughput, 0) / benchmarkResults.length,
+  avgLatency: benchmarkResults.reduce((sum, r) => sum + r.latency.mean, 0) / benchmarkResults.length
+};
+
+// Latency percentile comparison data
+export const latencyPercentileComparison = benchmarkResults.map(result => ({
+  routes: result.routes,
+  phase: result.phase,
+  p50: result.latency.percentiles.p50 / 1000, // convert to ms
+  p75: result.latency.percentiles.p75 / 1000,
+  p90: result.latency.percentiles.p90 / 1000,
+  p95: result.latency.percentiles.p95 / 1000,
+  p99: result.latency.percentiles.p99 / 1000,
+  p999: result.latency.percentiles.p999 / 1000
+}));
+
+// Resource usage trends
+export const resourceTrends = benchmarkResults.map(result => ({
+  routes: result.routes,
+  phase: result.phase,
+  envoyGatewayMemory: result.resources.envoyGateway.memory.mean,
+  envoyGatewayCpu: result.resources.envoyGateway.cpu.mean,
+  envoyProxyMemory: result.resources.envoyProxy.memory.mean,
+  envoyProxyCpu: result.resources.envoyProxy.cpu.mean
+}));
+
+// Performance comparison matrix
+export const performanceMatrix = benchmarkResults.map(result => ({
+  testName: result.testName,
+  routes: result.routes,
+  phase: result.phase,
+  throughput: result.throughput,
+  meanLatency: result.latency.mean / 1000, // convert to ms
+  p95Latency: result.latency.percentiles.p95 / 1000, // convert to ms
+  totalMemory: result.resources.envoyGateway.memory.mean + result.resources.envoyProxy.memory.mean,
+  totalCpu: result.resources.envoyGateway.cpu.mean + result.resources.envoyProxy.cpu.mean
+}));
diff --git a/site/tools/benchmark-dashboard/src/data/index.ts b/site/tools/benchmark-dashboard/src/data/index.ts
new file mode 100644
index 000000000..44e91d302
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/index.ts
@@ -0,0 +1,219 @@
+// Centralized benchmark data manager
+import {
+  BenchmarkDataset,
+  TestSuite,
+  PerformanceComparison,
+  LatencyComparison,
+  ResourceComparison
+} from './types';
+import { benchmarkData as v133TestSuite } from './versions/v1.3.3';
+import { benchmarkData as v140TestSuite } from './versions/v1.4.0';
+import { benchmarkData as v141TestSuite } from './versions/v1.4.1';
+import { benchmarkData as v132TestSuite } from './versions/v1.3.2';
+import { benchmarkData as v131TestSuite } from './versions/v1.3.1';
+import { benchmarkData as v130TestSuite } from './versions/v1.3.0';
+import { benchmarkData as v128TestSuite } from './versions/v1.2.8';
+import { benchmarkData as v127TestSuite } from './versions/v1.2.7';
+import { benchmarkData as v126TestSuite } from './versions/v1.2.6';
+import { benchmarkData as v125TestSuite } from './versions/v1.2.5';
+import { benchmarkData as v124TestSuite } from './versions/v1.2.4';
+import { benchmarkData as v123TestSuite } from './versions/v1.2.3';
+import { benchmarkData as v122TestSuite } from './versions/v1.2.2';
+import { benchmarkData as v121TestSuite } from './versions/v1.2.1';
+import { benchmarkData as v120TestSuite } from './versions/v1.2.0';
+import { benchmarkData as v114TestSuite } from './versions/v1.1.4';
+import { benchmarkData as v113TestSuite } from './versions/v1.1.3';
+import { benchmarkData as v112TestSuite } from './versions/v1.1.2';
+import { benchmarkData as v111TestSuite } from './versions/v1.1.1';
+import { benchmarkData as v110TestSuite } from './versions/v1.1.0';
+
+// Import all version data
+export const allTestSuites: TestSuite[] = [
+  v141TestSuite,
+  v140TestSuite,
+  v133TestSuite,
+  v132TestSuite,
+  v131TestSuite,
+  v130TestSuite,
+  v128TestSuite,
+  v127TestSuite,
+  v126TestSuite,
+  v125TestSuite,
+  v124TestSuite,
+  v123TestSuite,
+  v122TestSuite,
+  v121TestSuite,
+  v120TestSuite,
+  v114TestSuite,
+  v113TestSuite,
+  v112TestSuite,
+  v111TestSuite,
+  v110TestSuite,
+];
+
+// Complete dataset
+export const benchmarkDataset: BenchmarkDataset = {
+  testSuites: allTestSuites
+};
+
+// ========================================
+// DATA PROCESSING UTILITIES
+// ========================================
+
+// Get all available versions
+export const getAvailableVersions = (): string[] => {
+  return allTestSuites.map(suite => suite.metadata.version);
+};
+
+// Get all available run IDs
+export const getAvailableRunIds = (): string[] => {
+  return allTestSuites.map(suite => suite.metadata.runId);
+};
+
+// Filter data by version(s)
+export const getDataByVersions = (versions: string[]): TestSuite[] => {
+  return allTestSuites.filter(suite => versions.includes(suite.metadata.version));
+};
+
+// Filter data by date range
+export const getDataByDateRange = (startDate: string, endDate: string): TestSuite[] => {
+  return allTestSuites.filter(suite => {
+    const suiteDate = new Date(suite.metadata.date);
+    return suiteDate >= new Date(startDate) && suiteDate <= new Date(endDate);
+  });
+};
+
+// Get latest data for each version
+export const getLatestDataPerVersion = (): TestSuite[] => {
+  const versionMap = new Map<string, TestSuite>();
+
+  allTestSuites.forEach(suite => {
+    const existing = versionMap.get(suite.metadata.version);
+    if (!existing || new Date(suite.metadata.date) > new Date(existing.metadata.date)) {
+      versionMap.set(suite.metadata.version, suite);
+    }
+  });
+
+  return Array.from(versionMap.values());
+};
+
+// ========================================
+// COMPARISON DATA GENERATORS
+// ========================================
+
+// Generate performance comparison data across versions
+export const generatePerformanceComparison = (versions?: string[]): PerformanceComparison[] => {
+  const suitesToProcess = versions ? getDataByVersions(versions) : allTestSuites;
+
+  return suitesToProcess.flatMap(suite =>
+    suite.results.map(result => ({
+      version: suite.metadata.version,
+      runId: suite.metadata.runId,
+      date: suite.metadata.date,
+      routes: result.routes,
+      phase: result.phase,
+      throughput: result.throughput,
+      meanLatency: result.latency.mean / 1000, // convert to ms
+      p95Latency: result.latency.percentiles.p95 / 1000, // convert to ms
+      totalMemory: result.resources.envoyGateway.memory.mean + result.resources.envoyProxy.memory.mean,
+      totalCpu: result.resources.envoyGateway.cpu.mean + result.resources.envoyProxy.cpu.mean
+    }))
+  );
+};
+
+// Generate latency comparison data across versions
+export const generateLatencyComparison = (versions?: string[]): LatencyComparison[] => {
+  const suitesToProcess = versions ? getDataByVersions(versions) : allTestSuites;
+
+  return suitesToProcess.flatMap(suite =>
+    suite.results.map(result => ({
+      version: suite.metadata.version,
+      runId: suite.metadata.runId,
+      routes: result.routes,
+      phase: result.phase,
+      p50: result.latency.percentiles.p50 / 1000, // convert to ms
+      p75: result.latency.percentiles.p75 / 1000,
+      p90: result.latency.percentiles.p90 / 1000,
+      p95: result.latency.percentiles.p95 / 1000,
+      p99: result.latency.percentiles.p99 / 1000,
+      p999: result.latency.percentiles.p999 / 1000
+    }))
+  );
+};
+
+// Generate resource comparison data across versions
+export const generateResourceComparison = (versions?: string[]): ResourceComparison[] => {
+  const suitesToProcess = versions ? getDataByVersions(versions) : allTestSuites;
+
+  return suitesToProcess.flatMap(suite =>
+    suite.results.map(result => ({
+      version: suite.metadata.version,
+      runId: suite.metadata.runId,
+      routes: result.routes,
+      phase: result.phase,
+      envoyGatewayMemory: result.resources.envoyGateway.memory.mean,
+      envoyGatewayCpu: result.resources.envoyGateway.cpu.mean,
+      envoyProxyMemory: result.resources.envoyProxy.memory.mean,
+      envoyProxyCpu: result.resources.envoyProxy.cpu.mean
+    }))
+  );
+};
+
+// ========================================
+// BACKWARD COMPATIBILITY
+// ========================================
+// Export data in the old format for existing components
+
+// Get the latest v1.4.1 data for backward compatibility
+const currentV141Suite = allTestSuites.find(suite => suite.metadata.version === '1.4.1');
+
+export const benchmarkResults = currentV141Suite?.results || [];
+export const testConfiguration = currentV141Suite?.metadata.testConfiguration || {
+  rps: 10000,
+  connections: 100,
+  duration: 30,
+  cpuLimit: '1000m',
+  memoryLimit: '2000Mi'
+};
+
+// Generate backward-compatible processed data
+export const performanceSummary = {
+  totalTests: benchmarkResults.length,
+  scaleUpTests: benchmarkResults.filter(r => r.phase === 'scaling-up').length,
+  scaleDownTests: benchmarkResults.filter(r => r.phase === 'scaling-down').length,
+  maxRoutes: benchmarkResults.length > 0 ? Math.max(...benchmarkResults.map(r => r.routes)) : 0,
+  minRoutes: benchmarkResults.length > 0 ? Math.min(...benchmarkResults.map(r => r.routes)) : 0,
+  avgThroughput: benchmarkResults.length > 0 ? benchmarkResults.reduce((sum, r) => sum + r.throughput, 0) / benchmarkResults.length : 0,
+  avgLatency: benchmarkResults.length > 0 ? benchmarkResults.reduce((sum, r) => sum + r.latency.mean, 0) / benchmarkResults.length : 0
+};
+
+export const latencyPercentileComparison = benchmarkResults.map(result => ({
+  routes: result.routes,
+  phase: result.phase,
+  p50: result.latency.percentiles.p50 / 1000, // convert to ms
+  p75: result.latency.percentiles.p75 / 1000,
+  p90: result.latency.percentiles.p90 / 1000,
+  p95: result.latency.percentiles.p95 / 1000,
+  p99: result.latency.percentiles.p99 / 1000,
+  p999: result.latency.percentiles.p999 / 1000
+}));
+
+export const resourceTrends = benchmarkResults.map(result => ({
+  routes: result.routes,
+  phase: result.phase,
+  envoyGatewayMemory: result.resources.envoyGateway.memory.mean,
+  envoyGatewayCpu: result.resources.envoyGateway.cpu.mean,
+  envoyProxyMemory: result.resources.envoyProxy.memory.mean,
+  envoyProxyCpu: result.resources.envoyProxy.cpu.mean
+}));
+
+export const performanceMatrix = benchmarkResults.map(result => ({
+  testName: result.testName,
+  routes: result.routes,
+  phase: result.phase,
+  throughput: result.throughput,
+  meanLatency: result.latency.mean / 1000, // convert to ms
+  p95Latency: result.latency.percentiles.p95 / 1000, // convert to ms
+  totalMemory: result.resources.envoyGateway.memory.mean + result.resources.envoyProxy.memory.mean,
+  totalCpu: result.resources.envoyGateway.cpu.mean + result.resources.envoyProxy.cpu.mean
+}));
diff --git a/site/tools/benchmark-dashboard/src/data/types.ts b/site/tools/benchmark-dashboard/src/data/types.ts
new file mode 100644
index 000000000..71356c640
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/types.ts
@@ -0,0 +1,118 @@
+// Enhanced types to support multiple versions and test runs
+
+export interface TestConfiguration {
+  rps: number;
+  connections: number;
+  duration: number;
+  cpuLimit: string;
+  memoryLimit: string;
+}
+
+export interface LatencyMetrics {
+  min: number; // microseconds
+  mean: number; // microseconds
+  max: number; // microseconds
+  pstdev: number; // microseconds
+  percentiles: {
+    p50: number;
+    p75: number;
+    p80: number;
+    p90: number;
+    p95: number;
+    p99: number;
+    p999: number;
+  };
+}
+
+export interface ResourceMetrics {
+  envoyGateway: {
+    memory: { min: number; max: number; mean: number }; // MiB
+    cpu: { min: number; max: number; mean: number }; // percentage
+  };
+  envoyProxy: {
+    memory: { min: number; max: number; mean: number }; // MiB
+    cpu: { min: number; max: number; mean: number }; // percentage
+  };
+}
+
+export interface TestResult {
+  testName: string;
+  routes: number;
+  routesPerHostname: number;
+  phase: 'scaling-up' | 'scaling-down';
+
+  // Performance metrics
+  throughput: number; // requests per second
+  totalRequests: number;
+
+  // Latency data
+  latency: LatencyMetrics;
+
+  // Resource usage
+  resources: ResourceMetrics;
+
+  // Additional counters
+  poolOverflow: number;
+  upstreamConnections: number;
+}
+
+// NEW: Version/Run metadata
+export interface TestRunMetadata {
+  version: string; // e.g., "1.4.1", "1.5.0", "main"
+  runId: string; // unique identifier for this test run
+  date: string; // ISO date string
+  environment?: string; // e.g., "staging", "prod", "local"
+  description?: string; // optional description of this run
+  gitCommit?: string; // git commit hash if applicable
+  downloadUrl?: string; // URL to download the raw benchmark report ZIP file
+  testConfiguration: TestConfiguration;
+}
+
+// NEW: Complete test suite data
+export interface TestSuite {
+  metadata: TestRunMetadata;
+  results: TestResult[];
+}
+
+// NEW: Multi-version dataset
+export interface BenchmarkDataset {
+  testSuites: TestSuite[];
+}
+
+// Utility types for data processing
+export interface PerformanceComparison {
+  version: string;
+  runId: string;
+  date: string;
+  routes: number;
+  phase: 'scaling-up' | 'scaling-down';
+  throughput: number;
+  meanLatency: number;
+  p95Latency: number;
+  totalMemory: number;
+  totalCpu: number;
+}
+
+export interface LatencyComparison {
+  version: string;
+  runId: string;
+  routes: number;
+  phase: 'scaling-up' | 'scaling-down';
+  p50: number;
+  p75: number;
+  p90: number;
+  p95: number;
+  p99: number;
+  p999: number;
+}
+
+export interface ResourceComparison {
+  version: string;
+  runId: string;
+  routes: number;
+  phase: 'scaling-up' | 'scaling-down';
+  envoyGatewayMemory: number;
+  envoyGatewayCpu: number;
+  envoyProxyMemory: number;
+  envoyProxyCpu: number;
+}
diff --git a/site/tools/benchmark-dashboard/src/data/versions/template.ts b/site/tools/benchmark-dashboard/src/data/versions/template.ts
new file mode 100644
index 000000000..5dd544b65
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/template.ts
@@ -0,0 +1,90 @@
+// Template for new version data - Copy this file and rename it
+// Example: v1.6.0.ts, v1.7.0.ts, main-branch.ts, etc.
+
+import { TestSuite } from '../types';
+
+export const vXXXTestSuite: TestSuite = {
+  metadata: {
+    version: '1.X.X', // Update this
+    runId: 'v1.X.X-description-YYYY-MM-DD', // Update this with unique ID
+    date: '2024-XX-XXTXX:XX:XXZ', // Update with actual test date
+    environment: 'test', // or 'staging', 'prod', etc.
+    description: 'Description of this benchmark run',
+    gitCommit: 'abc123...', // Optional: git commit hash
+    testConfiguration: {
+      rps: 10000, // Update if different
+      connections: 100, // Update if different
+      duration: 30, // Update if different
+      cpuLimit: '1000m', // Update if different
+      memoryLimit: '2000Mi' // Update if different
+    }
+  },
+  results: [
+    // Copy your test results here in the same format as v1.4.1
+    // Each test result should follow the TestResult interface
+    {
+      testName: 'scaling up httproutes to 10 with 2 routes per hostname',
+      routes: 10,
+      routesPerHostname: 2,
+      phase: 'scaling-up',
+      throughput: 0, // Replace with actual data
+      totalRequests: 0, // Replace with actual data
+      latency: {
+        min: 0, // Replace with actual data
+        mean: 0, // Replace with actual data
+        max: 0, // Replace with actual data
+        pstdev: 0, // Replace with actual data
+        percentiles: {
+          p50: 0, // Replace with actual data
+          p75: 0, // Replace with actual data
+          p80: 0, // Replace with actual data
+          p90: 0, // Replace with actual data
+          p95: 0, // Replace with actual data
+          p99: 0, // Replace with actual data
+          p999: 0 // Replace with actual data
+        }
+      },
+      resources: {
+        envoyGateway: {
+          memory: { min: 0, max: 0, mean: 0 }, // Replace with actual data
+          cpu: { min: 0, max: 0, mean: 0 } // Replace with actual data
+        },
+        envoyProxy: {
+          memory: { min: 0, max: 0, mean: 0 }, // Replace with actual data
+          cpu: { min: 0, max: 0, mean: 0 } // Replace with actual data
+        }
+      },
+      poolOverflow: 0, // Replace with actual data
+      upstreamConnections: 0 // Replace with actual data
+    }
+    // Add more test results...
+  ]
+};
+
+/*
+STEPS TO ADD A NEW VERSION:
+
+1. Copy this template file to a new file named after your version (e.g., v1.6.0.ts)
+
+2. Update the export name (e.g., export const v160TestSuite)
+
+3. Fill in the metadata:
+   - version: The version string (e.g., '1.5.0')
+   - runId: Unique identifier for this run
+   - date: ISO date string when tests were run
+   - description: Human-readable description
+   - testConfiguration: Update if test parameters changed
+
+4. Replace all the placeholder data (000.00, 0000, etc.) with your actual test results
+
+5. Add your new export to src/data/index.ts:
+   import { v160TestSuite } from './versions/v1.6.0';
+
+   export const allTestSuites: TestSuite[] = [
+     v133TestSuite,
+     v141TestSuite,
+     v160TestSuite, // Add your new suite here
+   ];
+
+6. Your new data will automatically be available in all comparison functions!
+*/
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.1.0.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.1.0.ts
new file mode 100644
index 000000000..40952e5b2
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.1.0.ts
@@ -0,0 +1,485 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.1.0
+// Generated on 2025-06-17T19:58:49.977Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.1.0",
+    "runId": "1.1.0-1750190329977",
+    "date": "2024-07-23",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.1.0",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6181.97,
+      "totalRequests": 185463,
+      "latency": {
+        "min": 362,
+        "mean": 5902,
+        "max": 73084,
+        "pstdev": 11039,
+        "percentiles": {
+          "p50": 2765,
+          "p75": 4364,
+          "p80": 4935,
+          "p90": 7504,
+          "p95": 41244,
+          "p99": 53929,
+          "p999": 61147
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 86.2,
+            "max": 86.2,
+            "mean": 86.2
+          },
+          "cpu": {
+            "min": 1.4333333333333333,
+            "max": 1.4333333333333333,
+            "mean": 1.4333333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 24.09,
+            "max": 24.09,
+            "mean": 24.09
+          },
+          "cpu": {
+            "min": 101.36666666666667,
+            "max": 101.36666666666667,
+            "mean": 101.36666666666667
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6103.97,
+      "totalRequests": 183121,
+      "latency": {
+        "min": 354,
+        "mean": 5852,
+        "max": 75943,
+        "pstdev": 11382,
+        "percentiles": {
+          "p50": 2681,
+          "p75": 4083,
+          "p80": 4601,
+          "p90": 6825,
+          "p95": 46262,
+          "p99": 53862,
+          "p999": 60651
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 100.14,
+            "max": 100.14,
+            "mean": 100.14
+          },
+          "cpu": {
+            "min": 7.233333333333333,
+            "max": 7.233333333333333,
+            "mean": 7.233333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.25,
+            "max": 32.25,
+            "mean": 32.25
+          },
+          "cpu": {
+            "min": 203.6,
+            "max": 203.6,
+            "mean": 203.6
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6074.87,
+      "totalRequests": 182247,
+      "latency": {
+        "min": 371,
+        "mean": 5877,
+        "max": 94171,
+        "pstdev": 11399,
+        "percentiles": {
+          "p50": 2732,
+          "p75": 4191,
+          "p80": 4677,
+          "p90": 6801,
+          "p95": 46481,
+          "p99": 53866,
+          "p999": 61036
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 114.69,
+            "max": 114.69,
+            "mean": 114.69
+          },
+          "cpu": {
+            "min": 30,
+            "max": 30,
+            "mean": 30
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 46.42,
+            "max": 46.42,
+            "mean": 46.42
+          },
+          "cpu": {
+            "min": 308.70000000000005,
+            "max": 308.70000000000005,
+            "mean": 308.70000000000005
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5993.57,
+      "totalRequests": 179811,
+      "latency": {
+        "min": 368,
+        "mean": 6123,
+        "max": 96571,
+        "pstdev": 11831,
+        "percentiles": {
+          "p50": 2753,
+          "p75": 4261,
+          "p80": 4799,
+          "p90": 7247,
+          "p95": 47368,
+          "p99": 55248,
+          "p999": 66586
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 762.8,
+            "max": 762.8,
+            "mean": 762.8
+          },
+          "cpu": {
+            "min": 600.8666666666667,
+            "max": 600.8666666666667,
+            "mean": 600.8666666666667
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 152.78,
+            "max": 152.78,
+            "mean": 152.78
+          },
+          "cpu": {
+            "min": 488.70000000000005,
+            "max": 488.70000000000005,
+            "mean": 488.70000000000005
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5812.8,
+      "totalRequests": 174396,
+      "latency": {
+        "min": 388,
+        "mean": 6310,
+        "max": 95719,
+        "pstdev": 12246,
+        "percentiles": {
+          "p50": 2729,
+          "p75": 4334,
+          "p80": 4905,
+          "p90": 7607,
+          "p95": 47970,
+          "p99": 56811,
+          "p999": 68165
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 1593.56,
+            "max": 1593.56,
+            "mean": 1593.56
+          },
+          "cpu": {
+            "min": 36.56666666666667,
+            "max": 36.56666666666667,
+            "mean": 36.56666666666667
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 289.79,
+            "max": 289.79,
+            "mean": 289.79
+          },
+          "cpu": {
+            "min": 715.6333333333333,
+            "max": 715.6333333333333,
+            "mean": 715.6333333333333
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5916.93,
+      "totalRequests": 177517,
+      "latency": {
+        "min": 385,
+        "mean": 6352,
+        "max": 82747,
+        "pstdev": 12011,
+        "percentiles": {
+          "p50": 2822,
+          "p75": 4461,
+          "p80": 5061,
+          "p90": 7769,
+          "p95": 47847,
+          "p99": 55068,
+          "p999": 62578
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 124.07,
+            "max": 124.07,
+            "mean": 124.07
+          },
+          "cpu": {
+            "min": 519.6333333333332,
+            "max": 519.6333333333332,
+            "mean": 519.6333333333332
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 284.03,
+            "max": 284.03,
+            "mean": 284.03
+          },
+          "cpu": {
+            "min": 1194.8666666666666,
+            "max": 1194.8666666666666,
+            "mean": 1194.8666666666666
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5876.35,
+      "totalRequests": 176294,
+      "latency": {
+        "min": 371,
+        "mean": 6226,
+        "max": 83869,
+        "pstdev": 11816,
+        "percentiles": {
+          "p50": 2770,
+          "p75": 4396,
+          "p80": 5000,
+          "p90": 7848,
+          "p95": 47163,
+          "p99": 55156,
+          "p999": 64434
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 131.62,
+            "max": 131.62,
+            "mean": 131.62
+          },
+          "cpu": {
+            "min": 513.6,
+            "max": 513.6,
+            "mean": 513.6
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 291.73,
+            "max": 291.73,
+            "mean": 291.73
+          },
+          "cpu": {
+            "min": 1092.9333333333334,
+            "max": 1092.9333333333334,
+            "mean": 1092.9333333333334
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 4820.43,
+      "totalRequests": 144617,
+      "latency": {
+        "min": 342,
+        "mean": 7088,
+        "max": 172031,
+        "pstdev": 12642,
+        "percentiles": {
+          "p50": 3156,
+          "p75": 5480,
+          "p80": 6443,
+          "p90": 12007,
+          "p95": 39675,
+          "p99": 63842,
+          "p999": 86532
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 374.36,
+            "max": 374.36,
+            "mean": 374.36
+          },
+          "cpu": {
+            "min": 462.8,
+            "max": 462.8,
+            "mean": 462.8
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 289.98,
+            "max": 289.98,
+            "mean": 289.98
+          },
+          "cpu": {
+            "min": 980.4,
+            "max": 980.4,
+            "mean": 980.4
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5746.71,
+      "totalRequests": 172402,
+      "latency": {
+        "min": 386,
+        "mean": 6313,
+        "max": 101535,
+        "pstdev": 11578,
+        "percentiles": {
+          "p50": 2875,
+          "p75": 4579,
+          "p80": 5222,
+          "p90": 8617,
+          "p95": 44341,
+          "p99": 54996,
+          "p999": 67178
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 670.44,
+            "max": 670.44,
+            "mean": 670.44
+          },
+          "cpu": {
+            "min": 24.333333333333332,
+            "max": 24.333333333333332,
+            "mean": 24.333333333333332
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 285.86,
+            "max": 285.86,
+            "mean": 285.86
+          },
+          "cpu": {
+            "min": 824.5666666666667,
+            "max": 824.5666666666667,
+            "mean": 824.5666666666667
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.1.1.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.1.1.ts
new file mode 100644
index 000000000..b70df8f9b
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.1.1.ts
@@ -0,0 +1,485 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.1.1
+// Generated on 2025-06-17T19:58:49.981Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.1.1",
+    "runId": "1.1.1-1750190329981",
+    "date": "2024-09-12",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.1.1",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6258.99,
+      "totalRequests": 187774,
+      "latency": {
+        "min": 333,
+        "mean": 5933,
+        "max": 71266,
+        "pstdev": 10816,
+        "percentiles": {
+          "p50": 2898,
+          "p75": 4513,
+          "p80": 5099,
+          "p90": 7661,
+          "p95": 40607,
+          "p99": 53149,
+          "p999": 58789
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 84.04,
+            "max": 84.04,
+            "mean": 84.04
+          },
+          "cpu": {
+            "min": 1.5333333333333334,
+            "max": 1.5333333333333334,
+            "mean": 1.5333333333333334
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.57,
+            "max": 25.57,
+            "mean": 25.57
+          },
+          "cpu": {
+            "min": 101.33333333333331,
+            "max": 101.33333333333331,
+            "mean": 101.33333333333331
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6118.28,
+      "totalRequests": 183552,
+      "latency": {
+        "min": 359,
+        "mean": 5828,
+        "max": 81178,
+        "pstdev": 11437,
+        "percentiles": {
+          "p50": 2646,
+          "p75": 4049,
+          "p80": 4561,
+          "p90": 6666,
+          "p95": 46723,
+          "p99": 53913,
+          "p999": 60094
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 101.33,
+            "max": 101.33,
+            "mean": 101.33
+          },
+          "cpu": {
+            "min": 6.8999999999999995,
+            "max": 6.8999999999999995,
+            "mean": 6.8999999999999995
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 33.75,
+            "max": 33.75,
+            "mean": 33.75
+          },
+          "cpu": {
+            "min": 203.6,
+            "max": 203.6,
+            "mean": 203.6
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6045.36,
+      "totalRequests": 181361,
+      "latency": {
+        "min": 377,
+        "mean": 5908,
+        "max": 88063,
+        "pstdev": 11539,
+        "percentiles": {
+          "p50": 2659,
+          "p75": 4143,
+          "p80": 4675,
+          "p90": 6863,
+          "p95": 46733,
+          "p99": 54091,
+          "p999": 63211
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 115.34,
+            "max": 115.34,
+            "mean": 115.34
+          },
+          "cpu": {
+            "min": 32.800000000000004,
+            "max": 32.800000000000004,
+            "mean": 32.800000000000004
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 47.79,
+            "max": 47.79,
+            "mean": 47.79
+          },
+          "cpu": {
+            "min": 308.96666666666664,
+            "max": 308.96666666666664,
+            "mean": 308.96666666666664
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5881.18,
+      "totalRequests": 176436,
+      "latency": {
+        "min": 327,
+        "mean": 6376,
+        "max": 130330,
+        "pstdev": 12048,
+        "percentiles": {
+          "p50": 2843,
+          "p75": 4548,
+          "p80": 5181,
+          "p90": 8168,
+          "p95": 47517,
+          "p99": 55470,
+          "p999": 66041
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 608.65,
+            "max": 608.65,
+            "mean": 608.65
+          },
+          "cpu": {
+            "min": 625.6666666666666,
+            "max": 625.6666666666666,
+            "mean": 625.6666666666666
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 152.29,
+            "max": 152.29,
+            "mean": 152.29
+          },
+          "cpu": {
+            "min": 492.5666666666667,
+            "max": 492.5666666666667,
+            "mean": 492.5666666666667
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5875.93,
+      "totalRequests": 176280,
+      "latency": {
+        "min": 381,
+        "mean": 6086,
+        "max": 86654,
+        "pstdev": 11932,
+        "percentiles": {
+          "p50": 2704,
+          "p75": 4181,
+          "p80": 4727,
+          "p90": 7177,
+          "p95": 47091,
+          "p99": 55814,
+          "p999": 68415
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 1308.52,
+            "max": 1308.52,
+            "mean": 1308.52
+          },
+          "cpu": {
+            "min": 39.49999999999999,
+            "max": 39.49999999999999,
+            "mean": 39.49999999999999
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 283.24,
+            "max": 283.24,
+            "mean": 283.24
+          },
+          "cpu": {
+            "min": 707.1333333333332,
+            "max": 707.1333333333332,
+            "mean": 707.1333333333332
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6077.56,
+      "totalRequests": 182327,
+      "latency": {
+        "min": 362,
+        "mean": 6197,
+        "max": 92372,
+        "pstdev": 11720,
+        "percentiles": {
+          "p50": 2824,
+          "p75": 4438,
+          "p80": 5000,
+          "p90": 7503,
+          "p95": 47110,
+          "p99": 54169,
+          "p999": 60426
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 121.13,
+            "max": 121.13,
+            "mean": 121.13
+          },
+          "cpu": {
+            "min": 544.5333333333334,
+            "max": 544.5333333333334,
+            "mean": 544.5333333333334
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 277.29,
+            "max": 277.29,
+            "mean": 277.29
+          },
+          "cpu": {
+            "min": 1206.4666666666665,
+            "max": 1206.4666666666665,
+            "mean": 1206.4666666666665
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6047.67,
+      "totalRequests": 181438,
+      "latency": {
+        "min": 370,
+        "mean": 6062,
+        "max": 92168,
+        "pstdev": 11743,
+        "percentiles": {
+          "p50": 2733,
+          "p75": 4268,
+          "p80": 4801,
+          "p90": 7226,
+          "p95": 47095,
+          "p99": 54886,
+          "p999": 61917
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 126.22,
+            "max": 126.22,
+            "mean": 126.22
+          },
+          "cpu": {
+            "min": 538.8333333333334,
+            "max": 538.8333333333334,
+            "mean": 538.8333333333334
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 285.62,
+            "max": 285.62,
+            "mean": 285.62
+          },
+          "cpu": {
+            "min": 1104.3000000000002,
+            "max": 1104.3000000000002,
+            "mean": 1104.3000000000002
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 4654.8,
+      "totalRequests": 139655,
+      "latency": {
+        "min": 336,
+        "mean": 4675,
+        "max": 107409,
+        "pstdev": 9843,
+        "percentiles": {
+          "p50": 2048,
+          "p75": 3459,
+          "p80": 4015,
+          "p90": 6531,
+          "p95": 19138,
+          "p99": 57518,
+          "p999": 73269
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 480.36,
+            "max": 480.36,
+            "mean": 480.36
+          },
+          "cpu": {
+            "min": 377,
+            "max": 377,
+            "mean": 377
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 289.51,
+            "max": 289.51,
+            "mean": 289.51
+          },
+          "cpu": {
+            "min": 969.2333333333332,
+            "max": 969.2333333333332,
+            "mean": 969.2333333333332
+          }
+        }
+      },
+      "poolOverflow": 377,
+      "upstreamConnections": 23
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5676.68,
+      "totalRequests": 170301,
+      "latency": {
+        "min": 376,
+        "mean": 6244,
+        "max": 153264,
+        "pstdev": 11618,
+        "percentiles": {
+          "p50": 2797,
+          "p75": 4618,
+          "p80": 5324,
+          "p90": 8807,
+          "p95": 40232,
+          "p99": 56496,
+          "p999": 73506
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 436.58,
+            "max": 436.58,
+            "mean": 436.58
+          },
+          "cpu": {
+            "min": 28.066666666666666,
+            "max": 28.066666666666666,
+            "mean": 28.066666666666666
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 283.47,
+            "max": 283.47,
+            "mean": 283.47
+          },
+          "cpu": {
+            "min": 813.3666666666667,
+            "max": 813.3666666666667,
+            "mean": 813.3666666666667
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.1.2.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.1.2.ts
new file mode 100644
index 000000000..7800d31c9
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.1.2.ts
@@ -0,0 +1,485 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.1.2
+// Generated on 2025-06-17T19:58:49.982Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.1.2",
+    "runId": "1.1.2-1750190329982",
+    "date": "2024-09-24",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.1.2",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5649.72,
+      "totalRequests": 169493,
+      "latency": {
+        "min": 356,
+        "mean": 6560,
+        "max": 72347,
+        "pstdev": 11796,
+        "percentiles": {
+          "p50": 3044,
+          "p75": 5011,
+          "p80": 5690,
+          "p90": 8937,
+          "p95": 46880,
+          "p99": 54560,
+          "p999": 59316
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 86.72,
+            "max": 86.72,
+            "mean": 86.72
+          },
+          "cpu": {
+            "min": 1.5666666666666667,
+            "max": 1.5666666666666667,
+            "mean": 1.5666666666666667
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 24.26,
+            "max": 24.26,
+            "mean": 24.26
+          },
+          "cpu": {
+            "min": 101.63333333333333,
+            "max": 101.63333333333333,
+            "mean": 101.63333333333333
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5594.14,
+      "totalRequests": 167826,
+      "latency": {
+        "min": 377,
+        "mean": 6225,
+        "max": 71024,
+        "pstdev": 11980,
+        "percentiles": {
+          "p50": 2812,
+          "p75": 4378,
+          "p80": 4905,
+          "p90": 7214,
+          "p95": 48160,
+          "p99": 54513,
+          "p999": 59850
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 106.76,
+            "max": 106.76,
+            "mean": 106.76
+          },
+          "cpu": {
+            "min": 7.7,
+            "max": 7.7,
+            "mean": 7.7
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.43,
+            "max": 32.43,
+            "mean": 32.43
+          },
+          "cpu": {
+            "min": 204.53333333333333,
+            "max": 204.53333333333333,
+            "mean": 204.53333333333333
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5523.65,
+      "totalRequests": 165711,
+      "latency": {
+        "min": 379,
+        "mean": 6455,
+        "max": 77815,
+        "pstdev": 12317,
+        "percentiles": {
+          "p50": 2868,
+          "p75": 4510,
+          "p80": 5086,
+          "p90": 7645,
+          "p95": 49127,
+          "p99": 55048,
+          "p999": 61448
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 149.03,
+            "max": 149.03,
+            "mean": 149.03
+          },
+          "cpu": {
+            "min": 29.333333333333332,
+            "max": 29.333333333333332,
+            "mean": 29.333333333333332
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 46.61,
+            "max": 46.61,
+            "mean": 46.61
+          },
+          "cpu": {
+            "min": 309.7666666666667,
+            "max": 309.7666666666667,
+            "mean": 309.7666666666667
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5554.01,
+      "totalRequests": 166624,
+      "latency": {
+        "min": 357,
+        "mean": 6246,
+        "max": 99753,
+        "pstdev": 12051,
+        "percentiles": {
+          "p50": 2841,
+          "p75": 4416,
+          "p80": 4960,
+          "p90": 7177,
+          "p95": 48371,
+          "p99": 54800,
+          "p999": 63275
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 375.51,
+            "max": 375.51,
+            "mean": 375.51
+          },
+          "cpu": {
+            "min": 615.1,
+            "max": 615.1,
+            "mean": 615.1
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 152.97,
+            "max": 152.97,
+            "mean": 152.97
+          },
+          "cpu": {
+            "min": 492.4666666666667,
+            "max": 492.4666666666667,
+            "mean": 492.4666666666667
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5475.04,
+      "totalRequests": 164256,
+      "latency": {
+        "min": 365,
+        "mean": 6546,
+        "max": 95539,
+        "pstdev": 12646,
+        "percentiles": {
+          "p50": 2834,
+          "p75": 4484,
+          "p80": 5075,
+          "p90": 7891,
+          "p95": 49397,
+          "p99": 56231,
+          "p999": 67629
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 1340.6,
+            "max": 1340.6,
+            "mean": 1340.6
+          },
+          "cpu": {
+            "min": 38.333333333333336,
+            "max": 38.333333333333336,
+            "mean": 38.333333333333336
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 281.71,
+            "max": 281.71,
+            "mean": 281.71
+          },
+          "cpu": {
+            "min": 718.0666666666666,
+            "max": 718.0666666666666,
+            "mean": 718.0666666666666
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5657.68,
+      "totalRequests": 169734,
+      "latency": {
+        "min": 355,
+        "mean": 7320,
+        "max": 87252,
+        "pstdev": 13162,
+        "percentiles": {
+          "p50": 3307,
+          "p75": 5218,
+          "p80": 5885,
+          "p90": 9252,
+          "p95": 50671,
+          "p99": 56332,
+          "p999": 62406
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 371.29,
+            "max": 371.29,
+            "mean": 371.29
+          },
+          "cpu": {
+            "min": 578.7666666666667,
+            "max": 578.7666666666667,
+            "mean": 578.7666666666667
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 273.57,
+            "max": 273.57,
+            "mean": 273.57
+          },
+          "cpu": {
+            "min": 1224,
+            "max": 1224,
+            "mean": 1224
+          }
+        }
+      },
+      "poolOverflow": 356,
+      "upstreamConnections": 44
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5587.8,
+      "totalRequests": 167636,
+      "latency": {
+        "min": 356,
+        "mean": 6346,
+        "max": 68095,
+        "pstdev": 12097,
+        "percentiles": {
+          "p50": 2890,
+          "p75": 4509,
+          "p80": 5041,
+          "p90": 7495,
+          "p95": 48560,
+          "p99": 54345,
+          "p999": 60436
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 342.8,
+            "max": 342.8,
+            "mean": 342.8
+          },
+          "cpu": {
+            "min": 573.3000000000001,
+            "max": 573.3000000000001,
+            "mean": 573.3000000000001
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 274.84,
+            "max": 274.84,
+            "mean": 274.84
+          },
+          "cpu": {
+            "min": 1122.2333333333333,
+            "max": 1122.2333333333333,
+            "mean": 1122.2333333333333
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 4098.74,
+      "totalRequests": 122966,
+      "latency": {
+        "min": 347,
+        "mean": 3660,
+        "max": 99745,
+        "pstdev": 7371,
+        "percentiles": {
+          "p50": 1658,
+          "p75": 2735,
+          "p80": 3147,
+          "p90": 5306,
+          "p95": 18030,
+          "p99": 42778,
+          "p999": 60440
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 433.01,
+            "max": 433.01,
+            "mean": 433.01
+          },
+          "cpu": {
+            "min": 486.96666666666664,
+            "max": 486.96666666666664,
+            "mean": 486.96666666666664
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 281.27,
+            "max": 281.27,
+            "mean": 281.27
+          },
+          "cpu": {
+            "min": 996.0333333333333,
+            "max": 996.0333333333333,
+            "mean": 996.0333333333333
+          }
+        }
+      },
+      "poolOverflow": 384,
+      "upstreamConnections": 16
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5306.46,
+      "totalRequests": 159194,
+      "latency": {
+        "min": 360,
+        "mean": 6884,
+        "max": 106807,
+        "pstdev": 12850,
+        "percentiles": {
+          "p50": 2983,
+          "p75": 4873,
+          "p80": 5573,
+          "p90": 9215,
+          "p95": 49102,
+          "p99": 58521,
+          "p999": 70213
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 232.76,
+            "max": 232.76,
+            "mean": 232.76
+          },
+          "cpu": {
+            "min": 16.299999999999997,
+            "max": 16.299999999999997,
+            "mean": 16.299999999999997
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 282.68,
+            "max": 282.68,
+            "mean": 282.68
+          },
+          "cpu": {
+            "min": 825.4333333333333,
+            "max": 825.4333333333333,
+            "mean": 825.4333333333333
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.1.3.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.1.3.ts
new file mode 100644
index 000000000..d1c89510c
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.1.3.ts
@@ -0,0 +1,485 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.1.3
+// Generated on 2025-06-17T19:58:49.984Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.1.3",
+    "runId": "1.1.3-1750190329984",
+    "date": "2024-11-04",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.1.3",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6070.53,
+      "totalRequests": 182116,
+      "latency": {
+        "min": 353,
+        "mean": 6263,
+        "max": 87117,
+        "pstdev": 11274,
+        "percentiles": {
+          "p50": 2994,
+          "p75": 4783,
+          "p80": 5441,
+          "p90": 8506,
+          "p95": 44029,
+          "p99": 54130,
+          "p999": 59291
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 85.16,
+            "max": 85.16,
+            "mean": 85.16
+          },
+          "cpu": {
+            "min": 1.3666666666666665,
+            "max": 1.3666666666666665,
+            "mean": 1.3666666666666665
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 26,
+            "max": 26,
+            "mean": 26
+          },
+          "cpu": {
+            "min": 101.43333333333334,
+            "max": 101.43333333333334,
+            "mean": 101.43333333333334
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5999.45,
+      "totalRequests": 179985,
+      "latency": {
+        "min": 368,
+        "mean": 6117,
+        "max": 76840,
+        "pstdev": 11675,
+        "percentiles": {
+          "p50": 2803,
+          "p75": 4339,
+          "p80": 4903,
+          "p90": 7204,
+          "p95": 47128,
+          "p99": 54317,
+          "p999": 60557
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 102.18,
+            "max": 102.18,
+            "mean": 102.18
+          },
+          "cpu": {
+            "min": 7.033333333333333,
+            "max": 7.033333333333333,
+            "mean": 7.033333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 34.18,
+            "max": 34.18,
+            "mean": 34.18
+          },
+          "cpu": {
+            "min": 203.56666666666666,
+            "max": 203.56666666666666,
+            "mean": 203.56666666666666
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6053.06,
+      "totalRequests": 181592,
+      "latency": {
+        "min": 390,
+        "mean": 5889,
+        "max": 94826,
+        "pstdev": 11642,
+        "percentiles": {
+          "p50": 2599,
+          "p75": 4075,
+          "p80": 4583,
+          "p90": 6945,
+          "p95": 47128,
+          "p99": 54872,
+          "p999": 62212
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 151.34,
+            "max": 151.34,
+            "mean": 151.34
+          },
+          "cpu": {
+            "min": 31.633333333333336,
+            "max": 31.633333333333336,
+            "mean": 31.633333333333336
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 48.34,
+            "max": 48.34,
+            "mean": 48.34
+          },
+          "cpu": {
+            "min": 309.06666666666666,
+            "max": 309.06666666666666,
+            "mean": 309.06666666666666
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5895.77,
+      "totalRequests": 176873,
+      "latency": {
+        "min": 378,
+        "mean": 6220,
+        "max": 100757,
+        "pstdev": 12033,
+        "percentiles": {
+          "p50": 2723,
+          "p75": 4341,
+          "p80": 4931,
+          "p90": 7644,
+          "p95": 47828,
+          "p99": 55521,
+          "p999": 67383
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 687.16,
+            "max": 687.16,
+            "mean": 687.16
+          },
+          "cpu": {
+            "min": 578.2333333333332,
+            "max": 578.2333333333332,
+            "mean": 578.2333333333332
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 150.69,
+            "max": 150.69,
+            "mean": 150.69
+          },
+          "cpu": {
+            "min": 488.20000000000005,
+            "max": 488.20000000000005,
+            "mean": 488.20000000000005
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5818.09,
+      "totalRequests": 174543,
+      "latency": {
+        "min": 356,
+        "mean": 6109,
+        "max": 107913,
+        "pstdev": 11285,
+        "percentiles": {
+          "p50": 2832,
+          "p75": 4538,
+          "p80": 5163,
+          "p90": 8134,
+          "p95": 42639,
+          "p99": 54546,
+          "p999": 67543
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 1329.35,
+            "max": 1329.35,
+            "mean": 1329.35
+          },
+          "cpu": {
+            "min": 61.33333333333333,
+            "max": 61.33333333333333,
+            "mean": 61.33333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 303.55,
+            "max": 303.55,
+            "mean": 303.55
+          },
+          "cpu": {
+            "min": 731.4333333333334,
+            "max": 731.4333333333334,
+            "mean": 731.4333333333334
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5996.79,
+      "totalRequests": 179907,
+      "latency": {
+        "min": 367,
+        "mean": 6127,
+        "max": 77688,
+        "pstdev": 11777,
+        "percentiles": {
+          "p50": 2745,
+          "p75": 4292,
+          "p80": 4835,
+          "p90": 7317,
+          "p95": 47597,
+          "p99": 54706,
+          "p999": 61323
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 125.62,
+            "max": 125.62,
+            "mean": 125.62
+          },
+          "cpu": {
+            "min": 525.5,
+            "max": 525.5,
+            "mean": 525.5
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 289.68,
+            "max": 289.68,
+            "mean": 289.68
+          },
+          "cpu": {
+            "min": 1239.6,
+            "max": 1239.6,
+            "mean": 1239.6
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5732.14,
+      "totalRequests": 171956,
+      "latency": {
+        "min": 336,
+        "mean": 4876,
+        "max": 76279,
+        "pstdev": 10072,
+        "percentiles": {
+          "p50": 2290,
+          "p75": 3444,
+          "p80": 3846,
+          "p90": 5476,
+          "p95": 24546,
+          "p99": 51763,
+          "p999": 57040
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 132.64,
+            "max": 132.64,
+            "mean": 132.64
+          },
+          "cpu": {
+            "min": 520.8333333333333,
+            "max": 520.8333333333333,
+            "mean": 520.8333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 291.68,
+            "max": 291.68,
+            "mean": 291.68
+          },
+          "cpu": {
+            "min": 1138.0333333333335,
+            "max": 1138.0333333333335,
+            "mean": 1138.0333333333335
+          }
+        }
+      },
+      "poolOverflow": 371,
+      "upstreamConnections": 29
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5311.34,
+      "totalRequests": 159332,
+      "latency": {
+        "min": 362,
+        "mean": 6219,
+        "max": 144302,
+        "pstdev": 11133,
+        "percentiles": {
+          "p50": 2808,
+          "p75": 4741,
+          "p80": 5579,
+          "p90": 10689,
+          "p95": 37480,
+          "p99": 53626,
+          "p999": 73998
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 179.01,
+            "max": 179.01,
+            "mean": 179.01
+          },
+          "cpu": {
+            "min": 497.9666666666666,
+            "max": 497.9666666666666,
+            "mean": 497.9666666666666
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 298.77,
+            "max": 298.77,
+            "mean": 298.77
+          },
+          "cpu": {
+            "min": 1034.033333333333,
+            "max": 1034.033333333333,
+            "mean": 1034.033333333333
+          }
+        }
+      },
+      "poolOverflow": 365,
+      "upstreamConnections": 35
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5633.85,
+      "totalRequests": 169021,
+      "latency": {
+        "min": 369,
+        "mean": 6266,
+        "max": 106577,
+        "pstdev": 11127,
+        "percentiles": {
+          "p50": 2908,
+          "p75": 4793,
+          "p80": 5511,
+          "p90": 9568,
+          "p95": 36169,
+          "p99": 54472,
+          "p999": 68628
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 487.12,
+            "max": 487.12,
+            "mean": 487.12
+          },
+          "cpu": {
+            "min": 27.133333333333336,
+            "max": 27.133333333333336,
+            "mean": 27.133333333333336
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 299.84,
+            "max": 299.84,
+            "mean": 299.84
+          },
+          "cpu": {
+            "min": 837.8666666666668,
+            "max": 837.8666666666668,
+            "mean": 837.8666666666668
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.1.4.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.1.4.ts
new file mode 100644
index 000000000..9785b79e3
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.1.4.ts
@@ -0,0 +1,485 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.1.4
+// Generated on 2025-06-17T19:58:49.987Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.1.4",
+    "runId": "1.1.4-1750190329987",
+    "date": "2024-12-13",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.1.4",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5971.73,
+      "totalRequests": 179152,
+      "latency": {
+        "min": 354,
+        "mean": 6247,
+        "max": 97591,
+        "pstdev": 11371,
+        "percentiles": {
+          "p50": 2948,
+          "p75": 4694,
+          "p80": 5352,
+          "p90": 8420,
+          "p95": 44519,
+          "p99": 54398,
+          "p999": 62244
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 82.79,
+            "max": 82.79,
+            "mean": 82.79
+          },
+          "cpu": {
+            "min": 1.5000000000000002,
+            "max": 1.5000000000000002,
+            "mean": 1.5000000000000002
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 24.11,
+            "max": 24.11,
+            "mean": 24.11
+          },
+          "cpu": {
+            "min": 101.53333333333335,
+            "max": 101.53333333333335,
+            "mean": 101.53333333333335
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5957.22,
+      "totalRequests": 178717,
+      "latency": {
+        "min": 385,
+        "mean": 6145,
+        "max": 93360,
+        "pstdev": 11838,
+        "percentiles": {
+          "p50": 2751,
+          "p75": 4352,
+          "p80": 4922,
+          "p90": 7436,
+          "p95": 47679,
+          "p99": 54878,
+          "p999": 62414
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 103.29,
+            "max": 103.29,
+            "mean": 103.29
+          },
+          "cpu": {
+            "min": 6.800000000000001,
+            "max": 6.800000000000001,
+            "mean": 6.800000000000001
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.29,
+            "max": 32.29,
+            "mean": 32.29
+          },
+          "cpu": {
+            "min": 204,
+            "max": 204,
+            "mean": 204
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5896.53,
+      "totalRequests": 176899,
+      "latency": {
+        "min": 360,
+        "mean": 6376,
+        "max": 93995,
+        "pstdev": 12077,
+        "percentiles": {
+          "p50": 2905,
+          "p75": 4542,
+          "p80": 5112,
+          "p90": 7699,
+          "p95": 48019,
+          "p99": 55472,
+          "p999": 63707
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 151.7,
+            "max": 151.7,
+            "mean": 151.7
+          },
+          "cpu": {
+            "min": 32.599999999999994,
+            "max": 32.599999999999994,
+            "mean": 32.599999999999994
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 46.46,
+            "max": 46.46,
+            "mean": 46.46
+          },
+          "cpu": {
+            "min": 309.8,
+            "max": 309.8,
+            "mean": 309.8
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5885.1,
+      "totalRequests": 176553,
+      "latency": {
+        "min": 370,
+        "mean": 6378,
+        "max": 102457,
+        "pstdev": 12096,
+        "percentiles": {
+          "p50": 2834,
+          "p75": 4508,
+          "p80": 5093,
+          "p90": 7817,
+          "p95": 48099,
+          "p99": 55572,
+          "p999": 64329
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 763.38,
+            "max": 763.38,
+            "mean": 763.38
+          },
+          "cpu": {
+            "min": 605.6333333333333,
+            "max": 605.6333333333333,
+            "mean": 605.6333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 150.81,
+            "max": 150.81,
+            "mean": 150.81
+          },
+          "cpu": {
+            "min": 494.66666666666674,
+            "max": 494.66666666666674,
+            "mean": 494.66666666666674
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5642.37,
+      "totalRequests": 169274,
+      "latency": {
+        "min": 314,
+        "mean": 6430,
+        "max": 135987,
+        "pstdev": 12216,
+        "percentiles": {
+          "p50": 2801,
+          "p75": 4489,
+          "p80": 5175,
+          "p90": 8673,
+          "p95": 46690,
+          "p99": 56358,
+          "p999": 73814
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 1603.28,
+            "max": 1603.28,
+            "mean": 1603.28
+          },
+          "cpu": {
+            "min": 41.63333333333333,
+            "max": 41.63333333333333,
+            "mean": 41.63333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 289.75,
+            "max": 289.75,
+            "mean": 289.75
+          },
+          "cpu": {
+            "min": 727.1666666666666,
+            "max": 727.1666666666666,
+            "mean": 727.1666666666666
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5993.8,
+      "totalRequests": 179822,
+      "latency": {
+        "min": 381,
+        "mean": 5965,
+        "max": 84086,
+        "pstdev": 11660,
+        "percentiles": {
+          "p50": 2666,
+          "p75": 4169,
+          "p80": 4715,
+          "p90": 6995,
+          "p95": 47218,
+          "p99": 54775,
+          "p999": 61200
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 117.16,
+            "max": 117.16,
+            "mean": 117.16
+          },
+          "cpu": {
+            "min": 518.0333333333333,
+            "max": 518.0333333333333,
+            "mean": 518.0333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 278.72,
+            "max": 278.72,
+            "mean": 278.72
+          },
+          "cpu": {
+            "min": 1205.8,
+            "max": 1205.8,
+            "mean": 1205.8
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5947.1,
+      "totalRequests": 178412,
+      "latency": {
+        "min": 346,
+        "mean": 5809,
+        "max": 76681,
+        "pstdev": 11155,
+        "percentiles": {
+          "p50": 2707,
+          "p75": 4164,
+          "p80": 4684,
+          "p90": 6938,
+          "p95": 45451,
+          "p99": 53227,
+          "p999": 59303
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 123.23,
+            "max": 123.23,
+            "mean": 123.23
+          },
+          "cpu": {
+            "min": 512.5333333333333,
+            "max": 512.5333333333333,
+            "mean": 512.5333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 291.25,
+            "max": 291.25,
+            "mean": 291.25
+          },
+          "cpu": {
+            "min": 1103.6333333333334,
+            "max": 1103.6333333333334,
+            "mean": 1103.6333333333334
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 4884.46,
+      "totalRequests": 146534,
+      "latency": {
+        "min": 362,
+        "mean": 7148,
+        "max": 137863,
+        "pstdev": 11237,
+        "percentiles": {
+          "p50": 3375,
+          "p75": 6266,
+          "p80": 7621,
+          "p90": 17699,
+          "p95": 31992,
+          "p99": 59576,
+          "p999": 83935
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 338.12,
+            "max": 338.12,
+            "mean": 338.12
+          },
+          "cpu": {
+            "min": 488.1333333333333,
+            "max": 488.1333333333333,
+            "mean": 488.1333333333333
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 294.41,
+            "max": 294.41,
+            "mean": 294.41
+          },
+          "cpu": {
+            "min": 993,
+            "max": 993,
+            "mean": 993
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5737.62,
+      "totalRequests": 172120,
+      "latency": {
+        "min": 345,
+        "mean": 6192,
+        "max": 117288,
+        "pstdev": 11530,
+        "percentiles": {
+          "p50": 2822,
+          "p75": 4535,
+          "p80": 5155,
+          "p90": 8463,
+          "p95": 42631,
+          "p99": 55584,
+          "p999": 70291
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 679.73,
+            "max": 679.73,
+            "mean": 679.73
+          },
+          "cpu": {
+            "min": 18.76666666666667,
+            "max": 18.76666666666667,
+            "mean": 18.76666666666667
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 285.93,
+            "max": 285.93,
+            "mean": 285.93
+          },
+          "cpu": {
+            "min": 833.4333333333334,
+            "max": 833.4333333333334,
+            "mean": 833.4333333333334
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.0.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.0.ts
new file mode 100644
index 000000000..3f780c466
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.0.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.0
+// Generated on 2025-06-17T19:50:26.754Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.0",
+    "runId": "1.2.0-1750189826754",
+    "date": "2024-11-06",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.0",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6006.27,
+      "totalRequests": 180191,
+      "latency": {
+        "min": 359,
+        "mean": 6202,
+        "max": 74358,
+        "pstdev": 11262,
+        "percentiles": {
+          "p50": 2976,
+          "p75": 4719,
+          "p80": 5330,
+          "p90": 8159,
+          "p95": 44003,
+          "p99": 54190,
+          "p999": 59357
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 113.66,
+            "max": 113.66,
+            "mean": 113.66
+          },
+          "cpu": {
+            "min": 0.75,
+            "max": 0.75,
+            "mean": 0.75
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.55,
+            "max": 25.55,
+            "mean": 25.55
+          },
+          "cpu": {
+            "min": 30.41,
+            "max": 30.41,
+            "mean": 30.41
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5988.15,
+      "totalRequests": 179650,
+      "latency": {
+        "min": 366,
+        "mean": 6093,
+        "max": 82386,
+        "pstdev": 11670,
+        "percentiles": {
+          "p50": 2838,
+          "p75": 4283,
+          "p80": 4798,
+          "p90": 6972,
+          "p95": 47523,
+          "p99": 54038,
+          "p999": 59813
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 119.16,
+            "max": 119.16,
+            "mean": 119.16
+          },
+          "cpu": {
+            "min": 1.53,
+            "max": 1.53,
+            "mean": 1.53
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 31.71,
+            "max": 31.71,
+            "mean": 31.71
+          },
+          "cpu": {
+            "min": 61.03,
+            "max": 61.03,
+            "mean": 61.03
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5930.13,
+      "totalRequests": 177905,
+      "latency": {
+        "min": 374,
+        "mean": 6182,
+        "max": 93884,
+        "pstdev": 11844,
+        "percentiles": {
+          "p50": 2812,
+          "p75": 4420,
+          "p80": 4967,
+          "p90": 7339,
+          "p95": 47618,
+          "p99": 54661,
+          "p999": 61865
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 123.35,
+            "max": 123.35,
+            "mean": 123.35
+          },
+          "cpu": {
+            "min": 2.89,
+            "max": 2.89,
+            "mean": 2.89
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 37.86,
+            "max": 37.86,
+            "mean": 37.86
+          },
+          "cpu": {
+            "min": 91.87,
+            "max": 91.87,
+            "mean": 91.87
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5713.27,
+      "totalRequests": 171401,
+      "latency": {
+        "min": 384,
+        "mean": 6405,
+        "max": 105545,
+        "pstdev": 12313,
+        "percentiles": {
+          "p50": 2832,
+          "p75": 4450,
+          "p80": 5057,
+          "p90": 7773,
+          "p95": 48732,
+          "p99": 56084,
+          "p999": 66220
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 150.92,
+            "max": 150.92,
+            "mean": 150.92
+          },
+          "cpu": {
+            "min": 15.08,
+            "max": 15.08,
+            "mean": 15.08
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 60.05,
+            "max": 60.05,
+            "mean": 60.05
+          },
+          "cpu": {
+            "min": 125.09,
+            "max": 125.09,
+            "mean": 125.09
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5689.03,
+      "totalRequests": 170675,
+      "latency": {
+        "min": 365,
+        "mean": 5939,
+        "max": 98639,
+        "pstdev": 11585,
+        "percentiles": {
+          "p50": 2715,
+          "p75": 4258,
+          "p80": 4772,
+          "p90": 7055,
+          "p95": 45996,
+          "p99": 54368,
+          "p999": 68464
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 156.97,
+            "max": 156.97,
+            "mean": 156.97
+          },
+          "cpu": {
+            "min": 27.62,
+            "max": 27.62,
+            "mean": 27.62
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 82.26,
+            "max": 82.26,
+            "mean": 82.26
+          },
+          "cpu": {
+            "min": 158.86,
+            "max": 158.86,
+            "mean": 158.86
+          }
+        }
+      },
+      "poolOverflow": 365,
+      "upstreamConnections": 35
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5407.08,
+      "totalRequests": 162220,
+      "latency": {
+        "min": 371,
+        "mean": 6424,
+        "max": 131579,
+        "pstdev": 12473,
+        "percentiles": {
+          "p50": 2692,
+          "p75": 4503,
+          "p80": 5177,
+          "p90": 8264,
+          "p95": 47540,
+          "p99": 58488,
+          "p999": 72720
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 215.93,
+            "max": 215.93,
+            "mean": 215.93
+          },
+          "cpu": {
+            "min": 61.56,
+            "max": 61.56,
+            "mean": 61.56
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.5,
+            "max": 130.5,
+            "mean": 130.5
+          },
+          "cpu": {
+            "min": 197.45,
+            "max": 197.45,
+            "mean": 197.45
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5905.23,
+      "totalRequests": 177157,
+      "latency": {
+        "min": 396,
+        "mean": 6205,
+        "max": 92979,
+        "pstdev": 12065,
+        "percentiles": {
+          "p50": 2713,
+          "p75": 4262,
+          "p80": 4832,
+          "p90": 7415,
+          "p95": 48306,
+          "p99": 55736,
+          "p999": 63318
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 233.71,
+            "max": 233.71,
+            "mean": 233.71
+          },
+          "cpu": {
+            "min": 114.53,
+            "max": 114.53,
+            "mean": 114.53
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 118.94,
+            "max": 118.94,
+            "mean": 118.94
+          },
+          "cpu": {
+            "min": 360.39,
+            "max": 360.39,
+            "mean": 360.39
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5793.19,
+      "totalRequests": 173800,
+      "latency": {
+        "min": 385,
+        "mean": 6501,
+        "max": 86843,
+        "pstdev": 12452,
+        "percentiles": {
+          "p50": 2744,
+          "p75": 4568,
+          "p80": 5227,
+          "p90": 8494,
+          "p95": 48965,
+          "p99": 56467,
+          "p999": 65382
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 202.08,
+            "max": 202.08,
+            "mean": 202.08
+          },
+          "cpu": {
+            "min": 113.96,
+            "max": 113.96,
+            "mean": 113.96
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.24,
+            "max": 121.24,
+            "mean": 121.24
+          },
+          "cpu": {
+            "min": 329.91,
+            "max": 329.91,
+            "mean": 329.91
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5783.8,
+      "totalRequests": 173514,
+      "latency": {
+        "min": 385,
+        "mean": 6179,
+        "max": 85405,
+        "pstdev": 11889,
+        "percentiles": {
+          "p50": 2707,
+          "p75": 4462,
+          "p80": 5071,
+          "p90": 7760,
+          "p95": 47423,
+          "p99": 54994,
+          "p999": 64567
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 144.59,
+            "max": 144.59,
+            "mean": 144.59
+          },
+          "cpu": {
+            "min": 112.93,
+            "max": 112.93,
+            "mean": 112.93
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.22,
+            "max": 121.22,
+            "mean": 121.22
+          },
+          "cpu": {
+            "min": 299.28,
+            "max": 299.28,
+            "mean": 299.28
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5804.51,
+      "totalRequests": 174139,
+      "latency": {
+        "min": 384,
+        "mean": 6147,
+        "max": 82661,
+        "pstdev": 11892,
+        "percentiles": {
+          "p50": 2807,
+          "p75": 4284,
+          "p80": 4791,
+          "p90": 7039,
+          "p95": 47558,
+          "p99": 55162,
+          "p999": 66723
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 160.23,
+            "max": 160.23,
+            "mean": 160.23
+          },
+          "cpu": {
+            "min": 102.85,
+            "max": 102.85,
+            "mean": 102.85
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.62,
+            "max": 130.62,
+            "mean": 130.62
+          },
+          "cpu": {
+            "min": 267.09,
+            "max": 267.09,
+            "mean": 267.09
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5804.87,
+      "totalRequests": 174149,
+      "latency": {
+        "min": 368,
+        "mean": 5828,
+        "max": 106119,
+        "pstdev": 11561,
+        "percentiles": {
+          "p50": 2647,
+          "p75": 4078,
+          "p80": 4553,
+          "p90": 6656,
+          "p95": 46047,
+          "p99": 55025,
+          "p999": 66633
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 155.88,
+            "max": 155.88,
+            "mean": 155.88
+          },
+          "cpu": {
+            "min": 91.5,
+            "max": 91.5,
+            "mean": 91.5
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.61,
+            "max": 130.61,
+            "mean": 130.61
+          },
+          "cpu": {
+            "min": 234.47,
+            "max": 234.47,
+            "mean": 234.47
+          }
+        }
+      },
+      "poolOverflow": 365,
+      "upstreamConnections": 35
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.1.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.1.ts
new file mode 100644
index 000000000..39dce4171
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.1.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.1
+// Generated on 2025-06-17T19:50:26.759Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.1",
+    "runId": "1.2.1-1750189826759",
+    "date": "2024-11-07",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.1",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6110.53,
+      "totalRequests": 183316,
+      "latency": {
+        "min": 337,
+        "mean": 6415,
+        "max": 92647,
+        "pstdev": 11350,
+        "percentiles": {
+          "p50": 3107,
+          "p75": 5037,
+          "p80": 5711,
+          "p90": 8782,
+          "p95": 45103,
+          "p99": 53942,
+          "p999": 60790
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 111.18,
+            "max": 111.18,
+            "mean": 111.18
+          },
+          "cpu": {
+            "min": 0.79,
+            "max": 0.79,
+            "mean": 0.79
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 24.25,
+            "max": 24.25,
+            "mean": 24.25
+          },
+          "cpu": {
+            "min": 30.62,
+            "max": 30.62,
+            "mean": 30.62
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6011.43,
+      "totalRequests": 180343,
+      "latency": {
+        "min": 377,
+        "mean": 6244,
+        "max": 72724,
+        "pstdev": 11870,
+        "percentiles": {
+          "p50": 2835,
+          "p75": 4408,
+          "p80": 4939,
+          "p90": 7412,
+          "p95": 47611,
+          "p99": 54769,
+          "p999": 61716
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 116.45,
+            "max": 116.45,
+            "mean": 116.45
+          },
+          "cpu": {
+            "min": 1.59,
+            "max": 1.59,
+            "mean": 1.59
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 30.41,
+            "max": 30.41,
+            "mean": 30.41
+          },
+          "cpu": {
+            "min": 61.42,
+            "max": 61.42,
+            "mean": 61.42
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5961.65,
+      "totalRequests": 178854,
+      "latency": {
+        "min": 370,
+        "mean": 5979,
+        "max": 81096,
+        "pstdev": 11586,
+        "percentiles": {
+          "p50": 2705,
+          "p75": 4189,
+          "p80": 4699,
+          "p90": 7030,
+          "p95": 46987,
+          "p99": 54095,
+          "p999": 61222
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 128.02,
+            "max": 128.02,
+            "mean": 128.02
+          },
+          "cpu": {
+            "min": 3.04,
+            "max": 3.04,
+            "mean": 3.04
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 36.55,
+            "max": 36.55,
+            "mean": 36.55
+          },
+          "cpu": {
+            "min": 92.49,
+            "max": 92.49,
+            "mean": 92.49
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5921.3,
+      "totalRequests": 177639,
+      "latency": {
+        "min": 376,
+        "mean": 6208,
+        "max": 100098,
+        "pstdev": 11901,
+        "percentiles": {
+          "p50": 2770,
+          "p75": 4413,
+          "p80": 5009,
+          "p90": 7647,
+          "p95": 46934,
+          "p99": 55273,
+          "p999": 68509
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 144.93,
+            "max": 144.93,
+            "mean": 144.93
+          },
+          "cpu": {
+            "min": 15.11,
+            "max": 15.11,
+            "mean": 15.11
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 58.75,
+            "max": 58.75,
+            "mean": 58.75
+          },
+          "cpu": {
+            "min": 125.9,
+            "max": 125.9,
+            "mean": 125.9
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5876.24,
+      "totalRequests": 176290,
+      "latency": {
+        "min": 365,
+        "mean": 6248,
+        "max": 80101,
+        "pstdev": 12134,
+        "percentiles": {
+          "p50": 2759,
+          "p75": 4348,
+          "p80": 4922,
+          "p90": 7422,
+          "p95": 47855,
+          "p99": 56041,
+          "p999": 67145
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 155.94,
+            "max": 155.94,
+            "mean": 155.94
+          },
+          "cpu": {
+            "min": 27.72,
+            "max": 27.72,
+            "mean": 27.72
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 80.95,
+            "max": 80.95,
+            "mean": 80.95
+          },
+          "cpu": {
+            "min": 159.58,
+            "max": 159.58,
+            "mean": 159.58
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5744.1,
+      "totalRequests": 172323,
+      "latency": {
+        "min": 380,
+        "mean": 6374,
+        "max": 100245,
+        "pstdev": 12424,
+        "percentiles": {
+          "p50": 2775,
+          "p75": 4337,
+          "p80": 4899,
+          "p90": 7542,
+          "p95": 47699,
+          "p99": 59248,
+          "p999": 71761
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 184.41,
+            "max": 184.41,
+            "mean": 184.41
+          },
+          "cpu": {
+            "min": 61.5,
+            "max": 61.5,
+            "mean": 61.5
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.19,
+            "max": 129.19,
+            "mean": 129.19
+          },
+          "cpu": {
+            "min": 199.75,
+            "max": 199.75,
+            "mean": 199.75
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6028.67,
+      "totalRequests": 180864,
+      "latency": {
+        "min": 361,
+        "mean": 5919,
+        "max": 75882,
+        "pstdev": 11427,
+        "percentiles": {
+          "p50": 2729,
+          "p75": 4244,
+          "p80": 4783,
+          "p90": 6934,
+          "p95": 46608,
+          "p99": 53897,
+          "p999": 59893
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 229.41,
+            "max": 229.41,
+            "mean": 229.41
+          },
+          "cpu": {
+            "min": 114.16,
+            "max": 114.16,
+            "mean": 114.16
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.69,
+            "max": 121.69,
+            "mean": 121.69
+          },
+          "cpu": {
+            "min": 363.78,
+            "max": 363.78,
+            "mean": 363.78
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6093.21,
+      "totalRequests": 182799,
+      "latency": {
+        "min": 364,
+        "mean": 5859,
+        "max": 73809,
+        "pstdev": 11454,
+        "percentiles": {
+          "p50": 2634,
+          "p75": 4171,
+          "p80": 4702,
+          "p90": 7002,
+          "p95": 46548,
+          "p99": 53979,
+          "p999": 62793
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 236.91,
+            "max": 236.91,
+            "mean": 236.91
+          },
+          "cpu": {
+            "min": 113.6,
+            "max": 113.6,
+            "mean": 113.6
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.3,
+            "max": 122.3,
+            "mean": 122.3
+          },
+          "cpu": {
+            "min": 333.22,
+            "max": 333.22,
+            "mean": 333.22
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6057.56,
+      "totalRequests": 181727,
+      "latency": {
+        "min": 366,
+        "mean": 5898,
+        "max": 83623,
+        "pstdev": 11560,
+        "percentiles": {
+          "p50": 2628,
+          "p75": 4159,
+          "p80": 4695,
+          "p90": 6996,
+          "p95": 46897,
+          "p99": 54495,
+          "p999": 61849
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 143.71,
+            "max": 143.71,
+            "mean": 143.71
+          },
+          "cpu": {
+            "min": 112.58,
+            "max": 112.58,
+            "mean": 112.58
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.84,
+            "max": 121.84,
+            "mean": 121.84
+          },
+          "cpu": {
+            "min": 302.58,
+            "max": 302.58,
+            "mean": 302.58
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5899.93,
+      "totalRequests": 176998,
+      "latency": {
+        "min": 329,
+        "mean": 6218,
+        "max": 88965,
+        "pstdev": 12007,
+        "percentiles": {
+          "p50": 2818,
+          "p75": 4388,
+          "p80": 4920,
+          "p90": 7204,
+          "p95": 47871,
+          "p99": 55517,
+          "p999": 65886
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 154.24,
+            "max": 154.24,
+            "mean": 154.24
+          },
+          "cpu": {
+            "min": 102.3,
+            "max": 102.3,
+            "mean": 102.3
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.34,
+            "max": 129.34,
+            "mean": 129.34
+          },
+          "cpu": {
+            "min": 270.21,
+            "max": 270.21,
+            "mean": 270.21
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5862.2,
+      "totalRequests": 175868,
+      "latency": {
+        "min": 359,
+        "mean": 6106,
+        "max": 107622,
+        "pstdev": 11962,
+        "percentiles": {
+          "p50": 2648,
+          "p75": 4343,
+          "p80": 4933,
+          "p90": 7617,
+          "p95": 47341,
+          "p99": 55508,
+          "p999": 69103
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 153.72,
+            "max": 153.72,
+            "mean": 153.72
+          },
+          "cpu": {
+            "min": 91.07,
+            "max": 91.07,
+            "mean": 91.07
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.18,
+            "max": 129.18,
+            "mean": 129.18
+          },
+          "cpu": {
+            "min": 237.04,
+            "max": 237.04,
+            "mean": 237.04
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.2.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.2.ts
new file mode 100644
index 000000000..7ac431646
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.2.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.2
+// Generated on 2025-06-17T19:50:26.761Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.2",
+    "runId": "1.2.2-1750189826761",
+    "date": "2024-11-28",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.2",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6249.74,
+      "totalRequests": 187495,
+      "latency": {
+        "min": 333,
+        "mean": 5937,
+        "max": 75075,
+        "pstdev": 10895,
+        "percentiles": {
+          "p50": 2840,
+          "p75": 4501,
+          "p80": 5077,
+          "p90": 7640,
+          "p95": 41435,
+          "p99": 53243,
+          "p999": 58066
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 106.26,
+            "max": 106.26,
+            "mean": 106.26
+          },
+          "cpu": {
+            "min": 0.73,
+            "max": 0.73,
+            "mean": 0.73
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 26.09,
+            "max": 26.09,
+            "mean": 26.09
+          },
+          "cpu": {
+            "min": 30.41,
+            "max": 30.41,
+            "mean": 30.41
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6140.58,
+      "totalRequests": 184222,
+      "latency": {
+        "min": 373,
+        "mean": 5812,
+        "max": 79740,
+        "pstdev": 11513,
+        "percentiles": {
+          "p50": 2590,
+          "p75": 4071,
+          "p80": 4583,
+          "p90": 6812,
+          "p95": 46811,
+          "p99": 54179,
+          "p999": 61151
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 131.24,
+            "max": 131.24,
+            "mean": 131.24
+          },
+          "cpu": {
+            "min": 1.34,
+            "max": 1.34,
+            "mean": 1.34
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.26,
+            "max": 32.26,
+            "mean": 32.26
+          },
+          "cpu": {
+            "min": 60.74,
+            "max": 60.74,
+            "mean": 60.74
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6149.72,
+      "totalRequests": 184494,
+      "latency": {
+        "min": 366,
+        "mean": 5813,
+        "max": 89935,
+        "pstdev": 11434,
+        "percentiles": {
+          "p50": 2637,
+          "p75": 4073,
+          "p80": 4561,
+          "p90": 6680,
+          "p95": 46505,
+          "p99": 53872,
+          "p999": 60348
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 133.05,
+            "max": 133.05,
+            "mean": 133.05
+          },
+          "cpu": {
+            "min": 2.75,
+            "max": 2.75,
+            "mean": 2.75
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 38.38,
+            "max": 38.38,
+            "mean": 38.38
+          },
+          "cpu": {
+            "min": 91.57,
+            "max": 91.57,
+            "mean": 91.57
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6076.78,
+      "totalRequests": 182305,
+      "latency": {
+        "min": 361,
+        "mean": 6031,
+        "max": 87502,
+        "pstdev": 11819,
+        "percentiles": {
+          "p50": 2675,
+          "p75": 4203,
+          "p80": 4751,
+          "p90": 7118,
+          "p95": 47147,
+          "p99": 55078,
+          "p999": 67106
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 153.62,
+            "max": 153.62,
+            "mean": 153.62
+          },
+          "cpu": {
+            "min": 14.77,
+            "max": 14.77,
+            "mean": 14.77
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 60.45,
+            "max": 60.45,
+            "mean": 60.45
+          },
+          "cpu": {
+            "min": 124.04,
+            "max": 124.04,
+            "mean": 124.04
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5928.89,
+      "totalRequests": 177873,
+      "latency": {
+        "min": 336,
+        "mean": 6196,
+        "max": 85643,
+        "pstdev": 12032,
+        "percentiles": {
+          "p50": 2803,
+          "p75": 4338,
+          "p80": 4852,
+          "p90": 7143,
+          "p95": 47726,
+          "p99": 55619,
+          "p999": 67780
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 145.79,
+            "max": 145.79,
+            "mean": 145.79
+          },
+          "cpu": {
+            "min": 27.17,
+            "max": 27.17,
+            "mean": 27.17
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 80.64,
+            "max": 80.64,
+            "mean": 80.64
+          },
+          "cpu": {
+            "min": 157.65,
+            "max": 157.65,
+            "mean": 157.65
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5843.64,
+      "totalRequests": 175314,
+      "latency": {
+        "min": 339,
+        "mean": 6452,
+        "max": 101912,
+        "pstdev": 12482,
+        "percentiles": {
+          "p50": 2790,
+          "p75": 4509,
+          "p80": 5136,
+          "p90": 8012,
+          "p95": 47702,
+          "p99": 58542,
+          "p999": 74014
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 173.7,
+            "max": 173.7,
+            "mean": 173.7
+          },
+          "cpu": {
+            "min": 61.12,
+            "max": 61.12,
+            "mean": 61.12
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.89,
+            "max": 130.89,
+            "mean": 130.89
+          },
+          "cpu": {
+            "min": 195.74,
+            "max": 195.74,
+            "mean": 195.74
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6096.9,
+      "totalRequests": 182907,
+      "latency": {
+        "min": 365,
+        "mean": 5840,
+        "max": 99377,
+        "pstdev": 11326,
+        "percentiles": {
+          "p50": 2735,
+          "p75": 4188,
+          "p80": 4674,
+          "p90": 6654,
+          "p95": 46344,
+          "p99": 53444,
+          "p999": 58591
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 230.99,
+            "max": 230.99,
+            "mean": 230.99
+          },
+          "cpu": {
+            "min": 114.22,
+            "max": 114.22,
+            "mean": 114.22
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.56,
+            "max": 121.56,
+            "mean": 121.56
+          },
+          "cpu": {
+            "min": 358.71,
+            "max": 358.71,
+            "mean": 358.71
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6151.76,
+      "totalRequests": 184556,
+      "latency": {
+        "min": 376,
+        "mean": 5805,
+        "max": 84885,
+        "pstdev": 11572,
+        "percentiles": {
+          "p50": 2520,
+          "p75": 3969,
+          "p80": 4498,
+          "p90": 6842,
+          "p95": 46837,
+          "p99": 54761,
+          "p999": 62570
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 233.63,
+            "max": 233.63,
+            "mean": 233.63
+          },
+          "cpu": {
+            "min": 113.65,
+            "max": 113.65,
+            "mean": 113.65
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.86,
+            "max": 121.86,
+            "mean": 121.86
+          },
+          "cpu": {
+            "min": 328.3,
+            "max": 328.3,
+            "mean": 328.3
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6157.53,
+      "totalRequests": 184729,
+      "latency": {
+        "min": 379,
+        "mean": 5964,
+        "max": 75988,
+        "pstdev": 11502,
+        "percentiles": {
+          "p50": 2743,
+          "p75": 4204,
+          "p80": 4695,
+          "p90": 6941,
+          "p95": 46497,
+          "p99": 54179,
+          "p999": 62005
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 141.36,
+            "max": 141.36,
+            "mean": 141.36
+          },
+          "cpu": {
+            "min": 112.67,
+            "max": 112.67,
+            "mean": 112.67
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.04,
+            "max": 122.04,
+            "mean": 122.04
+          },
+          "cpu": {
+            "min": 297.59,
+            "max": 297.59,
+            "mean": 297.59
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6060.5,
+      "totalRequests": 181818,
+      "latency": {
+        "min": 360,
+        "mean": 6022,
+        "max": 92483,
+        "pstdev": 11657,
+        "percentiles": {
+          "p50": 2685,
+          "p75": 4265,
+          "p80": 4811,
+          "p90": 7313,
+          "p95": 46495,
+          "p99": 54495,
+          "p999": 64219
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 150.71,
+            "max": 150.71,
+            "mean": 150.71
+          },
+          "cpu": {
+            "min": 102.4,
+            "max": 102.4,
+            "mean": 102.4
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.9,
+            "max": 130.9,
+            "mean": 130.9
+          },
+          "cpu": {
+            "min": 265.29,
+            "max": 265.29,
+            "mean": 265.29
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5966.83,
+      "totalRequests": 179008,
+      "latency": {
+        "min": 343,
+        "mean": 5962,
+        "max": 102715,
+        "pstdev": 11763,
+        "percentiles": {
+          "p50": 2668,
+          "p75": 4125,
+          "p80": 4633,
+          "p90": 6863,
+          "p95": 46741,
+          "p99": 54929,
+          "p999": 67018
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 162.62,
+            "max": 162.62,
+            "mean": 162.62
+          },
+          "cpu": {
+            "min": 91.03,
+            "max": 91.03,
+            "mean": 91.03
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 131.05,
+            "max": 131.05,
+            "mean": 131.05
+          },
+          "cpu": {
+            "min": 232.55,
+            "max": 232.55,
+            "mean": 232.55
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.3.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.3.ts
new file mode 100644
index 000000000..c121cfe2d
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.3.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.3
+// Generated on 2025-06-17T19:50:26.763Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.3",
+    "runId": "1.2.3-1750189826763",
+    "date": "2024-12-02",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.3",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6222.52,
+      "totalRequests": 186680,
+      "latency": {
+        "min": 349,
+        "mean": 6177,
+        "max": 70643,
+        "pstdev": 11464,
+        "percentiles": {
+          "p50": 2879,
+          "p75": 4520,
+          "p80": 5082,
+          "p90": 7684,
+          "p95": 46213,
+          "p99": 54147,
+          "p999": 60250
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 110.2,
+            "max": 110.2,
+            "mean": 110.2
+          },
+          "cpu": {
+            "min": 0.68,
+            "max": 0.68,
+            "mean": 0.68
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.89,
+            "max": 25.89,
+            "mean": 25.89
+          },
+          "cpu": {
+            "min": 30.33,
+            "max": 30.33,
+            "mean": 30.33
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6170.38,
+      "totalRequests": 185112,
+      "latency": {
+        "min": 370,
+        "mean": 5770,
+        "max": 72798,
+        "pstdev": 11358,
+        "percentiles": {
+          "p50": 2657,
+          "p75": 4054,
+          "p80": 4535,
+          "p90": 6537,
+          "p95": 46632,
+          "p99": 53751,
+          "p999": 59174
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 122.48,
+            "max": 122.48,
+            "mean": 122.48
+          },
+          "cpu": {
+            "min": 1.42,
+            "max": 1.42,
+            "mean": 1.42
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.05,
+            "max": 32.05,
+            "mean": 32.05
+          },
+          "cpu": {
+            "min": 60.88,
+            "max": 60.88,
+            "mean": 60.88
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6085.51,
+      "totalRequests": 182567,
+      "latency": {
+        "min": 365,
+        "mean": 5863,
+        "max": 84721,
+        "pstdev": 11540,
+        "percentiles": {
+          "p50": 2605,
+          "p75": 4127,
+          "p80": 4662,
+          "p90": 7048,
+          "p95": 46759,
+          "p99": 54556,
+          "p999": 61736
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 131.06,
+            "max": 131.06,
+            "mean": 131.06
+          },
+          "cpu": {
+            "min": 2.8,
+            "max": 2.8,
+            "mean": 2.8
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 38.19,
+            "max": 38.19,
+            "mean": 38.19
+          },
+          "cpu": {
+            "min": 91.64,
+            "max": 91.64,
+            "mean": 91.64
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 6032.83,
+      "totalRequests": 180985,
+      "latency": {
+        "min": 362,
+        "mean": 6079,
+        "max": 79421,
+        "pstdev": 11806,
+        "percentiles": {
+          "p50": 2707,
+          "p75": 4272,
+          "p80": 4832,
+          "p90": 7327,
+          "p95": 47441,
+          "p99": 54743,
+          "p999": 65808
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 142.98,
+            "max": 142.98,
+            "mean": 142.98
+          },
+          "cpu": {
+            "min": 15.04,
+            "max": 15.04,
+            "mean": 15.04
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 60.39,
+            "max": 60.39,
+            "mean": 60.39
+          },
+          "cpu": {
+            "min": 124.47,
+            "max": 124.47,
+            "mean": 124.47
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5773.98,
+      "totalRequests": 173223,
+      "latency": {
+        "min": 344,
+        "mean": 6360,
+        "max": 79355,
+        "pstdev": 12473,
+        "percentiles": {
+          "p50": 2707,
+          "p75": 4299,
+          "p80": 4888,
+          "p90": 7643,
+          "p95": 49309,
+          "p99": 57382,
+          "p999": 68141
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 160.84,
+            "max": 160.84,
+            "mean": 160.84
+          },
+          "cpu": {
+            "min": 27.66,
+            "max": 27.66,
+            "mean": 27.66
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 80.58,
+            "max": 80.58,
+            "mean": 80.58
+          },
+          "cpu": {
+            "min": 156.97,
+            "max": 156.97,
+            "mean": 156.97
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5776.08,
+      "totalRequests": 173283,
+      "latency": {
+        "min": 361,
+        "mean": 6194,
+        "max": 89714,
+        "pstdev": 12241,
+        "percentiles": {
+          "p50": 2703,
+          "p75": 4241,
+          "p80": 4791,
+          "p90": 7296,
+          "p95": 47755,
+          "p99": 58537,
+          "p999": 70676
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 186.49,
+            "max": 186.49,
+            "mean": 186.49
+          },
+          "cpu": {
+            "min": 61.39,
+            "max": 61.39,
+            "mean": 61.39
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.82,
+            "max": 130.82,
+            "mean": 130.82
+          },
+          "cpu": {
+            "min": 196.17,
+            "max": 196.17,
+            "mean": 196.17
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6128.86,
+      "totalRequests": 183866,
+      "latency": {
+        "min": 351,
+        "mean": 5824,
+        "max": 73633,
+        "pstdev": 11470,
+        "percentiles": {
+          "p50": 2578,
+          "p75": 4038,
+          "p80": 4570,
+          "p90": 6823,
+          "p95": 46927,
+          "p99": 54392,
+          "p999": 60213
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 218.36,
+            "max": 218.36,
+            "mean": 218.36
+          },
+          "cpu": {
+            "min": 114.4,
+            "max": 114.4,
+            "mean": 114.4
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 118.8,
+            "max": 118.8,
+            "mean": 118.8
+          },
+          "cpu": {
+            "min": 358.03,
+            "max": 358.03,
+            "mean": 358.03
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6065.62,
+      "totalRequests": 181969,
+      "latency": {
+        "min": 378,
+        "mean": 5877,
+        "max": 82526,
+        "pstdev": 11643,
+        "percentiles": {
+          "p50": 2588,
+          "p75": 4048,
+          "p80": 4587,
+          "p90": 6876,
+          "p95": 47429,
+          "p99": 54710,
+          "p999": 62111
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 222.42,
+            "max": 222.42,
+            "mean": 222.42
+          },
+          "cpu": {
+            "min": 113.86,
+            "max": 113.86,
+            "mean": 113.86
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.23,
+            "max": 119.23,
+            "mean": 119.23
+          },
+          "cpu": {
+            "min": 327.6,
+            "max": 327.6,
+            "mean": 327.6
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 6045.71,
+      "totalRequests": 181360,
+      "latency": {
+        "min": 388,
+        "mean": 6024,
+        "max": 80216,
+        "pstdev": 11596,
+        "percentiles": {
+          "p50": 2802,
+          "p75": 4253,
+          "p80": 4761,
+          "p90": 6951,
+          "p95": 47183,
+          "p99": 54065,
+          "p999": 59455
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 142.37,
+            "max": 142.37,
+            "mean": 142.37
+          },
+          "cpu": {
+            "min": 112.77,
+            "max": 112.77,
+            "mean": 112.77
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.54,
+            "max": 119.54,
+            "mean": 119.54
+          },
+          "cpu": {
+            "min": 296.95,
+            "max": 296.95,
+            "mean": 296.95
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5956.66,
+      "totalRequests": 178700,
+      "latency": {
+        "min": 379,
+        "mean": 6153,
+        "max": 85528,
+        "pstdev": 12032,
+        "percentiles": {
+          "p50": 2640,
+          "p75": 4362,
+          "p80": 4961,
+          "p90": 7625,
+          "p95": 47886,
+          "p99": 55965,
+          "p999": 65695
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 148.72,
+            "max": 148.72,
+            "mean": 148.72
+          },
+          "cpu": {
+            "min": 102.49,
+            "max": 102.49,
+            "mean": 102.49
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.98,
+            "max": 130.98,
+            "mean": 130.98
+          },
+          "cpu": {
+            "min": 264.96,
+            "max": 264.96,
+            "mean": 264.96
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5958.61,
+      "totalRequests": 178765,
+      "latency": {
+        "min": 362,
+        "mean": 5967,
+        "max": 83480,
+        "pstdev": 11671,
+        "percentiles": {
+          "p50": 2714,
+          "p75": 4156,
+          "p80": 4658,
+          "p90": 6839,
+          "p95": 46901,
+          "p99": 54601,
+          "p999": 65464
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 164.87,
+            "max": 164.87,
+            "mean": 164.87
+          },
+          "cpu": {
+            "min": 91.25,
+            "max": 91.25,
+            "mean": 91.25
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.98,
+            "max": 130.98,
+            "mean": 130.98
+          },
+          "cpu": {
+            "min": 231.98,
+            "max": 231.98,
+            "mean": 231.98
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.4.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.4.ts
new file mode 100644
index 000000000..2a24864e7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.4.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.4
+// Generated on 2025-06-17T19:50:26.764Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.4",
+    "runId": "1.2.4-1750189826764",
+    "date": "2024-12-13",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.4",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5982.38,
+      "totalRequests": 179472,
+      "latency": {
+        "min": 349,
+        "mean": 6011,
+        "max": 83349,
+        "pstdev": 11061,
+        "percentiles": {
+          "p50": 2829,
+          "p75": 4477,
+          "p80": 5098,
+          "p90": 7842,
+          "p95": 43255,
+          "p99": 53350,
+          "p999": 59346
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 110.54,
+            "max": 110.54,
+            "mean": 110.54
+          },
+          "cpu": {
+            "min": 0.77,
+            "max": 0.77,
+            "mean": 0.77
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 24.25,
+            "max": 24.25,
+            "mean": 24.25
+          },
+          "cpu": {
+            "min": 30.44,
+            "max": 30.44,
+            "mean": 30.44
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5917.46,
+      "totalRequests": 177524,
+      "latency": {
+        "min": 361,
+        "mean": 6164,
+        "max": 70909,
+        "pstdev": 11809,
+        "percentiles": {
+          "p50": 2843,
+          "p75": 4366,
+          "p80": 4876,
+          "p90": 7109,
+          "p95": 47788,
+          "p99": 54372,
+          "p999": 59932
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 119.89,
+            "max": 119.89,
+            "mean": 119.89
+          },
+          "cpu": {
+            "min": 1.61,
+            "max": 1.61,
+            "mean": 1.61
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 30.43,
+            "max": 30.43,
+            "mean": 30.43
+          },
+          "cpu": {
+            "min": 61.13,
+            "max": 61.13,
+            "mean": 61.13
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5930.25,
+      "totalRequests": 177910,
+      "latency": {
+        "min": 398,
+        "mean": 6027,
+        "max": 92041,
+        "pstdev": 11760,
+        "percentiles": {
+          "p50": 2652,
+          "p75": 4198,
+          "p80": 4747,
+          "p90": 7135,
+          "p95": 47513,
+          "p99": 55083,
+          "p999": 61542
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 129.08,
+            "max": 129.08,
+            "mean": 129.08
+          },
+          "cpu": {
+            "min": 3.05,
+            "max": 3.05,
+            "mean": 3.05
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 36.57,
+            "max": 36.57,
+            "mean": 36.57
+          },
+          "cpu": {
+            "min": 92.01,
+            "max": 92.01,
+            "mean": 92.01
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5612.73,
+      "totalRequests": 168382,
+      "latency": {
+        "min": 368,
+        "mean": 6361,
+        "max": 108085,
+        "pstdev": 12378,
+        "percentiles": {
+          "p50": 2817,
+          "p75": 4383,
+          "p80": 4929,
+          "p90": 7356,
+          "p95": 48795,
+          "p99": 56586,
+          "p999": 68399
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 140.63,
+            "max": 140.63,
+            "mean": 140.63
+          },
+          "cpu": {
+            "min": 15.35,
+            "max": 15.35,
+            "mean": 15.35
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 58.77,
+            "max": 58.77,
+            "mean": 58.77
+          },
+          "cpu": {
+            "min": 125.44,
+            "max": 125.44,
+            "mean": 125.44
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5799.01,
+      "totalRequests": 173974,
+      "latency": {
+        "min": 378,
+        "mean": 6166,
+        "max": 97771,
+        "pstdev": 11964,
+        "percentiles": {
+          "p50": 2818,
+          "p75": 4251,
+          "p80": 4742,
+          "p90": 6922,
+          "p95": 47560,
+          "p99": 55281,
+          "p999": 68112
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 152.5,
+            "max": 152.5,
+            "mean": 152.5
+          },
+          "cpu": {
+            "min": 28.38,
+            "max": 28.38,
+            "mean": 28.38
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 78.94,
+            "max": 78.94,
+            "mean": 78.94
+          },
+          "cpu": {
+            "min": 159.67,
+            "max": 159.67,
+            "mean": 159.67
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5474.43,
+      "totalRequests": 164233,
+      "latency": {
+        "min": 386,
+        "mean": 6534,
+        "max": 109809,
+        "pstdev": 12936,
+        "percentiles": {
+          "p50": 2656,
+          "p75": 4361,
+          "p80": 5013,
+          "p90": 8074,
+          "p95": 49516,
+          "p99": 60213,
+          "p999": 73678
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 183.98,
+            "max": 183.98,
+            "mean": 183.98
+          },
+          "cpu": {
+            "min": 62.29,
+            "max": 62.29,
+            "mean": 62.29
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 131.16,
+            "max": 131.16,
+            "mean": 131.16
+          },
+          "cpu": {
+            "min": 200.46,
+            "max": 200.46,
+            "mean": 200.46
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5816.39,
+      "totalRequests": 174492,
+      "latency": {
+        "min": 340,
+        "mean": 6131,
+        "max": 85209,
+        "pstdev": 11868,
+        "percentiles": {
+          "p50": 2730,
+          "p75": 4264,
+          "p80": 4816,
+          "p90": 7369,
+          "p95": 47933,
+          "p99": 54984,
+          "p999": 61820
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 195,
+            "max": 195,
+            "mean": 195
+          },
+          "cpu": {
+            "min": 116.53,
+            "max": 116.53,
+            "mean": 116.53
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 120.37,
+            "max": 120.37,
+            "mean": 120.37
+          },
+          "cpu": {
+            "min": 363.61,
+            "max": 363.61,
+            "mean": 363.61
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5848.8,
+      "totalRequests": 175470,
+      "latency": {
+        "min": 372,
+        "mean": 6285,
+        "max": 77979,
+        "pstdev": 12136,
+        "percentiles": {
+          "p50": 2760,
+          "p75": 4334,
+          "p80": 4906,
+          "p90": 7492,
+          "p95": 48553,
+          "p99": 55732,
+          "p999": 63037
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 205.2,
+            "max": 205.2,
+            "mean": 205.2
+          },
+          "cpu": {
+            "min": 115.88,
+            "max": 115.88,
+            "mean": 115.88
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 120.26,
+            "max": 120.26,
+            "mean": 120.26
+          },
+          "cpu": {
+            "min": 333.06,
+            "max": 333.06,
+            "mean": 333.06
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5897.55,
+      "totalRequests": 176927,
+      "latency": {
+        "min": 365,
+        "mean": 6054,
+        "max": 78041,
+        "pstdev": 11770,
+        "percentiles": {
+          "p50": 2761,
+          "p75": 4253,
+          "p80": 4770,
+          "p90": 6934,
+          "p95": 47628,
+          "p99": 54935,
+          "p999": 62232
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 201.78,
+            "max": 201.78,
+            "mean": 201.78
+          },
+          "cpu": {
+            "min": 114.84,
+            "max": 114.84,
+            "mean": 114.84
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.23,
+            "max": 122.23,
+            "mean": 122.23
+          },
+          "cpu": {
+            "min": 302.66,
+            "max": 302.66,
+            "mean": 302.66
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5764.69,
+      "totalRequests": 172941,
+      "latency": {
+        "min": 376,
+        "mean": 6540,
+        "max": 87822,
+        "pstdev": 12528,
+        "percentiles": {
+          "p50": 2847,
+          "p75": 4511,
+          "p80": 5118,
+          "p90": 7907,
+          "p95": 49336,
+          "p99": 56737,
+          "p999": 66895
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 237.36,
+            "max": 237.36,
+            "mean": 237.36
+          },
+          "cpu": {
+            "min": 104.3,
+            "max": 104.3,
+            "mean": 104.3
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 131.2,
+            "max": 131.2,
+            "mean": 131.2
+          },
+          "cpu": {
+            "min": 270.32,
+            "max": 270.32,
+            "mean": 270.32
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5709.58,
+      "totalRequests": 171290,
+      "latency": {
+        "min": 350,
+        "mean": 6172,
+        "max": 93663,
+        "pstdev": 11978,
+        "percentiles": {
+          "p50": 2864,
+          "p75": 4285,
+          "p80": 4782,
+          "p90": 6980,
+          "p95": 47689,
+          "p99": 55115,
+          "p999": 67440
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 158.41,
+            "max": 158.41,
+            "mean": 158.41
+          },
+          "cpu": {
+            "min": 92.69,
+            "max": 92.69,
+            "mean": 92.69
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 131.32,
+            "max": 131.32,
+            "mean": 131.32
+          },
+          "cpu": {
+            "min": 236.85,
+            "max": 236.85,
+            "mean": 236.85
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.5.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.5.ts
new file mode 100644
index 000000000..e4792927f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.5.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.5
+// Generated on 2025-06-17T19:50:26.766Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.5",
+    "runId": "1.2.5-1750189826766",
+    "date": "2025-01-14",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.5",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5704.46,
+      "totalRequests": 171136,
+      "latency": {
+        "min": 370,
+        "mean": 6520,
+        "max": 74477,
+        "pstdev": 11781,
+        "percentiles": {
+          "p50": 3051,
+          "p75": 4913,
+          "p80": 5565,
+          "p90": 8700,
+          "p95": 47091,
+          "p99": 54638,
+          "p999": 59404
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 112.07,
+            "max": 112.07,
+            "mean": 112.07
+          },
+          "cpu": {
+            "min": 0.76,
+            "max": 0.76,
+            "mean": 0.76
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 24.38,
+            "max": 24.38,
+            "mean": 24.38
+          },
+          "cpu": {
+            "min": 30.47,
+            "max": 30.47,
+            "mean": 30.47
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5647.86,
+      "totalRequests": 169439,
+      "latency": {
+        "min": 379,
+        "mean": 6313,
+        "max": 80498,
+        "pstdev": 11935,
+        "percentiles": {
+          "p50": 2854,
+          "p75": 4550,
+          "p80": 5158,
+          "p90": 7820,
+          "p95": 48025,
+          "p99": 54390,
+          "p999": 60321
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 123.4,
+            "max": 123.4,
+            "mean": 123.4
+          },
+          "cpu": {
+            "min": 1.48,
+            "max": 1.48,
+            "mean": 1.48
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 30.55,
+            "max": 30.55,
+            "mean": 30.55
+          },
+          "cpu": {
+            "min": 61.09,
+            "max": 61.09,
+            "mean": 61.09
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5529.29,
+      "totalRequests": 165879,
+      "latency": {
+        "min": 379,
+        "mean": 6240,
+        "max": 73539,
+        "pstdev": 12017,
+        "percentiles": {
+          "p50": 2818,
+          "p75": 4510,
+          "p80": 5068,
+          "p90": 7413,
+          "p95": 48300,
+          "p99": 54171,
+          "p999": 59308
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 139.7,
+            "max": 139.7,
+            "mean": 139.7
+          },
+          "cpu": {
+            "min": 2.92,
+            "max": 2.92,
+            "mean": 2.92
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 36.73,
+            "max": 36.73,
+            "mean": 36.73
+          },
+          "cpu": {
+            "min": 91.9,
+            "max": 91.9,
+            "mean": 91.9
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5542.3,
+      "totalRequests": 166274,
+      "latency": {
+        "min": 365,
+        "mean": 6463,
+        "max": 81305,
+        "pstdev": 12357,
+        "percentiles": {
+          "p50": 2890,
+          "p75": 4545,
+          "p80": 5116,
+          "p90": 7585,
+          "p95": 49043,
+          "p99": 55365,
+          "p999": 64399
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 146.11,
+            "max": 146.11,
+            "mean": 146.11
+          },
+          "cpu": {
+            "min": 15.2,
+            "max": 15.2,
+            "mean": 15.2
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 58.91,
+            "max": 58.91,
+            "mean": 58.91
+          },
+          "cpu": {
+            "min": 124.96,
+            "max": 124.96,
+            "mean": 124.96
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5407.59,
+      "totalRequests": 162228,
+      "latency": {
+        "min": 363,
+        "mean": 6396,
+        "max": 88236,
+        "pstdev": 12419,
+        "percentiles": {
+          "p50": 2816,
+          "p75": 4450,
+          "p80": 5012,
+          "p90": 7485,
+          "p95": 48762,
+          "p99": 55666,
+          "p999": 67457
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 154.01,
+            "max": 154.01,
+            "mean": 154.01
+          },
+          "cpu": {
+            "min": 27.98,
+            "max": 27.98,
+            "mean": 27.98
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 81.11,
+            "max": 81.11,
+            "mean": 81.11
+          },
+          "cpu": {
+            "min": 158.85,
+            "max": 158.85,
+            "mean": 158.85
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5247.32,
+      "totalRequests": 157425,
+      "latency": {
+        "min": 374,
+        "mean": 6604,
+        "max": 106491,
+        "pstdev": 12903,
+        "percentiles": {
+          "p50": 2880,
+          "p75": 4514,
+          "p80": 5089,
+          "p90": 7639,
+          "p95": 49453,
+          "p99": 58750,
+          "p999": 71970
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 183.52,
+            "max": 183.52,
+            "mean": 183.52
+          },
+          "cpu": {
+            "min": 61.85,
+            "max": 61.85,
+            "mean": 61.85
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.33,
+            "max": 129.33,
+            "mean": 129.33
+          },
+          "cpu": {
+            "min": 198.98,
+            "max": 198.98,
+            "mean": 198.98
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5668.05,
+      "totalRequests": 170048,
+      "latency": {
+        "min": 366,
+        "mean": 6143,
+        "max": 73551,
+        "pstdev": 12054,
+        "percentiles": {
+          "p50": 2726,
+          "p75": 4279,
+          "p80": 4799,
+          "p90": 7123,
+          "p95": 48988,
+          "p99": 54704,
+          "p999": 58812
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 138.57,
+            "max": 138.57,
+            "mean": 138.57
+          },
+          "cpu": {
+            "min": 115.2,
+            "max": 115.2,
+            "mean": 115.2
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.88,
+            "max": 121.88,
+            "mean": 121.88
+          },
+          "cpu": {
+            "min": 361.89,
+            "max": 361.89,
+            "mean": 361.89
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5579.16,
+      "totalRequests": 167375,
+      "latency": {
+        "min": 353,
+        "mean": 6190,
+        "max": 87244,
+        "pstdev": 12028,
+        "percentiles": {
+          "p50": 2803,
+          "p75": 4357,
+          "p80": 4889,
+          "p90": 7110,
+          "p95": 48482,
+          "p99": 54329,
+          "p999": 59113
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 132.83,
+            "max": 132.83,
+            "mean": 132.83
+          },
+          "cpu": {
+            "min": 114.63,
+            "max": 114.63,
+            "mean": 114.63
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.16,
+            "max": 122.16,
+            "mean": 122.16
+          },
+          "cpu": {
+            "min": 331.47,
+            "max": 331.47,
+            "mean": 331.47
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5581.7,
+      "totalRequests": 167453,
+      "latency": {
+        "min": 377,
+        "mean": 6525,
+        "max": 72724,
+        "pstdev": 12286,
+        "percentiles": {
+          "p50": 2929,
+          "p75": 4641,
+          "p80": 5219,
+          "p90": 7915,
+          "p95": 48732,
+          "p99": 54810,
+          "p999": 61450
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 133.91,
+            "max": 133.91,
+            "mean": 133.91
+          },
+          "cpu": {
+            "min": 113.44,
+            "max": 113.44,
+            "mean": 113.44
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.02,
+            "max": 122.02,
+            "mean": 122.02
+          },
+          "cpu": {
+            "min": 300.79,
+            "max": 300.79,
+            "mean": 300.79
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5447.53,
+      "totalRequests": 163426,
+      "latency": {
+        "min": 368,
+        "mean": 6540,
+        "max": 88612,
+        "pstdev": 12451,
+        "percentiles": {
+          "p50": 2904,
+          "p75": 4546,
+          "p80": 5128,
+          "p90": 7692,
+          "p95": 49305,
+          "p99": 55422,
+          "p999": 64116
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 145.28,
+            "max": 145.28,
+            "mean": 145.28
+          },
+          "cpu": {
+            "min": 102.98,
+            "max": 102.98,
+            "mean": 102.98
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.93,
+            "max": 129.93,
+            "mean": 129.93
+          },
+          "cpu": {
+            "min": 268.5,
+            "max": 268.5,
+            "mean": 268.5
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5437.61,
+      "totalRequests": 163132,
+      "latency": {
+        "min": 383,
+        "mean": 6527,
+        "max": 102998,
+        "pstdev": 12600,
+        "percentiles": {
+          "p50": 2827,
+          "p75": 4470,
+          "p80": 5070,
+          "p90": 7714,
+          "p95": 49029,
+          "p99": 56436,
+          "p999": 66684
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 164.07,
+            "max": 164.07,
+            "mean": 164.07
+          },
+          "cpu": {
+            "min": 91.64,
+            "max": 91.64,
+            "mean": 91.64
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.93,
+            "max": 129.93,
+            "mean": 129.93
+          },
+          "cpu": {
+            "min": 235.61,
+            "max": 235.61,
+            "mean": 235.61
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.6.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.6.ts
new file mode 100644
index 000000000..53008f394
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.6.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.6
+// Generated on 2025-06-17T19:50:26.767Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.6",
+    "runId": "1.2.6-1750189826767",
+    "date": "2025-01-23",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.6",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5668.03,
+      "totalRequests": 170041,
+      "latency": {
+        "min": 354,
+        "mean": 6713,
+        "max": 73658,
+        "pstdev": 11906,
+        "percentiles": {
+          "p50": 3142,
+          "p75": 5170,
+          "p80": 5865,
+          "p90": 9278,
+          "p95": 47425,
+          "p99": 54870,
+          "p999": 59602
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 108.82,
+            "max": 108.82,
+            "mean": 108.82
+          },
+          "cpu": {
+            "min": 0.76,
+            "max": 0.76,
+            "mean": 0.76
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.38,
+            "max": 25.38,
+            "mean": 25.38
+          },
+          "cpu": {
+            "min": 30.51,
+            "max": 30.51,
+            "mean": 30.51
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5542.06,
+      "totalRequests": 166262,
+      "latency": {
+        "min": 380,
+        "mean": 6117,
+        "max": 73658,
+        "pstdev": 11949,
+        "percentiles": {
+          "p50": 2749,
+          "p75": 4310,
+          "p80": 4842,
+          "p90": 7067,
+          "p95": 48484,
+          "p99": 54499,
+          "p999": 59725
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 135.08,
+            "max": 135.08,
+            "mean": 135.08
+          },
+          "cpu": {
+            "min": 1.53,
+            "max": 1.53,
+            "mean": 1.53
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 31.53,
+            "max": 31.53,
+            "mean": 31.53
+          },
+          "cpu": {
+            "min": 61.17,
+            "max": 61.17,
+            "mean": 61.17
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5556.06,
+      "totalRequests": 166682,
+      "latency": {
+        "min": 363,
+        "mean": 6439,
+        "max": 100163,
+        "pstdev": 12297,
+        "percentiles": {
+          "p50": 2891,
+          "p75": 4506,
+          "p80": 5050,
+          "p90": 7595,
+          "p95": 49078,
+          "p99": 54935,
+          "p999": 60456
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 140.09,
+            "max": 140.09,
+            "mean": 140.09
+          },
+          "cpu": {
+            "min": 2.88,
+            "max": 2.88,
+            "mean": 2.88
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 37.7,
+            "max": 37.7,
+            "mean": 37.7
+          },
+          "cpu": {
+            "min": 91.98,
+            "max": 91.98,
+            "mean": 91.98
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5462.58,
+      "totalRequests": 163882,
+      "latency": {
+        "min": 372,
+        "mean": 6376,
+        "max": 78544,
+        "pstdev": 12289,
+        "percentiles": {
+          "p50": 2853,
+          "p75": 4454,
+          "p80": 5002,
+          "p90": 7458,
+          "p95": 49076,
+          "p99": 55132,
+          "p999": 63879
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 146.71,
+            "max": 146.71,
+            "mean": 146.71
+          },
+          "cpu": {
+            "min": 15.64,
+            "max": 15.64,
+            "mean": 15.64
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 59.89,
+            "max": 59.89,
+            "mean": 59.89
+          },
+          "cpu": {
+            "min": 125.41,
+            "max": 125.41,
+            "mean": 125.41
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5427.5,
+      "totalRequests": 162825,
+      "latency": {
+        "min": 359,
+        "mean": 6562,
+        "max": 97148,
+        "pstdev": 12598,
+        "percentiles": {
+          "p50": 2881,
+          "p75": 4518,
+          "p80": 5091,
+          "p90": 7774,
+          "p95": 49301,
+          "p99": 56102,
+          "p999": 67338
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 155.26,
+            "max": 155.26,
+            "mean": 155.26
+          },
+          "cpu": {
+            "min": 28.52,
+            "max": 28.52,
+            "mean": 28.52
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 82.08,
+            "max": 82.08,
+            "mean": 82.08
+          },
+          "cpu": {
+            "min": 159.72,
+            "max": 159.72,
+            "mean": 159.72
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5261.62,
+      "totalRequests": 157849,
+      "latency": {
+        "min": 373,
+        "mean": 6972,
+        "max": 115060,
+        "pstdev": 13251,
+        "percentiles": {
+          "p50": 3015,
+          "p75": 4770,
+          "p80": 5385,
+          "p90": 8293,
+          "p95": 50296,
+          "p99": 59930,
+          "p999": 70590
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 188.13,
+            "max": 188.13,
+            "mean": 188.13
+          },
+          "cpu": {
+            "min": 61.78,
+            "max": 61.78,
+            "mean": 61.78
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.35,
+            "max": 130.35,
+            "mean": 130.35
+          },
+          "cpu": {
+            "min": 199.1,
+            "max": 199.1,
+            "mean": 199.1
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5543.17,
+      "totalRequests": 166299,
+      "latency": {
+        "min": 360,
+        "mean": 6447,
+        "max": 75276,
+        "pstdev": 12396,
+        "percentiles": {
+          "p50": 2866,
+          "p75": 4486,
+          "p80": 5040,
+          "p90": 7527,
+          "p95": 49663,
+          "p99": 55240,
+          "p999": 60647
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 129.36,
+            "max": 129.36,
+            "mean": 129.36
+          },
+          "cpu": {
+            "min": 115.21,
+            "max": 115.21,
+            "mean": 115.21
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.58,
+            "max": 122.58,
+            "mean": 122.58
+          },
+          "cpu": {
+            "min": 362.6,
+            "max": 362.6,
+            "mean": 362.6
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5522.73,
+      "totalRequests": 165682,
+      "latency": {
+        "min": 384,
+        "mean": 6098,
+        "max": 68321,
+        "pstdev": 11922,
+        "percentiles": {
+          "p50": 2776,
+          "p75": 4326,
+          "p80": 4838,
+          "p90": 6958,
+          "p95": 48431,
+          "p99": 54296,
+          "p999": 58857
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 140.97,
+            "max": 140.97,
+            "mean": 140.97
+          },
+          "cpu": {
+            "min": 114.57,
+            "max": 114.57,
+            "mean": 114.57
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.83,
+            "max": 122.83,
+            "mean": 122.83
+          },
+          "cpu": {
+            "min": 332.12,
+            "max": 332.12,
+            "mean": 332.12
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5500.66,
+      "totalRequests": 165023,
+      "latency": {
+        "min": 360,
+        "mean": 6301,
+        "max": 80400,
+        "pstdev": 12064,
+        "percentiles": {
+          "p50": 2833,
+          "p75": 4483,
+          "p80": 5035,
+          "p90": 7574,
+          "p95": 48777,
+          "p99": 54876,
+          "p999": 60850
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 132.45,
+            "max": 132.45,
+            "mean": 132.45
+          },
+          "cpu": {
+            "min": 113.5,
+            "max": 113.5,
+            "mean": 113.5
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.84,
+            "max": 122.84,
+            "mean": 122.84
+          },
+          "cpu": {
+            "min": 301.26,
+            "max": 301.26,
+            "mean": 301.26
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5453.33,
+      "totalRequests": 163603,
+      "latency": {
+        "min": 357,
+        "mean": 6324,
+        "max": 86024,
+        "pstdev": 12138,
+        "percentiles": {
+          "p50": 2842,
+          "p75": 4429,
+          "p80": 4967,
+          "p90": 7393,
+          "p95": 48201,
+          "p99": 54683,
+          "p999": 65251
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 150.62,
+            "max": 150.62,
+            "mean": 150.62
+          },
+          "cpu": {
+            "min": 103.11,
+            "max": 103.11,
+            "mean": 103.11
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.34,
+            "max": 130.34,
+            "mean": 130.34
+          },
+          "cpu": {
+            "min": 269.03,
+            "max": 269.03,
+            "mean": 269.03
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5402.96,
+      "totalRequests": 162089,
+      "latency": {
+        "min": 371,
+        "mean": 6575,
+        "max": 90804,
+        "pstdev": 12621,
+        "percentiles": {
+          "p50": 2877,
+          "p75": 4543,
+          "p80": 5114,
+          "p90": 7832,
+          "p95": 49375,
+          "p99": 56092,
+          "p999": 69132
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 159.25,
+            "max": 159.25,
+            "mean": 159.25
+          },
+          "cpu": {
+            "min": 91.66,
+            "max": 91.66,
+            "mean": 91.66
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 130.34,
+            "max": 130.34,
+            "mean": 130.34
+          },
+          "cpu": {
+            "min": 235.83,
+            "max": 235.83,
+            "mean": 235.83
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.7.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.7.ts
new file mode 100644
index 000000000..616900c2f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.7.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.7
+// Generated on 2025-06-17T19:50:26.769Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.7",
+    "runId": "1.2.7-1750189826769",
+    "date": "2025-03-06",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.7",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5984.83,
+      "totalRequests": 179545,
+      "latency": {
+        "min": 402,
+        "mean": 12033,
+        "max": 92835,
+        "pstdev": 16725,
+        "percentiles": {
+          "p50": 5655,
+          "p75": 9809,
+          "p80": 11804,
+          "p90": 49971,
+          "p95": 55760,
+          "p99": 64241,
+          "p999": 73961
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 112.35,
+            "max": 112.35,
+            "mean": 112.35
+          },
+          "cpu": {
+            "min": 0.76,
+            "max": 0.76,
+            "mean": 0.76
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 28.29,
+            "max": 28.29,
+            "mean": 28.29
+          },
+          "cpu": {
+            "min": 30.49,
+            "max": 30.49,
+            "mean": 30.49
+          }
+        }
+      },
+      "poolOverflow": 323,
+      "upstreamConnections": 77
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5564.85,
+      "totalRequests": 166949,
+      "latency": {
+        "min": 362,
+        "mean": 6416,
+        "max": 73261,
+        "pstdev": 12268,
+        "percentiles": {
+          "p50": 2855,
+          "p75": 4514,
+          "p80": 5094,
+          "p90": 7660,
+          "p95": 49031,
+          "p99": 54939,
+          "p999": 60436
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 125.94,
+            "max": 125.94,
+            "mean": 125.94
+          },
+          "cpu": {
+            "min": 1.52,
+            "max": 1.52,
+            "mean": 1.52
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 34.46,
+            "max": 34.46,
+            "mean": 34.46
+          },
+          "cpu": {
+            "min": 61.11,
+            "max": 61.11,
+            "mean": 61.11
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5618.23,
+      "totalRequests": 168547,
+      "latency": {
+        "min": 372,
+        "mean": 6834,
+        "max": 85766,
+        "pstdev": 12643,
+        "percentiles": {
+          "p50": 3107,
+          "p75": 4954,
+          "p80": 5560,
+          "p90": 8454,
+          "p95": 49485,
+          "p99": 55513,
+          "p999": 61272
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 132.05,
+            "max": 132.05,
+            "mean": 132.05
+          },
+          "cpu": {
+            "min": 2.92,
+            "max": 2.92,
+            "mean": 2.92
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 40.63,
+            "max": 40.63,
+            "mean": 40.63
+          },
+          "cpu": {
+            "min": 92.02,
+            "max": 92.02,
+            "mean": 92.02
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5506.26,
+      "totalRequests": 165193,
+      "latency": {
+        "min": 383,
+        "mean": 6670,
+        "max": 85905,
+        "pstdev": 12677,
+        "percentiles": {
+          "p50": 2946,
+          "p75": 4659,
+          "p80": 5243,
+          "p90": 7891,
+          "p95": 49846,
+          "p99": 56096,
+          "p999": 65185
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 146.09,
+            "max": 146.09,
+            "mean": 146.09
+          },
+          "cpu": {
+            "min": 15.43,
+            "max": 15.43,
+            "mean": 15.43
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 62.86,
+            "max": 62.86,
+            "mean": 62.86
+          },
+          "cpu": {
+            "min": 125.21,
+            "max": 125.21,
+            "mean": 125.21
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5580.92,
+      "totalRequests": 167428,
+      "latency": {
+        "min": 310,
+        "mean": 6716,
+        "max": 89178,
+        "pstdev": 12233,
+        "percentiles": {
+          "p50": 3157,
+          "p75": 4861,
+          "p80": 5446,
+          "p90": 8231,
+          "p95": 47419,
+          "p99": 54634,
+          "p999": 65587
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 163.49,
+            "max": 163.49,
+            "mean": 163.49
+          },
+          "cpu": {
+            "min": 28.15,
+            "max": 28.15,
+            "mean": 28.15
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 83.07,
+            "max": 83.07,
+            "mean": 83.07
+          },
+          "cpu": {
+            "min": 159.15,
+            "max": 159.15,
+            "mean": 159.15
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5298.3,
+      "totalRequests": 158951,
+      "latency": {
+        "min": 369,
+        "mean": 6537,
+        "max": 122015,
+        "pstdev": 12654,
+        "percentiles": {
+          "p50": 2914,
+          "p75": 4472,
+          "p80": 5012,
+          "p90": 7402,
+          "p95": 48639,
+          "p99": 58097,
+          "p999": 69103
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 187.81,
+            "max": 187.81,
+            "mean": 187.81
+          },
+          "cpu": {
+            "min": 62.41,
+            "max": 62.41,
+            "mean": 62.41
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 133.27,
+            "max": 133.27,
+            "mean": 133.27
+          },
+          "cpu": {
+            "min": 199.13,
+            "max": 199.13,
+            "mean": 199.13
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5623.57,
+      "totalRequests": 168711,
+      "latency": {
+        "min": 380,
+        "mean": 7190,
+        "max": 75063,
+        "pstdev": 13103,
+        "percentiles": {
+          "p50": 3211,
+          "p75": 5102,
+          "p80": 5772,
+          "p90": 9144,
+          "p95": 50722,
+          "p99": 56260,
+          "p999": 61515
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 132.38,
+            "max": 132.38,
+            "mean": 132.38
+          },
+          "cpu": {
+            "min": 116.08,
+            "max": 116.08,
+            "mean": 116.08
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 128.69,
+            "max": 128.69,
+            "mean": 128.69
+          },
+          "cpu": {
+            "min": 362.3,
+            "max": 362.3,
+            "mean": 362.3
+          }
+        }
+      },
+      "poolOverflow": 357,
+      "upstreamConnections": 43
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5516.59,
+      "totalRequests": 165498,
+      "latency": {
+        "min": 329,
+        "mean": 6044,
+        "max": 69902,
+        "pstdev": 11632,
+        "percentiles": {
+          "p50": 2893,
+          "p75": 4337,
+          "p80": 4790,
+          "p90": 6742,
+          "p95": 47155,
+          "p99": 53372,
+          "p999": 58073
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 144.02,
+            "max": 144.02,
+            "mean": 144.02
+          },
+          "cpu": {
+            "min": 115.5,
+            "max": 115.5,
+            "mean": 115.5
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.14,
+            "max": 129.14,
+            "mean": 129.14
+          },
+          "cpu": {
+            "min": 331.76,
+            "max": 331.76,
+            "mean": 331.76
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5515.82,
+      "totalRequests": 165475,
+      "latency": {
+        "min": 380,
+        "mean": 6483,
+        "max": 79159,
+        "pstdev": 12363,
+        "percentiles": {
+          "p50": 2872,
+          "p75": 4545,
+          "p80": 5131,
+          "p90": 7760,
+          "p95": 49190,
+          "p99": 55408,
+          "p999": 61890
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 135.79,
+            "max": 135.79,
+            "mean": 135.79
+          },
+          "cpu": {
+            "min": 114.36,
+            "max": 114.36,
+            "mean": 114.36
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 109,
+            "max": 109,
+            "mean": 109
+          },
+          "cpu": {
+            "min": 301.13,
+            "max": 301.13,
+            "mean": 301.13
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5403.53,
+      "totalRequests": 162106,
+      "latency": {
+        "min": 354,
+        "mean": 6429,
+        "max": 83423,
+        "pstdev": 12305,
+        "percentiles": {
+          "p50": 2864,
+          "p75": 4496,
+          "p80": 5072,
+          "p90": 7504,
+          "p95": 48885,
+          "p99": 55414,
+          "p999": 63565
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 155.42,
+            "max": 155.42,
+            "mean": 155.42
+          },
+          "cpu": {
+            "min": 103.9,
+            "max": 103.9,
+            "mean": 103.9
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 133.59,
+            "max": 133.59,
+            "mean": 133.59
+          },
+          "cpu": {
+            "min": 268.85,
+            "max": 268.85,
+            "mean": 268.85
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5405.24,
+      "totalRequests": 162162,
+      "latency": {
+        "min": 387,
+        "mean": 6615,
+        "max": 90812,
+        "pstdev": 12660,
+        "percentiles": {
+          "p50": 2913,
+          "p75": 4593,
+          "p80": 5174,
+          "p90": 7866,
+          "p95": 49461,
+          "p99": 56510,
+          "p999": 67248
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 165.58,
+            "max": 165.58,
+            "mean": 165.58
+          },
+          "cpu": {
+            "min": 92.35,
+            "max": 92.35,
+            "mean": 92.35
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 133.42,
+            "max": 133.42,
+            "mean": 133.42
+          },
+          "cpu": {
+            "min": 235.87,
+            "max": 235.87,
+            "mean": 235.87
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.2.8.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.2.8.ts
new file mode 100644
index 000000000..68ca5042a
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.2.8.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.2.8
+// Generated on 2025-06-17T19:50:26.771Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.2.8",
+    "runId": "1.2.8-1750189826771",
+    "date": "2025-03-25",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.2.8",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5878.23,
+      "totalRequests": 176347,
+      "latency": {
+        "min": 376,
+        "mean": 9154,
+        "max": 75661,
+        "pstdev": 14181,
+        "percentiles": {
+          "p50": 4294,
+          "p75": 7182,
+          "p80": 8292,
+          "p90": 22716,
+          "p95": 52056,
+          "p99": 58071,
+          "p999": 64841
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 108.89,
+            "max": 108.89,
+            "mean": 108.89
+          },
+          "cpu": {
+            "min": 0.77,
+            "max": 0.77,
+            "mean": 0.77
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 28.23,
+            "max": 28.23,
+            "mean": 28.23
+          },
+          "cpu": {
+            "min": 30.48,
+            "max": 30.48,
+            "mean": 30.48
+          }
+        }
+      },
+      "poolOverflow": 342,
+      "upstreamConnections": 58
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5582.21,
+      "totalRequests": 167469,
+      "latency": {
+        "min": 359,
+        "mean": 6378,
+        "max": 69967,
+        "pstdev": 12106,
+        "percentiles": {
+          "p50": 2864,
+          "p75": 4529,
+          "p80": 5113,
+          "p90": 7717,
+          "p95": 48431,
+          "p99": 54521,
+          "p999": 59967
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 132.62,
+            "max": 132.62,
+            "mean": 132.62
+          },
+          "cpu": {
+            "min": 1.54,
+            "max": 1.54,
+            "mean": 1.54
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.39,
+            "max": 32.39,
+            "mean": 32.39
+          },
+          "cpu": {
+            "min": 60.99,
+            "max": 60.99,
+            "mean": 60.99
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5454.1,
+      "totalRequests": 163623,
+      "latency": {
+        "min": 368,
+        "mean": 6738,
+        "max": 72437,
+        "pstdev": 12216,
+        "percentiles": {
+          "p50": 3318,
+          "p75": 5037,
+          "p80": 5581,
+          "p90": 8092,
+          "p95": 47886,
+          "p99": 53829,
+          "p999": 60200
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 135.66,
+            "max": 135.66,
+            "mean": 135.66
+          },
+          "cpu": {
+            "min": 2.91,
+            "max": 2.91,
+            "mean": 2.91
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 38.6,
+            "max": 38.6,
+            "mean": 38.6
+          },
+          "cpu": {
+            "min": 91.91,
+            "max": 91.91,
+            "mean": 91.91
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5496.5,
+      "totalRequests": 164898,
+      "latency": {
+        "min": 375,
+        "mean": 6453,
+        "max": 103043,
+        "pstdev": 12191,
+        "percentiles": {
+          "p50": 2887,
+          "p75": 4603,
+          "p80": 5209,
+          "p90": 7967,
+          "p95": 48150,
+          "p99": 54630,
+          "p999": 63743
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 147.15,
+            "max": 147.15,
+            "mean": 147.15
+          },
+          "cpu": {
+            "min": 15.47,
+            "max": 15.47,
+            "mean": 15.47
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 60.75,
+            "max": 60.75,
+            "mean": 60.75
+          },
+          "cpu": {
+            "min": 125.31,
+            "max": 125.31,
+            "mean": 125.31
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5351.8,
+      "totalRequests": 160554,
+      "latency": {
+        "min": 377,
+        "mean": 6516,
+        "max": 93298,
+        "pstdev": 12549,
+        "percentiles": {
+          "p50": 2857,
+          "p75": 4496,
+          "p80": 5076,
+          "p90": 7615,
+          "p95": 49512,
+          "p99": 55822,
+          "p999": 65318
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 155.79,
+            "max": 155.79,
+            "mean": 155.79
+          },
+          "cpu": {
+            "min": 28.01,
+            "max": 28.01,
+            "mean": 28.01
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 82.96,
+            "max": 82.96,
+            "mean": 82.96
+          },
+          "cpu": {
+            "min": 159.29,
+            "max": 159.29,
+            "mean": 159.29
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5102.69,
+      "totalRequests": 153086,
+      "latency": {
+        "min": 358,
+        "mean": 6968,
+        "max": 108298,
+        "pstdev": 13304,
+        "percentiles": {
+          "p50": 2979,
+          "p75": 4802,
+          "p80": 5441,
+          "p90": 8343,
+          "p95": 50370,
+          "p99": 60203,
+          "p999": 71446
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 190.03,
+            "max": 190.03,
+            "mean": 190.03
+          },
+          "cpu": {
+            "min": 61.69,
+            "max": 61.69,
+            "mean": 61.69
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 133.22,
+            "max": 133.22,
+            "mean": 133.22
+          },
+          "cpu": {
+            "min": 199.84,
+            "max": 199.84,
+            "mean": 199.84
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5424.03,
+      "totalRequests": 162721,
+      "latency": {
+        "min": 362,
+        "mean": 6570,
+        "max": 73609,
+        "pstdev": 12562,
+        "percentiles": {
+          "p50": 2923,
+          "p75": 4626,
+          "p80": 5209,
+          "p90": 7751,
+          "p95": 49960,
+          "p99": 55525,
+          "p999": 60127
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 127.89,
+            "max": 127.89,
+            "mean": 127.89
+          },
+          "cpu": {
+            "min": 114.69,
+            "max": 114.69,
+            "mean": 114.69
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 112.11,
+            "max": 112.11,
+            "mean": 112.11
+          },
+          "cpu": {
+            "min": 363.01,
+            "max": 363.01,
+            "mean": 363.01
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5454.96,
+      "totalRequests": 163653,
+      "latency": {
+        "min": 363,
+        "mean": 6397,
+        "max": 73404,
+        "pstdev": 12347,
+        "percentiles": {
+          "p50": 2884,
+          "p75": 4452,
+          "p80": 4989,
+          "p90": 7300,
+          "p95": 49477,
+          "p99": 55369,
+          "p999": 61495
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 136.28,
+            "max": 136.28,
+            "mean": 136.28
+          },
+          "cpu": {
+            "min": 114.05,
+            "max": 114.05,
+            "mean": 114.05
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 114.79,
+            "max": 114.79,
+            "mean": 114.79
+          },
+          "cpu": {
+            "min": 332.54,
+            "max": 332.54,
+            "mean": 332.54
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5402.5,
+      "totalRequests": 162075,
+      "latency": {
+        "min": 366,
+        "mean": 6575,
+        "max": 127266,
+        "pstdev": 12484,
+        "percentiles": {
+          "p50": 2940,
+          "p75": 4600,
+          "p80": 5162,
+          "p90": 7727,
+          "p95": 49549,
+          "p99": 55334,
+          "p999": 61478
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 140.91,
+            "max": 140.91,
+            "mean": 140.91
+          },
+          "cpu": {
+            "min": 112.87,
+            "max": 112.87,
+            "mean": 112.87
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 114.76,
+            "max": 114.76,
+            "mean": 114.76
+          },
+          "cpu": {
+            "min": 301.85,
+            "max": 301.85,
+            "mean": 301.85
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5498.81,
+      "totalRequests": 164969,
+      "latency": {
+        "min": 349,
+        "mean": 6325,
+        "max": 84213,
+        "pstdev": 12296,
+        "percentiles": {
+          "p50": 2789,
+          "p75": 4396,
+          "p80": 4944,
+          "p90": 7293,
+          "p95": 48961,
+          "p99": 55212,
+          "p999": 65019
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 148.36,
+            "max": 148.36,
+            "mean": 148.36
+          },
+          "cpu": {
+            "min": 102.53,
+            "max": 102.53,
+            "mean": 102.53
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 133.35,
+            "max": 133.35,
+            "mean": 133.35
+          },
+          "cpu": {
+            "min": 269.43,
+            "max": 269.43,
+            "mean": 269.43
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5308.76,
+      "totalRequests": 159263,
+      "latency": {
+        "min": 361,
+        "mean": 6727,
+        "max": 98807,
+        "pstdev": 12828,
+        "percentiles": {
+          "p50": 2916,
+          "p75": 4650,
+          "p80": 5273,
+          "p90": 8161,
+          "p95": 49971,
+          "p99": 56840,
+          "p999": 67182
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 157.93,
+            "max": 157.93,
+            "mean": 157.93
+          },
+          "cpu": {
+            "min": 91.26,
+            "max": 91.26,
+            "mean": 91.26
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 133.2,
+            "max": 133.2,
+            "mean": 133.2
+          },
+          "cpu": {
+            "min": 236.02,
+            "max": 236.02,
+            "mean": 236.02
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.3.0.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.3.0.ts
new file mode 100644
index 000000000..c7c77f70a
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.3.0.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.3.0
+// Generated on 2025-06-17T19:50:26.773Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.3.0",
+    "runId": "1.3.0-1750189826772",
+    "date": "2025-01-31",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.3.0",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5297.23,
+      "totalRequests": 158917,
+      "latency": {
+        "min": 371,
+        "mean": 6861,
+        "max": 69562,
+        "pstdev": 12096,
+        "percentiles": {
+          "p50": 3223,
+          "p75": 5219,
+          "p80": 5926,
+          "p90": 9360,
+          "p95": 48029,
+          "p99": 54945,
+          "p999": 60096
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 116.36,
+            "max": 116.36,
+            "mean": 116.36
+          },
+          "cpu": {
+            "min": 0.77,
+            "max": 0.77,
+            "mean": 0.77
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.3,
+            "max": 25.3,
+            "mean": 25.3
+          },
+          "cpu": {
+            "min": 30.42,
+            "max": 30.42,
+            "mean": 30.42
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5276.06,
+      "totalRequests": 158285,
+      "latency": {
+        "min": 372,
+        "mean": 6781,
+        "max": 81436,
+        "pstdev": 12685,
+        "percentiles": {
+          "p50": 3035,
+          "p75": 4783,
+          "p80": 5410,
+          "p90": 8210,
+          "p95": 50042,
+          "p99": 55861,
+          "p999": 61739
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 135.97,
+            "max": 135.97,
+            "mean": 135.97
+          },
+          "cpu": {
+            "min": 1.53,
+            "max": 1.53,
+            "mean": 1.53
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 31.45,
+            "max": 31.45,
+            "mean": 31.45
+          },
+          "cpu": {
+            "min": 60.97,
+            "max": 60.97,
+            "mean": 60.97
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5248.15,
+      "totalRequests": 157445,
+      "latency": {
+        "min": 386,
+        "mean": 6832,
+        "max": 83939,
+        "pstdev": 12879,
+        "percentiles": {
+          "p50": 2957,
+          "p75": 4826,
+          "p80": 5504,
+          "p90": 8587,
+          "p95": 50454,
+          "p99": 56524,
+          "p999": 63150
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 128.67,
+            "max": 128.67,
+            "mean": 128.67
+          },
+          "cpu": {
+            "min": 2.88,
+            "max": 2.88,
+            "mean": 2.88
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 35.62,
+            "max": 35.62,
+            "mean": 35.62
+          },
+          "cpu": {
+            "min": 91.69,
+            "max": 91.69,
+            "mean": 91.69
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5190.05,
+      "totalRequests": 155708,
+      "latency": {
+        "min": 374,
+        "mean": 6735,
+        "max": 105820,
+        "pstdev": 12667,
+        "percentiles": {
+          "p50": 2997,
+          "p75": 4715,
+          "p80": 5323,
+          "p90": 8205,
+          "p95": 49692,
+          "p99": 56199,
+          "p999": 64403
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 147.27,
+            "max": 147.27,
+            "mean": 147.27
+          },
+          "cpu": {
+            "min": 15.8,
+            "max": 15.8,
+            "mean": 15.8
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 61.52,
+            "max": 61.52,
+            "mean": 61.52
+          },
+          "cpu": {
+            "min": 124.52,
+            "max": 124.52,
+            "mean": 124.52
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5171.63,
+      "totalRequests": 155149,
+      "latency": {
+        "min": 345,
+        "mean": 7139,
+        "max": 89923,
+        "pstdev": 13210,
+        "percentiles": {
+          "p50": 3191,
+          "p75": 5039,
+          "p80": 5680,
+          "p90": 8824,
+          "p95": 50767,
+          "p99": 57397,
+          "p999": 67665
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 158.88,
+            "max": 158.88,
+            "mean": 158.88
+          },
+          "cpu": {
+            "min": 28.37,
+            "max": 28.37,
+            "mean": 28.37
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 76,
+            "max": 76,
+            "mean": 76
+          },
+          "cpu": {
+            "min": 157.59,
+            "max": 157.59,
+            "mean": 157.59
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 4998.06,
+      "totalRequests": 149944,
+      "latency": {
+        "min": 371,
+        "mean": 6950,
+        "max": 98525,
+        "pstdev": 13111,
+        "percentiles": {
+          "p50": 3057,
+          "p75": 4816,
+          "p80": 5416,
+          "p90": 8383,
+          "p95": 50270,
+          "p99": 57946,
+          "p999": 69038
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 182.71,
+            "max": 182.71,
+            "mean": 182.71
+          },
+          "cpu": {
+            "min": 61.79,
+            "max": 61.79,
+            "mean": 61.79
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.12,
+            "max": 122.12,
+            "mean": 122.12
+          },
+          "cpu": {
+            "min": 194.7,
+            "max": 194.7,
+            "mean": 194.7
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5224.35,
+      "totalRequests": 156731,
+      "latency": {
+        "min": 376,
+        "mean": 6870,
+        "max": 73203,
+        "pstdev": 12827,
+        "percentiles": {
+          "p50": 3060,
+          "p75": 4817,
+          "p80": 5428,
+          "p90": 8280,
+          "p95": 50618,
+          "p99": 56178,
+          "p999": 61280
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 209.85,
+            "max": 209.85,
+            "mean": 209.85
+          },
+          "cpu": {
+            "min": 114.89,
+            "max": 114.89,
+            "mean": 114.89
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 110.5,
+            "max": 110.5,
+            "mean": 110.5
+          },
+          "cpu": {
+            "min": 356.13,
+            "max": 356.13,
+            "mean": 356.13
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5247.75,
+      "totalRequests": 157436,
+      "latency": {
+        "min": 383,
+        "mean": 6991,
+        "max": 88027,
+        "pstdev": 12998,
+        "percentiles": {
+          "p50": 3091,
+          "p75": 4901,
+          "p80": 5532,
+          "p90": 8568,
+          "p95": 50655,
+          "p99": 56272,
+          "p999": 62160
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 208.95,
+            "max": 208.95,
+            "mean": 208.95
+          },
+          "cpu": {
+            "min": 114.35,
+            "max": 114.35,
+            "mean": 114.35
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.19,
+            "max": 122.19,
+            "mean": 122.19
+          },
+          "cpu": {
+            "min": 325.78,
+            "max": 325.78,
+            "mean": 325.78
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5201.69,
+      "totalRequests": 156051,
+      "latency": {
+        "min": 380,
+        "mean": 7027,
+        "max": 78663,
+        "pstdev": 12995,
+        "percentiles": {
+          "p50": 3129,
+          "p75": 4963,
+          "p80": 5600,
+          "p90": 8642,
+          "p95": 50726,
+          "p99": 56254,
+          "p999": 61509
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 211.34,
+            "max": 211.34,
+            "mean": 211.34
+          },
+          "cpu": {
+            "min": 113.23,
+            "max": 113.23,
+            "mean": 113.23
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.17,
+            "max": 122.17,
+            "mean": 122.17
+          },
+          "cpu": {
+            "min": 295.15,
+            "max": 295.15,
+            "mean": 295.15
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5206.95,
+      "totalRequests": 156214,
+      "latency": {
+        "min": 386,
+        "mean": 6893,
+        "max": 92049,
+        "pstdev": 12874,
+        "percentiles": {
+          "p50": 3088,
+          "p75": 4898,
+          "p80": 5548,
+          "p90": 8444,
+          "p95": 50268,
+          "p99": 56334,
+          "p999": 65038
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 158.73,
+            "max": 158.73,
+            "mean": 158.73
+          },
+          "cpu": {
+            "min": 102.79,
+            "max": 102.79,
+            "mean": 102.79
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.15,
+            "max": 122.15,
+            "mean": 122.15
+          },
+          "cpu": {
+            "min": 263,
+            "max": 263,
+            "mean": 263
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5150.23,
+      "totalRequests": 154507,
+      "latency": {
+        "min": 375,
+        "mean": 6786,
+        "max": 84877,
+        "pstdev": 12812,
+        "percentiles": {
+          "p50": 3009,
+          "p75": 4734,
+          "p80": 5340,
+          "p90": 8236,
+          "p95": 50247,
+          "p99": 56647,
+          "p999": 65042
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 168.04,
+            "max": 168.04,
+            "mean": 168.04
+          },
+          "cpu": {
+            "min": 91.51,
+            "max": 91.51,
+            "mean": 91.51
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 122.14,
+            "max": 122.14,
+            "mean": 122.14
+          },
+          "cpu": {
+            "min": 230.49,
+            "max": 230.49,
+            "mean": 230.49
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.3.1.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.3.1.ts
new file mode 100644
index 000000000..a5d613ef4
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.3.1.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.3.1
+// Generated on 2025-06-17T19:50:26.775Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.3.1",
+    "runId": "1.3.1-1750189826775",
+    "date": "2025-03-05",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.3.1",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5115.35,
+      "totalRequests": 153465,
+      "latency": {
+        "min": 389,
+        "mean": 6604,
+        "max": 74543,
+        "pstdev": 11843,
+        "percentiles": {
+          "p50": 3094,
+          "p75": 5007,
+          "p80": 5671,
+          "p90": 8723,
+          "p95": 46997,
+          "p99": 55033,
+          "p999": 60336
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 122.23,
+            "max": 122.23,
+            "mean": 122.23
+          },
+          "cpu": {
+            "min": 1.04,
+            "max": 1.04,
+            "mean": 1.04
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.28,
+            "max": 25.28,
+            "mean": 25.28
+          },
+          "cpu": {
+            "min": 30.51,
+            "max": 30.51,
+            "mean": 30.51
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5150.43,
+      "totalRequests": 154513,
+      "latency": {
+        "min": 386,
+        "mean": 6919,
+        "max": 87556,
+        "pstdev": 12645,
+        "percentiles": {
+          "p50": 3126,
+          "p75": 5009,
+          "p80": 5646,
+          "p90": 8620,
+          "p95": 49580,
+          "p99": 55326,
+          "p999": 60073
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 151.59,
+            "max": 151.59,
+            "mean": 151.59
+          },
+          "cpu": {
+            "min": 1.83,
+            "max": 1.83,
+            "mean": 1.83
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 31.45,
+            "max": 31.45,
+            "mean": 31.45
+          },
+          "cpu": {
+            "min": 61.11,
+            "max": 61.11,
+            "mean": 61.11
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5211.7,
+      "totalRequests": 156354,
+      "latency": {
+        "min": 376,
+        "mean": 6687,
+        "max": 88604,
+        "pstdev": 12657,
+        "percentiles": {
+          "p50": 2913,
+          "p75": 4676,
+          "p80": 5309,
+          "p90": 8259,
+          "p95": 49930,
+          "p99": 55853,
+          "p999": 63514
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 145.61,
+            "max": 145.61,
+            "mean": 145.61
+          },
+          "cpu": {
+            "min": 3.19,
+            "max": 3.19,
+            "mean": 3.19
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 35.5,
+            "max": 35.5,
+            "mean": 35.5
+          },
+          "cpu": {
+            "min": 91.72,
+            "max": 91.72,
+            "mean": 91.72
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5066.99,
+      "totalRequests": 152016,
+      "latency": {
+        "min": 386,
+        "mean": 7628,
+        "max": 93048,
+        "pstdev": 13700,
+        "percentiles": {
+          "p50": 3310,
+          "p75": 5414,
+          "p80": 6156,
+          "p90": 10289,
+          "p95": 51750,
+          "p99": 58007,
+          "p999": 66938
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 156.12,
+            "max": 156.12,
+            "mean": 156.12
+          },
+          "cpu": {
+            "min": 15.73,
+            "max": 15.73,
+            "mean": 15.73
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 55.56,
+            "max": 55.56,
+            "mean": 55.56
+          },
+          "cpu": {
+            "min": 124.54,
+            "max": 124.54,
+            "mean": 124.54
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5098.53,
+      "totalRequests": 152960,
+      "latency": {
+        "min": 373,
+        "mean": 7203,
+        "max": 108142,
+        "pstdev": 13209,
+        "percentiles": {
+          "p50": 3161,
+          "p75": 5083,
+          "p80": 5791,
+          "p90": 9292,
+          "p95": 50372,
+          "p99": 56864,
+          "p999": 67850
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 181.23,
+            "max": 181.23,
+            "mean": 181.23
+          },
+          "cpu": {
+            "min": 28.35,
+            "max": 28.35,
+            "mean": 28.35
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 73.6,
+            "max": 73.6,
+            "mean": 73.6
+          },
+          "cpu": {
+            "min": 158.01,
+            "max": 158.01,
+            "mean": 158.01
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5048.96,
+      "totalRequests": 151469,
+      "latency": {
+        "min": 366,
+        "mean": 7462,
+        "max": 99799,
+        "pstdev": 13676,
+        "percentiles": {
+          "p50": 3122,
+          "p75": 5245,
+          "p80": 6050,
+          "p90": 10398,
+          "p95": 50685,
+          "p99": 59639,
+          "p999": 74547
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 196.57,
+            "max": 196.57,
+            "mean": 196.57
+          },
+          "cpu": {
+            "min": 61.62,
+            "max": 61.62,
+            "mean": 61.62
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.73,
+            "max": 119.73,
+            "mean": 119.73
+          },
+          "cpu": {
+            "min": 196.43,
+            "max": 196.43,
+            "mean": 196.43
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5116.49,
+      "totalRequests": 153495,
+      "latency": {
+        "min": 373,
+        "mean": 7373,
+        "max": 79749,
+        "pstdev": 13231,
+        "percentiles": {
+          "p50": 3334,
+          "p75": 5268,
+          "p80": 5935,
+          "p90": 9436,
+          "p95": 50972,
+          "p99": 56680,
+          "p999": 62969
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 213.36,
+            "max": 213.36,
+            "mean": 213.36
+          },
+          "cpu": {
+            "min": 114.56,
+            "max": 114.56,
+            "mean": 114.56
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 109.79,
+            "max": 109.79,
+            "mean": 109.79
+          },
+          "cpu": {
+            "min": 357.84,
+            "max": 357.84,
+            "mean": 357.84
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5128.63,
+      "totalRequests": 153859,
+      "latency": {
+        "min": 380,
+        "mean": 6787,
+        "max": 76259,
+        "pstdev": 12813,
+        "percentiles": {
+          "p50": 2982,
+          "p75": 4725,
+          "p80": 5330,
+          "p90": 8194,
+          "p95": 50354,
+          "p99": 56367,
+          "p999": 61741
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 217.34,
+            "max": 217.34,
+            "mean": 217.34
+          },
+          "cpu": {
+            "min": 113.9,
+            "max": 113.9,
+            "mean": 113.9
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.73,
+            "max": 119.73,
+            "mean": 119.73
+          },
+          "cpu": {
+            "min": 327.37,
+            "max": 327.37,
+            "mean": 327.37
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5217.06,
+      "totalRequests": 156516,
+      "latency": {
+        "min": 386,
+        "mean": 7182,
+        "max": 93491,
+        "pstdev": 12999,
+        "percentiles": {
+          "p50": 3211,
+          "p75": 5188,
+          "p80": 5872,
+          "p90": 9449,
+          "p95": 50083,
+          "p99": 56135,
+          "p999": 63309
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 220.2,
+            "max": 220.2,
+            "mean": 220.2
+          },
+          "cpu": {
+            "min": 112.64,
+            "max": 112.64,
+            "mean": 112.64
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.73,
+            "max": 119.73,
+            "mean": 119.73
+          },
+          "cpu": {
+            "min": 296.73,
+            "max": 296.73,
+            "mean": 296.73
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5033.4,
+      "totalRequests": 151002,
+      "latency": {
+        "min": 380,
+        "mean": 6522,
+        "max": 92626,
+        "pstdev": 12472,
+        "percentiles": {
+          "p50": 2849,
+          "p75": 4643,
+          "p80": 5272,
+          "p90": 8064,
+          "p95": 49350,
+          "p99": 55799,
+          "p999": 64323
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 201.77,
+            "max": 201.77,
+            "mean": 201.77
+          },
+          "cpu": {
+            "min": 102.25,
+            "max": 102.25,
+            "mean": 102.25
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.73,
+            "max": 119.73,
+            "mean": 119.73
+          },
+          "cpu": {
+            "min": 264.74,
+            "max": 264.74,
+            "mean": 264.74
+          }
+        }
+      },
+      "poolOverflow": 365,
+      "upstreamConnections": 35
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5061.34,
+      "totalRequests": 151843,
+      "latency": {
+        "min": 393,
+        "mean": 7429,
+        "max": 99934,
+        "pstdev": 13552,
+        "percentiles": {
+          "p50": 3227,
+          "p75": 5180,
+          "p80": 5867,
+          "p90": 9747,
+          "p95": 51320,
+          "p99": 58009,
+          "p999": 68829
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 173.04,
+            "max": 173.04,
+            "mean": 173.04
+          },
+          "cpu": {
+            "min": 91.12,
+            "max": 91.12,
+            "mean": 91.12
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 119.73,
+            "max": 119.73,
+            "mean": 119.73
+          },
+          "cpu": {
+            "min": 231.98,
+            "max": 231.98,
+            "mean": 231.98
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.3.2.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.3.2.ts
new file mode 100644
index 000000000..c7792a7b7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.3.2.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.3.2
+// Generated on 2025-06-17T19:50:26.777Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.3.2",
+    "runId": "1.3.2-1750189826777",
+    "date": "2025-03-24",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.3.2",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5203.06,
+      "totalRequests": 156092,
+      "latency": {
+        "min": 371,
+        "mean": 6970,
+        "max": 73949,
+        "pstdev": 12106,
+        "percentiles": {
+          "p50": 3331,
+          "p75": 5396,
+          "p80": 6080,
+          "p90": 9715,
+          "p95": 47564,
+          "p99": 55666,
+          "p999": 60872
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 126.68,
+            "max": 126.68,
+            "mean": 126.68
+          },
+          "cpu": {
+            "min": 0.99,
+            "max": 0.99,
+            "mean": 0.99
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 28.17,
+            "max": 28.17,
+            "mean": 28.17
+          },
+          "cpu": {
+            "min": 30.49,
+            "max": 30.49,
+            "mean": 30.49
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5157.35,
+      "totalRequests": 154724,
+      "latency": {
+        "min": 380,
+        "mean": 6752,
+        "max": 83992,
+        "pstdev": 12526,
+        "percentiles": {
+          "p50": 3089,
+          "p75": 4875,
+          "p80": 5484,
+          "p90": 8253,
+          "p95": 49682,
+          "p99": 55398,
+          "p999": 61507
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 129.05,
+            "max": 129.05,
+            "mean": 129.05
+          },
+          "cpu": {
+            "min": 1.79,
+            "max": 1.79,
+            "mean": 1.79
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.33,
+            "max": 32.33,
+            "mean": 32.33
+          },
+          "cpu": {
+            "min": 61.02,
+            "max": 61.02,
+            "mean": 61.02
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5052.19,
+      "totalRequests": 151566,
+      "latency": {
+        "min": 363,
+        "mean": 7564,
+        "max": 72122,
+        "pstdev": 13492,
+        "percentiles": {
+          "p50": 3384,
+          "p75": 5472,
+          "p80": 6191,
+          "p90": 9941,
+          "p95": 51320,
+          "p99": 57128,
+          "p999": 63107
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 146.92,
+            "max": 146.92,
+            "mean": 146.92
+          },
+          "cpu": {
+            "min": 3.17,
+            "max": 3.17,
+            "mean": 3.17
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 40.52,
+            "max": 40.52,
+            "mean": 40.52
+          },
+          "cpu": {
+            "min": 91.79,
+            "max": 91.79,
+            "mean": 91.79
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5101.42,
+      "totalRequests": 153051,
+      "latency": {
+        "min": 397,
+        "mean": 6832,
+        "max": 82624,
+        "pstdev": 12894,
+        "percentiles": {
+          "p50": 2990,
+          "p75": 4798,
+          "p80": 5418,
+          "p90": 8366,
+          "p95": 50391,
+          "p99": 56737,
+          "p999": 65114
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 154.98,
+            "max": 154.98,
+            "mean": 154.98
+          },
+          "cpu": {
+            "min": 15.2,
+            "max": 15.2,
+            "mean": 15.2
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 58.7,
+            "max": 58.7,
+            "mean": 58.7
+          },
+          "cpu": {
+            "min": 124.54,
+            "max": 124.54,
+            "mean": 124.54
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 4948.44,
+      "totalRequests": 148459,
+      "latency": {
+        "min": 398,
+        "mean": 7200,
+        "max": 94949,
+        "pstdev": 13256,
+        "percentiles": {
+          "p50": 3208,
+          "p75": 5057,
+          "p80": 5652,
+          "p90": 8780,
+          "p95": 50821,
+          "p99": 57442,
+          "p999": 66746
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 163.01,
+            "max": 163.01,
+            "mean": 163.01
+          },
+          "cpu": {
+            "min": 27.68,
+            "max": 27.68,
+            "mean": 27.68
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 78.9,
+            "max": 78.9,
+            "mean": 78.9
+          },
+          "cpu": {
+            "min": 158.2,
+            "max": 158.2,
+            "mean": 158.2
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 4933.76,
+      "totalRequests": 148015,
+      "latency": {
+        "min": 361,
+        "mean": 7088,
+        "max": 127959,
+        "pstdev": 13349,
+        "percentiles": {
+          "p50": 3052,
+          "p75": 4885,
+          "p80": 5529,
+          "p90": 8785,
+          "p95": 50700,
+          "p99": 59123,
+          "p999": 70660
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 196.05,
+            "max": 196.05,
+            "mean": 196.05
+          },
+          "cpu": {
+            "min": 62.32,
+            "max": 62.32,
+            "mean": 62.32
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.19,
+            "max": 127.19,
+            "mean": 127.19
+          },
+          "cpu": {
+            "min": 196.79,
+            "max": 196.79,
+            "mean": 196.79
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5116.93,
+      "totalRequests": 153515,
+      "latency": {
+        "min": 387,
+        "mean": 9017,
+        "max": 78245,
+        "pstdev": 15046,
+        "percentiles": {
+          "p50": 3922,
+          "p75": 6583,
+          "p80": 7609,
+          "p90": 16301,
+          "p95": 54007,
+          "p99": 59990,
+          "p999": 67956
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 210.06,
+            "max": 210.06,
+            "mean": 210.06
+          },
+          "cpu": {
+            "min": 115.56,
+            "max": 115.56,
+            "mean": 115.56
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 110.31,
+            "max": 110.31,
+            "mean": 110.31
+          },
+          "cpu": {
+            "min": 358.89,
+            "max": 358.89,
+            "mean": 358.89
+          }
+        }
+      },
+      "poolOverflow": 351,
+      "upstreamConnections": 49
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 4991.13,
+      "totalRequests": 149734,
+      "latency": {
+        "min": 391,
+        "mean": 7071,
+        "max": 80433,
+        "pstdev": 12841,
+        "percentiles": {
+          "p50": 3199,
+          "p75": 5005,
+          "p80": 5635,
+          "p90": 8730,
+          "p95": 49813,
+          "p99": 55756,
+          "p999": 61407
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 199.41,
+            "max": 199.41,
+            "mean": 199.41
+          },
+          "cpu": {
+            "min": 114.89,
+            "max": 114.89,
+            "mean": 114.89
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.44,
+            "max": 127.44,
+            "mean": 127.44
+          },
+          "cpu": {
+            "min": 328.33,
+            "max": 328.33,
+            "mean": 328.33
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5138.59,
+      "totalRequests": 154161,
+      "latency": {
+        "min": 377,
+        "mean": 6954,
+        "max": 86982,
+        "pstdev": 13049,
+        "percentiles": {
+          "p50": 3045,
+          "p75": 4886,
+          "p80": 5525,
+          "p90": 8466,
+          "p95": 51048,
+          "p99": 56733,
+          "p999": 62337
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 219.76,
+            "max": 219.76,
+            "mean": 219.76
+          },
+          "cpu": {
+            "min": 113.71,
+            "max": 113.71,
+            "mean": 113.71
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.31,
+            "max": 127.31,
+            "mean": 127.31
+          },
+          "cpu": {
+            "min": 297.73,
+            "max": 297.73,
+            "mean": 297.73
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5051.68,
+      "totalRequests": 151551,
+      "latency": {
+        "min": 389,
+        "mean": 7977,
+        "max": 86577,
+        "pstdev": 14090,
+        "percentiles": {
+          "p50": 3498,
+          "p75": 5731,
+          "p80": 6471,
+          "p90": 10947,
+          "p95": 52355,
+          "p99": 58748,
+          "p999": 67379
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 259.14,
+            "max": 259.14,
+            "mean": 259.14
+          },
+          "cpu": {
+            "min": 103.22,
+            "max": 103.22,
+            "mean": 103.22
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.31,
+            "max": 127.31,
+            "mean": 127.31
+          },
+          "cpu": {
+            "min": 265.59,
+            "max": 265.59,
+            "mean": 265.59
+          }
+        }
+      },
+      "poolOverflow": 357,
+      "upstreamConnections": 43
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 4962.4,
+      "totalRequests": 148872,
+      "latency": {
+        "min": 384,
+        "mean": 7209,
+        "max": 110186,
+        "pstdev": 13357,
+        "percentiles": {
+          "p50": 3112,
+          "p75": 5018,
+          "p80": 5694,
+          "p90": 9338,
+          "p95": 51267,
+          "p99": 57384,
+          "p999": 67244
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 177.76,
+            "max": 177.76,
+            "mean": 177.76
+          },
+          "cpu": {
+            "min": 91.86,
+            "max": 91.86,
+            "mean": 91.86
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.24,
+            "max": 127.24,
+            "mean": 127.24
+          },
+          "cpu": {
+            "min": 233.07,
+            "max": 233.07,
+            "mean": 233.07
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.3.3.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.3.3.ts
new file mode 100644
index 000000000..5c2c6d42e
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.3.3.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.3.3
+// Generated on 2025-06-17T19:50:26.778Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.3.3",
+    "runId": "1.3.3-1750189826778",
+    "date": "2025-05-09",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.3.3",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scale-up-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5302.05,
+      "totalRequests": 159067,
+      "latency": {
+        "min": 384,
+        "mean": 7440,
+        "max": 68399,
+        "pstdev": 12191,
+        "percentiles": {
+          "p50": 3692,
+          "p75": 5903,
+          "p80": 6670,
+          "p90": 10777,
+          "p95": 47519,
+          "p99": 54405,
+          "p999": 59346
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 126.17,
+            "max": 126.17,
+            "mean": 126.17
+          },
+          "cpu": {
+            "min": 0.95,
+            "max": 0.95,
+            "mean": 0.95
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 25.93,
+            "max": 25.93,
+            "mean": 25.93
+          },
+          "cpu": {
+            "min": 30.42,
+            "max": 30.42,
+            "mean": 30.42
+          }
+        }
+      },
+      "poolOverflow": 358,
+      "upstreamConnections": 42
+    },
+    {
+      "testName": "scale-up-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5270.25,
+      "totalRequests": 158112,
+      "latency": {
+        "min": 392,
+        "mean": 7067,
+        "max": 77467,
+        "pstdev": 12552,
+        "percentiles": {
+          "p50": 3330,
+          "p75": 5225,
+          "p80": 5887,
+          "p90": 8906,
+          "p95": 49113,
+          "p99": 55103,
+          "p999": 60295
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 145.89,
+            "max": 145.89,
+            "mean": 145.89
+          },
+          "cpu": {
+            "min": 1.66,
+            "max": 1.66,
+            "mean": 1.66
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.1,
+            "max": 32.1,
+            "mean": 32.1
+          },
+          "cpu": {
+            "min": 60.71,
+            "max": 60.71,
+            "mean": 60.71
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-up-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5307.61,
+      "totalRequests": 159230,
+      "latency": {
+        "min": 387,
+        "mean": 7350,
+        "max": 76185,
+        "pstdev": 12732,
+        "percentiles": {
+          "p50": 3508,
+          "p75": 5524,
+          "p80": 6220,
+          "p90": 9652,
+          "p95": 49100,
+          "p99": 55363,
+          "p999": 62654
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 153.05,
+            "max": 153.05,
+            "mean": 153.05
+          },
+          "cpu": {
+            "min": 3.08,
+            "max": 3.08,
+            "mean": 3.08
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 38.29,
+            "max": 38.29,
+            "mean": 38.29
+          },
+          "cpu": {
+            "min": 91.5,
+            "max": 91.5,
+            "mean": 91.5
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-up-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5139.63,
+      "totalRequests": 154189,
+      "latency": {
+        "min": 390,
+        "mean": 7376,
+        "max": 78098,
+        "pstdev": 12993,
+        "percentiles": {
+          "p50": 3429,
+          "p75": 5431,
+          "p80": 6116,
+          "p90": 9633,
+          "p95": 49809,
+          "p99": 56043,
+          "p999": 64651
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 152.28,
+            "max": 152.28,
+            "mean": 152.28
+          },
+          "cpu": {
+            "min": 15.6,
+            "max": 15.6,
+            "mean": 15.6
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 56.33,
+            "max": 56.33,
+            "mean": 56.33
+          },
+          "cpu": {
+            "min": 124.15,
+            "max": 124.15,
+            "mean": 124.15
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 5169.8,
+      "totalRequests": 155094,
+      "latency": {
+        "min": 374,
+        "mean": 7385,
+        "max": 105918,
+        "pstdev": 13085,
+        "percentiles": {
+          "p50": 3382,
+          "p75": 5336,
+          "p80": 6024,
+          "p90": 9658,
+          "p95": 50104,
+          "p99": 56487,
+          "p999": 66418
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 166.29,
+            "max": 166.29,
+            "mean": 166.29
+          },
+          "cpu": {
+            "min": 28.13,
+            "max": 28.13,
+            "mean": 28.13
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 76.53,
+            "max": 76.53,
+            "mean": 76.53
+          },
+          "cpu": {
+            "min": 157.45,
+            "max": 157.45,
+            "mean": 157.45
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scale-up-httproutes-1000",
+      "routes": 1000,
+      "routesPerHostname": 1,
+      "phase": "scaling-up",
+      "throughput": 4963.46,
+      "totalRequests": 148908,
+      "latency": {
+        "min": 374,
+        "mean": 7335,
+        "max": 94580,
+        "pstdev": 13294,
+        "percentiles": {
+          "p50": 3255,
+          "p75": 5279,
+          "p80": 5998,
+          "p90": 9532,
+          "p95": 50294,
+          "p99": 58908,
+          "p999": 70729
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 199.79,
+            "max": 199.79,
+            "mean": 199.79
+          },
+          "cpu": {
+            "min": 61.67,
+            "max": 61.67,
+            "mean": 61.67
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 120.77,
+            "max": 120.77,
+            "mean": 120.77
+          },
+          "cpu": {
+            "min": 195.1,
+            "max": 195.1,
+            "mean": 195.1
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-10",
+      "routes": 10,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5200.07,
+      "totalRequests": 156001,
+      "latency": {
+        "min": 395,
+        "mean": 7530,
+        "max": 81936,
+        "pstdev": 13142,
+        "percentiles": {
+          "p50": 3438,
+          "p75": 5497,
+          "p80": 6226,
+          "p90": 10218,
+          "p95": 50345,
+          "p99": 56436,
+          "p999": 61919
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 221.87,
+            "max": 221.87,
+            "mean": 221.87
+          },
+          "cpu": {
+            "min": 114.77,
+            "max": 114.77,
+            "mean": 114.77
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.27,
+            "max": 121.27,
+            "mean": 121.27
+          },
+          "cpu": {
+            "min": 356.4,
+            "max": 356.4,
+            "mean": 356.4
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scale-down-httproutes-50",
+      "routes": 50,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5229.66,
+      "totalRequests": 156893,
+      "latency": {
+        "min": 368,
+        "mean": 6911,
+        "max": 72273,
+        "pstdev": 12396,
+        "percentiles": {
+          "p50": 3227,
+          "p75": 5075,
+          "p80": 5695,
+          "p90": 8751,
+          "p95": 48676,
+          "p99": 54822,
+          "p999": 59865
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 221.8,
+            "max": 221.8,
+            "mean": 221.8
+          },
+          "cpu": {
+            "min": 114.13,
+            "max": 114.13,
+            "mean": 114.13
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.22,
+            "max": 121.22,
+            "mean": 121.22
+          },
+          "cpu": {
+            "min": 325.9,
+            "max": 325.9,
+            "mean": 325.9
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scale-down-httproutes-100",
+      "routes": 100,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5099.34,
+      "totalRequests": 152980,
+      "latency": {
+        "min": 357,
+        "mean": 6637,
+        "max": 68100,
+        "pstdev": 12012,
+        "percentiles": {
+          "p50": 3167,
+          "p75": 4972,
+          "p80": 5580,
+          "p90": 8302,
+          "p95": 47650,
+          "p99": 53993,
+          "p999": 59299
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 182.69,
+            "max": 182.69,
+            "mean": 182.69
+          },
+          "cpu": {
+            "min": 113.02,
+            "max": 113.02,
+            "mean": 113.02
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.2,
+            "max": 121.2,
+            "mean": 121.2
+          },
+          "cpu": {
+            "min": 295.3,
+            "max": 295.3,
+            "mean": 295.3
+          }
+        }
+      },
+      "poolOverflow": 364,
+      "upstreamConnections": 36
+    },
+    {
+      "testName": "scale-down-httproutes-300",
+      "routes": 300,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5145.13,
+      "totalRequests": 154357,
+      "latency": {
+        "min": 379,
+        "mean": 7234,
+        "max": 111517,
+        "pstdev": 12814,
+        "percentiles": {
+          "p50": 3381,
+          "p75": 5331,
+          "p80": 5993,
+          "p90": 9269,
+          "p95": 49465,
+          "p99": 55562,
+          "p999": 64862
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 159.09,
+            "max": 159.09,
+            "mean": 159.09
+          },
+          "cpu": {
+            "min": 102.57,
+            "max": 102.57,
+            "mean": 102.57
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.08,
+            "max": 121.08,
+            "mean": 121.08
+          },
+          "cpu": {
+            "min": 263.29,
+            "max": 263.29,
+            "mean": 263.29
+          }
+        }
+      },
+      "poolOverflow": 361,
+      "upstreamConnections": 39
+    },
+    {
+      "testName": "scale-down-httproutes-500",
+      "routes": 500,
+      "routesPerHostname": 1,
+      "phase": "scaling-down",
+      "throughput": 5130.95,
+      "totalRequests": 153929,
+      "latency": {
+        "min": 365,
+        "mean": 7098,
+        "max": 95834,
+        "pstdev": 12843,
+        "percentiles": {
+          "p50": 3267,
+          "p75": 5110,
+          "p80": 5752,
+          "p90": 8975,
+          "p95": 49702,
+          "p99": 56408,
+          "p999": 67330
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 163.91,
+            "max": 163.91,
+            "mean": 163.91
+          },
+          "cpu": {
+            "min": 91.18,
+            "max": 91.18,
+            "mean": 91.18
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 120.91,
+            "max": 120.91,
+            "mean": 120.91
+          },
+          "cpu": {
+            "min": 230.77,
+            "max": 230.77,
+            "mean": 230.77
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.4.0.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.4.0.ts
new file mode 100644
index 000000000..03d1eb4db
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.4.0.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.4.0
+// Generated on 2025-06-17T19:50:26.781Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.4.0",
+    "runId": "1.4.0-1750189826781",
+    "date": "2025-05-14",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.4.0",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scaling up httproutes to 10 with 2 routes per hostname",
+      "routes": 10,
+      "routesPerHostname": 2,
+      "phase": "scaling-up",
+      "throughput": 5433.23,
+      "totalRequests": 163000,
+      "latency": {
+        "min": 367,
+        "mean": 6485,
+        "max": 65673,
+        "pstdev": 11042,
+        "percentiles": {
+          "p50": 3222,
+          "p75": 5166,
+          "p80": 5879,
+          "p90": 9253,
+          "p95": 43970,
+          "p99": 52201,
+          "p999": 56854
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 128.52,
+            "max": 156.24,
+            "mean": 150.28
+          },
+          "cpu": {
+            "min": 0.13,
+            "max": 0.67,
+            "mean": 0.44
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 0,
+            "max": 27.01,
+            "mean": 21.73
+          },
+          "cpu": {
+            "min": 0,
+            "max": 72.36,
+            "mean": 2.32
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling up httproutes to 50 with 10 routes per hostname",
+      "routes": 50,
+      "routesPerHostname": 10,
+      "phase": "scaling-up",
+      "throughput": 5340.69,
+      "totalRequests": 160221,
+      "latency": {
+        "min": 355,
+        "mean": 6582,
+        "max": 88674,
+        "pstdev": 11849,
+        "percentiles": {
+          "p50": 3134,
+          "p75": 4984,
+          "p80": 5597,
+          "p90": 8545,
+          "p95": 46972,
+          "p99": 53663,
+          "p999": 59625
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 155.3,
+            "max": 169.25,
+            "mean": 159.23
+          },
+          "cpu": {
+            "min": 0.27,
+            "max": 4.73,
+            "mean": 0.91
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 26.64,
+            "max": 33.18,
+            "mean": 32.22
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.91,
+            "mean": 11.1
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scaling up httproutes to 100 with 20 routes per hostname",
+      "routes": 100,
+      "routesPerHostname": 20,
+      "phase": "scaling-up",
+      "throughput": 5205.41,
+      "totalRequests": 156162,
+      "latency": {
+        "min": 384,
+        "mean": 4221,
+        "max": 63500,
+        "pstdev": 9204,
+        "percentiles": {
+          "p50": 2039,
+          "p75": 3063,
+          "p80": 3399,
+          "p90": 4605,
+          "p95": 7844,
+          "p99": 49758,
+          "p999": 54032
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 156.77,
+            "max": 174.36,
+            "mean": 168.53
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 8.8,
+            "mean": 1.37
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.83,
+            "max": 37.05,
+            "mean": 36.58
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.97,
+            "mean": 4.39
+          }
+        }
+      },
+      "poolOverflow": 377,
+      "upstreamConnections": 23
+    },
+    {
+      "testName": "scaling up httproutes to 300 with 60 routes per hostname",
+      "routes": 300,
+      "routesPerHostname": 60,
+      "phase": "scaling-up",
+      "throughput": 5271.84,
+      "totalRequests": 158157,
+      "latency": {
+        "min": 393,
+        "mean": 7209,
+        "max": 93327,
+        "pstdev": 12640,
+        "percentiles": {
+          "p50": 3281,
+          "p75": 5443,
+          "p80": 6241,
+          "p90": 10258,
+          "p95": 48494,
+          "p99": 55793,
+          "p999": 65497
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 179.66,
+            "max": 187.8,
+            "mean": 184.81
+          },
+          "cpu": {
+            "min": 0.53,
+            "max": 27.13,
+            "mean": 4.87
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 53.06,
+            "max": 57.31,
+            "mean": 56.58
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.96,
+            "mean": 15.82
+          }
+        }
+      },
+      "poolOverflow": 360,
+      "upstreamConnections": 40
+    },
+    {
+      "testName": "scaling up httproutes to 500 with 100 routes per hostname",
+      "routes": 500,
+      "routesPerHostname": 100,
+      "phase": "scaling-up",
+      "throughput": 5351.64,
+      "totalRequests": 160555,
+      "latency": {
+        "min": 370,
+        "mean": 6797,
+        "max": 91549,
+        "pstdev": 12276,
+        "percentiles": {
+          "p50": 3145,
+          "p75": 5052,
+          "p80": 5728,
+          "p90": 8916,
+          "p95": 47915,
+          "p99": 54947,
+          "p999": 65368
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 186.4,
+            "max": 200.27,
+            "mean": 195.8
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 26.07,
+            "mean": 1.71
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 71.16,
+            "max": 77.36,
+            "mean": 77
+          },
+          "cpu": {
+            "min": 0,
+            "max": 94.88,
+            "mean": 3.39
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling up httproutes to 1000 with 200 routes per hostname",
+      "routes": 1000,
+      "routesPerHostname": 200,
+      "phase": "scaling-up",
+      "throughput": 5239.17,
+      "totalRequests": 157179,
+      "latency": {
+        "min": 367,
+        "mean": 6908,
+        "max": 97939,
+        "pstdev": 12608,
+        "percentiles": {
+          "p50": 3176,
+          "p75": 5046,
+          "p80": 5680,
+          "p90": 8770,
+          "p95": 48472,
+          "p99": 56449,
+          "p999": 68317
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 220.03,
+            "max": 237.27,
+            "mean": 233.38
+          },
+          "cpu": {
+            "min": 0.07,
+            "max": 1.2,
+            "mean": 0.78
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.13,
+            "max": 129.59,
+            "mean": 129.34
+          },
+          "cpu": {
+            "min": 0,
+            "max": 74.43,
+            "mean": 2.24
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 10 with 2 routes per hostname",
+      "routes": 10,
+      "routesPerHostname": 2,
+      "phase": "scaling-down",
+      "throughput": 5409.79,
+      "totalRequests": 162296,
+      "latency": {
+        "min": 386,
+        "mean": 6690,
+        "max": 71688,
+        "pstdev": 12144,
+        "percentiles": {
+          "p50": 3075,
+          "p75": 4937,
+          "p80": 5610,
+          "p90": 8727,
+          "p95": 48252,
+          "p99": 54595,
+          "p999": 59408
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 165.91,
+            "max": 176.04,
+            "mean": 168.11
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 3.73,
+            "mean": 1.23
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 123.28,
+            "max": 123.45,
+            "mean": 123.35
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.72,
+            "mean": 9.08
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 50 with 10 routes per hostname",
+      "routes": 50,
+      "routesPerHostname": 10,
+      "phase": "scaling-down",
+      "throughput": 5480.62,
+      "totalRequests": 164426,
+      "latency": {
+        "min": 378,
+        "mean": 7119,
+        "max": 85032,
+        "pstdev": 12404,
+        "percentiles": {
+          "p50": 3390,
+          "p75": 5340,
+          "p80": 6015,
+          "p90": 9300,
+          "p95": 48457,
+          "p99": 55005,
+          "p999": 60284
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 165.36,
+            "max": 171.88,
+            "mean": 169.47
+          },
+          "cpu": {
+            "min": 0.6,
+            "max": 6.8,
+            "mean": 1.44
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 123.27,
+            "max": 123.97,
+            "mean": 123.42
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.05,
+            "mean": 11.5
+          }
+        }
+      },
+      "poolOverflow": 359,
+      "upstreamConnections": 41
+    },
+    {
+      "testName": "scaling down httproutes to 100 with 20 routes per hostname",
+      "routes": 100,
+      "routesPerHostname": 20,
+      "phase": "scaling-down",
+      "throughput": 5413.63,
+      "totalRequests": 162409,
+      "latency": {
+        "min": 357,
+        "mean": 6664,
+        "max": 77307,
+        "pstdev": 12030,
+        "percentiles": {
+          "p50": 3140,
+          "p75": 4935,
+          "p80": 5560,
+          "p90": 8456,
+          "p95": 47661,
+          "p99": 54544,
+          "p999": 61110
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 170.86,
+            "max": 186.68,
+            "mean": 173.53
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 67.27,
+            "mean": 7.29
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 123.27,
+            "max": 129.61,
+            "mean": 124.04
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100,
+            "mean": 5.99
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 300 with 60 routes per hostname",
+      "routes": 300,
+      "routesPerHostname": 60,
+      "phase": "scaling-down",
+      "throughput": 5356.13,
+      "totalRequests": 160684,
+      "latency": {
+        "min": 376,
+        "mean": 6544,
+        "max": 86540,
+        "pstdev": 11908,
+        "percentiles": {
+          "p50": 3079,
+          "p75": 4927,
+          "p80": 5554,
+          "p90": 8360,
+          "p95": 47069,
+          "p99": 54265,
+          "p999": 62601
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 176.87,
+            "max": 192.99,
+            "mean": 189.97
+          },
+          "cpu": {
+            "min": 0.6,
+            "max": 73.6,
+            "mean": 5.05
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.54,
+            "max": 129.76,
+            "mean": 129.65
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.08,
+            "mean": 11.45
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scaling down httproutes to 500 with 100 routes per hostname",
+      "routes": 500,
+      "routesPerHostname": 100,
+      "phase": "scaling-down",
+      "throughput": 5339.99,
+      "totalRequests": 160200,
+      "latency": {
+        "min": 395,
+        "mean": 6772,
+        "max": 99700,
+        "pstdev": 12345,
+        "percentiles": {
+          "p50": 3118,
+          "p75": 4954,
+          "p80": 5598,
+          "p90": 8672,
+          "p95": 48261,
+          "p99": 55498,
+          "p999": 65902
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 199.81,
+            "max": 210.76,
+            "mean": 205.85
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 31.13,
+            "mean": 2.01
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 129.54,
+            "max": 129.74,
+            "mean": 129.6
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.87,
+            "mean": 8.99
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.4.1.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.4.1.ts
new file mode 100644
index 000000000..fcb373896
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/data/versions/v1.4.1.ts
@@ -0,0 +1,587 @@
+import { TestSuite } from '../types';
+
+// Benchmark data extracted from markdown report for version 1.4.1
+// Generated on 2025-06-17T19:50:26.783Z
+
+export const benchmarkData: TestSuite = {
+  "metadata": {
+    "version": "1.4.1",
+    "runId": "1.4.1-1750189826783",
+    "date": "2025-06-04",
+    "environment": "GitHub CI",
+    "description": "Benchmark report for Envoy Gateway 1.4.1",
+    "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",
+    "testConfiguration": {
+      "rps": 10000,
+      "connections": 100,
+      "duration": 30,
+      "cpuLimit": "1000m",
+      "memoryLimit": "2000Mi"
+    }
+  },
+  "results": [
+    {
+      "testName": "scaling up httproutes to 10 with 2 routes per hostname",
+      "routes": 10,
+      "routesPerHostname": 2,
+      "phase": "scaling-up",
+      "throughput": 5440.31,
+      "totalRequests": 163209,
+      "latency": {
+        "min": 335,
+        "mean": 6565,
+        "max": 66668,
+        "pstdev": 11480,
+        "percentiles": {
+          "p50": 3258,
+          "p75": 5079,
+          "p80": 5722,
+          "p90": 8679,
+          "p95": 45924,
+          "p99": 53512,
+          "p999": 58220
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 128.02,
+            "max": 151.26,
+            "mean": 147.41
+          },
+          "cpu": {
+            "min": 0.27,
+            "max": 0.67,
+            "mean": 0.45
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 0,
+            "max": 26.92,
+            "mean": 22.58
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.73,
+            "mean": 6.02
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling up httproutes to 50 with 10 routes per hostname",
+      "routes": 50,
+      "routesPerHostname": 10,
+      "phase": "scaling-up",
+      "throughput": 5429.88,
+      "totalRequests": 162900,
+      "latency": {
+        "min": 345,
+        "mean": 6468,
+        "max": 70791,
+        "pstdev": 11793,
+        "percentiles": {
+          "p50": 3170,
+          "p75": 4794,
+          "p80": 5311,
+          "p90": 7534,
+          "p95": 47400,
+          "p99": 53536,
+          "p999": 58034
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 151.26,
+            "max": 170.78,
+            "mean": 161.92
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 4.33,
+            "mean": 0.97
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 26.73,
+            "max": 33.13,
+            "mean": 31.63
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.94,
+            "mean": 3.35
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scaling up httproutes to 100 with 20 routes per hostname",
+      "routes": 100,
+      "routesPerHostname": 20,
+      "phase": "scaling-up",
+      "throughput": 5499.86,
+      "totalRequests": 164996,
+      "latency": {
+        "min": 391,
+        "mean": 8147,
+        "max": 99663,
+        "pstdev": 13319,
+        "percentiles": {
+          "p50": 3957,
+          "p75": 6308,
+          "p80": 7120,
+          "p90": 11799,
+          "p95": 49942,
+          "p99": 56190,
+          "p999": 62709
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 161.19,
+            "max": 165.52,
+            "mean": 163.96
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 8.67,
+            "mean": 1.36
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 32.98,
+            "max": 39.18,
+            "mean": 38.14
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.97,
+            "mean": 8.67
+          }
+        }
+      },
+      "poolOverflow": 353,
+      "upstreamConnections": 47
+    },
+    {
+      "testName": "scaling up httproutes to 300 with 60 routes per hostname",
+      "routes": 300,
+      "routesPerHostname": 60,
+      "phase": "scaling-up",
+      "throughput": 5335.1,
+      "totalRequests": 160053,
+      "latency": {
+        "min": 365,
+        "mean": 6734,
+        "max": 90963,
+        "pstdev": 12096,
+        "percentiles": {
+          "p50": 3228,
+          "p75": 5042,
+          "p80": 5649,
+          "p90": 8465,
+          "p95": 47704,
+          "p99": 54396,
+          "p999": 61714
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 183.87,
+            "max": 223.25,
+            "mean": 206.96
+          },
+          "cpu": {
+            "min": 0.47,
+            "max": 79.87,
+            "mean": 3.9
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 57.15,
+            "max": 57.52,
+            "mean": 57.34
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.97,
+            "mean": 13.49
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling up httproutes to 500 with 100 routes per hostname",
+      "routes": 500,
+      "routesPerHostname": 100,
+      "phase": "scaling-up",
+      "throughput": 5256.52,
+      "totalRequests": 157696,
+      "latency": {
+        "min": 389,
+        "mean": 6320,
+        "max": 77848,
+        "pstdev": 11829,
+        "percentiles": {
+          "p50": 2974,
+          "p75": 4705,
+          "p80": 5292,
+          "p90": 7729,
+          "p95": 47173,
+          "p99": 54317,
+          "p999": 64679
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 186.16,
+            "max": 199.19,
+            "mean": 195.68
+          },
+          "cpu": {
+            "min": 0.4,
+            "max": 1.2,
+            "mean": 0.75
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 63.26,
+            "max": 79.43,
+            "mean": 79.04
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.86,
+            "mean": 17.64
+          }
+        }
+      },
+      "poolOverflow": 365,
+      "upstreamConnections": 35
+    },
+    {
+      "testName": "scaling up httproutes to 1000 with 200 routes per hostname",
+      "routes": 1000,
+      "routesPerHostname": 200,
+      "phase": "scaling-up",
+      "throughput": 5280.09,
+      "totalRequests": 158409,
+      "latency": {
+        "min": 387,
+        "mean": 6871,
+        "max": 94064,
+        "pstdev": 12441,
+        "percentiles": {
+          "p50": 3186,
+          "p75": 5019,
+          "p80": 5651,
+          "p90": 8766,
+          "p95": 48361,
+          "p99": 55758,
+          "p999": 67403
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 230.81,
+            "max": 243.68,
+            "mean": 238.65
+          },
+          "cpu": {
+            "min": 0.13,
+            "max": 1.13,
+            "mean": 0.8
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.63,
+            "max": 127.86,
+            "mean": 127.72
+          },
+          "cpu": {
+            "min": 0,
+            "max": 85.57,
+            "mean": 6.19
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 10 with 2 routes per hostname",
+      "routes": 10,
+      "routesPerHostname": 2,
+      "phase": "scaling-down",
+      "throughput": 5430.18,
+      "totalRequests": 162909,
+      "latency": {
+        "min": 376,
+        "mean": 6679,
+        "max": 79630,
+        "pstdev": 12142,
+        "percentiles": {
+          "p50": 3147,
+          "p75": 5015,
+          "p80": 5630,
+          "p90": 8374,
+          "p95": 48377,
+          "p99": 54654,
+          "p999": 59858
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 164.61,
+            "max": 169.75,
+            "mean": 165.39
+          },
+          "cpu": {
+            "min": 0.8,
+            "max": 3.47,
+            "mean": 1.14
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 121.22,
+            "max": 121.61,
+            "mean": 121.3
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.74,
+            "mean": 8.02
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    },
+    {
+      "testName": "scaling down httproutes to 50 with 10 routes per hostname",
+      "routes": 50,
+      "routesPerHostname": 10,
+      "phase": "scaling-down",
+      "throughput": 5506.49,
+      "totalRequests": 165195,
+      "latency": {
+        "min": 386,
+        "mean": 8319,
+        "max": 85860,
+        "pstdev": 13567,
+        "percentiles": {
+          "p50": 3951,
+          "p75": 6305,
+          "p80": 7155,
+          "p90": 12741,
+          "p95": 50714,
+          "p99": 57303,
+          "p999": 63928
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 165.63,
+            "max": 175.23,
+            "mean": 169.06
+          },
+          "cpu": {
+            "min": 0.8,
+            "max": 7.53,
+            "mean": 1.54
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 111.91,
+            "max": 121.36,
+            "mean": 113.46
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.75,
+            "mean": 7.62
+          }
+        }
+      },
+      "poolOverflow": 352,
+      "upstreamConnections": 48
+    },
+    {
+      "testName": "scaling down httproutes to 100 with 20 routes per hostname",
+      "routes": 100,
+      "routesPerHostname": 20,
+      "phase": "scaling-down",
+      "throughput": 5452.96,
+      "totalRequests": 163589,
+      "latency": {
+        "min": 395,
+        "mean": 7694,
+        "max": 97460,
+        "pstdev": 12949,
+        "percentiles": {
+          "p50": 3636,
+          "p75": 5828,
+          "p80": 6627,
+          "p90": 10929,
+          "p95": 49506,
+          "p99": 55681,
+          "p999": 62369
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 166.64,
+            "max": 195.48,
+            "mean": 174.79
+          },
+          "cpu": {
+            "min": 0.8,
+            "max": 38.2,
+            "mean": 5.63
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 111.8,
+            "max": 112.36,
+            "mean": 111.95
+          },
+          "cpu": {
+            "min": 0,
+            "max": 35.17,
+            "mean": 2.77
+          }
+        }
+      },
+      "poolOverflow": 356,
+      "upstreamConnections": 44
+    },
+    {
+      "testName": "scaling down httproutes to 300 with 60 routes per hostname",
+      "routes": 300,
+      "routesPerHostname": 60,
+      "phase": "scaling-down",
+      "throughput": 5360.33,
+      "totalRequests": 160815,
+      "latency": {
+        "min": 354,
+        "mean": 6538,
+        "max": 92344,
+        "pstdev": 12045,
+        "percentiles": {
+          "p50": 3068,
+          "p75": 4770,
+          "p80": 5341,
+          "p90": 7974,
+          "p95": 47742,
+          "p99": 54480,
+          "p999": 62144
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 180.27,
+            "max": 192.65,
+            "mean": 189.01
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 46.53,
+            "mean": 4.41
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.66,
+            "max": 127.84,
+            "mean": 127.72
+          },
+          "cpu": {
+            "min": 0,
+            "max": 100.03,
+            "mean": 9.14
+          }
+        }
+      },
+      "poolOverflow": 363,
+      "upstreamConnections": 37
+    },
+    {
+      "testName": "scaling down httproutes to 500 with 100 routes per hostname",
+      "routes": 500,
+      "routesPerHostname": 100,
+      "phase": "scaling-down",
+      "throughput": 5334.03,
+      "totalRequests": 160024,
+      "latency": {
+        "min": 392,
+        "mean": 6782,
+        "max": 132493,
+        "pstdev": 12373,
+        "percentiles": {
+          "p50": 3182,
+          "p75": 4977,
+          "p80": 5586,
+          "p90": 8359,
+          "p95": 48365,
+          "p99": 55252,
+          "p999": 64712
+        }
+      },
+      "resources": {
+        "envoyGateway": {
+          "memory": {
+            "min": 203.37,
+            "max": 217.03,
+            "mean": 209.04
+          },
+          "cpu": {
+            "min": 0.67,
+            "max": 5.67,
+            "mean": 1.33
+          }
+        },
+        "envoyProxy": {
+          "memory": {
+            "min": 127.65,
+            "max": 127.84,
+            "mean": 127.72
+          },
+          "cpu": {
+            "min": 0,
+            "max": 99.86,
+            "mean": 9.91
+          }
+        }
+      },
+      "poolOverflow": 362,
+      "upstreamConnections": 38
+    }
+  ]
+};
+
+export default benchmarkData;
diff --git a/site/tools/benchmark-dashboard/src/hooks/use-mobile.tsx b/site/tools/benchmark-dashboard/src/hooks/use-mobile.tsx
new file mode 100644
index 000000000..2b0fe1dfe
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/hooks/use-mobile.tsx
@@ -0,0 +1,19 @@
+import * as React from "react"
+
+const MOBILE_BREAKPOINT = 768
+
+export function useIsMobile() {
+  const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)
+
+  React.useEffect(() => {
+    const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)
+    const onChange = () => {
+      setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
+    }
+    mql.addEventListener("change", onChange)
+    setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
+    return () => mql.removeEventListener("change", onChange)
+  }, [])
+
+  return !!isMobile
+}
diff --git a/site/tools/benchmark-dashboard/src/hooks/use-toast.ts b/site/tools/benchmark-dashboard/src/hooks/use-toast.ts
new file mode 100644
index 000000000..2c14125ac
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/hooks/use-toast.ts
@@ -0,0 +1,191 @@
+import * as React from "react"
+
+import type {
+  ToastActionElement,
+  ToastProps,
+} from "@/components/ui/toast"
+
+const TOAST_LIMIT = 1
+const TOAST_REMOVE_DELAY = 1000000
+
+type ToasterToast = ToastProps & {
+  id: string
+  title?: React.ReactNode
+  description?: React.ReactNode
+  action?: ToastActionElement
+}
+
+const actionTypes = {
+  ADD_TOAST: "ADD_TOAST",
+  UPDATE_TOAST: "UPDATE_TOAST",
+  DISMISS_TOAST: "DISMISS_TOAST",
+  REMOVE_TOAST: "REMOVE_TOAST",
+} as const
+
+let count = 0
+
+function genId() {
+  count = (count + 1) % Number.MAX_SAFE_INTEGER
+  return count.toString()
+}
+
+type ActionType = typeof actionTypes
+
+type Action =
+  | {
+      type: ActionType["ADD_TOAST"]
+      toast: ToasterToast
+    }
+  | {
+      type: ActionType["UPDATE_TOAST"]
+      toast: Partial<ToasterToast>
+    }
+  | {
+      type: ActionType["DISMISS_TOAST"]
+      toastId?: ToasterToast["id"]
+    }
+  | {
+      type: ActionType["REMOVE_TOAST"]
+      toastId?: ToasterToast["id"]
+    }
+
+interface State {
+  toasts: ToasterToast[]
+}
+
+const toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()
+
+const addToRemoveQueue = (toastId: string) => {
+  if (toastTimeouts.has(toastId)) {
+    return
+  }
+
+  const timeout = setTimeout(() => {
+    toastTimeouts.delete(toastId)
+    dispatch({
+      type: "REMOVE_TOAST",
+      toastId: toastId,
+    })
+  }, TOAST_REMOVE_DELAY)
+
+  toastTimeouts.set(toastId, timeout)
+}
+
+export const reducer = (state: State, action: Action): State => {
+  switch (action.type) {
+    case "ADD_TOAST":
+      return {
+        ...state,
+        toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),
+      }
+
+    case "UPDATE_TOAST":
+      return {
+        ...state,
+        toasts: state.toasts.map((t) =>
+          t.id === action.toast.id ? { ...t, ...action.toast } : t
+        ),
+      }
+
+    case "DISMISS_TOAST": {
+      const { toastId } = action
+
+      // ! Side effects ! - This could be extracted into a dismissToast() action,
+      // but I'll keep it here for simplicity
+      if (toastId) {
+        addToRemoveQueue(toastId)
+      } else {
+        state.toasts.forEach((toast) => {
+          addToRemoveQueue(toast.id)
+        })
+      }
+
+      return {
+        ...state,
+        toasts: state.toasts.map((t) =>
+          t.id === toastId || toastId === undefined
+            ? {
+                ...t,
+                open: false,
+              }
+            : t
+        ),
+      }
+    }
+    case "REMOVE_TOAST":
+      if (action.toastId === undefined) {
+        return {
+          ...state,
+          toasts: [],
+        }
+      }
+      return {
+        ...state,
+        toasts: state.toasts.filter((t) => t.id !== action.toastId),
+      }
+  }
+}
+
+const listeners: Array<(state: State) => void> = []
+
+let memoryState: State = { toasts: [] }
+
+function dispatch(action: Action) {
+  memoryState = reducer(memoryState, action)
+  listeners.forEach((listener) => {
+    listener(memoryState)
+  })
+}
+
+type Toast = Omit<ToasterToast, "id">
+
+function toast({ ...props }: Toast) {
+  const id = genId()
+
+  const update = (props: ToasterToast) =>
+    dispatch({
+      type: "UPDATE_TOAST",
+      toast: { ...props, id },
+    })
+  const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id })
+
+  dispatch({
+    type: "ADD_TOAST",
+    toast: {
+      ...props,
+      id,
+      open: true,
+      onOpenChange: (open) => {
+        if (!open) dismiss()
+      },
+    },
+  })
+
+  return {
+    id: id,
+    dismiss,
+    update,
+  }
+}
+
+function useToast() {
+  const [state, setState] = React.useState<State>(memoryState)
+
+  React.useEffect(() => {
+    listeners.push(setState)
+    return () => {
+      const index = listeners.indexOf(setState)
+      if (index > -1) {
+        listeners.splice(index, 1)
+      }
+    }
+  }, [state])
+
+  return {
+    ...state,
+    toast,
+    dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }),
+  }
+}
+
+export { useToast, toast }
diff --git a/site/tools/benchmark-dashboard/src/hooks/useVersionData.ts b/site/tools/benchmark-dashboard/src/hooks/useVersionData.ts
new file mode 100644
index 000000000..858f445cb
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/hooks/useVersionData.ts
@@ -0,0 +1,110 @@
+import { useState, useMemo } from 'react';
+import {
+  allTestSuites,
+  getAvailableVersions
+} from '@/data';
+import { TestSuite, TestResult, TestConfiguration } from '@/data/types';
+
+interface UseVersionDataReturn {
+  selectedVersion: string;
+  setSelectedVersion: (version: string) => void;
+  availableVersions: string[];
+  benchmarkResults: TestResult[];
+  testConfiguration: TestConfiguration;
+  performanceSummary: any;
+  latencyPercentileComparison: any[];
+  resourceTrends: any[];
+  performanceMatrix: any[];
+  metadata: any;
+}
+
+export const useVersionData = (): UseVersionDataReturn => {
+  const availableVersions = getAvailableVersions();
+  const [selectedVersion, setSelectedVersion] = useState<string>(availableVersions[0] || '');
+
+  // Get the current version's test suite
+  const currentTestSuite = useMemo(() => {
+    return allTestSuites.find(suite => suite.metadata.version === selectedVersion);
+  }, [selectedVersion]);
+
+  // Extract data in the same format as the old structure for backward compatibility
+  const versionData = useMemo(() => {
+    if (!currentTestSuite) {
+      return {
+        benchmarkResults: [],
+        testConfiguration: {
+          rps: 10000,
+          connections: 100,
+          duration: 30,
+          cpuLimit: '1000m',
+          memoryLimit: '2000Mi'
+        },
+        performanceSummary: {
+          totalTests: 0,
+          scaleUpTests: 0,
+          scaleDownTests: 0,
+          maxRoutes: 0,
+          minRoutes: 0,
+          avgThroughput: 0,
+          avgLatency: 0
+        },
+        latencyPercentileComparison: [],
+        resourceTrends: [],
+        performanceMatrix: [],
+        metadata: null
+      };
+    }
+
+    const results = currentTestSuite.results;
+
+    return {
+      benchmarkResults: results,
+      testConfiguration: currentTestSuite.metadata.testConfiguration,
+      performanceSummary: {
+        totalTests: results.length,
+        scaleUpTests: results.filter(r => r.phase === 'scaling-up').length,
+        scaleDownTests: results.filter(r => r.phase === 'scaling-down').length,
+        maxRoutes: results.length > 0 ? Math.max(...results.map(r => r.routes)) : 0,
+        minRoutes: results.length > 0 ? Math.min(...results.map(r => r.routes)) : 0,
+        avgThroughput: results.length > 0 ? results.reduce((sum, r) => sum + r.throughput, 0) / results.length : 0,
+        avgLatency: results.length > 0 ? results.reduce((sum, r) => sum + r.latency.mean, 0) / results.length : 0
+      },
+      latencyPercentileComparison: results.map(result => ({
+        routes: result.routes,
+        phase: result.phase,
+        p50: result.latency.percentiles.p50 / 1000, // convert to ms
+        p75: result.latency.percentiles.p75 / 1000,
+        p90: result.latency.percentiles.p90 / 1000,
+        p95: result.latency.percentiles.p95 / 1000,
+        p99: result.latency.percentiles.p99 / 1000,
+        p999: result.latency.percentiles.p999 / 1000
+      })),
+      resourceTrends: results.map(result => ({
+        routes: result.routes,
+        phase: result.phase,
+        envoyGatewayMemory: result.resources.envoyGateway.memory.mean,
+        envoyGatewayCpu: result.resources.envoyGateway.cpu.mean,
+        envoyProxyMemory: result.resources.envoyProxy.memory.mean,
+        envoyProxyCpu: result.resources.envoyProxy.cpu.mean
+      })),
+      performanceMatrix: results.map(result => ({
+        testName: result.testName,
+        routes: result.routes,
+        phase: result.phase,
+        throughput: result.throughput,
+        meanLatency: result.latency.mean / 1000, // convert to ms
+        p95Latency: result.latency.percentiles.p95 / 1000, // convert to ms
+        totalMemory: result.resources.envoyGateway.memory.mean + result.resources.envoyProxy.memory.mean,
+        totalCpu: result.resources.envoyGateway.cpu.mean + result.resources.envoyProxy.cpu.mean
+      })),
+      metadata: currentTestSuite.metadata
+    };
+  }, [currentTestSuite]);
+
+  return {
+    selectedVersion,
+    setSelectedVersion,
+    availableVersions,
+    ...versionData
+  };
+};
diff --git a/site/tools/benchmark-dashboard/src/index.css b/site/tools/benchmark-dashboard/src/index.css
new file mode 100644
index 000000000..19a10d3aa
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/index.css
@@ -0,0 +1,196 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+/* Definition of the design system. All colors, gradients, fonts, etc should be defined here. */
+
+@layer base {
+  :root {
+    --background: 0 0% 100%;
+    --foreground: 222.2 84% 4.9%;
+
+    --card: 0 0% 100%;
+    --card-foreground: 222.2 84% 4.9%;
+
+    --popover: 0 0% 100%;
+    --popover-foreground: 222.2 84% 4.9%;
+
+    --primary: 222.2 47.4% 11.2%;
+    --primary-foreground: 210 40% 98%;
+
+    --secondary: 210 40% 96.1%;
+    --secondary-foreground: 222.2 47.4% 11.2%;
+
+    --muted: 210 40% 96.1%;
+    --muted-foreground: 215.4 16.3% 46.9%;
+
+    --accent: 210 40% 96.1%;
+    --accent-foreground: 222.2 47.4% 11.2%;
+
+    --destructive: 0 84.2% 60.2%;
+    --destructive-foreground: 210 40% 98%;
+
+    --border: 214.3 31.8% 91.4%;
+    --input: 214.3 31.8% 91.4%;
+    --ring: 222.2 84% 4.9%;
+
+    --radius: 0.5rem;
+
+    --sidebar-background: 0 0% 98%;
+
+    --sidebar-foreground: 240 5.3% 26.1%;
+
+    --sidebar-primary: 240 5.9% 10%;
+
+    --sidebar-primary-foreground: 0 0% 98%;
+
+    --sidebar-accent: 240 4.8% 95.9%;
+
+    --sidebar-accent-foreground: 240 5.9% 10%;
+
+    --sidebar-border: 220 13% 91%;
+
+    --sidebar-ring: 217.2 91.2% 59.8%;
+  }
+
+  body {
+    --background: 0 0% 100%;
+    --foreground: 222.2 84% 4.9%;
+    --card: 0 0% 100%;
+    --card-foreground: 222.2 84% 4.9%;
+    --popover: 0 0% 100%;
+    --popover-foreground: 222.2 84% 4.9%;
+    --primary: 222.2 47.4% 11.2%;
+    --primary-foreground: 210 40% 98%;
+    --secondary: 210 40% 96.1%;
+    --secondary-foreground: 222.2 47.4% 11.2%;
+    --muted: 210 40% 96.1%;
+    --muted-foreground: 215.4 16.3% 46.9%;
+    --accent: 210 40% 96.1%;
+    --accent-foreground: 222.2 47.4% 11.2%;
+    --destructive: 0 84.2% 60.2%;
+    --destructive-foreground: 210 40% 98%;
+    --border: 214.3 31.8% 91.4%;
+    --input: 214.3 31.8% 91.4%;
+    --ring: 222.2 84% 4.9%;
+    --radius: 0.5rem;
+    --sidebar-background: 0 0% 98%;
+    --sidebar-foreground: 240 5.3% 26.1%;
+    --sidebar-primary: 240 5.9% 10%;
+    --sidebar-primary-foreground: 0 0% 98%;
+    --sidebar-accent: 240 4.8% 95.9%;
+    --sidebar-accent-foreground: 240 5.9% 10%;
+    --sidebar-border: 220 13% 91%;
+    --sidebar-ring: 217.2 91.2% 59.8%;
+  }
+
+  .dark, body.dark {
+    --background: 222.2 84% 4.9%;
+    --foreground: 210 40% 98%;
+    --card: 222.2 84% 4.9%;
+    --card-foreground: 210 40% 98%;
+    --popover: 222.2 84% 4.9%;
+    --popover-foreground: 210 40% 98%;
+    --primary: 210 40% 98%;
+    --primary-foreground: 222.2 47.4% 11.2%;
+    --secondary: 217.2 32.6% 17.5%;
+    --secondary-foreground: 210 40% 98%;
+    --muted: 217.2 32.6% 17.5%;
+    --muted-foreground: 215 20.2% 65.1%;
+    --accent: 217.2 32.6% 17.5%;
+    --accent-foreground: 210 40% 98%;
+    --destructive: 0 62.8% 30.6%;
+    --destructive-foreground: 210 40% 98%;
+    --border: 217.2 32.6% 17.5%;
+    --input: 217.2 32.6% 17.5%;
+    --ring: 212.7 26.8% 83.9%;
+    --sidebar-background: 240 5.9% 10%;
+    --sidebar-foreground: 240 4.8% 95.9%;
+    --sidebar-primary: 224.3 76.3% 48%;
+    --sidebar-primary-foreground: 0 0% 100%;
+    --sidebar-accent: 240 3.7% 15.9%;
+    --sidebar-accent-foreground: 240 4.8% 95.9%;
+    --sidebar-border: 240 3.7% 15.9%;
+    --sidebar-ring: 217.2 91.2% 59.8%;
+  }
+}
+
+@layer base {
+  * {
+    @apply border-border;
+  }
+
+  body {
+    @apply bg-background text-foreground;
+  }
+}
+
+/* Global styles for Radix UI portals rendered outside Shadow DOM */
+@layer components {
+  /* Radix popper content wrapper styling - these elements are rendered via React portals */
+  [data-radix-popper-content-wrapper] {
+    /* Ensure high z-index for proper layering */
+    z-index: 9999 !important;
+
+    /* Apply CSS variables that should be inherited from the document */
+    --popover: 0 0% 100%;
+    --popover-foreground: 222.2 84% 4.9%;
+    --border: 214.3 31.8% 91.4%;
+    --background: 0 0% 100%;
+    --foreground: 222.2 84% 4.9%;
+    --muted: 210 40% 96.1%;
+    --muted-foreground: 215.4 16.3% 46.9%;
+    --accent: 210 40% 96.1%;
+    --accent-foreground: 222.2 47.4% 11.2%;
+    --destructive: 0 84.2% 60.2%;
+    --destructive-foreground: 210 40% 98%;
+    --primary: 222.2 47.4% 11.2%;
+    --primary-foreground: 210 40% 98%;
+    --secondary: 210 40% 96.1%;
+    --secondary-foreground: 222.2 47.4% 11.2%;
+    --ring: 222.2 84% 4.9%;
+    --radius: 0.5rem;
+  }
+
+  /* Dark mode support for portals */
+  .dark [data-radix-popper-content-wrapper],
+  body.dark [data-radix-popper-content-wrapper] {
+    --popover: 222.2 84% 4.9%;
+    --popover-foreground: 210 40% 98%;
+    --border: 217.2 32.6% 17.5%;
+    --background: 222.2 84% 4.9%;
+    --foreground: 210 40% 98%;
+    --muted: 217.2 32.6% 17.5%;
+    --muted-foreground: 215 20.2% 65.1%;
+    --accent: 217.2 32.6% 17.5%;
+    --accent-foreground: 210 40% 98%;
+    --destructive: 0 62.8% 30.6%;
+    --destructive-foreground: 210 40% 98%;
+    --primary: 210 40% 98%;
+    --primary-foreground: 222.2 47.4% 11.2%;
+    --secondary: 217.2 32.6% 17.5%;
+    --secondary-foreground: 210 40% 98%;
+    --ring: 212.7 26.8% 83.9%;
+  }
+
+  /* Ensure portal content gets proper styling */
+  [data-radix-popper-content-wrapper] .bg-popover {
+    background-color: hsl(var(--popover)) !important;
+  }
+
+  [data-radix-popper-content-wrapper] .text-popover-foreground {
+    color: hsl(var(--popover-foreground)) !important;
+  }
+
+  [data-radix-popper-content-wrapper] .border {
+    border-color: hsl(var(--border)) !important;
+  }
+
+  [data-radix-popper-content-wrapper] .shadow-md {
+    box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1) !important;
+  }
+
+  [data-radix-popper-content-wrapper] .rounded-md {
+    border-radius: calc(var(--radius) - 2px) !important;
+  }
+}
diff --git a/site/tools/benchmark-dashboard/src/lib/utils.ts b/site/tools/benchmark-dashboard/src/lib/utils.ts
new file mode 100644
index 000000000..51be6f417
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/lib/utils.ts
@@ -0,0 +1,64 @@
+import { clsx, type ClassValue } from "clsx"
+import { twMerge } from "tailwind-merge"
+
+export function cn(...inputs: ClassValue[]) {
+  return twMerge(clsx(inputs))
+}
+
+/**
+ * Helper function to apply Tailwind classes with the bd- prefix
+ * This helps during the migration from unprefixed to prefixed classes
+ */
+export function bdcn(...inputs: ClassValue[]) {
+  // This function can be used to gradually migrate classes
+  // For now, it just calls the regular cn function
+  return cn(...inputs)
+}
+
+/**
+ * Utility to convert regular Tailwind classes to bd- prefixed classes
+ * Useful for automated migration
+ */
+export function addBdPrefix(className: string): string {
+  if (!className) return className;
+
+  // List of common Tailwind prefixes that should get the bd- prefix
+  const tailwindPrefixes = [
+    'flex', 'grid', 'block', 'inline', 'hidden', 'visible',
+    'absolute', 'relative', 'fixed', 'sticky', 'static',
+    'top-', 'right-', 'bottom-', 'left-', 'inset-',
+    'z-', 'order-',
+    'w-', 'h-', 'min-w-', 'min-h-', 'max-w-', 'max-h-',
+    'm-', 'mx-', 'my-', 'mt-', 'mr-', 'mb-', 'ml-',
+    'p-', 'px-', 'py-', 'pt-', 'pr-', 'pb-', 'pl-',
+    'text-', 'font-', 'leading-', 'tracking-', 'align-',
+    'bg-', 'border-', 'outline-', 'ring-',
+    'rounded-', 'shadow-',
+    'opacity-', 'cursor-', 'select-', 'pointer-events-',
+    'transition-', 'duration-', 'ease-', 'delay-',
+    'transform', 'rotate-', 'scale-', 'translate-', 'skew-',
+    'overflow-', 'truncate', 'whitespace-',
+    'items-', 'justify-', 'content-', 'self-',
+    'space-x-', 'space-y-', 'gap-',
+    'sr-only', 'not-sr-only'
+  ];
+
+  return className
+    .split(' ')
+    .map(cls => {
+      if (!cls.trim()) return cls;
+
+      // Check if class starts with any Tailwind prefix
+      const needsPrefix = tailwindPrefixes.some(prefix =>
+        cls.startsWith(prefix) || cls === prefix.slice(0, -1)
+      );
+
+      // Don't add prefix if it already has bd- or if it's not a Tailwind class
+      if (needsPrefix && !cls.startsWith('bd-')) {
+        return `bd-${cls}`;
+      }
+
+      return cls;
+    })
+    .join(' ');
+}
diff --git a/site/tools/benchmark-dashboard/src/main.tsx b/site/tools/benchmark-dashboard/src/main.tsx
new file mode 100644
index 000000000..516395cfa
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/main.tsx
@@ -0,0 +1,93 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+import { ShadowDOMWrapper } from './components/ShadowDOMWrapper';
+// Import the compiled CSS as raw text for Shadow DOM injection
+import cssText from '../dist/benchmark-dashboard.css?raw';
+
+// Make CSS available to the CSSInjector
+(window as any).__BENCHMARK_CSS__ = cssText;
+
+// Safe Hugo integration function that uses Shadow DOM for complete isolation
+function initializeBenchmarkDashboardShadow() {
+  try {
+    // Only initialize if we're in a browser environment
+    if (typeof window === 'undefined') {
+      return;
+    }
+
+    const mountPoints = document.querySelectorAll('[data-react-component="benchmark-dashboard"]');
+
+    if (mountPoints.length === 0) {
+      return;
+    }
+
+    mountPoints.forEach((element, index) => {
+      try {
+        const htmlElement = element as HTMLElement;
+
+        // Skip if already initialized
+        if (htmlElement.dataset.reactInitialized === 'true') {
+          return;
+        }
+
+        // Parse configuration from data attributes
+        const config = {
+          apiBase: htmlElement.dataset.apiBase,
+          initialVersion: htmlElement.dataset.version,
+          theme: (htmlElement.dataset.theme as 'light' | 'dark') || 'light',
+          containerClassName: htmlElement.dataset.containerClass || '',
+          containerId: `benchmark-dashboard-${index}`,
+          features: {
+            header: htmlElement.dataset.showHeader === 'true',
+            versionSelector: htmlElement.dataset.showVersionSelector !== 'false',
+            summaryCards: htmlElement.dataset.showSummaryCards !== 'false',
+            tabs: htmlElement.dataset.tabs?.split(',').map(t => t.trim()) || ['overview', 'latency', 'resources']
+          }
+        };
+
+        // Create React root and render with Shadow DOM wrapper
+        const root = ReactDOM.createRoot(htmlElement);
+
+        root.render(
+          <React.StrictMode>
+            <ShadowDOMWrapper {...config} />
+          </React.StrictMode>
+        );
+
+        // Mark as initialized
+        htmlElement.dataset.reactInitialized = 'true';
+
+      } catch (error) {
+        console.error(`Error initializing benchmark dashboard ${index + 1}:`, error);
+      }
+    });
+  } catch (error) {
+    console.error('Error in benchmark dashboard initialization:', error);
+  }
+}
+
+// Wait for DOM to be ready
+function waitForSafeInitialization() {
+  // Wait a bit to ensure Hugo's scripts have loaded
+  setTimeout(() => {
+    initializeBenchmarkDashboardShadow();
+  }, 100);
+}
+
+// Multiple initialization strategies
+if (document.readyState === 'loading') {
+  document.addEventListener('DOMContentLoaded', waitForSafeInitialization);
+} else {
+  waitForSafeInitialization();
+}
+
+// Also try after window load (more defensive)
+window.addEventListener('load', () => {
+  setTimeout(initializeBenchmarkDashboardShadow, 200);
+});
+
+// Export for manual initialization if needed
+(window as Window & { initializeBenchmarkDashboardShadow?: () => void }).initializeBenchmarkDashboardShadow = initializeBenchmarkDashboardShadow;
+
+// Also export for module usage
+export { initializeBenchmarkDashboardShadow as initializeHugoShadowDashboard };
diff --git a/site/tools/benchmark-dashboard/src/utils/cssInjector.ts b/site/tools/benchmark-dashboard/src/utils/cssInjector.ts
new file mode 100644
index 000000000..8adc6ff00
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/utils/cssInjector.ts
@@ -0,0 +1,379 @@
+// Utility to handle CSS injection into Shadow DOM
+export class CSSInjector {
+  private static cssCache: Map<string, string> = new Map();
+
+  /**
+   * Get all CSS needed for the shadow DOM
+   */
+  static async getAllCSS(): Promise<string> {
+    const cacheKey = 'shadow-dom-css';
+
+    if (this.cssCache.has(cacheKey)) {
+      return this.cssCache.get(cacheKey)!;
+    }
+
+    try {
+      let css = '';
+
+      // Try to use bundled CSS first (this should always work in shadow DOM build)
+      const bundledCSS = this.getBundledCSS();
+
+      if (bundledCSS) {
+        // Transform the compiled CSS to work in Shadow DOM by converting :root and .dark to :host selectors
+        css = this.transformCSSForShadowDOM(bundledCSS);
+
+        // Add Shadow DOM specific styles
+        const finalCSS = `
+          ${this.getShadowDOMStyles()}
+          ${css}
+        `;
+        this.cssCache.set(cacheKey, finalCSS);
+        return finalCSS;
+      } else {
+        // Fallback CSS if bundled CSS is not available
+        const fallbackCSS = this.getFallbackCSS();
+        this.cssCache.set(cacheKey, fallbackCSS);
+        return fallbackCSS;
+      }
+    } catch (error) {
+      console.error('Error loading CSS for Shadow DOM:', error);
+      return this.getFallbackCSS();
+    }
+  }
+
+  /**
+   * Get bundled CSS that was injected at build time
+   */
+  private static getBundledCSS(): string | null {
+    return (window as any).__BENCHMARK_CSS__ || null;
+  }
+
+  /**
+   * CSS Custom Properties (CSS Variables) for theming
+   */
+  private static getCSSVariables(): string {
+    return `
+      /* CSS Custom Properties for theming */
+      :host(.benchmark-dashboard) {
+        --background: 0 0% 100%;
+        --foreground: 222.2 84% 4.9%;
+        --card: 0 0% 100%;
+        --card-foreground: 222.2 84% 4.9%;
+        --popover: 0 0% 100%;
+        --popover-foreground: 222.2 84% 4.9%;
+        --primary: 222.2 47.4% 11.2%;
+        --primary-foreground: 210 40% 98%;
+        --secondary: 210 40% 96.1%;
+        --secondary-foreground: 222.2 47.4% 11.2%;
+        --muted: 210 40% 96.1%;
+        --muted-foreground: 215.4 16.3% 46.9%;
+        --accent: 210 40% 96.1%;
+        --accent-foreground: 222.2 47.4% 11.2%;
+        --destructive: 0 84.2% 60.2%;
+        --destructive-foreground: 210 40% 98%;
+        --border: 214.3 31.8% 91.4%;
+        --input: 214.3 31.8% 91.4%;
+        --ring: 222.2 84% 4.9%;
+        --radius: 0.5rem;
+        --sidebar-background: 0 0% 98%;
+        --sidebar-foreground: 240 5.3% 26.1%;
+        --sidebar-primary: 240 5.9% 10%;
+        --sidebar-primary-foreground: 0 0% 98%;
+        --sidebar-accent: 240 4.8% 95.9%;
+        --sidebar-accent-foreground: 240 5.9% 10%;
+        --sidebar-border: 220 13% 91%;
+        --sidebar-ring: 217.2 91.2% 59.8%;
+      }
+
+      :host(.benchmark-dashboard.dark) {
+        --background: 222.2 84% 4.9%;
+        --foreground: 210 40% 98%;
+        --card: 222.2 84% 4.9%;
+        --card-foreground: 210 40% 98%;
+        --popover: 222.2 84% 4.9%;
+        --popover-foreground: 210 40% 98%;
+        --primary: 210 40% 98%;
+        --primary-foreground: 222.2 47.4% 11.2%;
+        --secondary: 217.2 32.6% 17.5%;
+        --secondary-foreground: 210 40% 98%;
+        --muted: 217.2 32.6% 17.5%;
+        --muted-foreground: 215 20.2% 65.1%;
+        --accent: 217.2 32.6% 17.5%;
+        --accent-foreground: 210 40% 98%;
+        --destructive: 0 62.8% 30.6%;
+        --destructive-foreground: 210 40% 98%;
+        --border: 217.2 32.6% 17.5%;
+        --input: 217.2 32.6% 17.5%;
+        --ring: 212.7 26.8% 83.9%;
+        --sidebar-background: 240 5.9% 10%;
+        --sidebar-foreground: 240 4.8% 95.9%;
+        --sidebar-primary: 224.3 76.3% 48%;
+        --sidebar-primary-foreground: 0 0% 100%;
+        --sidebar-accent: 240 3.7% 15.9%;
+        --sidebar-accent-foreground: 240 4.8% 95.9%;
+        --sidebar-border: 240 3.7% 15.9%;
+        --sidebar-ring: 217.2 91.2% 59.8%;
+      }
+    `;
+  }
+
+  /**
+   * Shadow DOM specific styles
+   */
+  private static getShadowDOMStyles(): string {
+    return `
+      /* Shadow DOM host styles */
+      :host {
+        all: initial;
+        display: block;
+        font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
+        line-height: 1.5;
+        -webkit-font-smoothing: antialiased;
+        -moz-osx-font-smoothing: grayscale;
+        color: hsl(var(--foreground));
+        background: hsl(var(--background));
+      }
+
+      /* Reset all elements */
+      * {
+        box-sizing: border-box;
+      }
+
+      /* Shadow root container */
+      #shadow-root {
+        width: 100%;
+        min-height: 100%;
+        position: relative;
+      }
+
+      /* Ensure proper isolation */
+      :host([hidden]) {
+        display: none;
+      }
+    `;
+  }
+
+  /**
+   * Transform compiled CSS to work in Shadow DOM
+   */
+  private static transformCSSForShadowDOM(css: string): string {
+    // Transform :root selector to :host for Shadow DOM
+    css = css.replace(/:root\s*{([^}]*)}/g, ':host {$1}');
+
+    // Transform .dark and body.dark selectors to :host(.dark) for Shadow DOM
+    css = css.replace(/\.dark\s*,\s*body\.dark\s*{([^}]*)}/g, ':host(.dark) {$1}');
+    css = css.replace(/\.dark\s*{([^}]*)}/g, ':host(.dark) {$1}');
+    css = css.replace(/body\.dark\s*{([^}]*)}/g, ':host(.dark) {$1}');
+
+    // Also transform any remaining body selectors to :host
+    css = css.replace(/body\s*{([^}]*)}/g, ':host {$1}');
+
+    return css;
+  }
+
+  /**
+   * Complete fallback CSS
+   */
+  private static getFallbackCSS(): string {
+    return `
+      ${this.getShadowDOMStyles()}
+      ${this.getCSSVariables()}
+      ${this.getTailwindFallback()}
+    `;
+  }
+
+  /**
+   * Comprehensive Tailwind CSS fallback for Shadow DOM
+   */
+  private static getTailwindFallback(): string {
+    return `
+      /* Tailwind-like reset */
+      *,
+      ::before,
+      ::after {
+        box-sizing: border-box;
+        border-width: 0;
+        border-style: solid;
+        border-color: hsl(var(--border));
+      }
+
+      /* Display utilities */
+      .flex { display: flex !important; }
+      .grid { display: grid !important; }
+      .block { display: block !important; }
+      .inline-block { display: inline-block !important; }
+      .inline { display: inline !important; }
+      .hidden { display: none !important; }
+      .inline-flex { display: inline-flex !important; }
+
+      /* Sizing utilities */
+      .w-full { width: 100% !important; }
+      .w-8 { width: 2rem !important; }
+      .w-auto { width: auto !important; }
+      .h-full { height: 100% !important; }
+      .h-8 { height: 2rem !important; }
+      .h-auto { height: auto !important; }
+      .min-h-full { min-height: 100% !important; }
+
+      /* Spacing utilities - Padding */
+      .p-0 { padding: 0 !important; }
+      .p-1 { padding: 0.25rem !important; }
+      .p-2 { padding: 0.5rem !important; }
+      .p-4 { padding: 1rem !important; }
+      .p-6 { padding: 1.5rem !important; }
+      .p-8 { padding: 2rem !important; }
+      .px-3 { padding-left: 0.75rem !important; padding-right: 0.75rem !important; }
+      .px-4 { padding-left: 1rem !important; padding-right: 1rem !important; }
+      .px-6 { padding-left: 1.5rem !important; padding-right: 1.5rem !important; }
+      .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; }
+      .py-4 { padding-top: 1rem !important; padding-bottom: 1rem !important; }
+      .py-12 { padding-top: 3rem !important; padding-bottom: 3rem !important; }
+
+      /* Spacing utilities - Margin */
+      .m-0 { margin: 0 !important; }
+      .m-1 { margin: 0.25rem !important; }
+      .m-2 { margin: 0.5rem !important; }
+      .m-4 { margin: 1rem !important; }
+      .m-6 { margin: 1.5rem !important; }
+      .m-8 { margin: 2rem !important; }
+      .mb-2 { margin-bottom: 0.5rem !important; }
+      .mb-4 { margin-bottom: 1rem !important; }
+      .mb-5 { margin-bottom: 1.25rem !important; }
+      .mb-6 { margin-bottom: 1.5rem !important; }
+      .mb-8 { margin-bottom: 2rem !important; }
+      .mt-4 { margin-top: 1rem !important; }
+      .mt-5 { margin-top: 1.25rem !important; }
+      .mr-3 { margin-right: 0.75rem !important; }
+
+      /* Typography */
+      .text-sm { font-size: 0.875rem !important; line-height: 1.25rem !important; }
+      .text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
+      .text-lg { font-size: 1.125rem !important; line-height: 1.75rem !important; }
+      .text-xl { font-size: 1.25rem !important; line-height: 1.75rem !important; }
+      .text-2xl { font-size: 1.5rem !important; line-height: 2rem !important; }
+      .text-3xl { font-size: 1.875rem !important; line-height: 2.25rem !important; }
+
+      .font-medium { font-weight: 500 !important; }
+      .font-semibold { font-weight: 600 !important; }
+      .font-bold { font-weight: 700 !important; }
+
+      /* Text colors */
+      .text-white { color: #ffffff !important; }
+      .text-gray-600 { color: hsl(var(--muted-foreground)) !important; }
+      .text-gray-700 { color: hsl(var(--foreground)) !important; }
+      .text-gray-800 { color: hsl(var(--foreground)) !important; }
+      .text-gray-900 { color: hsl(var(--foreground)) !important; }
+
+      /* Background colors */
+      .bg-white { background-color: hsl(var(--background)) !important; }
+      .bg-gray-50 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-100 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-700 { background-color: hsl(var(--muted)) !important; }
+      .bg-gray-800 { background-color: hsl(var(--card)) !important; }
+      .bg-gradient-to-r { background-image: linear-gradient(to right, var(--tw-gradient-stops)) !important; }
+
+      /* Gradient colors */
+      .from-purple-600 { --tw-gradient-from: #9333ea !important; --tw-gradient-to: rgb(147 51 234 / 0) !important; --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to) !important; }
+      .to-indigo-600 { --tw-gradient-to: #4f46e5 !important; }
+
+      /* Border utilities */
+      .border { border-width: 1px !important; }
+      .border-b { border-bottom-width: 1px !important; }
+      .border-b-2 { border-bottom-width: 2px !important; }
+      .border-t-lg { border-top-width: 4px !important; }
+      .border-gray-200 { border-color: hsl(var(--border)) !important; }
+      .border-gray-300 { border-color: hsl(var(--border)) !important; }
+      .border-gray-700 { border-color: hsl(var(--border)) !important; }
+      .border-blue-600 { border-color: #2563eb !important; }
+      .border-purple-600 { border-color: #9333ea !important; }
+      .border-transparent { border-color: transparent !important; }
+
+      /* Border radius */
+      .rounded { border-radius: 0.25rem !important; }
+      .rounded-md { border-radius: 0.375rem !important; }
+      .rounded-lg { border-radius: 0.5rem !important; }
+      .rounded-xl { border-radius: 0.75rem !important; }
+      .rounded-2xl { border-radius: 1rem !important; }
+      .rounded-t-lg { border-top-left-radius: 0.5rem !important; border-top-right-radius: 0.5rem !important; }
+      .rounded-full { border-radius: 9999px !important; }
+      .rounded-none { border-radius: 0px !important; }
+
+      /* Box shadow */
+      .shadow { box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1) !important; }
+      .shadow-lg { box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) !important; }
+
+      /* Grid utilities */
+      .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
+      .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
+      .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
+
+      .gap-1 { gap: 0.25rem !important; }
+      .gap-2 { gap: 0.5rem !important; }
+      .gap-4 { gap: 1rem !important; }
+
+      /* Flexbox utilities */
+      .items-center { align-items: center !important; }
+      .items-start { align-items: flex-start !important; }
+      .justify-center { justify-content: center !important; }
+      .justify-between { justify-content: space-between !important; }
+      .justify-start { justify-content: flex-start !important; }
+
+      /* Position utilities */
+      .relative { position: relative !important; }
+      .absolute { position: absolute !important; }
+      .z-50 { z-index: 50 !important; }
+
+      /* Overflow utilities */
+      .overflow-hidden { overflow: hidden !important; }
+      .overflow-auto { overflow: auto !important; }
+
+      /* Cursor utilities */
+      .cursor-pointer { cursor: pointer !important; }
+
+      /* Transition utilities */
+      .transition-all { transition-property: all !important; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1) !important; transition-duration: 150ms !important; }
+      .duration-200 { transition-duration: 200ms !important; }
+
+      /* Hover utilities */
+      .hover\\:bg-gray-50:hover { background-color: hsl(var(--muted)) !important; }
+      .hover\\:bg-gray-700:hover { background-color: hsl(var(--muted)) !important; }
+
+      /* Animation utilities */
+      @keyframes spin {
+        to {
+          transform: rotate(360deg);
+        }
+      }
+      .animate-spin {
+        animation: spin 1s linear infinite !important;
+      }
+
+      /* Dark mode utilities */
+      .dark\\:bg-gray-700 { background-color: hsl(var(--muted)) !important; }
+      .dark\\:bg-gray-800 { background-color: hsl(var(--card)) !important; }
+      .dark\\:border-gray-700 { border-color: hsl(var(--border)) !important; }
+      .dark\\:text-gray-300 { color: hsl(var(--muted-foreground)) !important; }
+      .dark\\:hover\\:bg-gray-700:hover { background-color: hsl(var(--muted)) !important; }
+
+      /* Data attribute utilities for Radix components */
+      [data-state="active"] {
+        background: linear-gradient(to right, #9333ea, #4f46e5) !important;
+        color: white !important;
+        box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1) !important;
+        border-bottom: 2px solid #9333ea !important;
+      }
+
+      /* White space utilities */
+      .whitespace-nowrap { white-space: nowrap !important; }
+
+      /* Text alignment */
+      .text-center { text-align: center !important; }
+      .text-left { text-align: left !important; }
+
+      /* Responsive utilities (basic support) */
+      @media (min-width: 640px) {
+        .sm\\:text-base { font-size: 1rem !important; line-height: 1.5rem !important; }
+      }
+    `;
+  }
+}
diff --git a/site/tools/benchmark-dashboard/src/vite-env.d.ts b/site/tools/benchmark-dashboard/src/vite-env.d.ts
new file mode 100644
index 000000000..19da555af
--- /dev/null
+++ b/site/tools/benchmark-dashboard/src/vite-env.d.ts
@@ -0,0 +1,11 @@
+/// <reference types="vite/client" />
+
+declare module '*.css?raw' {
+  const content: string;
+  export default content;
+}
+
+declare module '*.css?inline' {
+  const content: string;
+  export default content;
+}
diff --git a/site/tools/benchmark-dashboard/tailwind.config.ts b/site/tools/benchmark-dashboard/tailwind.config.ts
new file mode 100644
index 000000000..02f63c4e7
--- /dev/null
+++ b/site/tools/benchmark-dashboard/tailwind.config.ts
@@ -0,0 +1,99 @@
+import type { Config } from "tailwindcss";
+import tailwindcssAnimate from "tailwindcss-animate";
+
+export default {
+	darkMode: ["class"],
+	content: [
+		"./pages/**/*.{ts,tsx}",
+		"./components/**/*.{ts,tsx}",
+		"./app/**/*.{ts,tsx}",
+		"./src/**/*.{ts,tsx}",
+	],
+	corePlugins: {
+		preflight: false, // Disable global CSS reset
+	},
+	theme: {
+		container: {
+			center: true,
+			padding: '2rem',
+			screens: {
+				'2xl': '1400px'
+			}
+		},
+		extend: {
+			colors: {
+				border: 'hsl(var(--border))',
+				input: 'hsl(var(--input))',
+				ring: 'hsl(var(--ring))',
+				background: 'hsl(var(--background))',
+				foreground: 'hsl(var(--foreground))',
+				primary: {
+					DEFAULT: 'hsl(var(--primary))',
+					foreground: 'hsl(var(--primary-foreground))'
+				},
+				secondary: {
+					DEFAULT: 'hsl(var(--secondary))',
+					foreground: 'hsl(var(--secondary-foreground))'
+				},
+				destructive: {
+					DEFAULT: 'hsl(var(--destructive))',
+					foreground: 'hsl(var(--destructive-foreground))'
+				},
+				muted: {
+					DEFAULT: 'hsl(var(--muted))',
+					foreground: 'hsl(var(--muted-foreground))'
+				},
+				accent: {
+					DEFAULT: 'hsl(var(--accent))',
+					foreground: 'hsl(var(--accent-foreground))'
+				},
+				popover: {
+					DEFAULT: 'hsl(var(--popover))',
+					foreground: 'hsl(var(--popover-foreground))'
+				},
+				card: {
+					DEFAULT: 'hsl(var(--card))',
+					foreground: 'hsl(var(--card-foreground))'
+				},
+				sidebar: {
+					DEFAULT: 'hsl(var(--sidebar-background))',
+					foreground: 'hsl(var(--sidebar-foreground))',
+					primary: 'hsl(var(--sidebar-primary))',
+					'primary-foreground': 'hsl(var(--sidebar-primary-foreground))',
+					accent: 'hsl(var(--sidebar-accent))',
+					'accent-foreground': 'hsl(var(--sidebar-accent-foreground))',
+					border: 'hsl(var(--sidebar-border))',
+					ring: 'hsl(var(--sidebar-ring))'
+				}
+			},
+			borderRadius: {
+				lg: 'var(--radius)',
+				md: 'calc(var(--radius) - 2px)',
+				sm: 'calc(var(--radius) - 4px)'
+			},
+			keyframes: {
+				'accordion-down': {
+					from: {
+						height: '0'
+					},
+					to: {
+						height: 'var(--radix-accordion-content-height)'
+					}
+				},
+				'accordion-up': {
+					from: {
+						height: 'var(--radix-accordion-content-height)'
+					},
+					to: {
+						height: '0'
+					}
+				}
+			},
+			animation: {
+				'accordion-down': 'accordion-down 0.2s ease-out',
+				'accordion-up': 'accordion-up 0.2s ease-out'
+			}
+		}
+	},
+	plugins: [tailwindcssAnimate],
+} satisfies Config;
diff --git a/site/tools/benchmark-dashboard/tsconfig.app.json b/site/tools/benchmark-dashboard/tsconfig.app.json
new file mode 100644
index 000000000..0b0e43e6b
--- /dev/null
+++ b/site/tools/benchmark-dashboard/tsconfig.app.json
@@ -0,0 +1,30 @@
+{
+  "compilerOptions": {
+    "target": "ES2020",
+    "useDefineForClassFields": true,
+    "lib": ["ES2020", "DOM", "DOM.Iterable"],
+    "module": "ESNext",
+    "skipLibCheck": true,
+
+    /* Bundler mode */
+    "moduleResolution": "bundler",
+    "allowImportingTsExtensions": true,
+    "isolatedModules": true,
+    "moduleDetection": "force",
+    "noEmit": true,
+    "jsx": "react-jsx",
+
+    /* Linting */
+    "strict": false,
+    "noUnusedLocals": false,
+    "noUnusedParameters": false,
+    "noImplicitAny": false,
+    "noFallthroughCasesInSwitch": false,
+
+    "baseUrl": ".",
+    "paths": {
+      "@/*": ["./src/*"]
+    }
+  },
+  "include": ["src"]
+}
diff --git a/site/tools/benchmark-dashboard/tsconfig.json b/site/tools/benchmark-dashboard/tsconfig.json
new file mode 100644
index 000000000..129b1a30f
--- /dev/null
+++ b/site/tools/benchmark-dashboard/tsconfig.json
@@ -0,0 +1,19 @@
+{
+  "files": [],
+  "references": [
+    { "path": "./tsconfig.app.json" },
+    { "path": "./tsconfig.node.json" }
+  ],
+  "compilerOptions": {
+    "baseUrl": ".",
+    "paths": {
+      "@/*": ["./src/*"]
+    },
+    "noImplicitAny": false,
+    "noUnusedParameters": false,
+    "skipLibCheck": true,
+    "allowJs": true,
+    "noUnusedLocals": false,
+    "strictNullChecks": false
+  }
+}
diff --git a/site/tools/benchmark-dashboard/tsconfig.node.json b/site/tools/benchmark-dashboard/tsconfig.node.json
new file mode 100644
index 000000000..3133162c2
--- /dev/null
+++ b/site/tools/benchmark-dashboard/tsconfig.node.json
@@ -0,0 +1,22 @@
+{
+  "compilerOptions": {
+    "target": "ES2022",
+    "lib": ["ES2023"],
+    "module": "ESNext",
+    "skipLibCheck": true,
+
+    /* Bundler mode */
+    "moduleResolution": "bundler",
+    "allowImportingTsExtensions": true,
+    "isolatedModules": true,
+    "moduleDetection": "force",
+    "noEmit": true,
+
+    /* Linting */
+    "strict": true,
+    "noUnusedLocals": false,
+    "noUnusedParameters": false,
+    "noFallthroughCasesInSwitch": true
+  },
+  "include": ["vite.config.ts"]
+}
diff --git a/site/tools/benchmark-dashboard/vite.config.ts b/site/tools/benchmark-dashboard/vite.config.ts
new file mode 100644
index 000000000..31091eeb5
--- /dev/null
+++ b/site/tools/benchmark-dashboard/vite.config.ts
@@ -0,0 +1,53 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react-swc";
+import path from "path";
+
+// Benchmark Dashboard build configuration with Shadow DOM support
+export default defineConfig(({ mode }) => ({
+  server: {
+    host: "::",
+    port: 8080,
+  },
+  plugins: [
+    react(),
+  ],
+  resolve: {
+    alias: {
+      "@": path.resolve(__dirname, "./src"),
+    },
+  },
+  build: {
+    outDir: 'dist',
+    emptyOutDir: false,
+    rollupOptions: {
+      input: {
+        main: path.resolve(__dirname, 'src/main.tsx'),
+      },
+      output: {
+        entryFileNames: 'benchmark-dashboard.js',
+                  chunkFileNames: '[name]-[hash].js',
+          assetFileNames: (assetInfo) => {
+            // CSS files for Hugo build
+            if (assetInfo.names && assetInfo.names[0] && assetInfo.names[0].endsWith('.css')) {
+              return 'benchmark-dashboard.css';
+            }
+            return '[name][extname]';
+          },
+        // Ensure CSS is inlined into JS for shadow DOM
+        inlineDynamicImports: false,
+      },
+    },
+    // Extract CSS for Shadow DOM injection while also inlining
+    cssCodeSplit: false,
+  },
+  define: {
+    __BUILD_MODE__: JSON.stringify(mode),
+  },
+  // Minimal PostCSS config for shadow DOM build
+  css: {
+    postcss: {
+      plugins: [],
+    },
+  },
+  assetsInclude: ['**/*.css'],
+}));



Test patch:
diff --git a/internal/gatewayapi/testdata/backendtlspolicy-across-ns.in.yaml b/internal/gatewayapi/testdata/backendtlspolicy-across-ns.in.yaml
index efd691166..296bf15ba 100644
--- a/internal/gatewayapi/testdata/backendtlspolicy-across-ns.in.yaml
+++ b/internal/gatewayapi/testdata/backendtlspolicy-across-ns.in.yaml
@@ -118,6 +118,7 @@ backendTLSPolicies:
     metadata:
       name: policy-btls
       namespace: policies
+      generation: 10
     spec:
       targetRefs:
         - group: ""
diff --git a/internal/gatewayapi/testdata/backendtlspolicy-across-ns.out.yaml b/internal/gatewayapi/testdata/backendtlspolicy-across-ns.out.yaml
index 2119522a1..3ef92d1f0 100644
--- a/internal/gatewayapi/testdata/backendtlspolicy-across-ns.out.yaml
+++ b/internal/gatewayapi/testdata/backendtlspolicy-across-ns.out.yaml
@@ -3,6 +3,7 @@ backendTLSPolicies:
   kind: BackendTLSPolicy
   metadata:
     creationTimestamp: null
+    generation: 10
     name: policy-btls
     namespace: policies
   spec:
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.in.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.in.yaml
index 20806f8f9..29c8a6705 100644
--- a/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.in.yaml
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.in.yaml
@@ -68,6 +68,7 @@ backendTrafficPolicies:
     metadata:
       namespace: envoy-gateway
       name: policy-for-gateway
+      generation: 10
     spec:
       targetRef:
         group: gateway.networking.k8s.io
@@ -84,6 +85,7 @@ backendTrafficPolicies:
     metadata:
       namespace: default
       name: policy-for-route
+      generation: 20
     spec:
       targetRef:
         group: gateway.networking.k8s.io
diff --git a/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.out.yaml b/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.out.yaml
index 39b3e3e25..b388d8ddc 100644
--- a/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.out.yaml
+++ b/internal/gatewayapi/testdata/backendtrafficpolicy-buffer-limit.out.yaml
@@ -3,6 +3,7 @@ backendTrafficPolicies:
   kind: BackendTrafficPolicy
   metadata:
     creationTimestamp: null
+    generation: 20
     name: policy-for-route
     namespace: default
   spec:
@@ -23,6 +24,7 @@ backendTrafficPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 20
         reason: Accepted
         status: "True"
         type: Accepted
@@ -31,6 +33,7 @@ backendTrafficPolicies:
   kind: BackendTrafficPolicy
   metadata:
     creationTimestamp: null
+    generation: 10
     name: policy-for-gateway
     namespace: envoy-gateway
   spec:
@@ -54,6 +57,7 @@ backendTrafficPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 10
         reason: Accepted
         status: "True"
         type: Accepted
diff --git a/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.in.yaml b/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.in.yaml
index 9eae04177..a066d1344 100644
--- a/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.in.yaml
+++ b/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.in.yaml
@@ -4,6 +4,7 @@ clientTrafficPolicies:
   metadata:
     namespace: envoy-gateway
     name: target-gateway-1
+    generation: 10
   spec:
     connection: {}
     targetRef:
@@ -15,6 +16,7 @@ clientTrafficPolicies:
   metadata:
     namespace: envoy-gateway
     name: target-gateway-1-section-http-1
+    generation: 20
   spec:
     connection:
       bufferLimit: 50M
diff --git a/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.out.yaml b/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.out.yaml
index 2915fed89..1a068ce8a 100644
--- a/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.out.yaml
+++ b/internal/gatewayapi/testdata/clienttrafficpolicy-buffer-limit.out.yaml
@@ -3,6 +3,7 @@ clientTrafficPolicies:
   kind: ClientTrafficPolicy
   metadata:
     creationTimestamp: null
+    generation: 20
     name: target-gateway-1-section-http-1
     namespace: envoy-gateway
   spec:
@@ -24,6 +25,7 @@ clientTrafficPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 20
         reason: Accepted
         status: "True"
         type: Accepted
@@ -32,6 +34,7 @@ clientTrafficPolicies:
   kind: ClientTrafficPolicy
   metadata:
     creationTimestamp: null
+    generation: 10
     name: target-gateway-1
     namespace: envoy-gateway
   spec:
@@ -51,11 +54,13 @@ clientTrafficPolicies:
       - lastTransitionTime: null
         message: There are existing ClientTrafficPolicies that are overriding these
           sections [http-1]
+        observedGeneration: 10
         reason: Overridden
         status: "True"
         type: Overridden
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 10
         reason: Accepted
         status: "True"
         type: Accepted
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.in.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.in.yaml
index 65dd36d9f..6527647b5 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.in.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.in.yaml
@@ -58,6 +58,7 @@ envoyextensionpolicies:
   metadata:
     namespace: envoy-gateway
     name: policy-for-gateway  # This policy should attach httproute-2
+    generation: 10
   spec:
     targetRef:
       group: gateway.networking.k8s.io
@@ -73,6 +74,7 @@ envoyextensionpolicies:
   metadata:
     namespace: default
     name: policy-for-http-route   # This policy should attach httproute-1
+    generation: 20
   spec:
     targetRef:
       group: gateway.networking.k8s.io
diff --git a/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.out.yaml b/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.out.yaml
index 988d530e1..cfbe145cd 100644
--- a/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.out.yaml
+++ b/internal/gatewayapi/testdata/envoyextensionpolicy-with-lua.out.yaml
@@ -3,6 +3,7 @@ envoyExtensionPolicies:
   kind: EnvoyExtensionPolicy
   metadata:
     creationTimestamp: null
+    generation: 20
     name: policy-for-http-route
     namespace: default
   spec:
@@ -25,6 +26,7 @@ envoyExtensionPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 20
         reason: Accepted
         status: "True"
         type: Accepted
@@ -33,6 +35,7 @@ envoyExtensionPolicies:
   kind: EnvoyExtensionPolicy
   metadata:
     creationTimestamp: null
+    generation: 10
     name: policy-for-gateway
     namespace: envoy-gateway
   spec:
@@ -54,12 +57,14 @@ envoyExtensionPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 10
         reason: Accepted
         status: "True"
         type: Accepted
       - lastTransitionTime: null
         message: 'This policy is being overridden by other envoyExtensionPolicies
           for these routes: [default/httproute-1]'
+        observedGeneration: 10
         reason: Overridden
         status: "True"
         type: Overridden
diff --git a/internal/gatewayapi/testdata/envoypatchpolicy-valid.in.yaml b/internal/gatewayapi/testdata/envoypatchpolicy-valid.in.yaml
index 1d4a47aef..c03b69d15 100644
--- a/internal/gatewayapi/testdata/envoypatchpolicy-valid.in.yaml
+++ b/internal/gatewayapi/testdata/envoypatchpolicy-valid.in.yaml
@@ -4,6 +4,7 @@ envoyPatchPolicies:
   metadata:
     namespace: envoy-gateway
     name: edit-conn-buffer-bytes
+    generation: 10
   spec:
     type: "JSONPatch"
     targetRef:
@@ -22,6 +23,7 @@ envoyPatchPolicies:
   metadata:
     namespace: envoy-gateway
     name: edit-ignore-global-limit
+    generation: 10
   spec:
     type: "JSONPatch"
     targetRef:
diff --git a/internal/gatewayapi/testdata/envoypatchpolicy-valid.out.yaml b/internal/gatewayapi/testdata/envoypatchpolicy-valid.out.yaml
index 79ae08725..bc9f47e44 100644
--- a/internal/gatewayapi/testdata/envoypatchpolicy-valid.out.yaml
+++ b/internal/gatewayapi/testdata/envoypatchpolicy-valid.out.yaml
@@ -84,6 +84,7 @@ xdsIR:
           conditions:
           - lastTransitionTime: null
             message: Policy has been accepted.
+            observedGeneration: 10
             reason: Accepted
             status: "True"
             type: Accepted
@@ -107,6 +108,7 @@ xdsIR:
           conditions:
           - lastTransitionTime: null
             message: Policy has been accepted.
+            observedGeneration: 10
             reason: Accepted
             status: "True"
             type: Accepted
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.in.yaml b/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.in.yaml
index 3402292d1..3b50deaf2 100644
--- a/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.in.yaml
+++ b/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.in.yaml
@@ -79,6 +79,7 @@ securityPolicies:
     metadata:
       namespace: default
       name: policy-for-http-route-1
+      generation: 10
     spec:
       targetRef:
         group: gateway.networking.k8s.io
@@ -92,6 +93,7 @@ securityPolicies:
     metadata:
       namespace: default
       name: policy-for-gateway-1               # This will only apply to the httproute-2
+      generation: 20
     spec:
       targetRef:
         group: gateway.networking.k8s.io
diff --git a/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.out.yaml b/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.out.yaml
index 002edb543..2d0161355 100644
--- a/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.out.yaml
+++ b/internal/gatewayapi/testdata/securitypolicy-with-basic-auth.out.yaml
@@ -147,6 +147,7 @@ securityPolicies:
   kind: SecurityPolicy
   metadata:
     creationTimestamp: null
+    generation: 10
     name: policy-for-http-route-1
     namespace: default
   spec:
@@ -170,6 +171,7 @@ securityPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 10
         reason: Accepted
         status: "True"
         type: Accepted
@@ -178,6 +180,7 @@ securityPolicies:
   kind: SecurityPolicy
   metadata:
     creationTimestamp: null
+    generation: 20
     name: policy-for-gateway-1
     namespace: default
   spec:
@@ -200,12 +203,14 @@ securityPolicies:
       conditions:
       - lastTransitionTime: null
         message: Policy has been accepted.
+        observedGeneration: 20
         reason: Accepted
         status: "True"
         type: Accepted
       - lastTransitionTime: null
         message: 'This policy is being overridden by other securityPolicies for these
           routes: [default/httproute-1]'
+        observedGeneration: 20
         reason: Overridden
         status: "True"
         type: Overridden
diff --git a/test/cel-validation/envoyproxy_test.go b/test/cel-validation/envoyproxy_test.go
index b952ec465..3c85511fd 100644
--- a/test/cel-validation/envoyproxy_test.go
+++ b/test/cel-validation/envoyproxy_test.go
@@ -1545,7 +1545,7 @@ func TestEnvoyProxyProvider(t *testing.T) {
 			},
 		},
 		{
-			desc: "valid: image set, imageRepository not set",
+			desc: "valid: image set with tag, imageRepository not set",
 			mutate: func(envoy *egv1a1.EnvoyProxy) {
 				envoy.Spec = egv1a1.EnvoyProxySpec{
 					Provider: &egv1a1.EnvoyProxyProvider{
@@ -1563,7 +1563,7 @@ func TestEnvoyProxyProvider(t *testing.T) {
 			wantErrors: []string{},
 		},
 		{
-			desc: "valid: imageRepository set, image not set",
+			desc: "valid: imageRepository set without tag, image not set",
 			mutate: func(envoy *egv1a1.EnvoyProxy) {
 				envoy.Spec = egv1a1.EnvoyProxySpec{
 					Provider: &egv1a1.EnvoyProxyProvider{
@@ -1599,6 +1599,96 @@ func TestEnvoyProxyProvider(t *testing.T) {
 			},
 			wantErrors: []string{"Either image or imageRepository can be set."},
 		},
+		{
+			desc: "invalid: image set without tag",
+			mutate: func(envoy *egv1a1.EnvoyProxy) {
+				envoy.Spec = egv1a1.EnvoyProxySpec{
+					Provider: &egv1a1.EnvoyProxyProvider{
+						Type: egv1a1.ProviderTypeKubernetes,
+						Kubernetes: &egv1a1.EnvoyProxyKubernetesProvider{
+							EnvoyDeployment: &egv1a1.KubernetesDeploymentSpec{
+								Container: &egv1a1.KubernetesContainerSpec{
+									Image: ptr.To("envoyproxy/envoy"),
+								},
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{"Image must include a tag and allowed characters only (e.g., 'repo:tag')."},
+		},
+		{
+			desc: "invalid: image ends with colon",
+			mutate: func(envoy *egv1a1.EnvoyProxy) {
+				envoy.Spec = egv1a1.EnvoyProxySpec{
+					Provider: &egv1a1.EnvoyProxyProvider{
+						Type: egv1a1.ProviderTypeKubernetes,
+						Kubernetes: &egv1a1.EnvoyProxyKubernetesProvider{
+							EnvoyDeployment: &egv1a1.KubernetesDeploymentSpec{
+								Container: &egv1a1.KubernetesContainerSpec{
+									Image: ptr.To("envoyproxy/envoy:"),
+								},
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{"Image must include a tag and allowed characters only (e.g., 'repo:tag')."},
+		},
+		{
+			desc: "invalid: image starts with colon",
+			mutate: func(envoy *egv1a1.EnvoyProxy) {
+				envoy.Spec = egv1a1.EnvoyProxySpec{
+					Provider: &egv1a1.EnvoyProxyProvider{
+						Type: egv1a1.ProviderTypeKubernetes,
+						Kubernetes: &egv1a1.EnvoyProxyKubernetesProvider{
+							EnvoyDeployment: &egv1a1.KubernetesDeploymentSpec{
+								Container: &egv1a1.KubernetesContainerSpec{
+									Image: ptr.To(":v1.25.2"),
+								},
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{"Image must include a tag and allowed characters only (e.g., 'repo:tag')."},
+		},
+		{
+			desc: "invalid: image with multiple colons",
+			mutate: func(envoy *egv1a1.EnvoyProxy) {
+				envoy.Spec = egv1a1.EnvoyProxySpec{
+					Provider: &egv1a1.EnvoyProxyProvider{
+						Type: egv1a1.ProviderTypeKubernetes,
+						Kubernetes: &egv1a1.EnvoyProxyKubernetesProvider{
+							EnvoyDeployment: &egv1a1.KubernetesDeploymentSpec{
+								Container: &egv1a1.KubernetesContainerSpec{
+									Image: ptr.To("registry.com/envoy:v1.2.3:latest"),
+								},
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{"Image must include a tag and allowed characters only (e.g., 'repo:tag')."},
+		},
+		{
+			desc: "invalid: imageRepository contains tag",
+			mutate: func(envoy *egv1a1.EnvoyProxy) {
+				envoy.Spec = egv1a1.EnvoyProxySpec{
+					Provider: &egv1a1.EnvoyProxyProvider{
+						Type: egv1a1.ProviderTypeKubernetes,
+						Kubernetes: &egv1a1.EnvoyProxyKubernetesProvider{
+							EnvoyDeployment: &egv1a1.KubernetesDeploymentSpec{
+								Container: &egv1a1.KubernetesContainerSpec{
+									ImageRepository: ptr.To("envoyproxy/envoy:v1.2.3"),
+								},
+							},
+						},
+					},
+				}
+			},
+			wantErrors: []string{"ImageRepository must contain only allowed characters and must not include a tag or any colons."},
+		},
 	}
 
 	for _, tc := range cases {
diff --git a/test/helm/gateway-crds-helm/all.out.yaml b/test/helm/gateway-crds-helm/all.out.yaml
index 7ef1a4eef..784cd0401 100644
--- a/test/helm/gateway-crds-helm/all.out.yaml
+++ b/test/helm/gateway-crds-helm/all.out.yaml
@@ -24189,12 +24189,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
@@ -28026,12 +28034,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
diff --git a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
index c618fa66f..a5c4a590c 100644
--- a/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
+++ b/test/helm/gateway-crds-helm/envoy-gateway-crds.out.yaml
@@ -6877,12 +6877,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.
@@ -10714,12 +10722,20 @@ spec:
                                   Image specifies the EnvoyProxy container image to be used including a tag, instead of the default image.
                                   This field is mutually exclusive with ImageRepository.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: Image must include a tag and allowed characters
+                                    only (e.g., 'repo:tag').
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+:[a-zA-Z0-9._-]+$')
                               imageRepository:
                                 description: |-
                                   ImageRepository specifies the container image repository to be used without specifying a tag.
                                   The default tag will be used.
                                   This field is mutually exclusive with Image.
                                 type: string
+                                x-kubernetes-validations:
+                                - message: ImageRepository must contain only allowed
+                                    characters and must not include a tag or any colons.
+                                  rule: self.matches('^[a-zA-Z0-9._/-]+$')
                               resources:
                                 description: |-
                                   Resources required by this container.