eyvan 0.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- eyvan/__init__.py +156 -0
- eyvan/_dashboard/assets/LineChart-CcILbKnD.js +3 -0
- eyvan/_dashboard/assets/LineChart-D1GxaB_c.css +1 -0
- eyvan/_dashboard/assets/index-CUw1Ss_o.css +1 -0
- eyvan/_dashboard/assets/index-aNA_h2N4.js +438 -0
- eyvan/_dashboard/index.html +21 -0
- eyvan/_internal/__init__.py +6 -0
- eyvan/_internal/access_logging.py +308 -0
- eyvan/_internal/build_identity.py +256 -0
- eyvan/_internal/client_version.py +118 -0
- eyvan/_internal/compat.py +11 -0
- eyvan/_internal/correlation.py +68 -0
- eyvan/_internal/correlation_ids.py +25 -0
- eyvan/_internal/fleet_init_script.py +113 -0
- eyvan/_internal/identifiers.py +17 -0
- eyvan/_internal/json_types.py +55 -0
- eyvan/_internal/network.py +34 -0
- eyvan/_internal/observability.py +130 -0
- eyvan/_internal/plane_tls.py +165 -0
- eyvan/_internal/platform.py +79 -0
- eyvan/_internal/ssh.py +491 -0
- eyvan/_internal/subprocess_env.py +58 -0
- eyvan/_internal/trace_context.py +55 -0
- eyvan/_internal/training_metrics.py +111 -0
- eyvan/_internal/workspace.py +613 -0
- eyvan/_version.py +12 -0
- eyvan/artifacts/__init__.py +388 -0
- eyvan/artifacts/_capability_tokens.py +122 -0
- eyvan/artifacts/managed.py +4145 -0
- eyvan/artifacts/secret_capability.py +240 -0
- eyvan/artifacts/transfers.py +172 -0
- eyvan/artifacts/workload_capability.py +180 -0
- eyvan/assistant_knowledge/__init__.py +923 -0
- eyvan/assistant_knowledge/easydel_essentials.json +176 -0
- eyvan/assistant_knowledge/easydel_trainers.json +12180 -0
- eyvan/capacity/__init__.py +70 -0
- eyvan/capacity/acquisition_backoff.py +265 -0
- eyvan/capacity/audit.py +212 -0
- eyvan/capacity/autoscale/__init__.py +120 -0
- eyvan/capacity/autoscale/cache.py +957 -0
- eyvan/capacity/autoscale/cluster_capacity.py +230 -0
- eyvan/capacity/autoscale/compiler.py +324 -0
- eyvan/capacity/autoscale/models.py +828 -0
- eyvan/capacity/autoscale/pool_capacity.py +502 -0
- eyvan/capacity/autoscale/profiles.py +179 -0
- eyvan/capacity/autoscale/queue_admission.py +79 -0
- eyvan/capacity/autoscale/service.py +336 -0
- eyvan/capacity/conformance.py +706 -0
- eyvan/capacity/data/accelerator_shapes.yaml +393 -0
- eyvan/capacity/drivers/__init__.py +109 -0
- eyvan/capacity/drivers/aws.py +513 -0
- eyvan/capacity/drivers/azure.py +453 -0
- eyvan/capacity/drivers/base.py +781 -0
- eyvan/capacity/drivers/gcp.py +2237 -0
- eyvan/capacity/drivers/gcp_attach.py +621 -0
- eyvan/capacity/drivers/kubernetes.py +1918 -0
- eyvan/capacity/drivers/local.py +260 -0
- eyvan/capacity/drivers/manual.py +362 -0
- eyvan/capacity/drivers/onprem_ssh.py +1396 -0
- eyvan/capacity/drivers/registry.py +748 -0
- eyvan/capacity/fleet_config.py +1026 -0
- eyvan/capacity/fleet_state.py +1171 -0
- eyvan/capacity/gcs_rest.py +200 -0
- eyvan/capacity/hardware_catalog.py +648 -0
- eyvan/capacity/planning.py +1653 -0
- eyvan/capacity/providers/__init__.py +6 -0
- eyvan/capacity/providers/aws/__init__.py +6 -0
- eyvan/capacity/providers/aws/api.py +401 -0
- eyvan/capacity/providers/aws/instances.py +199 -0
- eyvan/capacity/providers/aws/signing.py +192 -0
- eyvan/capacity/providers/azure/__init__.py +6 -0
- eyvan/capacity/providers/azure/api.py +366 -0
- eyvan/capacity/providers/azure/machines.py +206 -0
- eyvan/capacity/providers/gcp/__init__.py +82 -0
- eyvan/capacity/providers/gcp/accelerator_catalog.py +186 -0
- eyvan/capacity/providers/gcp/compute_instances.py +1257 -0
- eyvan/capacity/providers/gcp/native_worker_ingress.py +773 -0
- eyvan/capacity/providers/gcp/queued_resources.py +1151 -0
- eyvan/capacity/providers/gcp/quota_catalog.py +139 -0
- eyvan/capacity/providers/gcp/quota_discovery.py +589 -0
- eyvan/capacity/providers/gcp/quota_usage.py +355 -0
- eyvan/capacity/providers/gcp/runtime/__init__.py +6 -0
- eyvan/capacity/providers/gcp/runtime/bootstrap.py +527 -0
- eyvan/capacity/providers/gcp/runtime/profile.py +637 -0
- eyvan/capacity/providers/gcp/runtime/supervisor.py +1059 -0
- eyvan/capacity/providers/gcp/tpu_discovery.py +362 -0
- eyvan/capacity/providers/gcp/tpu_nodes.py +485 -0
- eyvan/capacity/providers/gcp/tpu_ssh.py +231 -0
- eyvan/capacity/providers/gcp/tpu_types.py +54 -0
- eyvan/capacity/providers/gcp/tpu_zone_policy.py +54 -0
- eyvan/capacity/providers/kubernetes/__init__.py +5 -0
- eyvan/capacity/providers/kubernetes/api.py +578 -0
- eyvan/capacity/providers/kubernetes/kueue.py +1123 -0
- eyvan/capacity/providers/kubernetes/workers.py +392 -0
- eyvan/capacity/stage_policy.py +90 -0
- eyvan/config.py +909 -0
- eyvan/domain/__init__.py +66 -0
- eyvan/domain/accelerators.py +32 -0
- eyvan/domain/availability.py +200 -0
- eyvan/domain/carbon.py +202 -0
- eyvan/domain/costing.py +114 -0
- eyvan/domain/governance.py +279 -0
- eyvan/domain/models.py +820 -0
- eyvan/domain/prediction.py +177 -0
- eyvan/domain/pricing.py +158 -0
- eyvan/domain/scheduler.py +1358 -0
- eyvan/domain/sizing.py +472 -0
- eyvan/domain/spend.py +123 -0
- eyvan/domain/tpu_chips.py +124 -0
- eyvan/identity/__init__.py +90 -0
- eyvan/identity/assistant_keys.py +81 -0
- eyvan/identity/metadata.py +238 -0
- eyvan/identity/mtls.py +412 -0
- eyvan/identity/rotation.py +421 -0
- eyvan/identity/team_secrets.py +158 -0
- eyvan/py.typed +0 -0
- eyvan/records.py +4528 -0
- eyvan/sdk/__init__.py +15 -0
- eyvan/sdk/cli.py +188 -0
- eyvan/sdk/client/__init__.py +27 -0
- eyvan/sdk/client/async_client.py +513 -0
- eyvan/sdk/client/callables.py +816 -0
- eyvan/sdk/client/endpoint.py +62 -0
- eyvan/sdk/client/idempotency.py +28 -0
- eyvan/sdk/client/identity.py +133 -0
- eyvan/sdk/client/jobs.py +518 -0
- eyvan/sdk/client/requests.py +165 -0
- eyvan/sdk/client/retry.py +62 -0
- eyvan/sdk/client/sync.py +538 -0
- eyvan/sdk/client/transport.py +550 -0
- eyvan/sdk/client/types.py +14 -0
- eyvan/sdk/commands/__init__.py +6 -0
- eyvan/sdk/commands/artifacts.py +267 -0
- eyvan/sdk/commands/assistant.py +597 -0
- eyvan/sdk/commands/assistant_claude_code.py +84 -0
- eyvan/sdk/commands/autoscale.py +663 -0
- eyvan/sdk/commands/capacity.py +901 -0
- eyvan/sdk/commands/common.py +103 -0
- eyvan/sdk/commands/connect.py +385 -0
- eyvan/sdk/commands/contexts.py +94 -0
- eyvan/sdk/commands/dashboard.py +199 -0
- eyvan/sdk/commands/demo.py +208 -0
- eyvan/sdk/commands/deployment.py +124 -0
- eyvan/sdk/commands/doctor.py +982 -0
- eyvan/sdk/commands/doctor_preflights.py +340 -0
- eyvan/sdk/commands/federation.py +317 -0
- eyvan/sdk/commands/fleet_status.py +387 -0
- eyvan/sdk/commands/fleets.py +755 -0
- eyvan/sdk/commands/gcp.py +473 -0
- eyvan/sdk/commands/gcp_connect.py +1339 -0
- eyvan/sdk/commands/gcp_host_access.py +301 -0
- eyvan/sdk/commands/governance.py +561 -0
- eyvan/sdk/commands/head.py +3088 -0
- eyvan/sdk/commands/head_discovery.py +232 -0
- eyvan/sdk/commands/http.py +262 -0
- eyvan/sdk/commands/mcp.py +326 -0
- eyvan/sdk/commands/operations.py +227 -0
- eyvan/sdk/commands/proof.py +1587 -0
- eyvan/sdk/commands/query.py +123 -0
- eyvan/sdk/commands/receipts.py +433 -0
- eyvan/sdk/commands/research.py +238 -0
- eyvan/sdk/commands/resources.py +338 -0
- eyvan/sdk/commands/runtime.py +1149 -0
- eyvan/sdk/commands/services.py +111 -0
- eyvan/sdk/commands/soak.py +2157 -0
- eyvan/sdk/commands/soak_monitor.py +594 -0
- eyvan/sdk/commands/start.py +427 -0
- eyvan/sdk/commands/state.py +363 -0
- eyvan/sdk/commands/team.py +626 -0
- eyvan/sdk/commands/tenancy.py +281 -0
- eyvan/sdk/commands/track.py +565 -0
- eyvan/sdk/commands/workloads.py +1914 -0
- eyvan/sdk/contexts.py +261 -0
- eyvan/sdk/execution.py +834 -0
- eyvan/sdk/follow.py +415 -0
- eyvan/sdk/job_receipt.py +414 -0
- eyvan/sdk/lifecycle.py +113 -0
- eyvan/sdk/node.py +279 -0
- eyvan/sdk/shapes.py +60 -0
- eyvan/sdk/spend.py +75 -0
- eyvan/sdk/tables.py +161 -0
- eyvan/sdk/team_credentials.py +289 -0
- eyvan/sdk/terminal.py +133 -0
- eyvan/sdk/timeline.py +184 -0
- eyvan/sdk/workload_summary.py +204 -0
- eyvan/secrets.py +370 -0
- eyvan/server/__init__.py +6 -0
- eyvan/server/api/__init__.py +67 -0
- eyvan/server/api/app.py +4394 -0
- eyvan/server/api/assistant.py +1208 -0
- eyvan/server/api/assistant_claude_code.py +1082 -0
- eyvan/server/api/assistant_presets.py +595 -0
- eyvan/server/api/assistant_stream.py +291 -0
- eyvan/server/api/attachments.py +190 -0
- eyvan/server/api/auth.py +428 -0
- eyvan/server/api/bootstrap_admin.py +136 -0
- eyvan/server/api/dashboard_sessions.py +575 -0
- eyvan/server/api/mcp_routes.py +985 -0
- eyvan/server/api/research_routes.py +191 -0
- eyvan/server/api/research_runner.py +253 -0
- eyvan/server/api/schemas.py +1156 -0
- eyvan/server/api/server_bind.py +87 -0
- eyvan/server/api/server_logging.py +140 -0
- eyvan/server/api/server_startup.py +303 -0
- eyvan/server/api/sse.py +72 -0
- eyvan/server/api/team_routes.py +374 -0
- eyvan/server/api/tracking_proxy.py +285 -0
- eyvan/server/controller/__init__.py +71 -0
- eyvan/server/controller/_support.py +418 -0
- eyvan/server/controller/capacity_commands.py +380 -0
- eyvan/server/controller/expansion.py +208 -0
- eyvan/server/controller/fleets.py +1233 -0
- eyvan/server/controller/lifecycle.py +327 -0
- eyvan/server/controller/log_archival.py +343 -0
- eyvan/server/controller/loops.py +448 -0
- eyvan/server/controller/observation.py +3247 -0
- eyvan/server/controller/outbox.py +720 -0
- eyvan/server/controller/preemption.py +837 -0
- eyvan/server/controller/reclaim.py +462 -0
- eyvan/server/controller/scheduling.py +478 -0
- eyvan/server/controller/services.py +661 -0
- eyvan/server/controller/settlement.py +1519 -0
- eyvan/server/controller/staging.py +935 -0
- eyvan/server/controller/webhook_delivery.py +264 -0
- eyvan/server/controller/workload_commands.py +1936 -0
- eyvan/server/introspection.py +139 -0
- eyvan/server/invariants.py +612 -0
- eyvan/server/local/__init__.py +6 -0
- eyvan/server/local/attach_job.py +309 -0
- eyvan/server/local/auth.py +286 -0
- eyvan/server/local/daemon.py +1385 -0
- eyvan/server/local/profile.py +132 -0
- eyvan/server/local/tracker.py +345 -0
- eyvan/server/persistence/__init__.py +47 -0
- eyvan/server/persistence/base.py +635 -0
- eyvan/server/persistence/leader.py +125 -0
- eyvan/server/persistence/local.py +1587 -0
- eyvan/server/persistence/memory.py +23 -0
- eyvan/server/persistence/migrate.py +398 -0
- eyvan/server/persistence/migrations/__init__.py +6 -0
- eyvan/server/persistence/migrations/env.py +65 -0
- eyvan/server/persistence/migrations/versions/0002_transactional_outbox.py +84 -0
- eyvan/server/persistence/migrations/versions/0003_capacity_pools.py +32 -0
- eyvan/server/persistence/migrations/versions/0004_query_indexes.py +52 -0
- eyvan/server/persistence/migrations/versions/0005_retention_columns.py +53 -0
- eyvan/server/persistence/migrations/versions/0006_artifact_index.py +96 -0
- eyvan/server/persistence/migrations/versions/0007_federation_identity.py +81 -0
- eyvan/server/persistence/migrations/versions/0008_progress_reports.py +47 -0
- eyvan/server/persistence/migrations/versions/0009_tenant_registry.py +64 -0
- eyvan/server/persistence/migrations/versions/0010_role_grants.py +58 -0
- eyvan/server/persistence/migrations/versions/0011_quota_grants.py +69 -0
- eyvan/server/persistence/migrations/versions/0012_audit_event_time.py +49 -0
- eyvan/server/persistence/migrations/versions/0012_scoped_artifact_identity.py +290 -0
- eyvan/server/persistence/migrations/versions/0013_merge_artifact_audit.py +25 -0
- eyvan/server/persistence/migrations/versions/0014_artifact_lifecycle.py +151 -0
- eyvan/server/persistence/migrations/versions/0015_attempt_topology.py +66 -0
- eyvan/server/persistence/migrations/versions/0016_cell_stages.py +73 -0
- eyvan/server/persistence/migrations/versions/0016_credential_rotation.py +70 -0
- eyvan/server/persistence/migrations/versions/0016_expansion_admissions.py +74 -0
- eyvan/server/persistence/migrations/versions/0017_merge_stage_rot.py +32 -0
- eyvan/server/persistence/migrations/versions/0018_service_operations.py +69 -0
- eyvan/server/persistence/migrations/versions/0019_webhooks.py +54 -0
- eyvan/server/persistence/migrations/versions/0020_team_accounts.py +64 -0
- eyvan/server/persistence/migrations/versions/0021_team_requests.py +41 -0
- eyvan/server/persistence/migrations/versions/0022_assistant_providers.py +36 -0
- eyvan/server/persistence/migrations/versions/0023_assistant_conversations.py +38 -0
- eyvan/server/persistence/migrations/versions/0024_research_plans.py +41 -0
- eyvan/server/persistence/sqlalchemy.py +2427 -0
- eyvan/server/persistence/state.py +1217 -0
- eyvan/server/service/__init__.py +101 -0
- eyvan/server/service/_control_plane/__init__.py +6 -0
- eyvan/server/service/_control_plane/accounts.py +419 -0
- eyvan/server/service/_control_plane/artifact_admission.py +263 -0
- eyvan/server/service/_control_plane/artifact_collection.py +438 -0
- eyvan/server/service/_control_plane/artifact_inventory.py +418 -0
- eyvan/server/service/_control_plane/artifact_io.py +257 -0
- eyvan/server/service/_control_plane/artifact_recovery.py +300 -0
- eyvan/server/service/_control_plane/assistant_conversations.py +185 -0
- eyvan/server/service/_control_plane/assistant_providers.py +259 -0
- eyvan/server/service/_control_plane/audit.py +487 -0
- eyvan/server/service/_control_plane/callable_submission.py +648 -0
- eyvan/server/service/_control_plane/cells.py +455 -0
- eyvan/server/service/_control_plane/child_submission.py +216 -0
- eyvan/server/service/_control_plane/estimates.py +291 -0
- eyvan/server/service/_control_plane/events.py +86 -0
- eyvan/server/service/_control_plane/expansion.py +796 -0
- eyvan/server/service/_control_plane/federation.py +597 -0
- eyvan/server/service/_control_plane/fleets.py +795 -0
- eyvan/server/service/_control_plane/governance.py +333 -0
- eyvan/server/service/_control_plane/lease_settlement.py +510 -0
- eyvan/server/service/_control_plane/leases.py +510 -0
- eyvan/server/service/_control_plane/policies.py +358 -0
- eyvan/server/service/_control_plane/reporting.py +389 -0
- eyvan/server/service/_control_plane/research.py +1004 -0
- eyvan/server/service/_control_plane/scheduling.py +287 -0
- eyvan/server/service/_control_plane/services.py +430 -0
- eyvan/server/service/_control_plane/shared.py +879 -0
- eyvan/server/service/_control_plane/submission.py +300 -0
- eyvan/server/service/_control_plane/team_requests.py +142 -0
- eyvan/server/service/_control_plane/tenancy.py +394 -0
- eyvan/server/service/_control_plane/transactions.py +154 -0
- eyvan/server/service/_control_plane/webhooks.py +202 -0
- eyvan/server/service/_control_plane/workload_lifecycle.py +626 -0
- eyvan/server/service/_control_plane/workload_settlement.py +492 -0
- eyvan/server/service/_control_plane/workload_storage.py +263 -0
- eyvan/server/service/authz.py +101 -0
- eyvan/server/service/batch.py +136 -0
- eyvan/server/service/callable_trust.py +70 -0
- eyvan/server/service/control_plane.py +840 -0
- eyvan/server/service/credential_rotation.py +302 -0
- eyvan/server/service/dag.py +143 -0
- eyvan/server/service/errors.py +181 -0
- eyvan/server/service/expansion.py +312 -0
- eyvan/server/service/federation.py +381 -0
- eyvan/server/service/groups.py +116 -0
- eyvan/server/service/locality.py +162 -0
- eyvan/server/service/pricing_resolver.py +194 -0
- eyvan/server/service/provider_diagnostics.py +87 -0
- eyvan/server/service/research_losses.py +105 -0
- eyvan/server/service/scheduling.py +749 -0
- eyvan/server/service/services.py +911 -0
- eyvan/server/service/stage.py +505 -0
- eyvan/server/service/state.py +68 -0
- eyvan/server/service/subjobs.py +175 -0
- eyvan/server/service/webhooks.py +176 -0
- eyvan/server/service/workload_progress.py +489 -0
- eyvan/soak_contract.py +410 -0
- eyvan/soak_evidence.py +386 -0
- eyvan/track/__init__.py +41 -0
- eyvan/track/_format.py +328 -0
- eyvan/track/_gcs.py +212 -0
- eyvan/track/_rich.py +435 -0
- eyvan/track/_run.py +1625 -0
- eyvan/track/_store.py +274 -0
- eyvan/track/tracker/__init__.py +11 -0
- eyvan/track/tracker/__main__.py +11 -0
- eyvan/track/tracker/aggregates.py +297 -0
- eyvan/track/tracker/app.py +244 -0
- eyvan/track/tracker/cli.py +51 -0
- eyvan/track/tracker/index.py +682 -0
- eyvan/track/tracker/phase2.py +210 -0
- eyvan/track/tracker/phase3.py +538 -0
- eyvan/track/tracker/phase3_api.py +155 -0
- eyvan/track/tracker/phase3_index.py +200 -0
- eyvan/track/tracker/phase3_records.py +194 -0
- eyvan/track/tracker/records.py +171 -0
- eyvan/track/tracker/replay.py +38 -0
- eyvan/track/tracker/rich_sql.py +165 -0
- eyvan/worker/__init__.py +6 -0
- eyvan/worker/agent/__init__.py +30 -0
- eyvan/worker/agent/app.py +379 -0
- eyvan/worker/agent/cli.py +100 -0
- eyvan/worker/agent/client.py +549 -0
- eyvan/worker/agent/models.py +378 -0
- eyvan/worker/agent/service.py +1215 -0
- eyvan/worker/distributed_environment.py +651 -0
- eyvan/worker/identity.py +100 -0
- eyvan/worker/runtime/__init__.py +123 -0
- eyvan/worker/runtime/_multihost_site.py +531 -0
- eyvan/worker/runtime/callable_protocol.py +659 -0
- eyvan/worker/runtime/callable_worker.py +129 -0
- eyvan/worker/runtime/callables.py +12 -0
- eyvan/worker/runtime/container.py +781 -0
- eyvan/worker/runtime/dependency_entry.py +294 -0
- eyvan/worker/runtime/host_accelerators.py +83 -0
- eyvan/worker/runtime/http_retry.py +48 -0
- eyvan/worker/runtime/in_job.py +206 -0
- eyvan/worker/runtime/local_process.py +1044 -0
- eyvan/worker/runtime/local_worker.py +243 -0
- eyvan/worker/runtime/log_records.py +1472 -0
- eyvan/worker/runtime/native_bootstrap.py +749 -0
- eyvan/worker/runtime/native_gang.py +983 -0
- eyvan/worker/runtime/native_remote.py +479 -0
- eyvan/worker/runtime/native_slice.py +1484 -0
- eyvan/worker/runtime/native_tls_bootstrap.py +119 -0
- eyvan/worker/runtime/native_worker.py +689 -0
- eyvan/worker/runtime/node_health.py +491 -0
- eyvan/worker/runtime/oci_callable_runner.py +103 -0
- eyvan/worker/runtime/oci_callable_stager.py +127 -0
- eyvan/worker/runtime/progress.py +190 -0
- eyvan/worker/runtime/registry.py +729 -0
- eyvan/worker/runtime/results.py +12 -0
- eyvan/worker/runtime/secret_materialization.py +219 -0
- eyvan/worker/runtime/stage_executor.py +790 -0
- eyvan/worker/runtime/systemd_transient.py +2482 -0
- eyvan/worker/runtime/workspace_entry.py +166 -0
- eyvan-0.0.1.dist-info/METADATA +305 -0
- eyvan-0.0.1.dist-info/RECORD +390 -0
- eyvan-0.0.1.dist-info/WHEEL +4 -0
- eyvan-0.0.1.dist-info/entry_points.txt +8 -0
eyvan/__init__.py
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Copyright (C) 2026 Erfan Zare Chavoshi
|
|
2
|
+
# This file is part of Eyvan.
|
|
3
|
+
#
|
|
4
|
+
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
5
|
+
|
|
6
|
+
"""Eyvan global fleet control plane."""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import typing as tp
|
|
11
|
+
|
|
12
|
+
if tp.TYPE_CHECKING:
|
|
13
|
+
from eyvan.capacity.fleet_config import EyvanFleetConfig
|
|
14
|
+
from eyvan.config import EyvanSettings
|
|
15
|
+
from eyvan.records import CapacityClass
|
|
16
|
+
from eyvan.sdk import AsyncEyvanClient, ClientIdentity, EyvanCallableSubmitter, EyvanClient
|
|
17
|
+
from eyvan.sdk.client.jobs import CpuConfig, GpuConfig
|
|
18
|
+
from eyvan.sdk.execution import (
|
|
19
|
+
EyvanJob,
|
|
20
|
+
EyvanJobError,
|
|
21
|
+
EyvanPlacementError,
|
|
22
|
+
EyvanUnavailableError,
|
|
23
|
+
TpuConfig,
|
|
24
|
+
execute,
|
|
25
|
+
init,
|
|
26
|
+
)
|
|
27
|
+
from eyvan.worker.runtime.in_job import in_job_context, submit_child
|
|
28
|
+
from eyvan.worker.runtime.progress import report_progress
|
|
29
|
+
|
|
30
|
+
__all__ = (
|
|
31
|
+
"AsyncEyvanClient",
|
|
32
|
+
"CapacityClass",
|
|
33
|
+
"ClientIdentity",
|
|
34
|
+
"CpuConfig",
|
|
35
|
+
"EyvanCallableSubmitter",
|
|
36
|
+
"EyvanClient",
|
|
37
|
+
"EyvanFleetConfig",
|
|
38
|
+
"EyvanJob",
|
|
39
|
+
"EyvanJobError",
|
|
40
|
+
"EyvanPlacementError",
|
|
41
|
+
"EyvanSettings",
|
|
42
|
+
"EyvanUnavailableError",
|
|
43
|
+
"GpuConfig",
|
|
44
|
+
"TpuConfig",
|
|
45
|
+
"execute",
|
|
46
|
+
"in_job_context",
|
|
47
|
+
"init",
|
|
48
|
+
"report_progress",
|
|
49
|
+
"submit_child",
|
|
50
|
+
)
|
|
51
|
+
from eyvan._version import __version__
|
|
52
|
+
|
|
53
|
+
_Export = tp.TypeVar("_Export")
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _cache_export(name: str, value: _Export) -> _Export:
|
|
57
|
+
"""Cache one explicitly imported lazy package export."""
|
|
58
|
+
|
|
59
|
+
globals()[name] = value
|
|
60
|
+
return value
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def __getattr__(name: str):
|
|
64
|
+
"""Load public SDK exports only when callers request them.
|
|
65
|
+
|
|
66
|
+
Native worker subprocesses import ``eyvan.worker.runtime.local_worker`` directly.
|
|
67
|
+
Keeping the package root light prevents that critical path from importing
|
|
68
|
+
the client, API, and their optional observability dependencies first.
|
|
69
|
+
"""
|
|
70
|
+
|
|
71
|
+
if name == "AsyncEyvanClient":
|
|
72
|
+
from eyvan.sdk import AsyncEyvanClient
|
|
73
|
+
|
|
74
|
+
return _cache_export(name, AsyncEyvanClient)
|
|
75
|
+
if name == "CapacityClass":
|
|
76
|
+
# The value TpuConfig(capacity_class=...) takes. records is light: it
|
|
77
|
+
# pulls in pydantic models, not the client or its transport.
|
|
78
|
+
from eyvan.records import CapacityClass
|
|
79
|
+
|
|
80
|
+
return _cache_export(name, CapacityClass)
|
|
81
|
+
if name == "ClientIdentity":
|
|
82
|
+
from eyvan.sdk import ClientIdentity
|
|
83
|
+
|
|
84
|
+
return _cache_export(name, ClientIdentity)
|
|
85
|
+
if name == "EyvanCallableSubmitter":
|
|
86
|
+
from eyvan.sdk import EyvanCallableSubmitter
|
|
87
|
+
|
|
88
|
+
return _cache_export(name, EyvanCallableSubmitter)
|
|
89
|
+
if name == "EyvanClient":
|
|
90
|
+
from eyvan.sdk import EyvanClient
|
|
91
|
+
|
|
92
|
+
return _cache_export(name, EyvanClient)
|
|
93
|
+
if name == "EyvanFleetConfig":
|
|
94
|
+
from eyvan.capacity.fleet_config import EyvanFleetConfig
|
|
95
|
+
|
|
96
|
+
return _cache_export(name, EyvanFleetConfig)
|
|
97
|
+
if name == "EyvanJob":
|
|
98
|
+
from eyvan.sdk.execution import EyvanJob
|
|
99
|
+
|
|
100
|
+
return _cache_export(name, EyvanJob)
|
|
101
|
+
if name == "EyvanJobError":
|
|
102
|
+
from eyvan.sdk.execution import EyvanJobError
|
|
103
|
+
|
|
104
|
+
return _cache_export(name, EyvanJobError)
|
|
105
|
+
if name == "EyvanPlacementError":
|
|
106
|
+
from eyvan.sdk.execution import EyvanPlacementError
|
|
107
|
+
|
|
108
|
+
return _cache_export(name, EyvanPlacementError)
|
|
109
|
+
if name == "EyvanUnavailableError":
|
|
110
|
+
from eyvan.sdk.execution import EyvanUnavailableError
|
|
111
|
+
|
|
112
|
+
return _cache_export(name, EyvanUnavailableError)
|
|
113
|
+
if name == "EyvanSettings":
|
|
114
|
+
from eyvan.config import EyvanSettings
|
|
115
|
+
|
|
116
|
+
return _cache_export(name, EyvanSettings)
|
|
117
|
+
if name == "TpuConfig":
|
|
118
|
+
from eyvan.sdk.execution import TpuConfig
|
|
119
|
+
|
|
120
|
+
return _cache_export(name, TpuConfig)
|
|
121
|
+
if name == "GpuConfig":
|
|
122
|
+
from eyvan.sdk.client.jobs import GpuConfig
|
|
123
|
+
|
|
124
|
+
return _cache_export(name, GpuConfig)
|
|
125
|
+
if name == "CpuConfig":
|
|
126
|
+
from eyvan.sdk.client.jobs import CpuConfig
|
|
127
|
+
|
|
128
|
+
return _cache_export(name, CpuConfig)
|
|
129
|
+
if name == "execute":
|
|
130
|
+
from eyvan.sdk.execution import execute
|
|
131
|
+
|
|
132
|
+
return _cache_export(name, execute)
|
|
133
|
+
if name == "init":
|
|
134
|
+
from eyvan.sdk.execution import init
|
|
135
|
+
|
|
136
|
+
return _cache_export(name, init)
|
|
137
|
+
if name in {"in_job_context", "submit_child"}:
|
|
138
|
+
# Same reasoning as report_progress: this runs *inside* the job, so it
|
|
139
|
+
# must not drag the client in behind it.
|
|
140
|
+
from eyvan.worker.runtime import in_job
|
|
141
|
+
|
|
142
|
+
return _cache_export(name, getattr(in_job, name))
|
|
143
|
+
if name == "report_progress":
|
|
144
|
+
# Not from the SDK: this one runs *inside* the job, which is the path the
|
|
145
|
+
# rest of this table exists to keep free of the client and its optional
|
|
146
|
+
# dependencies. It imports nothing but the standard library.
|
|
147
|
+
from eyvan.worker.runtime.progress import report_progress
|
|
148
|
+
|
|
149
|
+
return _cache_export(name, report_progress)
|
|
150
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
def __dir__() -> list[str]:
|
|
154
|
+
"""Expose lazily loaded SDK names to interactive tooling."""
|
|
155
|
+
|
|
156
|
+
return sorted({*globals(), *__all__})
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{r as qi,j as Ji}from"./index-aNA_h2N4.js";const er=!0,De="u-",tr="uplot",lr=De+"hz",nr=De+"vt",ir=De+"title",sr=De+"wrap",or=De+"under",rr=De+"over",fr=De+"axis",Qt=De+"off",ur=De+"select",cr=De+"cursor-x",ar=De+"cursor-y",pr=De+"cursor-pt",hr=De+"legend",mr=De+"live",dr=De+"inline",gr=De+"series",wr=De+"marker",Zi=De+"label",Sr=De+"value",Gl="width",Il="height",Hl="top",Qi="bottom",xl="left",In="right",si="#000",Xi=si+"0",Yn="mousemove",es="mousedown",Bn="mouseup",ts="mouseenter",ls="mouseleave",ns="dblclick",_r="resize",yr="scroll",is="change",fn="dppxchange",oi="--",Al=typeof window<"u",qn=Al?document:null,kl=Al?window:null,xr=Al?navigator:null;let oe,nn;function Jn(){let e=devicePixelRatio;oe!=e&&(oe=e,nn&&Qn(is,nn,Jn),nn=matchMedia(`(min-resolution: ${oe-.001}dppx) and (max-resolution: ${oe+.001}dppx)`),Xt(is,nn,Jn),kl.dispatchEvent(new CustomEvent(fn)))}function et(e,n){if(n!=null){let s=e.classList;!s.contains(n)&&s.add(n)}}function Zn(e,n){let s=e.classList;s.contains(n)&&s.remove(n)}function ge(e,n,s){e.style[n]=s+"px"}function gt(e,n,s,l){let o=qn.createElement(e);return n!=null&&et(o,n),s!=null&&s.insertBefore(o,l),o}function ut(e,n){return gt("div",e,n)}const ss=new WeakMap;function Tt(e,n,s,l,o){let a="translate("+n+"px,"+s+"px)",u=ss.get(e);a!=u&&(e.style.transform=a,ss.set(e,a),n<0||s<0||n>l||s>o?et(e,Qt):Zn(e,Qt))}const os=new WeakMap;function rs(e,n,s){let l=n+s,o=os.get(e);l!=o&&(os.set(e,l),e.style.background=n,e.style.borderColor=s)}const fs=new WeakMap;function us(e,n,s,l){let o=n+""+s,a=fs.get(e);o!=a&&(fs.set(e,o),e.style.height=s+"px",e.style.width=n+"px",e.style.marginLeft=l?-n/2+"px":0,e.style.marginTop=l?-s/2+"px":0)}const ri={passive:!0},vr={...ri,capture:!0};function Xt(e,n,s,l){n.addEventListener(e,s,l?vr:ri)}function Qn(e,n,s,l){n.removeEventListener(e,s,ri)}Al&&Jn();function wt(e,n,s,l){let o;s=s||0,l=l||n.length-1;let a=l<=2147483647;for(;l-s>1;)o=a?s+l>>1:tt((s+l)/2),n[o]<e?s=o:l=o;return e-n[s]<=n[l]-e?s:l}function Ns(e){return(s,l,o)=>{let a=-1,u=-1;for(let p=l;p<=o;p++)if(e(s[p])){a=p;break}for(let p=o;p>=l;p--)if(e(s[p])){u=p;break}return[a,u]}}const Os=e=>e!=null,Hs=e=>e!=null&&e>0,an=Ns(Os),kr=Ns(Hs);function br(e,n,s,l=0,o=!1){let a=o?kr:an,u=o?Hs:Os;[n,s]=a(e,n,s);let p=e[n],m=e[n];if(n>-1)if(l==1)p=e[n],m=e[s];else if(l==-1)p=e[s],m=e[n];else for(let d=n;d<=s;d++){let x=e[d];u(x)&&(x<p?p=x:x>m&&(m=x))}return[p??ce,m??-ce]}function pn(e,n,s,l){let o=ps(e),a=ps(n);e==n&&(o==-1?(e*=s,n/=s):(e/=s,n*=s));let u=s==10?Dt:Ws,p=o==1?tt:ct,m=a==1?ct:tt,d=p(u(Pe(e))),x=m(u(Pe(n))),g=bl(s,d),w=bl(s,x);return s==10&&(d<0&&(g=ae(g,-d)),x<0&&(w=ae(w,-x))),l||s==2?(e=g*o,n=w*a):(e=Bs(e,g),n=hn(n,w)),[e,n]}function fi(e,n,s,l){let o=pn(e,n,s,l);return e==0&&(o[0]=0),n==0&&(o[1]=0),o}const ui=.1,cs={mode:3,pad:ui},Bl={pad:0,soft:null,mode:0},Mr={min:Bl,max:Bl};function un(e,n,s,l){return mn(s)?as(e,n,s):(Bl.pad=s,Bl.soft=l?0:null,Bl.mode=l?3:0,as(e,n,Mr))}function ie(e,n){return e??n}function Tr(e,n,s){for(n=ie(n,0),s=ie(s,e.length-1);n<=s;){if(e[n]!=null)return!0;n++}return!1}function as(e,n,s){let l=s.min,o=s.max,a=ie(l.pad,0),u=ie(o.pad,0),p=ie(l.hard,-ce),m=ie(o.hard,ce),d=ie(l.soft,ce),x=ie(o.soft,-ce),g=ie(l.mode,0),w=ie(o.mode,0),C=n-e,E=Dt(C),O=Ue(Pe(e),Pe(n)),R=Dt(O),M=Pe(R-E);(C<1e-24||M>10)&&(C=0,(e==0||n==0)&&(C=1e-24,g==2&&d!=ce&&(a=0),w==2&&x!=-ce&&(u=0)));let v=C||O||1e3,z=Dt(v),_=bl(10,tt(z)),I=v*(C==0?e==0?.1:1:a),A=ae(Bs(e-I,_/10),24),U=e>=d&&(g==1||g==3&&A<=d||g==2&&A>=d)?d:ce,j=Ue(p,A<U&&e>=U?U:St(U,A)),Q=v*(C==0?n==0?.1:1:u),K=ae(hn(n+Q,_/10),24),b=n<=x&&(w==1||w==3&&K>=x||w==2&&K<=x)?x:-ce,q=St(m,K>b&&n<=b?b:Ue(b,K));return j==q&&j==0&&(q=100),[j,q]}const Er=new Intl.NumberFormat(Al?xr.language:"en-US"),ci=e=>Er.format(e),lt=Math,rn=lt.PI,Pe=lt.abs,tt=lt.floor,Ae=lt.round,ct=lt.ceil,St=lt.min,Ue=lt.max,bl=lt.pow,ps=lt.sign,Dt=lt.log10,Ws=lt.log2,Ar=(e,n=1)=>lt.sinh(e)*n,Un=(e,n=1)=>lt.asinh(e/n),ce=1/0;function hs(e){return(Dt((e^e>>31)-(e>>31))|0)+1}function Xn(e,n,s){return St(Ue(e,n),s)}function Gs(e){return typeof e=="function"}function X(e){return Gs(e)?e:()=>e}const Pr=()=>{},Is=e=>e,Ys=(e,n)=>n,Dr=e=>null,ms=e=>!0,ds=(e,n)=>e==n,Lr=/\.\d*?(?=9{6,}|0{6,})/gm,el=e=>{if(Ks(e)||Ht.has(e))return e;const n=`${e}`,s=n.match(Lr);if(s==null)return e;let l=s[0].length-1;if(n.indexOf("e-")!=-1){let[o,a]=n.split("e");return+`${el(o)}e${a}`}return ae(e,l)};function Jt(e,n){return el(ae(el(e/n))*n)}function hn(e,n){return el(ct(el(e/n))*n)}function Bs(e,n){return el(tt(el(e/n))*n)}function ae(e,n=0){if(Ks(e))return e;let s=10**n,l=e*s*(1+Number.EPSILON);return Ae(l)/s}const Ht=new Map;function Us(e){return((""+e).split(".")[1]||"").length}function Kl(e,n,s,l){let o=[],a=l.map(Us);for(let u=n;u<s;u++){let p=Pe(u),m=ae(bl(e,u),p);for(let d=0;d<l.length;d++){let x=e==10?+`${l[d]}e${u}`:l[d]*m,g=(u>=0?0:p)+(u>=a[d]?0:a[d]),w=e==10?x:ae(x,g);o.push(w),Ht.set(w,g)}}return o}const Ul={},ai=[],Ml=[null,null],Ot=Array.isArray,Ks=Number.isInteger,Cr=e=>e===void 0;function gs(e){return typeof e=="string"}function mn(e){let n=!1;if(e!=null){let s=e.constructor;n=s==null||s==Object}return n}function Rr(e){return e!=null&&typeof e=="object"}const zr=Object.getPrototypeOf(Uint8Array),js="__proto__";function Tl(e,n=mn){let s;if(Ot(e)){let l=e.find(o=>o!=null);if(Ot(l)||n(l)){s=Array(e.length);for(let o=0;o<e.length;o++)s[o]=Tl(e[o],n)}else s=e.slice()}else if(e instanceof zr)s=e.slice();else if(n(e)){s={};for(let l in e)l!=js&&(s[l]=Tl(e[l],n))}else s=e;return s}function Me(e){let n=arguments;for(let s=1;s<n.length;s++){let l=n[s];for(let o in l)o!=js&&(mn(e[o])?Me(e[o],Tl(l[o])):e[o]=Tl(l[o]))}return e}const Vr=0,Fr=1,Nr=2;function Or(e,n,s){for(let l=0,o,a=-1;l<n.length;l++){let u=n[l];if(u>a){for(o=u-1;o>=0&&e[o]==null;)e[o--]=null;for(o=u+1;o<s&&e[o]==null;)e[a=o++]=null}}}function Hr(e,n){if(Ir(e)){let u=e[0].slice();for(let p=1;p<e.length;p++)u.push(...e[p].slice(1));return Yr(u[0])||(u=Gr(u)),u}let s=new Set;for(let u=0;u<e.length;u++){let m=e[u][0],d=m.length;for(let x=0;x<d;x++)s.add(m[x])}let l=[Array.from(s).sort((u,p)=>u-p)],o=l[0].length,a=new Map;for(let u=0;u<o;u++)a.set(l[0][u],u);for(let u=0;u<e.length;u++){let p=e[u],m=p[0];for(let d=1;d<p.length;d++){let x=p[d],g=Array(o).fill(void 0),w=n?n[u][d]:Fr,C=[];for(let E=0;E<x.length;E++){let O=x[E],R=a.get(m[E]);O===null?w!=Vr&&(g[R]=O,w==Nr&&C.push(R)):g[R]=O}Or(g,C,o),l.push(g)}}return l}const Wr=typeof queueMicrotask>"u"?e=>Promise.resolve().then(e):queueMicrotask;function Gr(e){let n=e[0],s=n.length,l=Array(s);for(let a=0;a<l.length;a++)l[a]=a;l.sort((a,u)=>n[a]-n[u]);let o=[];for(let a=0;a<e.length;a++){let u=e[a],p=Array(s);for(let m=0;m<s;m++)p[m]=u[l[m]];o.push(p)}return o}function Ir(e){let n=e[0][0],s=n.length;for(let l=1;l<e.length;l++){let o=e[l][0];if(o.length!=s)return!1;if(o!=n){for(let a=0;a<s;a++)if(o[a]!=n[a])return!1}}return!0}function Yr(e,n=100){const s=e.length;if(s<=1)return!0;let l=0,o=s-1;for(;l<=o&&e[l]==null;)l++;for(;o>=l&&e[o]==null;)o--;if(o<=l)return!0;const a=Ue(1,tt((o-l+1)/n));for(let u=e[l],p=l+a;p<=o;p+=a){const m=e[p];if(m!=null){if(m<=u)return!1;u=m}}return!0}const $s=["January","February","March","April","May","June","July","August","September","October","November","December"],qs=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];function Js(e){return e.slice(0,3)}const Br=qs.map(Js),Ur=$s.map(Js),Kr={MMMM:$s,MMM:Ur,WWWW:qs,WWW:Br};function Wl(e){return(e<10?"0":"")+e}function jr(e){return(e<10?"00":e<100?"0":"")+e}const $r={YYYY:e=>e.getFullYear(),YY:e=>(e.getFullYear()+"").slice(2),MMMM:(e,n)=>n.MMMM[e.getMonth()],MMM:(e,n)=>n.MMM[e.getMonth()],MM:e=>Wl(e.getMonth()+1),M:e=>e.getMonth()+1,DD:e=>Wl(e.getDate()),D:e=>e.getDate(),WWWW:(e,n)=>n.WWWW[e.getDay()],WWW:(e,n)=>n.WWW[e.getDay()],HH:e=>Wl(e.getHours()),H:e=>e.getHours(),h:e=>{let n=e.getHours();return n==0?12:n>12?n-12:n},AA:e=>e.getHours()>=12?"PM":"AM",aa:e=>e.getHours()>=12?"pm":"am",a:e=>e.getHours()>=12?"p":"a",mm:e=>Wl(e.getMinutes()),m:e=>e.getMinutes(),ss:e=>Wl(e.getSeconds()),s:e=>e.getSeconds(),fff:e=>jr(e.getMilliseconds())};function pi(e,n){n=n||Kr;let s=[],l=/\{([a-z]+)\}|[^{]+/gi,o;for(;o=l.exec(e);)s.push(o[0][0]=="{"?$r[o[1]]:o[0]);return a=>{let u="";for(let p=0;p<s.length;p++)u+=typeof s[p]=="string"?s[p]:s[p](a,n);return u}}const qr=new Intl.DateTimeFormat().resolvedOptions().timeZone;function Jr(e,n){let s;return n=="UTC"||n=="Etc/UTC"?s=new Date(+e+e.getTimezoneOffset()*6e4):n==qr?s=e:(s=new Date(e.toLocaleString("en-US",{timeZone:n})),s.setMilliseconds(e.getMilliseconds())),s}const Zs=e=>e%1==0,cn=[1,2,2.5,5],Zr=Kl(10,-32,0,cn),Qs=Kl(10,0,32,cn),Qr=Qs.filter(Zs),Zt=Zr.concat(Qs),hi=`
|
|
2
|
+
`,Xs="{YYYY}",ws=hi+Xs,eo="{M}/{D}",Yl=hi+eo,sn=Yl+"/{YY}",to="{aa}",Xr="{h}:{mm}",vl=Xr+to,Ss=hi+vl,_s=":{ss}",re=null;function lo(e){let n=e*1e3,s=n*60,l=s*60,o=l*24,a=o*30,u=o*365,m=(e==1?Kl(10,0,3,cn).filter(Zs):Kl(10,-3,0,cn)).concat([n,n*5,n*10,n*15,n*30,s,s*5,s*10,s*15,s*30,l,l*2,l*3,l*4,l*6,l*8,l*12,o,o*2,o*3,o*4,o*5,o*6,o*7,o*8,o*9,o*10,o*15,a,a*2,a*3,a*4,a*6,u,u*2,u*5,u*10,u*25,u*50,u*100]);const d=[[u,Xs,re,re,re,re,re,re,1],[o*28,"{MMM}",ws,re,re,re,re,re,1],[o,eo,ws,re,re,re,re,re,1],[l,"{h}"+to,sn,re,Yl,re,re,re,1],[s,vl,sn,re,Yl,re,re,re,1],[n,_s,sn+" "+vl,re,Yl+" "+vl,re,Ss,re,1],[e,_s+".{fff}",sn+" "+vl,re,Yl+" "+vl,re,Ss,re,1]];function x(g){return(w,C,E,O,R,M)=>{let v=[],z=R>=u,_=R>=a&&R<u,I=g(E),A=ae(I*e,3),U=Kn(I.getFullYear(),z?0:I.getMonth(),_||z?1:I.getDate()),j=ae(U*e,3);if(_||z){let Q=_?R/a:0,K=z?R/u:0,b=A==j?A:ae(Kn(U.getFullYear()+K,U.getMonth()+Q,1)*e,3),q=new Date(Ae(b/e)),V=q.getFullYear(),Y=q.getMonth();for(let W=0;b<=O;W++){let ee=Kn(V+K*W,Y+Q*W,1),H=ee-g(ae(ee*e,3));b=ae((+ee+H)*e,3),b<=O&&v.push(b)}}else{let Q=R>=o?o:R,K=tt(E)-tt(A),b=j+K+hn(A-j,Q);v.push(b);let q=g(b),V=q.getHours()+q.getMinutes()/s+q.getSeconds()/l,Y=R/l,W=w.axes[C]._space,ee=M/W;for(;b=ae(b+R,e==1?0:3),!(b>O);)if(Y>1){let H=tt(ae(V+Y,6))%24,te=g(b).getHours()-H;te>1&&(te=-1),b-=te*l,V=(V+Y)%24;let fe=v[v.length-1];ae((b-fe)/R,3)*ee>=.7&&v.push(b)}else v.push(b)}return v}}return[m,d,x]}const[ef,tf,lf]=lo(1),[nf,sf,of]=lo(.001);Kl(2,-53,53,[1]);function ys(e,n){return e.map(s=>s.map((l,o)=>o==0||o==8||l==null?l:n(o==1||s[8]==0?l:s[1]+l)))}function xs(e,n){return(s,l,o,a,u)=>{let p=n.find(E=>u>=E[0])||n[n.length-1],m,d,x,g,w,C;return l.map(E=>{let O=e(E),R=O.getFullYear(),M=O.getMonth(),v=O.getDate(),z=O.getHours(),_=O.getMinutes(),I=O.getSeconds(),A=R!=m&&p[2]||M!=d&&p[3]||v!=x&&p[4]||z!=g&&p[5]||_!=w&&p[6]||I!=C&&p[7]||p[1];return m=R,d=M,x=v,g=z,w=_,C=I,A(O)})}}function rf(e,n){let s=pi(n);return(l,o,a,u,p)=>o.map(m=>s(e(m)))}function Kn(e,n,s){return new Date(e,n,s)}function vs(e,n){return n(e)}const ff="{YYYY}-{MM}-{DD} {h}:{mm}{aa}";function ks(e,n){return(s,l,o,a)=>a==null?oi:n(e(l))}function uf(e,n){let s=e.series[n];return s.width?s.stroke(e,n):s.points.width?s.points.stroke(e,n):null}function cf(e,n){return e.series[n].fill(e,n)}const af={show:!0,live:!0,isolate:!1,mount:Pr,markers:{show:!0,width:2,stroke:uf,fill:cf,dash:"solid"},idx:null,idxs:null,values:[]};function pf(e,n){let s=e.cursor.points,l=ut(),o=s.size(e,n);ge(l,Gl,o),ge(l,Il,o);let a=o/-2;ge(l,"marginLeft",a),ge(l,"marginTop",a);let u=s.width(e,n,o);return u&&ge(l,"borderWidth",u),l}function hf(e,n){let s=e.series[n].points;return s._fill||s._stroke}function mf(e,n){let s=e.series[n].points;return s._stroke||s._fill}function df(e,n){return e.series[n].points.size}const jn=[0,0];function gf(e,n,s){return jn[0]=n,jn[1]=s,jn}function on(e,n,s,l=!0){return o=>{o.button==0&&(!l||o.target==n)&&s(o)}}function $n(e,n,s,l=!0){return o=>{(!l||o.target==n)&&s(o)}}const wf={show:!0,x:!0,y:!0,lock:!1,move:gf,points:{one:!1,show:pf,size:df,width:0,stroke:mf,fill:hf},bind:{mousedown:on,mouseup:on,click:on,dblclick:on,mousemove:$n,mouseleave:$n,mouseenter:$n},drag:{setScale:!0,x:!0,y:!1,dist:0,uni:null,click:(e,n)=>{n.stopPropagation(),n.stopImmediatePropagation()},_x:!1,_y:!1},focus:{dist:(e,n,s,l,o)=>l-o,prox:-1,bias:0},hover:{skip:[void 0],prox:null,bias:0},left:-10,top:-10,idx:null,dataIdx:null,idxs:null,event:null},no={show:!0,stroke:"rgba(0,0,0,0.07)",width:2},mi=Me({},no,{filter:Ys}),io=Me({},mi,{size:10}),so=Me({},no,{show:!1}),di='12px system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"',oo="bold "+di,ro=1.5,bs={show:!0,scale:"x",stroke:si,space:50,gap:5,alignTo:1,size:50,labelGap:0,labelSize:30,labelFont:oo,side:2,grid:mi,ticks:io,border:so,font:di,lineGap:ro,rotate:0},Sf="Value",_f="Time",Ms={show:!0,scale:"x",auto:!1,sorted:1,min:ce,max:-ce,idxs:[]};function yf(e,n,s,l,o){return n.map(a=>a==null?"":ci(a))}function xf(e,n,s,l,o,a,u){let p=[],m=Ht.get(o)||0;s=u?s:ae(hn(s,o),m);for(let d=s;d<=l;d=ae(d+o,m))p.push(Object.is(d,-0)?0:d);return p}function ei(e,n,s,l,o,a,u){const p=[],m=e.scales[e.axes[n].scale].log,d=m==10?Dt:Ws,x=tt(d(s));o=bl(m,x),m==10&&(o=Zt[wt(o,Zt)]);let g=s,w=o*m;m==10&&(w=Zt[wt(w,Zt)]);do p.push(g),g=g+o,m==10&&!Ht.has(g)&&(g=ae(g,Ht.get(o))),g>=w&&(o=g,w=o*m,m==10&&(w=Zt[wt(w,Zt)]));while(g<=l);return p}function vf(e,n,s,l,o,a,u){let m=e.scales[e.axes[n].scale].asinh,d=l>m?ei(e,n,Ue(m,s),l,o):[m],x=l>=0&&s<=0?[0]:[];return(s<-m?ei(e,n,Ue(m,-l),-s,o):[m]).reverse().map(w=>-w).concat(x,d)}const fo=/./,kf=/[12357]/,bf=/[125]/,Ts=/1/,ti=(e,n,s,l)=>e.map((o,a)=>n==4&&o==0||a%l==0&&s.test(o.toExponential()[o<0?1:0])?o:null);function Mf(e,n,s,l,o){let a=e.axes[s],u=a.scale,p=e.scales[u],m=e.valToPos,d=a._space,x=m(10,u),g=m(9,u)-x>=d?fo:m(7,u)-x>=d?kf:m(5,u)-x>=d?bf:Ts;if(g==Ts){let w=Pe(m(1,u)-x);if(w<d)return ti(n.slice().reverse(),p.distr,g,ct(d/w)).reverse()}return ti(n,p.distr,g,1)}function Tf(e,n,s,l,o){let a=e.axes[s],u=a.scale,p=a._space,m=e.valToPos,d=Pe(m(1,u)-m(2,u));return d<p?ti(n.slice().reverse(),3,fo,ct(p/d)).reverse():n}function Ef(e,n,s,l){return l==null?oi:n==null?"":ci(n)}const Es={show:!0,scale:"y",stroke:si,space:30,gap:5,alignTo:1,size:50,labelGap:0,labelSize:30,labelFont:oo,side:3,grid:mi,ticks:io,border:so,font:di,lineGap:ro,rotate:0};function Af(e,n){let s=3+(e||1)*2;return ae(s*n,3)}function Pf(e,n){let{scale:s,idxs:l}=e.series[0],o=e._data[0],a=e.valToPos(o[l[0]],s,!0),u=e.valToPos(o[l[1]],s,!0),p=Pe(u-a),m=e.series[n],d=p/(m.points.space*oe);return l[1]-l[0]<=d}const As={scale:null,auto:!0,sorted:0,min:ce,max:-ce},uo=(e,n,s,l,o)=>o,Ps={show:!0,auto:!0,sorted:0,gaps:uo,alpha:1,facets:[Me({},As,{scale:"x"}),Me({},As,{scale:"y"})]},Ds={scale:"y",auto:!0,sorted:0,show:!0,spanGaps:!1,gaps:uo,alpha:1,points:{show:Pf,filter:null},values:null,min:ce,max:-ce,idxs:[],path:null,clip:null};function Df(e,n,s,l,o){return s/10}const co={time:er,auto:!0,distr:1,log:10,asinh:1,min:null,max:null,dir:1,ori:0},Lf=Me({},co,{time:!1,ori:1}),Ls={};function ao(e,n){let s=Ls[e];return s||(s={key:e,plots:[],sub(l){s.plots.push(l)},unsub(l){s.plots=s.plots.filter(o=>o!=l)},pub(l,o,a,u,p,m,d){for(let x=0;x<s.plots.length;x++)s.plots[x]!=o&&s.plots[x].pub(l,o,a,u,p,m,d)}},e!=null&&(Ls[e]=s)),s}const El=1,li=2;function tl(e,n,s){const l=e.mode,o=e.series[n],a=l==2?e._data[n]:e._data,u=e.scales,p=e.bbox;let m=a[0],d=l==2?a[1]:a[n],x=l==2?u[o.facets[0].scale]:u[e.series[0].scale],g=l==2?u[o.facets[1].scale]:u[o.scale],w=p.left,C=p.top,E=p.width,O=p.height,R=e.valToPosH,M=e.valToPosV;return x.ori==0?s(o,m,d,x,g,R,M,w,C,E,O,gn,Pl,Sn,ho,go):s(o,m,d,x,g,M,R,C,w,O,E,wn,Dl,Si,mo,wo)}function gi(e,n){let s=0,l=0,o=ie(e.bands,ai);for(let a=0;a<o.length;a++){let u=o[a];u.series[0]==n?s=u.dir:u.series[1]==n&&(u.dir==1?l|=1:l|=2)}return[s,l==1?-1:l==2?1:l==3?2:0]}function Cf(e,n,s,l,o){let a=e.mode,u=e.series[n],p=a==2?u.facets[1].scale:u.scale,m=e.scales[p];return o==-1?m.min:o==1?m.max:m.distr==3?m.dir==1?m.min:m.max:0}function Lt(e,n,s,l,o,a){return tl(e,n,(u,p,m,d,x,g,w,C,E,O,R)=>{let M=u.pxRound;const v=d.dir*(d.ori==0?1:-1),z=d.ori==0?Pl:Dl;let _,I;v==1?(_=s,I=l):(_=l,I=s);let A=M(g(p[_],d,O,C)),U=M(w(m[_],x,R,E)),j=M(g(p[I],d,O,C)),Q=M(w(a==1?x.max:x.min,x,R,E)),K=new Path2D(o);return z(K,j,Q),z(K,A,Q),z(K,A,U),K})}function dn(e,n,s,l,o,a){let u=null;if(e.length>0){u=new Path2D;const p=n==0?Sn:Si;let m=s;for(let g=0;g<e.length;g++){let w=e[g];if(w[1]>w[0]){let C=w[0]-m;C>0&&p(u,m,l,C,l+a),m=w[1]}}let d=s+o-m,x=10;d>0&&p(u,m,l-x/2,d,l+a+x)}return u}function Rf(e,n,s){let l=e[e.length-1];l&&l[0]==n?l[1]=s:e.push([n,s])}function wi(e,n,s,l,o,a,u){let p=[],m=e.length;for(let d=o==1?s:l;d>=s&&d<=l;d+=o)if(n[d]===null){let g=d,w=d;if(o==1)for(;++d<=l&&n[d]===null;)w=d;else for(;--d>=s&&n[d]===null;)w=d;let C=a(e[g]),E=w==g?C:a(e[w]),O=g-o;C=u<=0&&O>=0&&O<m?a(e[O]):C;let M=w+o;E=u>=0&&M>=0&&M<m?a(e[M]):E,E>=C&&p.push([C,E])}return p}function Cs(e){return e==0?Is:e==1?Ae:n=>Jt(n,e)}function po(e){let n=e==0?gn:wn,s=e==0?(o,a,u,p,m,d)=>{o.arcTo(a,u,p,m,d)}:(o,a,u,p,m,d)=>{o.arcTo(u,a,m,p,d)},l=e==0?(o,a,u,p,m)=>{o.rect(a,u,p,m)}:(o,a,u,p,m)=>{o.rect(u,a,m,p)};return(o,a,u,p,m,d=0,x=0)=>{d==0&&x==0?l(o,a,u,p,m):(d=St(d,p/2,m/2),x=St(x,p/2,m/2),n(o,a+d,u),s(o,a+p,u,a+p,u+m,d),s(o,a+p,u+m,a,u+m,x),s(o,a,u+m,a,u,x),s(o,a,u,a+p,u,d),o.closePath())}}const gn=(e,n,s)=>{e.moveTo(n,s)},wn=(e,n,s)=>{e.moveTo(s,n)},Pl=(e,n,s)=>{e.lineTo(n,s)},Dl=(e,n,s)=>{e.lineTo(s,n)},Sn=po(0),Si=po(1),ho=(e,n,s,l,o,a)=>{e.arc(n,s,l,o,a)},mo=(e,n,s,l,o,a)=>{e.arc(s,n,l,o,a)},go=(e,n,s,l,o,a,u)=>{e.bezierCurveTo(n,s,l,o,a,u)},wo=(e,n,s,l,o,a,u)=>{e.bezierCurveTo(s,n,o,l,u,a)};function So(e){return(n,s,l,o,a)=>tl(n,s,(u,p,m,d,x,g,w,C,E,O,R)=>{let{pxRound:M,points:v}=u,z,_;d.ori==0?(z=gn,_=ho):(z=wn,_=mo);const I=ae(v.width*oe,3);let A=(v.size-v.width)/2*oe,U=ae(A*2,3),j=new Path2D,Q=new Path2D,{left:K,top:b,width:q,height:V}=n.bbox;Sn(Q,K-U,b-U,q+U*2,V+U*2);const Y=W=>{if(m[W]!=null){let ee=M(g(p[W],d,O,C)),H=M(w(m[W],x,R,E));z(j,ee+A,H),_(j,ee,H,A,0,rn*2)}};if(a)a.forEach(Y);else for(let W=l;W<=o;W++)Y(W);return{stroke:I>0?j:null,fill:j,clip:Q,flags:El|li}})}function _o(e){return(n,s,l,o,a,u)=>{l!=o&&(a!=l&&u!=l&&e(n,s,l),a!=o&&u!=o&&e(n,s,o),e(n,s,u))}}const zf=_o(Pl),Vf=_o(Dl);function yo(e){const n=ie(e==null?void 0:e.alignGaps,0);return(s,l,o,a)=>tl(s,l,(u,p,m,d,x,g,w,C,E,O,R)=>{[o,a]=an(m,o,a);let M=u.pxRound,v=V=>M(g(V,d,O,C)),z=V=>M(w(V,x,R,E)),_,I;d.ori==0?(_=Pl,I=zf):(_=Dl,I=Vf);const A=d.dir*(d.ori==0?1:-1),U={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:El},j=U.stroke;let Q=!1;if(a-o>=O*4){let V=F=>s.posToVal(F,d.key,!0),Y=null,W=null,ee,H,Ke,we=v(p[A==1?o:a]),te=v(p[o]),fe=v(p[a]),J=V(A==1?te+1:fe-1);for(let F=A==1?o:a;F>=o&&F<=a;F+=A){let Te=p[F],Se=(A==1?Te<J:Te>J)?we:v(Te),le=m[F];Se==we?le!=null?(H=le,Y==null?(_(j,Se,z(H)),ee=Y=W=H):H<Y?Y=H:H>W&&(W=H)):le===null&&(Q=!0):(Y!=null&&I(j,we,z(Y),z(W),z(ee),z(H)),le!=null?(H=le,_(j,Se,z(H)),Y=W=ee=H):(Y=W=null,le===null&&(Q=!0)),we=Se,J=V(we+A))}Y!=null&&Y!=W&&Ke!=we&&I(j,we,z(Y),z(W),z(ee),z(H))}else for(let V=A==1?o:a;V>=o&&V<=a;V+=A){let Y=m[V];Y===null?Q=!0:Y!=null&&_(j,v(p[V]),z(Y))}let[b,q]=gi(s,l);if(u.fill!=null||b!=0){let V=U.fill=new Path2D(j),Y=u.fillTo(s,l,u.min,u.max,b),W=z(Y),ee=v(p[o]),H=v(p[a]);A==-1&&([H,ee]=[ee,H]),_(V,H,W),_(V,ee,W)}if(!u.spanGaps){let V=[];Q&&V.push(...wi(p,m,o,a,A,v,n)),U.gaps=V=u.gaps(s,l,o,a,V),U.clip=dn(V,d.ori,C,E,O,R)}return q!=0&&(U.band=q==2?[Lt(s,l,o,a,j,-1),Lt(s,l,o,a,j,1)]:Lt(s,l,o,a,j,q)),U})}function Ff(e){const n=ie(e.align,1),s=ie(e.ascDesc,!1),l=ie(e.alignGaps,0),o=ie(e.extend,!1);return(a,u,p,m)=>tl(a,u,(d,x,g,w,C,E,O,R,M,v,z)=>{[p,m]=an(g,p,m);let _=d.pxRound,{left:I,width:A}=a.bbox,U=te=>_(E(te,w,v,R)),j=te=>_(O(te,C,z,M)),Q=w.ori==0?Pl:Dl;const K={stroke:new Path2D,fill:null,clip:null,band:null,gaps:null,flags:El},b=K.stroke,q=w.dir*(w.ori==0?1:-1);let V=j(g[q==1?p:m]),Y=U(x[q==1?p:m]),W=Y,ee=Y;o&&n==-1&&(ee=I,Q(b,ee,V)),Q(b,Y,V);for(let te=q==1?p:m;te>=p&&te<=m;te+=q){let fe=g[te];if(fe==null)continue;let J=U(x[te]),F=j(fe);n==1?Q(b,J,V):Q(b,W,F),Q(b,J,F),V=F,W=J}let H=W;o&&n==1&&(H=I+A,Q(b,H,V));let[Ke,we]=gi(a,u);if(d.fill!=null||Ke!=0){let te=K.fill=new Path2D(b),fe=d.fillTo(a,u,d.min,d.max,Ke),J=j(fe);Q(te,H,J),Q(te,ee,J)}if(!d.spanGaps){let te=[];te.push(...wi(x,g,p,m,q,U,l));let fe=d.width*oe/2,J=s||n==1?fe:-fe,F=s||n==-1?-fe:fe;te.forEach(Te=>{Te[0]+=J,Te[1]+=F}),K.gaps=te=d.gaps(a,u,p,m,te),K.clip=dn(te,w.ori,R,M,v,z)}return we!=0&&(K.band=we==2?[Lt(a,u,p,m,b,-1),Lt(a,u,p,m,b,1)]:Lt(a,u,p,m,b,we)),K})}function Rs(e,n,s,l,o,a,u=ce){if(e.length>1){let p=null;for(let m=0,d=1/0;m<e.length;m++)if(n[m]!==void 0){if(p!=null){let x=Pe(e[m]-e[p]);x<d&&(d=x,u=Pe(s(e[m],l,o,a)-s(e[p],l,o,a)))}p=m}}return u}function Nf(e){e=e||Ul;const n=ie(e.size,[.6,ce,1]),s=e.align||0,l=e.gap||0;let o=e.radius;o=o==null?[0,0]:typeof o=="number"?[o,0]:o;const a=X(o),u=1-n[0],p=ie(n[1],ce),m=ie(n[2],1),d=ie(e.disp,Ul),x=ie(e.each,C=>{}),{fill:g,stroke:w}=d;return(C,E,O,R)=>tl(C,E,(M,v,z,_,I,A,U,j,Q,K,b)=>{let q=M.pxRound,V=s,Y=l*oe,W=p*oe,ee=m*oe,H,Ke;_.ori==0?[H,Ke]=a(C,E):[Ke,H]=a(C,E);const we=_.dir*(_.ori==0?1:-1);let te=_.ori==0?Sn:Si,fe=_.ori==0?x:(D,pe,Ee,sl,It,yt,Yt)=>{x(D,pe,Ee,It,sl,Yt,yt)},J=ie(C.bands,ai).find(D=>D.series[0]==E),F=J!=null?J.dir:0,Te=M.fillTo(C,E,M.min,M.max,F),We=q(U(Te,I,b,Q)),Se,le,at,qe=K,ye=q(M.width*oe),_t=!1,Et=null,nt=null,Ct=null,ll=null;g!=null&&(ye==0||w!=null)&&(_t=!0,Et=g.values(C,E,O,R),nt=new Map,new Set(Et).forEach(D=>{D!=null&&nt.set(D,new Path2D)}),ye>0&&(Ct=w.values(C,E,O,R),ll=new Map,new Set(Ct).forEach(D=>{D!=null&&ll.set(D,new Path2D)})));let{x0:nl,size:Ll}=d;if(nl!=null&&Ll!=null){V=1,v=nl.values(C,E,O,R),nl.unit==2&&(v=v.map(Ee=>C.posToVal(j+Ee*K,_.key,!0)));let D=Ll.values(C,E,O,R);Ll.unit==2?le=D[0]*K:le=A(D[0],_,K,j)-A(0,_,K,j),qe=Rs(v,z,A,_,K,j,qe),at=qe-le+Y}else qe=Rs(v,z,A,_,K,j,qe),at=qe*u+Y,le=qe-at;at<1&&(at=0),ye>=le/2&&(ye=0),at<5&&(q=Is);let jl=at>0,Wt=qe-at-(jl?ye:0);le=q(Xn(Wt,ee,W)),Se=(V==0?le/2:V==we?0:le)-V*we*((V==0?Y/2:0)+(jl?ye/2:0));const Ge={stroke:null,fill:null,clip:null,band:null,gaps:null,flags:0},il=_t?null:new Path2D;let At=null;if(J!=null)At=C.data[J.series[1]];else{let{y0:D,y1:pe}=d;D!=null&&pe!=null&&(z=pe.values(C,E,O,R),At=D.values(C,E,O,R))}let Gt=H*le,$=Ke*le;for(let D=we==1?O:R;D>=O&&D<=R;D+=we){let pe=z[D];if(pe==null)continue;if(At!=null){let je=At[D]??0;if(pe-je==0)continue;We=U(je,I,b,Q)}let Ee=_.distr!=2||d!=null?v[D]:D,sl=A(Ee,_,K,j),It=U(ie(pe,Te),I,b,Q),yt=q(sl-Se),Yt=q(Ue(It,We)),Je=q(St(It,We)),it=Yt-Je;if(pe!=null){let je=pe<0?$:Gt,pt=pe<0?Gt:$;_t?(ye>0&&Ct[D]!=null&&te(ll.get(Ct[D]),yt,Je+tt(ye/2),le,Ue(0,it-ye),je,pt),Et[D]!=null&&te(nt.get(Et[D]),yt,Je+tt(ye/2),le,Ue(0,it-ye),je,pt)):te(il,yt,Je+tt(ye/2),le,Ue(0,it-ye),je,pt),fe(C,E,D,yt-ye/2,Je,le+ye,it)}}return ye>0?Ge.stroke=_t?ll:il:_t||(Ge._fill=M.width==0?M._fill:M._stroke??M._fill,Ge.width=0),Ge.fill=_t?nt:il,Ge})}function Of(e,n){const s=ie(n==null?void 0:n.alignGaps,0);return(l,o,a,u)=>tl(l,o,(p,m,d,x,g,w,C,E,O,R,M)=>{[a,u]=an(d,a,u);let v=p.pxRound,z=H=>v(w(H,x,R,E)),_=H=>v(C(H,g,M,O)),I,A,U;x.ori==0?(I=gn,U=Pl,A=go):(I=wn,U=Dl,A=wo);const j=x.dir*(x.ori==0?1:-1);let Q=z(m[j==1?a:u]),K=Q,b=[],q=[];for(let H=j==1?a:u;H>=a&&H<=u;H+=j)if(d[H]!=null){let we=m[H],te=z(we);b.push(K=te),q.push(_(d[H]))}const V={stroke:e(b,q,I,U,A,v),fill:null,clip:null,band:null,gaps:null,flags:El},Y=V.stroke;let[W,ee]=gi(l,o);if(p.fill!=null||W!=0){let H=V.fill=new Path2D(Y),Ke=p.fillTo(l,o,p.min,p.max,W),we=_(Ke);U(H,K,we),U(H,Q,we)}if(!p.spanGaps){let H=[];H.push(...wi(m,d,a,u,j,z,s)),V.gaps=H=p.gaps(l,o,a,u,H),V.clip=dn(H,x.ori,E,O,R,M)}return ee!=0&&(V.band=ee==2?[Lt(l,o,a,u,Y,-1),Lt(l,o,a,u,Y,1)]:Lt(l,o,a,u,Y,ee)),V})}function Hf(e){return Of(Wf,e)}function Wf(e,n,s,l,o,a){const u=e.length;if(u<2)return null;const p=new Path2D;if(s(p,e[0],n[0]),u==2)l(p,e[1],n[1]);else{let m=Array(u),d=Array(u-1),x=Array(u-1),g=Array(u-1);for(let w=0;w<u-1;w++)x[w]=n[w+1]-n[w],g[w]=e[w+1]-e[w],d[w]=x[w]/g[w];m[0]=d[0];for(let w=1;w<u-1;w++)d[w]===0||d[w-1]===0||d[w-1]>0!=d[w]>0?m[w]=0:(m[w]=3*(g[w-1]+g[w])/((2*g[w]+g[w-1])/d[w-1]+(g[w]+2*g[w-1])/d[w]),isFinite(m[w])||(m[w]=0));m[u-1]=d[u-2];for(let w=0;w<u-1;w++)o(p,e[w]+g[w]/3,n[w]+m[w]*g[w]/3,e[w+1]-g[w]/3,n[w+1]-m[w+1]*g[w]/3,e[w+1],n[w+1])}return p}const ni=new Set;function zs(){for(let e of ni)e.syncRect(!0)}Al&&(Xt(_r,kl,zs),Xt(yr,kl,zs,!0),Xt(fn,kl,()=>{xe.pxRatio=oe}));const Gf=yo(),If=So();function Vs(e,n,s,l){return(l?[e[0],e[1]].concat(e.slice(2)):[e[0]].concat(e.slice(1))).map((a,u)=>ii(a,u,n,s))}function Yf(e,n){return e.map((s,l)=>l==0?{}:Me({},n,s))}function ii(e,n,s,l){return Me({},n==0?s:l,e)}function xo(e,n,s){return n==null?Ml:[n,s]}const Bf=xo;function Uf(e,n,s){return n==null?Ml:un(n,s,ui,!0)}function vo(e,n,s,l){return n==null?Ml:pn(n,s,e.scales[l].log,!1)}const Kf=vo;function ko(e,n,s,l){return n==null?Ml:fi(n,s,e.scales[l].log,!1)}const jf=ko;function $f(e,n,s,l,o){let a=Ue(hs(e),hs(n)),u=n-e,p=wt(o/l*u,s);do{let m=s[p],d=l*m/u;if(d>=o&&a+(m<5?Ht.get(m):0)<=17)return[m,d]}while(++p<s.length);return[0,0]}function Fs(e){let n,s;return e=e.replace(/(\d+)px/,(l,o)=>(n=Ae((s=+o)*oe))+"px"),[e,n,s]}function qf(e){e.show&&[e.font,e.labelFont].forEach(n=>{let s=ae(n[2]*oe,1);n[0]=n[0].replace(/[0-9.]+px/,s+"px"),n[1]=s})}function xe(e,n,s){const l={mode:ie(e.mode,1)},o=l.mode;function a(t,i,r,f){let c=i.valToPct(t);return f+r*(i.dir==-1?1-c:c)}function u(t,i,r,f){let c=i.valToPct(t);return f+r*(i.dir==-1?c:1-c)}function p(t,i,r,f){return i.ori==0?a(t,i,r,f):u(t,i,r,f)}l.valToPosH=a,l.valToPosV=u;let m=!1;l.status=0;const d=l.root=ut(tr);if(e.id!=null&&(d.id=e.id),et(d,e.class),e.title){let t=ut(ir,d);t.textContent=e.title}const x=gt("canvas"),g=l.ctx=x.getContext("2d"),w=ut(sr,d);Xt("click",w,t=>{t.target===E&&(he!=gl||_e!=wl)&&Oe.click(l,t)},!0);const C=l.under=ut(or,w);w.appendChild(x);const E=l.over=ut(rr,w);e=Tl(e);const O=+ie(e.pxAlign,1),R=Cs(O);(e.plugins||[]).forEach(t=>{t.opts&&(e=t.opts(l,e)||e)});const M=e.ms||.001,v=l.series=o==1?Vs(e.series||[],Ms,Ds,!1):Yf(e.series||[null],Ps),z=l.axes=Vs(e.axes||[],bs,Es,!0),_=l.scales={},I=l.bands=e.bands||[];I.forEach(t=>{t.fill=X(t.fill||null),t.dir=ie(t.dir,-1)});const A=o==2?v[1].facets[0].scale:v[0].scale,U={axes:Ho,series:zo},j=(e.drawOrder||["axes","series"]).map(t=>U[t]);function Q(t){const i=t.distr==3?r=>Dt(r>0?r:t.clamp(l,r,t.min,t.max,t.key)):t.distr==4?r=>Un(r,t.asinh):t.distr==100?r=>t.fwd(r):r=>r;return r=>{let f=i(r),{_min:c,_max:h}=t,S=h-c;return(f-c)/S}}function K(t){let i=_[t];if(i==null){let r=(e.scales||Ul)[t]||Ul;if(r.from!=null){K(r.from);let f=Me({},_[r.from],r,{key:t});f.valToPct=Q(f),_[t]=f}else{i=_[t]=Me({},t==A?co:Lf,r),i.key=t;let f=i.time,c=i.range,h=Ot(c);if((t!=A||o==2&&!f)&&(h&&(c[0]==null||c[1]==null)&&(c={min:c[0]==null?cs:{mode:1,hard:c[0],soft:c[0]},max:c[1]==null?cs:{mode:1,hard:c[1],soft:c[1]}},h=!1),!h&&mn(c))){let S=c;c=(y,k,T)=>k==null?Ml:un(k,T,S)}i.range=X(c||(f?Bf:t==A?i.distr==3?Kf:i.distr==4?jf:xo:i.distr==3?vo:i.distr==4?ko:Uf)),i.auto=X(h?!1:i.auto),i.clamp=X(i.clamp||Df),i._min=i._max=null,i.valToPct=Q(i)}}}K("x"),K("y"),o==1&&v.forEach(t=>{K(t.scale)}),z.forEach(t=>{K(t.scale)});for(let t in e.scales)K(t);const b=_[A],q=b.distr;let V,Y;b.ori==0?(et(d,lr),V=a,Y=u):(et(d,nr),V=u,Y=a);const W={};for(let t in _){let i=_[t];(i.min!=null||i.max!=null)&&(W[t]={min:i.min,max:i.max},i.min=i.max=null)}const ee=e.tzDate||(t=>new Date(Ae(t/M))),H=e.fmtDate||pi,Ke=M==1?lf(ee):of(ee),we=xs(ee,ys(M==1?tf:sf,H)),te=ks(ee,vs(ff,H)),fe=[],J=l.legend=Me({},af,e.legend),F=l.cursor=Me({},wf,{drag:{y:o==2}},e.cursor),Te=J.show,We=F.show,Se=J.markers;J.idxs=fe,Se.width=X(Se.width),Se.dash=X(Se.dash),Se.stroke=X(Se.stroke),Se.fill=X(Se.fill);let le,at,qe,ye=[],_t=[],Et,nt=!1,Ct={};if(J.live){const t=v[1]?v[1].values:null;nt=t!=null,Et=nt?t(l,1,0):{_:0};for(let i in Et)Ct[i]=oi}if(Te)if(le=gt("table",hr,d),qe=gt("tbody",null,le),J.mount(l,le),nt){at=gt("thead",null,le,qe);let t=gt("tr",null,at);gt("th",null,t);for(var ll in Et)gt("th",Zi,t).textContent=ll}else et(le,dr),J.live&&et(le,mr);const nl={show:!0},Ll={show:!1};function jl(t,i){if(i==0&&(nt||!J.live||o==2))return Ml;let r=[],f=gt("tr",gr,qe,qe.childNodes[i]);et(f,t.class),t.show||et(f,Qt);let c=gt("th",null,f);if(Se.show){let y=ut(wr,c);if(i>0){let k=Se.width(l,i);k&&(y.style.border=k+"px "+Se.dash(l,i)+" "+Se.stroke(l,i)),y.style.background=Se.fill(l,i)}}let h=ut(Zi,c);t.label instanceof HTMLElement?h.appendChild(t.label):h.textContent=t.label,i>0&&(Se.show||(h.style.color=t.width>0?Se.stroke(l,i):Se.fill(l,i)),Ge("click",c,y=>{if(F._lock)return;Ut(y);let k=v.indexOf(t);if((y.ctrlKey||y.metaKey)!=J.isolate){let T=v.some((P,L)=>L>0&&L!=k&&P.show);v.forEach((P,L)=>{L>0&&vt(L,T?L==k?nl:Ll:nl,!0,be.setSeries)})}else vt(k,{show:!t.show},!0,be.setSeries)},!1),rl&&Ge(ts,c,y=>{F._lock||(Ut(y),vt(v.indexOf(t),_l,!0,be.setSeries))},!1));for(var S in Et){let y=gt("td",Sr,f);y.textContent="--",r.push(y)}return[f,r]}const Wt=new Map;function Ge(t,i,r,f=!0){const c=Wt.get(i)||{},h=F.bind[t](l,i,r,f);h&&(Xt(t,i,c[t]=h),Wt.set(i,c))}function il(t,i,r){const f=Wt.get(i)||{};for(let c in f)(t==null||c==t)&&(Qn(c,i,f[c]),delete f[c]);t==null&&Wt.delete(i)}let At=0,Gt=0,$=0,D=0,pe=0,Ee=0,sl=pe,It=Ee,yt=$,Yt=D,Je=0,it=0,je=0,pt=0;l.bbox={};let _n=!1,$l=!1,ol=!1,Bt=!1,ql=!1,st=!1;function yn(t,i,r){(r||t!=l.width||i!=l.height)&&_i(t,i),pl(!1),ol=!0,$l=!0,hl()}function _i(t,i){l.width=At=$=t,l.height=Gt=D=i,pe=Ee=0,Eo(),Ao();let r=l.bbox;Je=r.left=Jt(pe*oe,.5),it=r.top=Jt(Ee*oe,.5),je=r.width=Jt($*oe,.5),pt=r.height=Jt(D*oe,.5)}const bo=3;function Mo(){let t=!1,i=0;for(;!t;){i++;let r=No(i),f=Oo(i);t=i==bo||r&&f,t||(_i(l.width,l.height),$l=!0)}}function To({width:t,height:i}){yn(t,i)}l.setSize=To;function Eo(){let t=!1,i=!1,r=!1,f=!1;z.forEach((c,h)=>{if(c.show&&c._show){let{side:S,_size:y}=c,k=S%2,T=c.label!=null?c.labelSize:0,P=y+T;P>0&&(k?($-=P,S==3?(pe+=P,f=!0):r=!0):(D-=P,S==0?(Ee+=P,t=!0):i=!0))}}),Kt[0]=t,Kt[1]=r,Kt[2]=i,Kt[3]=f,$-=Rt[1]+Rt[3],pe+=Rt[3],D-=Rt[2]+Rt[0],Ee+=Rt[0]}function Ao(){let t=pe+$,i=Ee+D,r=pe,f=Ee;function c(h,S){switch(h){case 1:return t+=S,t-S;case 2:return i+=S,i-S;case 3:return r-=S,r+S;case 0:return f-=S,f+S}}z.forEach((h,S)=>{if(h.show&&h._show){let y=h.side;h._pos=c(y,h._size),h.label!=null&&(h._lpos=c(y,h.labelSize))}})}if(F.dataIdx==null){let t=F.hover,i=t.skip=new Set(t.skip??[]);i.add(void 0);let r=t.prox=X(t.prox),f=t.bias??(t.bias=0);F.dataIdx=(c,h,S,y)=>{if(h==0)return S;let k=S,T=r(c,h,S,y)??ce,P=T>=0&&T<ce,L=b.ori==0?$:D,B=F.left,se=n[0],ne=n[h];if(i.has(ne[S])){k=null;let Z=null,G=null,N;if(f==0||f==-1)for(N=S;Z==null&&N-- >0;)i.has(ne[N])||(Z=N);if(f==0||f==1)for(N=S;G==null&&N++<ne.length;)i.has(ne[N])||(G=N);if(Z!=null||G!=null)if(P){let de=Z==null?-1/0:V(se[Z],b,L,0),ve=G==null?1/0:V(se[G],b,L,0),Fe=B-de,ue=ve-B;Fe<=ue?Fe<=T&&(k=Z):ue<=T&&(k=G)}else k=G==null?Z:Z==null?G:S-Z<=G-S?Z:G}else P&&Pe(B-V(se[S],b,L,0))>T&&(k=null);return k}}const Ut=t=>{F.event=t};F.idxs=fe,F._lock=!1;let He=F.points;He.show=X(He.show),He.size=X(He.size),He.stroke=X(He.stroke),He.width=X(He.width),He.fill=X(He.fill);const xt=l.focus=Me({},e.focus||{alpha:.3},F.focus),rl=xt.prox>=0,fl=rl&&He.one;let ot=[],ul=[],cl=[];function yi(t,i){let r=He.show(l,i);if(r instanceof HTMLElement)return et(r,pr),et(r,t.class),Tt(r,-10,-10,$,D),E.insertBefore(r,ot[i]),r}function xi(t,i){if(o==1||i>0){let r=o==1&&_[t.scale].time,f=t.value;t.value=r?gs(f)?ks(ee,vs(f,H)):f||te:f||Ef,t.label=t.label||(r?_f:Sf)}if(fl||i>0){t.width=t.width==null?1:t.width,t.paths=t.paths||Gf||Dr,t.fillTo=X(t.fillTo||Cf),t.pxAlign=+ie(t.pxAlign,O),t.pxRound=Cs(t.pxAlign),t.stroke=X(t.stroke||null),t.fill=X(t.fill||null),t._stroke=t._fill=t._paths=t._focus=null;let r=Af(Ue(1,t.width),1),f=t.points=Me({},{size:r,width:Ue(1,r*.2),stroke:t.stroke,space:r*2,paths:If,_stroke:null,_fill:null},t.points);f.show=X(f.show),f.filter=X(f.filter),f.fill=X(f.fill),f.stroke=X(f.stroke),f.paths=X(f.paths),f.pxAlign=t.pxAlign}if(Te){let r=jl(t,i);ye.splice(i,0,r[0]),_t.splice(i,0,r[1]),J.values.push(null)}if(We){fe.splice(i,0,null);let r=null;fl?i==0&&(r=yi(t,i)):i>0&&(r=yi(t,i)),ot.splice(i,0,r),ul.splice(i,0,0),cl.splice(i,0,0)}Ve("addSeries",i)}function Po(t,i){i=i??v.length,t=o==1?ii(t,i,Ms,Ds):ii(t,i,{},Ps),v.splice(i,0,t),xi(v[i],i)}l.addSeries=Po;function Do(t){if(v.splice(t,1),Te){J.values.splice(t,1),_t.splice(t,1);let i=ye.splice(t,1)[0];il(null,i.firstChild),i.remove()}We&&(fe.splice(t,1),ot.splice(t,1)[0].remove(),ul.splice(t,1),cl.splice(t,1)),Ve("delSeries",t)}l.delSeries=Do;const Kt=[!1,!1,!1,!1];function Lo(t,i){if(t._show=t.show,t.show){let r=t.side%2,f=_[t.scale];f==null&&(t.scale=r?v[1].scale:A,f=_[t.scale]);let c=f.time;t.size=X(t.size),t.space=X(t.space),t.rotate=X(t.rotate),Ot(t.incrs)&&t.incrs.forEach(S=>{!Ht.has(S)&&Ht.set(S,Us(S))}),t.incrs=X(t.incrs||(f.distr==2?Qr:c?M==1?ef:nf:Zt)),t.splits=X(t.splits||(c&&f.distr==1?Ke:f.distr==3?ei:f.distr==4?vf:xf)),t.stroke=X(t.stroke),t.grid.stroke=X(t.grid.stroke),t.ticks.stroke=X(t.ticks.stroke),t.border.stroke=X(t.border.stroke);let h=t.values;t.values=Ot(h)&&!Ot(h[0])?X(h):c?Ot(h)?xs(ee,ys(h,H)):gs(h)?rf(ee,h):h||we:h||yf,t.filter=X(t.filter||(f.distr>=3&&f.log==10?Mf:f.distr==3&&f.log==2?Tf:Ys)),t.font=Fs(t.font),t.labelFont=Fs(t.labelFont),t._size=t.size(l,null,i,0),t._space=t._rotate=t._incrs=t._found=t._splits=t._values=null,t._size>0&&(Kt[i]=!0,t._el=ut(fr,w))}}function Cl(t,i,r,f){let[c,h,S,y]=r,k=i%2,T=0;return k==0&&(y||h)&&(T=i==0&&!c||i==2&&!S?Ae(bs.size/3):0),k==1&&(c||S)&&(T=i==1&&!h||i==3&&!y?Ae(Es.size/2):0),T}const vi=l.padding=(e.padding||[Cl,Cl,Cl,Cl]).map(t=>X(ie(t,Cl))),Rt=l._padding=vi.map((t,i)=>t(l,i,Kt,0));let Ne,Le=null,Ce=null;const Jl=o==1?v[0].idxs:null;let ht=null,Rl=!1;function ki(t,i){if(n=t??[],l.data=l._data=n,o==2){Ne=0;for(let r=1;r<v.length;r++)Ne+=n[r][0].length}else{n.length==0&&(l.data=l._data=n=[[]]),ht=n[0],Ne=ht.length;let r=n;if(q==2){r=n.slice();let f=r[0]=Array(Ne);for(let c=0;c<Ne;c++)f[c]=c}l._data=n=r}if(pl(!0),Ve("setData"),q==2&&(ol=!0),i!==!1){let r=b;r.auto(l,Rl)?xn():Vt(A,r.min,r.max),Bt=Bt||F.left>=0,st=!0,hl()}}l.setData=ki;function xn(){Rl=!0;let t,i;o==1&&(Ne>0?(Le=Jl[0]=0,Ce=Jl[1]=Ne-1,t=n[0][Le],i=n[0][Ce],q==2?(t=Le,i=Ce):t==i&&(q==3?[t,i]=pn(t,t,b.log,!1):q==4?[t,i]=fi(t,t,b.log,!1):b.time?i=t+Ae(86400/M):[t,i]=un(t,i,ui,!0))):(Le=Jl[0]=t=null,Ce=Jl[1]=i=null)),Vt(A,t,i)}let Zl,al,vn,kn,bn,Mn,Tn,En,An,$e;function bi(t,i,r,f,c,h){t??(t=Xi),r??(r=ai),f??(f="butt"),c??(c=Xi),h??(h="round"),t!=Zl&&(g.strokeStyle=Zl=t),c!=al&&(g.fillStyle=al=c),i!=vn&&(g.lineWidth=vn=i),h!=bn&&(g.lineJoin=bn=h),f!=Mn&&(g.lineCap=Mn=f),r!=kn&&g.setLineDash(kn=r)}function Mi(t,i,r,f){i!=al&&(g.fillStyle=al=i),t!=Tn&&(g.font=Tn=t),r!=En&&(g.textAlign=En=r),f!=An&&(g.textBaseline=An=f)}function Pn(t,i,r,f,c=0){if(f.length>0&&t.auto(l,Rl)&&(i==null||i.min==null)){let h=ie(Le,0),S=ie(Ce,f.length-1),y=r.min==null?br(f,h,S,c,t.distr==3):[r.min,r.max];t.min=St(t.min,r.min=y[0]),t.max=Ue(t.max,r.max=y[1])}}const Ti={min:null,max:null};function Co(){for(let f in _){let c=_[f];W[f]==null&&(c.min==null||W[A]!=null&&c.auto(l,Rl))&&(W[f]=Ti)}for(let f in _){let c=_[f];W[f]==null&&c.from!=null&&W[c.from]!=null&&(W[f]=Ti)}W[A]!=null&&pl(!0);let t={};for(let f in W){let c=W[f];if(c!=null){let h=t[f]=Tl(_[f],Rr);if(c.min!=null)Me(h,c);else if(f!=A||o==2)if(Ne==0&&h.from==null){let S=h.range(l,null,null,f);h.min=S[0],h.max=S[1]}else h.min=ce,h.max=-ce}}if(Ne>0){v.forEach((f,c)=>{if(o==1){let h=f.scale,S=W[h];if(S==null)return;let y=t[h];if(c==0){let k=y.range(l,y.min,y.max,h);y.min=k[0],y.max=k[1],Le=wt(y.min,n[0]),Ce=wt(y.max,n[0]),Ce-Le>1&&(n[0][Le]<y.min&&Le++,n[0][Ce]>y.max&&Ce--),f.min=ht[Le],f.max=ht[Ce]}else f.show&&f.auto&&Pn(y,S,f,n[c],f.sorted);f.idxs[0]=Le,f.idxs[1]=Ce}else if(c>0&&f.show&&f.auto){let[h,S]=f.facets,y=h.scale,k=S.scale,[T,P]=n[c],L=t[y],B=t[k];L!=null&&Pn(L,W[y],h,T,h.sorted),B!=null&&Pn(B,W[k],S,P,S.sorted),f.min=S.min,f.max=S.max}});for(let f in t){let c=t[f],h=W[f];if(c.from==null&&(h==null||h.min==null)){let S=c.range(l,c.min==ce?null:c.min,c.max==-ce?null:c.max,f);c.min=S[0],c.max=S[1]}}}for(let f in t){let c=t[f];if(c.from!=null){let h=t[c.from];if(h.min==null)c.min=c.max=null;else{let S=c.range(l,h.min,h.max,f);c.min=S[0],c.max=S[1]}}}let i={},r=!1;for(let f in t){let c=t[f],h=_[f];if(h.min!=c.min||h.max!=c.max){h.min=c.min,h.max=c.max;let S=h.distr;h._min=S==3?Dt(h.min):S==4?Un(h.min,h.asinh):S==100?h.fwd(h.min):h.min,h._max=S==3?Dt(h.max):S==4?Un(h.max,h.asinh):S==100?h.fwd(h.max):h.max,i[f]=r=!0}}if(r){v.forEach((f,c)=>{o==2?c>0&&i.y&&(f._paths=null):i[f.scale]&&(f._paths=null)});for(let f in i)ol=!0,Ve("setScale",f);We&&F.left>=0&&(Bt=st=!0)}for(let f in W)W[f]=null}function Ro(t){let i=Xn(Le-1,0,Ne-1),r=Xn(Ce+1,0,Ne-1);for(;t[i]==null&&i>0;)i--;for(;t[r]==null&&r<Ne-1;)r++;return[i,r]}function zo(){if(Ne>0){let t=v.some(i=>i._focus)&&$e!=xt.alpha;t&&(g.globalAlpha=$e=xt.alpha),v.forEach((i,r)=>{if(r>0&&i.show&&(Ei(r,!1),Ei(r,!0),i._paths==null)){let f=$e;$e!=i.alpha&&(g.globalAlpha=$e=i.alpha);let c=o==2?[0,n[r][0].length-1]:Ro(n[r]);i._paths=i.paths(l,r,c[0],c[1]),$e!=f&&(g.globalAlpha=$e=f)}}),v.forEach((i,r)=>{if(r>0&&i.show){let f=$e;$e!=i.alpha&&(g.globalAlpha=$e=i.alpha),i._paths!=null&&Ai(r,!1);{let c=i._paths!=null?i._paths.gaps:null,h=i.points.show(l,r,Le,Ce,c),S=i.points.filter(l,r,h,c);(h||S)&&(i.points._paths=i.points.paths(l,r,Le,Ce,S),Ai(r,!0))}$e!=f&&(g.globalAlpha=$e=f),Ve("drawSeries",r)}}),t&&(g.globalAlpha=$e=1)}}function Ei(t,i){let r=i?v[t].points:v[t];r._stroke=r.stroke(l,t),r._fill=r.fill(l,t)}function Ai(t,i){let r=i?v[t].points:v[t],{stroke:f,fill:c,clip:h,flags:S,_stroke:y=r._stroke,_fill:k=r._fill,_width:T=r.width}=r._paths;T=ae(T*oe,3);let P=null,L=T%2/2;i&&k==null&&(k=T>0?"#fff":y);let B=r.pxAlign==1&&L>0;if(B&&g.translate(L,L),!i){let se=Je-T/2,ne=it-T/2,Z=je+T,G=pt+T;P=new Path2D,P.rect(se,ne,Z,G)}i?Dn(y,T,r.dash,r.cap,k,f,c,S,h):Vo(t,y,T,r.dash,r.cap,k,f,c,S,P,h),B&&g.translate(-L,-L)}function Vo(t,i,r,f,c,h,S,y,k,T,P){let L=!1;k!=0&&I.forEach((B,se)=>{if(B.series[0]==t){let ne=v[B.series[1]],Z=n[B.series[1]],G=(ne._paths||Ul).band;Ot(G)&&(G=B.dir==1?G[0]:G[1]);let N,de=null;ne.show&&G&&Tr(Z,Le,Ce)?(de=B.fill(l,se)||h,N=ne._paths.clip):G=null,Dn(i,r,f,c,de,S,y,k,T,P,N,G),L=!0}}),L||Dn(i,r,f,c,h,S,y,k,T,P)}const Pi=El|li;function Dn(t,i,r,f,c,h,S,y,k,T,P,L){bi(t,i,r,f,c),(k||T||L)&&(g.save(),k&&g.clip(k),T&&g.clip(T)),L?(y&Pi)==Pi?(g.clip(L),P&&g.clip(P),Xl(c,S),Ql(t,h,i)):y&li?(Xl(c,S),g.clip(L),Ql(t,h,i)):y&El&&(g.save(),g.clip(L),P&&g.clip(P),Xl(c,S),g.restore(),Ql(t,h,i)):(Xl(c,S),Ql(t,h,i)),(k||T||L)&&g.restore()}function Ql(t,i,r){r>0&&(i instanceof Map?i.forEach((f,c)=>{g.strokeStyle=Zl=c,g.stroke(f)}):i!=null&&t&&g.stroke(i))}function Xl(t,i){i instanceof Map?i.forEach((r,f)=>{g.fillStyle=al=f,g.fill(r)}):i!=null&&t&&g.fill(i)}function Fo(t,i,r,f){let c=z[t],h;if(f<=0)h=[0,0];else{let S=c._space=c.space(l,t,i,r,f),y=c._incrs=c.incrs(l,t,i,r,f,S);h=$f(i,r,y,f,S)}return c._found=h}function Ln(t,i,r,f,c,h,S,y,k,T){let P=S%2/2;O==1&&g.translate(P,P),bi(y,S,k,T,y),g.beginPath();let L,B,se,ne,Z=c+(f==0||f==3?-h:h);r==0?(B=c,ne=Z):(L=c,se=Z);for(let G=0;G<t.length;G++)i[G]!=null&&(r==0?L=se=t[G]:B=ne=t[G],g.moveTo(L,B),g.lineTo(se,ne));g.stroke(),O==1&&g.translate(-P,-P)}function No(t){let i=!0;return z.forEach((r,f)=>{if(!r.show)return;let c=_[r.scale];if(c.min==null){r._show&&(i=!1,r._show=!1,pl(!1));return}else r._show||(i=!1,r._show=!0,pl(!1));let h=r.side,S=h%2,{min:y,max:k}=c,[T,P]=Fo(f,y,k,S==0?$:D);if(P==0)return;let L=c.distr==2,B=r._splits=r.splits(l,f,y,k,T,P,L),se=c.distr==2?B.map(N=>ht[N]):B,ne=c.distr==2?ht[B[1]]-ht[B[0]]:T,Z=r._values=r.values(l,r.filter(l,se,f,P,ne),f,P,ne);r._rotate=h==2?r.rotate(l,Z,f,P):0;let G=r._size;r._size=ct(r.size(l,Z,f,t)),G!=null&&r._size!=G&&(i=!1)}),i}function Oo(t){let i=!0;return vi.forEach((r,f)=>{let c=r(l,f,Kt,t);c!=Rt[f]&&(i=!1),Rt[f]=c}),i}function Ho(){for(let t=0;t<z.length;t++){let i=z[t];if(!i.show||!i._show)continue;let r=i.side,f=r%2,c,h,S=i.stroke(l,t),y=r==0||r==3?-1:1,[k,T]=i._found;if(i.label!=null){let Ye=i.labelGap*y,Xe=Ae((i._lpos+Ye)*oe);Mi(i.labelFont[0],S,"center",r==2?Hl:Qi),g.save(),f==1?(c=h=0,g.translate(Xe,Ae(it+pt/2)),g.rotate((r==3?-rn:rn)/2)):(c=Ae(Je+je/2),h=Xe);let qt=Gs(i.label)?i.label(l,t,k,T):i.label;g.fillText(qt,c,h),g.restore()}if(T==0)continue;let P=_[i.scale],L=f==0?je:pt,B=f==0?Je:it,se=i._splits,ne=P.distr==2?se.map(Ye=>ht[Ye]):se,Z=P.distr==2?ht[se[1]]-ht[se[0]]:k,G=i.ticks,N=i.border,de=G.show?G.size:0,ve=Ae(de*oe),Fe=Ae((i.alignTo==2?i._size-de-i.gap:i.gap)*oe),ue=i._rotate*-rn/180,ke=R(i._pos*oe),Ze=(ve+Fe)*y,Ie=ke+Ze;h=f==0?Ie:0,c=f==1?Ie:0;let rt=i.font[0],mt=i.align==1?xl:i.align==2?In:ue>0?xl:ue<0?In:f==0?"center":r==3?In:xl,bt=ue||f==1?"middle":r==2?Hl:Qi;Mi(rt,S,mt,bt);let Qe=i.font[1]*i.lineGap,ft=se.map(Ye=>R(p(Ye,P,L,B))),dt=i._values;for(let Ye=0;Ye<dt.length;Ye++){let Xe=dt[Ye];if(Xe!=null){f==0?c=ft[Ye]:h=ft[Ye],Xe=""+Xe;let qt=Xe.indexOf(`
|
|
3
|
+
`)==-1?[Xe]:Xe.split(/\n/gm);for(let Be=0;Be<qt.length;Be++){let $i=qt[Be];ue?(g.save(),g.translate(c,h+Be*Qe),g.rotate(ue),g.fillText($i,0,0),g.restore()):g.fillText($i,c,h+Be*Qe)}}}G.show&&Ln(ft,G.filter(l,ne,t,T,Z),f,r,ke,ve,ae(G.width*oe,3),G.stroke(l,t),G.dash,G.cap);let Mt=i.grid;Mt.show&&Ln(ft,Mt.filter(l,ne,t,T,Z),f,f==0?2:1,f==0?it:Je,f==0?pt:je,ae(Mt.width*oe,3),Mt.stroke(l,t),Mt.dash,Mt.cap),N.show&&Ln([ke],[1],f==0?1:0,f==0?1:2,f==1?it:Je,f==1?pt:je,ae(N.width*oe,3),N.stroke(l,t),N.dash,N.cap)}Ve("drawAxes")}function pl(t){v.forEach((i,r)=>{r>0&&(i._paths=null,t&&(o==1?(i.min=null,i.max=null):i.facets.forEach(f=>{f.min=null,f.max=null})))})}let en=!1,Cn=!1,zl=[];function Wo(){Cn=!1;for(let t=0;t<zl.length;t++)Ve(...zl[t]);zl.length=0}function hl(){en||(Wr(Di),en=!0)}function Go(t,i=!1){en=!0,Cn=i,t(l),Di(),i&&zl.length>0&&queueMicrotask(Wo)}l.batch=Go;function Di(){if(_n&&(Co(),_n=!1),ol&&(Mo(),ol=!1),$l){if(ge(C,xl,pe),ge(C,Hl,Ee),ge(C,Gl,$),ge(C,Il,D),ge(E,xl,pe),ge(E,Hl,Ee),ge(E,Gl,$),ge(E,Il,D),ge(w,Gl,At),ge(w,Il,Gt),x.width=Ae(At*oe),x.height=Ae(Gt*oe),z.forEach(({_el:t,_show:i,_size:r,_pos:f,side:c})=>{if(t!=null)if(i){let h=c===3||c===0?r:0,S=c%2==1;ge(t,S?"left":"top",f-h),ge(t,S?"width":"height",r),ge(t,S?"top":"left",S?Ee:pe),ge(t,S?"height":"width",S?D:$),Zn(t,Qt)}else et(t,Qt)}),Zl=al=vn=bn=Mn=Tn=En=An=kn=null,$e=1,Nl(!0),pe!=sl||Ee!=It||$!=yt||D!=Yt){pl(!1);let t=$/yt,i=D/Yt;if(We&&!Bt&&F.left>=0){F.left*=t,F.top*=i,ml&&Tt(ml,Ae(F.left),0,$,D),dl&&Tt(dl,0,Ae(F.top),$,D);for(let r=0;r<ot.length;r++){let f=ot[r];f!=null&&(ul[r]*=t,cl[r]*=i,Tt(f,ct(ul[r]),ct(cl[r]),$,D))}}if(me.show&&!ql&&me.left>=0&&me.width>0){me.left*=t,me.width*=t,me.top*=i,me.height*=i;for(let r in On)ge(Sl,r,me[r])}sl=pe,It=Ee,yt=$,Yt=D}Ve("setSize"),$l=!1}At>0&&Gt>0&&(g.clearRect(0,0,x.width,x.height),Ve("drawClear"),j.forEach(t=>t()),Ve("draw")),me.show&&ql&&(tn(me),ql=!1),We&&Bt&&($t(null,!0,!1),Bt=!1),J.show&&J.live&&st&&(Fn(),st=!1),m||(m=!0,l.status=1,Ve("ready")),Rl=!1,en=!1}l.redraw=(t,i)=>{ol=i||!1,t!==!1?Vt(A,b.min,b.max):hl()};function Rn(t,i){let r=_[t];if(r.from==null){if(Ne==0){let f=r.range(l,i.min,i.max,t);i.min=f[0],i.max=f[1]}if(i.min>i.max){let f=i.min;i.min=i.max,i.max=f}if(Ne>1&&i.min!=null&&i.max!=null&&i.max-i.min<1e-16)return;t==A&&r.distr==2&&Ne>0&&(i.min=wt(i.min,n[0]),i.max=wt(i.max,n[0]),i.min==i.max&&i.max++),W[t]=i,_n=!0,hl()}}l.setScale=Rn;let zn,Vn,ml,dl,Li,Ci,gl,wl,Ri,zi,he,_e,zt=!1;const Oe=F.drag;let Re=Oe.x,ze=Oe.y;We&&(F.x&&(zn=ut(cr,E)),F.y&&(Vn=ut(ar,E)),b.ori==0?(ml=zn,dl=Vn):(ml=Vn,dl=zn),he=F.left,_e=F.top);const me=l.select=Me({show:!0,over:!0,left:0,width:0,top:0,height:0},e.select),Sl=me.show?ut(ur,me.over?E:C):null;function tn(t,i){if(me.show){for(let r in t)me[r]=t[r],r in On&&ge(Sl,r,t[r]);i!==!1&&Ve("setSelect")}}l.setSelect=tn;function Io(t){if(v[t].show)Te&&Zn(ye[t],Qt);else if(Te&&et(ye[t],Qt),We){let r=fl?ot[0]:ot[t];r!=null&&Tt(r,-10,-10,$,D)}}function Vt(t,i,r){Rn(t,{min:i,max:r})}function vt(t,i,r,f){i.focus!=null&&jo(t),i.show!=null&&v.forEach((c,h)=>{h>0&&(t==h||t==null)&&(c.show=i.show,Io(h),o==2?(Vt(c.facets[0].scale,null,null),Vt(c.facets[1].scale,null,null)):Vt(c.scale,null,null),hl())}),r!==!1&&Ve("setSeries",t,i),f&&Ol("setSeries",l,t,i)}l.setSeries=vt;function Yo(t,i){Me(I[t],i)}function Bo(t,i){t.fill=X(t.fill||null),t.dir=ie(t.dir,-1),i=i??I.length,I.splice(i,0,t)}function Uo(t){t==null?I.length=0:I.splice(t,1)}l.addBand=Bo,l.setBand=Yo,l.delBand=Uo;function Ko(t,i){v[t].alpha=i,We&&ot[t]!=null&&(ot[t].style.opacity=i),Te&&ye[t]&&(ye[t].style.opacity=i)}let Pt,Ft,jt;const _l={focus:!0};function jo(t){if(t!=jt){let i=t==null,r=xt.alpha!=1;v.forEach((f,c)=>{if(o==1||c>0){let h=i||c==0||c==t;f._focus=i?null:h,r&&Ko(c,h?1:xt.alpha)}}),jt=t,r&&hl()}}Te&&rl&&Ge(ls,le,t=>{F._lock||(Ut(t),jt!=null&&vt(null,_l,!0,be.setSeries))});function kt(t,i,r){let f=_[i];r&&(t=t/oe-(f.ori==1?Ee:pe));let c=$;f.ori==1&&(c=D,t=c-t),f.dir==-1&&(t=c-t);let h=f._min,S=f._max,y=t/c,k=h+(S-h)*y,T=f.distr;return T==3?bl(10,k):T==4?Ar(k,f.asinh):T==100?f.bwd(k):k}function $o(t,i){let r=kt(t,A,i);return wt(r,n[0],Le,Ce)}l.valToIdx=t=>wt(t,n[0]),l.posToIdx=$o,l.posToVal=kt,l.valToPos=(t,i,r)=>_[i].ori==0?a(t,_[i],r?je:$,r?Je:0):u(t,_[i],r?pt:D,r?it:0),l.setCursor=(t,i,r)=>{he=t.left,_e=t.top,$t(null,i,r)};function Vi(t,i){ge(Sl,xl,me.left=t),ge(Sl,Gl,me.width=i)}function Fi(t,i){ge(Sl,Hl,me.top=t),ge(Sl,Il,me.height=i)}let Vl=b.ori==0?Vi:Fi,Fl=b.ori==1?Vi:Fi;function qo(){if(Te&&J.live)for(let t=o==2?1:0;t<v.length;t++){if(t==0&&nt)continue;let i=J.values[t],r=0;for(let f in i)_t[t][r++].firstChild.nodeValue=i[f]}}function Fn(t,i){if(t!=null&&(t.idxs?t.idxs.forEach((r,f)=>{fe[f]=r}):Cr(t.idx)||fe.fill(t.idx),J.idx=fe[0]),Te&&J.live){for(let r=0;r<v.length;r++)(r>0||o==1&&!nt)&&Jo(r,fe[r]);qo()}st=!1,i!==!1&&Ve("setLegend")}l.setLegend=Fn;function Jo(t,i){let r=v[t],f=t==0&&q==2?ht:n[t],c;nt?c=r.values(l,t,i)??Ct:(c=r.value(l,i==null?null:f[i],t,i),c=c==null?Ct:{_:c}),J.values[t]=c}function $t(t,i,r){Ri=he,zi=_e,[he,_e]=F.move(l,he,_e),F.left=he,F.top=_e,We&&(ml&&Tt(ml,Ae(he),0,$,D),dl&&Tt(dl,0,Ae(_e),$,D));let f,c=Le>Ce;Pt=ce,Ft=null;let h=b.ori==0?$:D,S=b.ori==1?$:D;if(he<0||Ne==0||c){f=F.idx=null;for(let y=0;y<v.length;y++){let k=ot[y];k!=null&&Tt(k,-10,-10,$,D)}rl&&vt(null,_l,!0,t==null&&be.setSeries),J.live&&(fe.fill(f),st=!0)}else{let y,k,T;o==1&&(y=b.ori==0?he:_e,k=kt(y,A),f=F.idx=wt(k,n[0],Le,Ce),T=V(n[0][f],b,h,0));let P=-10,L=-10,B=0,se=0,ne=!0,Z="",G="";for(let N=o==2?1:0;N<v.length;N++){let de=v[N],ve=fe[N],Fe=ve==null?null:o==1?n[N][ve]:n[N][1][ve],ue=F.dataIdx(l,N,f,k),ke=ue==null?null:o==1?n[N][ue]:n[N][1][ue];if(st=st||ke!=Fe||ue!=ve,fe[N]=ue,N>0&&de.show){let Ze=ue==null?-10:ue==f?T:V(o==1?n[0][ue]:n[N][0][ue],b,h,0),Ie=ke==null?-10:Y(ke,o==1?_[de.scale]:_[de.facets[1].scale],S,0);if(rl&&ke!=null){let rt=b.ori==1?he:_e,mt=Pe(xt.dist(l,N,ue,Ie,rt));if(mt<Pt){let bt=xt.bias;if(bt!=0){let Qe=kt(rt,de.scale),ft=ke>=0?1:-1,dt=Qe>=0?1:-1;dt==ft&&(dt==1?bt==1?ke>=Qe:ke<=Qe:bt==1?ke<=Qe:ke>=Qe)&&(Pt=mt,Ft=N)}else Pt=mt,Ft=N}}if(st||fl){let rt,mt;b.ori==0?(rt=Ze,mt=Ie):(rt=Ie,mt=Ze);let bt,Qe,ft,dt,Mt,Ye,Xe=!0,qt=He.bbox;if(qt!=null){Xe=!1;let Be=qt(l,N);ft=Be.left,dt=Be.top,bt=Be.width,Qe=Be.height}else ft=rt,dt=mt,bt=Qe=He.size(l,N);if(Ye=He.fill(l,N),Mt=He.stroke(l,N),fl)N==Ft&&Pt<=xt.prox&&(P=ft,L=dt,B=bt,se=Qe,ne=Xe,Z=Ye,G=Mt);else{let Be=ot[N];Be!=null&&(ul[N]=ft,cl[N]=dt,us(Be,bt,Qe,Xe),rs(Be,Ye,Mt),Tt(Be,ct(ft),ct(dt),$,D))}}}}if(fl){let N=xt.prox,de=jt==null?Pt<=N:Pt>N||Ft!=jt;if(st||de){let ve=ot[0];ve!=null&&(ul[0]=P,cl[0]=L,us(ve,B,se,ne),rs(ve,Z,G),Tt(ve,ct(P),ct(L),$,D))}}}if(me.show&&zt)if(t!=null){let[y,k]=be.scales,[T,P]=be.match,[L,B]=t.cursor.sync.scales,se=t.cursor.drag;if(Re=se._x,ze=se._y,Re||ze){let{left:ne,top:Z,width:G,height:N}=t.select,de=t.scales[L].ori,ve=t.posToVal,Fe,ue,ke,Ze,Ie,rt=y!=null&&T(y,L),mt=k!=null&&P(k,B);rt&&Re?(de==0?(Fe=ne,ue=G):(Fe=Z,ue=N),ke=_[y],Ze=V(ve(Fe,L),ke,h,0),Ie=V(ve(Fe+ue,L),ke,h,0),Vl(St(Ze,Ie),Pe(Ie-Ze))):Vl(0,h),mt&&ze?(de==1?(Fe=ne,ue=G):(Fe=Z,ue=N),ke=_[k],Ze=Y(ve(Fe,B),ke,S,0),Ie=Y(ve(Fe+ue,B),ke,S,0),Fl(St(Ze,Ie),Pe(Ie-Ze))):Fl(0,S)}else Hn()}else{let y=Pe(Ri-Li),k=Pe(zi-Ci);if(b.ori==1){let B=y;y=k,k=B}Re=Oe.x&&y>=Oe.dist,ze=Oe.y&&k>=Oe.dist;let T=Oe.uni;T!=null?Re&&ze&&(Re=y>=T,ze=k>=T,!Re&&!ze&&(k>y?ze=!0:Re=!0)):Oe.x&&Oe.y&&(Re||ze)&&(Re=ze=!0);let P,L;Re&&(b.ori==0?(P=gl,L=he):(P=wl,L=_e),Vl(St(P,L),Pe(L-P)),ze||Fl(0,S)),ze&&(b.ori==1?(P=gl,L=he):(P=wl,L=_e),Fl(St(P,L),Pe(L-P)),Re||Vl(0,h)),!Re&&!ze&&(Vl(0,0),Fl(0,0))}if(Oe._x=Re,Oe._y=ze,t==null){if(r){if(ji!=null){let[y,k]=be.scales;be.values[0]=y!=null?kt(b.ori==0?he:_e,y):null,be.values[1]=k!=null?kt(b.ori==1?he:_e,k):null}Ol(Yn,l,he,_e,$,D,f)}if(rl){let y=r&&be.setSeries,k=xt.prox;jt==null?Pt<=k&&vt(Ft,_l,!0,y):Pt>k?vt(null,_l,!0,y):Ft!=jt&&vt(Ft,_l,!0,y)}}st&&(J.idx=f,Fn()),i!==!1&&Ve("setCursor")}let Nt=null;Object.defineProperty(l,"rect",{get(){return Nt==null&&Nl(!1),Nt}});function Nl(t=!1){t?Nt=null:(Nt=E.getBoundingClientRect(),Ve("syncRect",Nt))}function Ni(t,i,r,f,c,h,S){F._lock||zt&&t!=null&&t.movementX==0&&t.movementY==0||(Nn(t,i,r,f,c,h,S,!1,t!=null),t!=null?$t(null,!0,!0):$t(i,!0,!1))}function Nn(t,i,r,f,c,h,S,y,k){if(Nt==null&&Nl(!1),Ut(t),t!=null)r=t.clientX-Nt.left,f=t.clientY-Nt.top;else{if(r<0||f<0){he=-10,_e=-10;return}let[T,P]=be.scales,L=i.cursor.sync,[B,se]=L.values,[ne,Z]=L.scales,[G,N]=be.match,de=i.axes[0].side%2==1,ve=b.ori==0?$:D,Fe=b.ori==1?$:D,ue=de?h:c,ke=de?c:h,Ze=de?f:r,Ie=de?r:f;if(ne!=null?r=G(T,ne)?p(B,_[T],ve,0):-10:r=ve*(Ze/ue),Z!=null?f=N(P,Z)?p(se,_[P],Fe,0):-10:f=Fe*(Ie/ke),b.ori==1){let rt=r;r=f,f=rt}}k&&(i==null||i.cursor.event.type==Yn)&&((r<=1||r>=$-1)&&(r=Jt(r,$)),(f<=1||f>=D-1)&&(f=Jt(f,D))),y?(Li=r,Ci=f,[gl,wl]=F.move(l,r,f)):(he=r,_e=f)}const On={width:0,height:0,left:0,top:0};function Hn(){tn(On,!1)}let Oi,Hi,Wi,Gi;function Ii(t,i,r,f,c,h,S){zt=!0,Re=ze=Oe._x=Oe._y=!1,Nn(t,i,r,f,c,h,S,!0,!1),t!=null&&(Ge(Bn,qn,Yi,!1),Ol(es,l,gl,wl,$,D,null));let{left:y,top:k,width:T,height:P}=me;Oi=y,Hi=k,Wi=T,Gi=P}function Yi(t,i,r,f,c,h,S){zt=Oe._x=Oe._y=!1,Nn(t,i,r,f,c,h,S,!1,!0);let{left:y,top:k,width:T,height:P}=me,L=T>0||P>0,B=Oi!=y||Hi!=k||Wi!=T||Gi!=P;if(L&&B&&tn(me),Oe.setScale&&L&&B){let se=y,ne=T,Z=k,G=P;if(b.ori==1&&(se=k,ne=P,Z=y,G=T),Re&&Vt(A,kt(se,A),kt(se+ne,A)),ze)for(let N in _){let de=_[N];N!=A&&de.from==null&&de.min!=ce&&Vt(N,kt(Z+G,N),kt(Z,N))}Hn()}else F.lock&&(F._lock=!F._lock,$t(i,!0,t!=null));t!=null&&(il(Bn,qn),Ol(Bn,l,he,_e,$,D,null))}function Zo(t,i,r,f,c,h,S){if(F._lock)return;Ut(t);let y=zt;if(zt){let k=!0,T=!0,P=10,L,B;b.ori==0?(L=Re,B=ze):(L=ze,B=Re),L&&B&&(k=he<=P||he>=$-P,T=_e<=P||_e>=D-P),L&&k&&(he=he<gl?0:$),B&&T&&(_e=_e<wl?0:D),$t(null,!0,!0),zt=!1}he=-10,_e=-10,fe.fill(null),$t(null,!0,!0),y&&(zt=y)}function Bi(t,i,r,f,c,h,S){F._lock||(Ut(t),xn(),Hn(),t!=null&&Ol(ns,l,he,_e,$,D,null))}function Ui(){z.forEach(qf),yn(l.width,l.height,!0)}Xt(fn,kl,Ui);const yl={};yl.mousedown=Ii,yl.mousemove=Ni,yl.mouseup=Yi,yl.dblclick=Bi,yl.setSeries=(t,i,r,f)=>{let c=be.match[2];r=c(l,i,r),r!=-1&&vt(r,f,!0,!1)},We&&(Ge(es,E,Ii),Ge(Yn,E,Ni),Ge(ts,E,t=>{Ut(t),Nl(!1)}),Ge(ls,E,Zo),Ge(ns,E,Bi),ni.add(l),l.syncRect=Nl);const ln=l.hooks=e.hooks||{};function Ve(t,i,r){Cn?zl.push([t,i,r]):t in ln&&ln[t].forEach(f=>{f.call(null,l,i,r)})}(e.plugins||[]).forEach(t=>{for(let i in t.hooks)ln[i]=(ln[i]||[]).concat(t.hooks[i])});const Ki=(t,i,r)=>r,be=Me({key:null,setSeries:!1,filters:{pub:ms,sub:ms},scales:[A,v[1]?v[1].scale:null],match:[ds,ds,Ki],values:[null,null]},F.sync);be.match.length==2&&be.match.push(Ki),F.sync=be;const ji=be.key,Wn=ao(ji);function Ol(t,i,r,f,c,h,S){be.filters.pub(t,i,r,f,c,h,S)&&Wn.pub(t,i,r,f,c,h,S)}Wn.sub(l);function Qo(t,i,r,f,c,h,S){be.filters.sub(t,i,r,f,c,h,S)&&yl[t](null,i,r,f,c,h,S)}l.pub=Qo;function Xo(){Wn.unsub(l),ni.delete(l),Wt.clear(),Qn(fn,kl,Ui),d.remove(),le==null||le.remove(),Ve("destroy")}l.destroy=Xo;function Gn(){Ve("init",e,n),ki(n||e.data,!1),W[A]?Rn(A,W[A]):xn(),ql=me.show&&(me.width>0||me.height>0),Bt=st=!0,yn(e.width,e.height)}return v.forEach(xi),z.forEach(Lo),s?s instanceof HTMLElement?(s.appendChild(d),Gn()):s(l,Gn):Gn(),l}xe.assign=Me;xe.fmtNum=ci;xe.rangeNum=un;xe.rangeLog=pn;xe.rangeAsinh=fi;xe.orient=tl;xe.pxRatio=oe;xe.join=Hr;xe.fmtDate=pi,xe.tzDate=Jr;xe.sync=ao;{xe.addGap=Rf,xe.clipGaps=dn;let e=xe.paths={points:So};e.linear=yo,e.stepped=Ff,e.bars=Nf,e.spline=Hf}function Zf({series:e,x:n,smoothing:s,percentiles:l,dots:o}){const a=qi.useRef(null);return qi.useEffect(()=>{const u=a.current;if(!u||!e.points.length)return;let p=null;const m=[...e.points].sort((R,M)=>R[0]-M[0]),d=m.map(R=>{const M=R[1];return M===null||!Number.isFinite(M)?(p=null,null):(p=p===null?M:s*p+(1-s)*M,p)}),x=[m.map(R=>R[0]),m.map(R=>R[3]),m.map(R=>R[2]),d];if(l){const R=new Map(l.map(M=>[M.x,M]));x.push(m.map(M=>{var v;return((v=R.get(M[0]))==null?void 0:v.p75)??null}),m.map(M=>{var v;return((v=R.get(M[0]))==null?void 0:v.p25)??null}))}let g;const w=()=>{const R=getComputedStyle(u),M=z=>R.getPropertyValue(z).trim(),v={stroke:M("--text-soft"),grid:{stroke:M("--border")},ticks:{stroke:M("--border")},font:`10px ${M("--mono")}`,size:42};g=new xe({width:Math.max(180,u.clientWidth),height:210,scales:{x:{time:n==="time"}},axes:[{...v},{...v,size:55}],legend:{show:!1},cursor:{drag:{x:!0,y:!1}},series:[{},{label:"Max",stroke:"transparent",width:0,points:{show:!1}},{label:"Min",stroke:"transparent",width:0,points:{show:!1}},{label:e.key,stroke:M("--accent"),width:1.5,spanGaps:!1,points:{show:!1}},...l?[{label:"p75",stroke:"transparent",width:0,points:{show:!1}},{label:"p25",stroke:"transparent",width:0,points:{show:!1}}]:[]],bands:l?[{series:[1,2],fill:M("--accent-soft")},{series:[4,5],fill:M("--accent-line")}]:e.downsampled?[{series:[1,2],fill:M("--accent-soft")}]:[],hooks:{draw:[z=>{const{ctx:_,bbox:I}=z;_.save(),_.beginPath(),_.rect(I.left,I.top,I.width,I.height),_.clip(),_.strokeStyle=M("--amber"),_.fillStyle=M("--text-muted"),_.lineWidth=xe.pxRatio,_.setLineDash([3*xe.pxRatio,4*xe.pxRatio]),_.font=`${9*xe.pxRatio}px ${M("--mono")}`;for(const A of e.attempts){if(A===e.attempts[0])continue;const U=z.valToPos(A.first_x,"x",!0);_.beginPath(),_.moveTo(U,I.top),_.lineTo(U,I.top+I.height),_.stroke(),_.fillText(`a.${String(A.attempt).padStart(2,"0")}`,U+4*xe.pxRatio,I.top+12*xe.pxRatio)}_.setLineDash([]),_.fillStyle=M("--blue");for(const[A,U]of o??[])_.beginPath(),_.arc(z.valToPos(A,"x",!0),z.valToPos(U,"y",!0),3*xe.pxRatio,0,Math.PI*2),_.fill();_.restore()}]}},x,u)};w();const C=()=>g.setSize({width:Math.max(180,u.clientWidth),height:210}),E=typeof ResizeObserver>"u"?null:new ResizeObserver(C);E==null||E.observe(u),globalThis.addEventListener("resize",C);const O=new MutationObserver(()=>{g.destroy(),w()});return O.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>{E==null||E.disconnect(),O.disconnect(),globalThis.removeEventListener("resize",C),g.destroy()}},[e,s,n,l,o]),Ji.jsx("div",{className:"line-chart",ref:a,role:"img","aria-label":`${e.key} chart`,children:!e.points.length&&Ji.jsx("span",{className:"chart-empty",children:"No points for this axis"})})}export{Zf as LineChart};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.uplot,.uplot *,.uplot *:before,.uplot *:after{box-sizing:border-box}.uplot{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5;width:min-content}.u-title{text-align:center;font-size:18px;font-weight:700}.u-wrap{position:relative;-webkit-user-select:none;user-select:none}.u-over,.u-under{position:absolute}.u-under{overflow:hidden}.uplot canvas{display:block;position:relative;width:100%;height:100%}.u-axis{position:absolute}.u-legend{font-size:14px;margin:auto;text-align:center}.u-inline{display:block}.u-inline *{display:inline-block}.u-inline tr{margin-right:16px}.u-legend th{font-weight:600}.u-legend th>*{vertical-align:middle;display:inline-block}.u-legend .u-marker{width:1em;height:1em;margin-right:4px;background-clip:padding-box!important}.u-inline.u-live th:after{content:":";vertical-align:middle}.u-inline:not(.u-live) .u-value{display:none}.u-series>*{padding:4px}.u-series th{cursor:pointer}.u-legend .u-off>*{opacity:.3}.u-select{background:#00000012;position:absolute;pointer-events:none}.u-cursor-x,.u-cursor-y{position:absolute;left:0;top:0;pointer-events:none;will-change:transform}.u-hz .u-cursor-x,.u-vt .u-cursor-y{height:100%;border-right:1px dashed #607D8B}.u-hz .u-cursor-y,.u-vt .u-cursor-x{width:100%;border-bottom:1px dashed #607D8B}.u-cursor-pt{position:absolute;top:0;left:0;border-radius:50%;border:0 solid;pointer-events:none;will-change:transform;background-clip:padding-box!important}.u-axis.u-off,.u-select.u-off,.u-cursor-x.u-off,.u-cursor-y.u-off,.u-cursor-pt.u-off{display:none}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{color-scheme:dark;--text-3xs: 10.5px;--text-2xs: 11px;--text-xs: 12px;--text-sm: 12.5px;--text-md: 15px;--text-lg: 17px;--text-xl: 22px;--text-2xl: 27px;--radius-sm: 0;--radius-md: 0;--radius-lg: 0;--row: 36px;--nav-row: 34px;--topbar: 48px;--control: 26px;--rail-width: 238px;--rail-width-collapsed: 60px;--mono: "JetBrains Mono", ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace;font-family:var(--mono);font-synthesis:none;text-rendering:optimizeLegibility;--bg: #06070b;--surface: #0b0c12;--surface-muted: #0d0e16;--surface-sunk: #08090e;--border: #c0caf517;--border-strong: #c0caf533;--hairline: #c0caf50e;--text: #e4e8f7;--text-muted: #9ba3c4;--text-soft: #686f93;--text-faint: #686f93;--sidebar: #06070b;--sidebar-soft: #0d0e16;--sidebar-text: #e4e8f7;--accent: #fbbf24;--accent-soft: #fbbf2412;--accent-line: #fbbf2452;--accent-fg: #fbbf24;--accent-fill: #fcd34d;--accent-fill-hover: #fef08a;--on-accent: #0b0a06;--ok: #9ece6a;--ok-soft: #9ece6a14;--on-green: #08120f;--blue: #7aa2f7;--blue-soft: #7aa2f712;--amber: #fbbf24;--amber-soft: #fbbf2412;--red: #f7768e;--red-soft: #f7768e14;--violet: #bb9af7;--violet-soft: #bb9af712;--grid: #c0caf509;--nav-bg: #06070bd6;--focus-ring: none;--groove: #c0caf512;--faint-line: #3a4060;--ok-line: #9ece6a40;--wash: #c0caf507;--log-text: #9ba3c4;--log-dim: #686f93;color:var(--text);background:var(--bg)}:root[data-theme=light]{color-scheme:light;--bg: #f7f8fa;--surface: #ffffff;--surface-muted: #0b0d1405;--surface-sunk: #f7f8fa;--border: #0b0d1417;--border-strong: #0b0d1430;--hairline: #0b0d140b;--text: #0b0d14;--text-muted: #454c5e;--text-soft: #6b7386;--text-faint: #6b7386;--sidebar: #f7f8fa;--sidebar-soft: #ffffff;--sidebar-text: #0b0d14;--accent: #b45309;--accent-line: #b4530959;--accent-soft: #b453090f;--accent-fg: #b45309;--groove: #0b0d140f;--faint-line: #b3b9c6;--ok-line: #11632940;--wash: #0b0d1405;--log-text: #454c5e;--log-dim: #6b7386;--ok: #116329;--ok-soft: #11632912;--on-green: #ffffff;--blue: #0969da;--blue-soft: #0969da0f;--amber: #b45309;--amber-soft: #b453090f;--red: #cf222e;--red-soft: #cf222e0f;--violet: #8250df;--violet-soft: #8250df0f;--grid: #0b0d1407;--nav-bg: #f7f8fad9}*{box-sizing:border-box;letter-spacing:0}html,body,#root{min-height:100%;margin:0}body{min-width:320px;background:var(--bg);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:48px 48px;color:var(--text);font-size:var(--text-sm);line-height:1.6;-webkit-font-smoothing:antialiased;text-wrap:pretty}body.modal-open{overflow:hidden}button,input,select,textarea{color:inherit;font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.6}h1,h2,h3,p{margin:0}h2{font-size:var(--text-md);line-height:1.35}h3{font-size:var(--text-md)}small{font-size:var(--text-sm)}code,.monospace{font-family:var(--mono)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.muted{color:var(--text-muted)}.nowrap{white-space:nowrap}.text-critical{color:var(--red)}:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:3px}::selection{background:var(--accent-soft)}::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:7px;background:var(--border-strong);background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:var(--faint-line);background-clip:padding-box}::-webkit-scrollbar-track{background:transparent}.app-shell{min-height:100vh}.sidebar{position:fixed;z-index:30;inset:0 auto 0 0;display:flex;width:var(--rail-width);flex-direction:column;border-right:1px solid var(--border);background:var(--sidebar);color:var(--sidebar-text);transition:width .12s ease}.sidebar-collapsed{width:var(--rail-width-collapsed)}.sidebar.sidebar-collapsed .rail-label{display:none}.sidebar-collapsed .nav-item,.sidebar-collapsed .profile-button,.sidebar-collapsed .system-health{justify-content:center;padding-right:0;padding-left:0}.brand-row{display:flex;height:var(--topbar);flex:none;align-items:center;gap:9px;padding:0 12px 0 14px;border-bottom:1px solid var(--border)}.brand-mark{display:grid;width:20px;height:20px;flex:0 0 20px;place-items:center;border-radius:var(--radius-md);background:var(--accent);color:#fff}.brand-name{overflow:hidden;flex:1;font-size:var(--text-sm);font-weight:600;letter-spacing:-.01em;white-space:nowrap}.rail-toggle{width:24px;height:24px;flex:none;color:var(--text-faint)}.sidebar-collapsed .brand-row{justify-content:center;gap:4px;padding:0 4px}.sidebar .sidebar-close{display:none;margin-left:auto}.environment-switcher{position:relative;display:block;flex:none;padding:10px 10px 8px;border-bottom:1px solid var(--border)}.sidebar-collapsed .environment-switcher{display:none}.environment-switcher>label{display:block;min-width:0}.environment-switcher small,.sidebar-footer small{display:block;color:var(--text-faint)}.environment-switcher small{padding:0 4px 6px;font-size:var(--text-3xs);font-weight:600;letter-spacing:.07em;text-transform:uppercase}.environment-switcher select{width:100%;height:30px;padding:0 6px 0 22px;border:1px solid var(--border);border-radius:var(--radius-md);-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--surface-sunk);background-image:linear-gradient(45deg,transparent 50%,var(--text-faint) 50%),linear-gradient(135deg,var(--text-faint) 50%,transparent 50%);background-position:calc(100% - 12px) 13px,calc(100% - 8px) 13px;background-size:4px 4px,4px 4px;background-repeat:no-repeat;color:var(--text);font-size:var(--text-xs);font-weight:500;text-overflow:ellipsis;transition:border-color .12s ease}.environment-switcher select:hover:not(:disabled){border-color:var(--border-strong)}.environment-switcher select:disabled{color:var(--text-muted)}.environment-switcher option{background:var(--surface);color:var(--text)}.environment-dot,.health-indicator{position:absolute;top:42px;left:19px;width:6px;height:6px;border-radius:50%;background:var(--ok);pointer-events:none}.environment-dot-demo{background:var(--amber)}.health-indicator{position:static;flex:none;margin-top:5px;animation:blip 2.4s ease-in-out infinite}.health-indicator-pending{background:var(--amber)}.sidebar-nav{display:flex;min-height:0;flex:1;flex-direction:column;overflow-y:auto;padding:8px 8px 12px}.nav-label{padding:6px;color:var(--text-faint);font-size:var(--text-3xs);font-weight:600;letter-spacing:.07em;text-transform:uppercase}.sidebar-collapsed .nav-label{display:none}.nav-item{display:flex;width:100%;height:var(--nav-row);flex:none;align-items:center;gap:9px;margin-bottom:1px;padding:0 8px;border:0;border-radius:var(--radius-md);background:transparent;color:var(--text-muted);font-size:var(--text-xs);font-weight:500;text-align:left;transition:background .12s ease,color .12s ease}.nav-item>svg{flex:none;opacity:.92}.nav-item>span:first-of-type{overflow:hidden;flex:1;white-space:nowrap}.nav-count{flex:none;color:var(--text-faint);font-size:var(--text-2xs);font-variant-numeric:tabular-nums}.sidebar-collapsed .nav-count{display:none}.nav-item:hover{background:var(--surface-muted);color:var(--text)}.nav-item-active,.nav-item-active:hover{background:var(--accent-soft);color:var(--accent-fg);font-weight:600}.sidebar-footer{flex:none;padding:10px;border-top:1px solid var(--border)}.system-health,.profile-button{display:flex;width:100%;align-items:flex-start;gap:8px;border:0;background:transparent;color:inherit;text-align:left}.system-health{padding:6px 6px 8px}.system-health>span:last-child,.profile-button>span:nth-child(2){display:block;min-width:0;flex:1}.system-health strong,.profile-button strong{display:block;overflow:hidden;font-size:var(--text-xs);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.system-health small{line-height:1.35;white-space:normal}.profile-button{height:var(--nav-row);align-items:center;padding:0 6px;border-radius:var(--radius-md);transition:background .12s ease}.profile-button:hover{background:var(--surface-muted)}.profile-static:hover{background:transparent}.profile-button strong{font-weight:500}.profile-button small{overflow:hidden;font-size:var(--text-2xs);text-overflow:ellipsis;white-space:nowrap}.profile-button>svg{flex:none;color:var(--text-faint)}.sidebar-collapsed .profile-button>svg,.sidebar-collapsed .system-health small{display:none}.avatar{display:grid;width:22px;height:22px;flex:0 0 22px;place-items:center;border-radius:var(--radius-sm);background:var(--accent-soft);color:var(--accent-fg);font-size:var(--text-3xs);font-weight:600;letter-spacing:.02em}.main-column{min-height:100vh;margin-left:var(--rail-width);transition:margin-left .12s ease}.main-collapsed{margin-left:var(--rail-width-collapsed)}.topbar{position:sticky;z-index:20;top:0;display:flex;height:var(--topbar);align-items:center;gap:10px;padding:0 16px 0 18px;border-bottom:1px solid var(--border);background:var(--bg)}.topbar .mobile-menu{display:none}.page-title{display:flex;min-width:0;flex:1;align-items:center;gap:7px;font-size:var(--text-sm)}.page-title h1{overflow:hidden;color:var(--text-soft);font-size:var(--text-sm);font-weight:400;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.page-title>svg{flex:none;color:var(--text-faint)}.crumb-target{overflow:hidden;font-family:var(--mono);font-size:var(--text-xs);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.topbar-actions,.detail-actions,.filter-group{display:flex;align-items:center;gap:6px}.page-content{width:100%;max-width:1680px;margin:0 auto;padding:18px 18px 40px}.inline-warning{display:flex;align-items:center;gap:8px;margin-bottom:14px;padding:10px 12px;border:1px solid var(--amber-soft);border-radius:var(--radius-md);background:var(--amber-soft);color:var(--amber);font-size:var(--text-sm)}.submission-acknowledgement{display:flex;align-items:flex-start;gap:10px;margin-bottom:14px;padding:12px;border:1px solid var(--green-soft);border-radius:var(--radius-md);background:var(--green-soft);color:var(--ok);font-size:var(--text-sm)}.submission-acknowledgement>span{display:grid;flex:1;gap:2px}.submission-acknowledgement strong{color:var(--ok)}.page-stack{display:flex;flex-direction:column;gap:12px;max-width:1560px}.button,.icon-button,.text-button{display:inline-flex;align-items:center;justify-content:center;border:0;background:none}.button{height:var(--control);gap:6px;padding:0 9px;border:1px solid transparent;border-radius:var(--radius-md);font-size:var(--text-xs);font-weight:500;white-space:nowrap;transition:background .12s ease,border-color .12s ease,color .12s ease}.button>svg{flex:none}.button-primary{border-color:var(--accent);background:var(--accent);color:#fff}.button-primary:hover{border-color:#6b76d8;background:#6b76d8}.button-secondary{border-color:var(--border-strong);background:transparent;color:var(--text-muted)}.button-danger{background:#9a332c;color:#fff}.button-danger:hover{background:#7f2a24}.button-secondary:hover,.button-ghost:hover{background:var(--surface-muted);color:var(--text)}.button-ghost{color:var(--text-muted)}.icon-button{width:var(--control);height:var(--control);flex:0 0 var(--control);border:1px solid transparent;border-radius:var(--radius-md);color:var(--text-soft);transition:background .12s ease,color .12s ease}.icon-button:hover{background:var(--surface-muted);color:var(--text)}.icon-button-bordered{border-color:var(--border)}.icon-button-small{width:22px;height:22px;flex-basis:22px}.text-button{gap:5px;padding:0;color:var(--accent-fg);font-size:var(--text-xs);font-weight:500}.text-button:hover{color:#aeb5f3}.segmented{display:flex;flex:none;gap:2px;padding:2px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-sunk)}.segmented button{height:20px;padding:0 9px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-faint);font-size:var(--text-2xs);font-weight:600;transition:background .12s ease,color .12s ease}.segmented button:hover{color:var(--text)}.segmented .segment-active,.segmented .segment-active:hover{background:var(--accent-soft);color:var(--accent-fg)}.segmented-mono button{padding:0 8px;font-size:var(--text-3xs);letter-spacing:.03em}.panel{min-width:0;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface)}.panel-header,.section-toolbar{display:flex;height:var(--topbar);align-items:center;gap:10px;padding:0 14px;border-bottom:1px solid var(--border)}.panel-header>div,.section-toolbar>div{display:flex;min-width:0;flex:1;align-items:baseline;gap:10px}.panel-header h2,.section-toolbar h2{flex:none;font-size:var(--text-sm);font-weight:600}.panel-header p,.section-toolbar p{overflow:hidden;min-width:0;flex:1;margin:0;color:var(--text-faint);font-size:var(--text-2xs);text-overflow:ellipsis;white-space:nowrap}.panel-header>svg{flex:none;color:var(--text-faint)}.panel-header-warning{color:var(--amber)}.panel-header>svg:first-child{order:-1}.panel-note{max-width:880px;padding:12px 14px 14px;color:var(--text-muted);font-size:var(--text-sm);line-height:1.5}.assistant-log{display:flex;max-height:420px;flex-direction:column;gap:8px;padding:12px 14px;overflow-y:auto}.assistant-message p{margin:2px 0 0;white-space:pre-wrap}.assistant-message-user strong{color:var(--text-muted)}.panel-note pre{max-height:260px;overflow:auto;font-size:var(--text-xs)}.panel-note code{padding:1px 4px;border:1px solid var(--border);border-radius:3px;background:var(--surface-sunk);font-size:var(--text-xs)}.metric-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.metric-grid-four{grid-template-columns:repeat(4,minmax(0,1fr))}.metric-grid-three{grid-template-columns:repeat(3,minmax(0,1fr))}.metric-card{position:relative;min-width:0;padding:13px 14px 14px;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface)}.metric-heading{display:flex;align-items:center;gap:7px;margin-bottom:9px;color:var(--text-soft);font-size:var(--text-2xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.metric-dot{width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:var(--text-soft)}.metric-positive .metric-dot{background:var(--ok)}.metric-warning .metric-dot{background:var(--amber)}.metric-critical .metric-dot{background:var(--red)}.metric-accent .metric-dot{background:var(--accent)}.metric-figure{display:flex;min-width:0;align-items:baseline;gap:7px}.metric-value{display:block;overflow:hidden;font-size:var(--text-2xl);font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.025em;line-height:1;text-overflow:ellipsis;white-space:nowrap}.metric-delta{flex:none;color:var(--text-soft);font-size:var(--text-xs);font-weight:500}.metric-delta-positive{color:var(--ok)}.metric-delta-warning{color:var(--amber)}.metric-delta-critical{color:var(--red)}.metric-detail{margin-top:8px;color:var(--text-faint);font-size:var(--text-2xs);line-height:1.4}.status-badge{display:inline-flex;width:fit-content;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:var(--text-muted);font-size:var(--text-xs);font-weight:500;line-height:1.25;white-space:nowrap}.status-badge-chip{height:21px;padding:0 8px;border-radius:var(--radius-md);background:var(--surface-muted);font-size:var(--text-sm);font-weight:600}.status-dot{width:6px;height:6px;flex:0 0 6px;border-radius:50%;background:currentColor}.status-running .status-dot,.status-provisioning .status-dot,.status-checkpointing .status-dot,.status-starting .status-dot,.status-activating .status-dot{animation:blip 1.8s ease-in-out infinite}.status-completed .status-dot,.status-cancelled .status-dot,.status-success .status-dot,.status-expired .status-dot,.status-preempting .status-dot,.status-ready .status-dot{background:transparent;box-shadow:inset 0 0 0 1.5px currentColor}.status-running,.status-completed,.status-success,.status-healthy,.status-active,.status-ready{color:var(--ok)}.status-running.status-badge-chip,.status-completed.status-badge-chip,.status-success.status-badge-chip,.status-healthy.status-badge-chip,.status-active.status-badge-chip,.status-ready.status-badge-chip{background:var(--ok-soft)}.status-queued,.status-provisioning,.status-checkpointing,.status-warning,.status-degraded,.status-activating,.status-borrowed,.status-spot,.status-soft,.status-starting{color:var(--amber)}.status-queued.status-badge-chip,.status-provisioning.status-badge-chip,.status-checkpointing.status-badge-chip,.status-warning.status-badge-chip,.status-degraded.status-badge-chip,.status-activating.status-badge-chip,.status-borrowed.status-badge-chip,.status-spot.status-badge-chip,.status-soft.status-badge-chip,.status-starting.status-badge-chip{background:var(--amber-soft)}.status-failed,.status-critical,.status-production,.status-expired,.status-hard{color:var(--red)}.status-failed.status-badge-chip,.status-critical.status-badge-chip,.status-production.status-badge-chip,.status-expired.status-badge-chip,.status-hard.status-badge-chip{background:var(--red-soft)}.status-cancelled,.status-planning,.status-info,.status-interactive,.status-reserved{color:var(--blue)}.status-cancelled.status-badge-chip,.status-planning.status-badge-chip,.status-info.status-badge-chip,.status-interactive.status-badge-chip,.status-reserved.status-badge-chip{background:var(--blue-soft)}.status-preempting,.status-revoking,.status-maintenance,.status-batch,.status-warm,.status-draining{color:var(--violet)}.status-preempting.status-badge-chip,.status-revoking.status-badge-chip,.status-maintenance.status-badge-chip,.status-batch.status-badge-chip,.status-warm.status-badge-chip,.status-draining.status-badge-chip{background:var(--violet-soft)}.status-standard{color:var(--text-muted)}.status-standard.status-badge-chip{background:var(--surface-muted)}.progress-wrap{width:100%}.progress-track{position:relative;width:100%;height:3px;overflow:hidden;border-radius:2px;background:var(--groove)}.progress-fill{position:absolute;inset:0 auto 0 0;min-width:2px;border-radius:inherit;background:var(--accent)}.progress-green{background:var(--ok)}.progress-accent{background:var(--accent)}.progress-blue{background:var(--blue)}.progress-amber{background:var(--amber)}.progress-red{background:var(--red)}.progress-violet{background:var(--violet)}.overview-primary-grid,.overview-secondary-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(300px,1fr);gap:12px;align-items:start}.overview-side-column{display:flex;min-width:0;flex-direction:column;gap:12px}.activity-row{display:flex;width:100%;align-items:flex-start;gap:10px;padding:9px 14px;border:0;border-bottom:1px solid var(--hairline);background:transparent;color:inherit;text-align:left;transition:background .12s ease}.activity-row:last-child{border-bottom:0}.activity-row strong,.activity-detail,.activity-target,.activity-age{white-space:nowrap}.activity-row>div{min-width:0}.data-table td.monospace,.data-table td:first-child{white-space:nowrap}.activity-row:hover{background:var(--surface-muted)}.activity-dot{width:6px;height:6px;flex:0 0 6px;margin-top:6px;border-radius:50%;background:var(--text-faint)}.activity-info{background:var(--accent)}.activity-success{background:var(--ok)}.activity-warning{background:var(--amber)}.activity-critical{background:var(--red)}.activity-row>div{min-width:0;flex:1}.activity-row strong{font-size:var(--text-sm);font-weight:600}.activity-detail{color:var(--text-soft);font-size:var(--text-sm)}.activity-target{display:block;margin-top:2px;overflow:hidden;color:var(--text-faint);font-family:var(--mono);font-size:var(--text-2xs);text-overflow:ellipsis;white-space:nowrap}.activity-age{flex:none;padding-top:1px;color:var(--text-faint);font-size:var(--text-2xs);font-variant-numeric:tabular-nums}.priority-queue{display:flex;flex-direction:column;gap:11px;padding:12px 14px 14px}.priority-queue-row>div{display:flex;align-items:baseline;gap:8px;margin-bottom:5px}.priority-queue-row .status-badge{flex:1;font-size:var(--text-xs);font-weight:600}.priority-queue-row strong{font-size:var(--text-sm);font-variant-numeric:tabular-nums}.priority-queue-row small{color:var(--text-faint);font-size:var(--text-2xs)}.queue-chart{padding:5px 14px 0}.chart-legend{display:flex;justify-content:flex-end;gap:15px;height:24px;color:var(--text-faint);font-size:var(--text-2xs)}.chart-legend span{display:inline-flex;align-items:center;gap:5px}.legend-box{width:8px;height:8px;border-radius:2px}.legend-queued{background:var(--accent)}.legend-admitted{background:var(--text-soft)}.bar-chart{display:grid;height:190px;grid-template-columns:repeat(7,minmax(30px,1fr));gap:10px;align-items:end;padding:10px 5px 0;border-bottom:1px solid var(--hairline)}.bar-group{display:grid;height:100%;grid-template-rows:minmax(0,1fr) 24px;gap:6px;align-items:end;color:var(--text-faint);font-size:var(--text-2xs);text-align:center}.bar-values{display:flex;width:100%;height:100%;align-items:flex-end;justify-content:center;gap:3px}.bar{display:block;width:min(16px,38%);min-height:5px;border-radius:2px 2px 0 0}.bar-queued{background:var(--accent)}.bar-admitted{background:var(--text-soft)}.resource-list{display:flex;flex-direction:column;gap:13px;padding:12px 14px 14px}.resource-row-heading,.resource-row-detail{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.resource-row-heading{margin-bottom:5px;color:var(--text-muted);font-size:var(--text-xs)}.resource-row-heading strong{color:var(--text);font-size:var(--text-xs);font-variant-numeric:tabular-nums}.resource-row-detail{margin-top:5px;color:var(--text-faint);font-size:var(--text-2xs);line-height:1.45}.budget-inline{padding:12px 14px 14px;border-top:1px solid var(--border)}.budget-inline>div{display:flex;justify-content:space-between;gap:12px;margin-bottom:6px;color:var(--text-muted);font-size:var(--text-xs)}.budget-inline strong{color:var(--text);font-variant-numeric:tabular-nums}.compact-workload-list{border-top:1px solid var(--border)}.compact-workload{display:grid;width:100%;min-height:var(--row);grid-template-columns:minmax(180px,1.4fr) 130px minmax(100px,.7fr) 18px;gap:12px;align-items:center;padding:5px 14px;border:0;border-bottom:1px solid var(--hairline);background:transparent;color:inherit;text-align:left;transition:background .12s ease}.compact-workload:last-child{border-bottom:0}.compact-workload:hover{background:var(--accent-soft)}.compact-workload>svg{color:var(--text-faint)}.workload-primary,.resource-cell,.budget-cell,.table-progress,.mini-progress{display:flex;min-width:0;flex-direction:column;gap:1px}.workload-primary strong,.resource-cell strong{overflow:hidden;font-size:var(--text-sm);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.workload-primary small,.resource-cell small,.budget-cell small{overflow:hidden;color:var(--text-faint);font-size:var(--text-2xs);text-overflow:ellipsis;white-space:nowrap}.mini-progress{display:grid;grid-template-columns:1fr 30px;gap:7px;align-items:center}.mini-progress small{color:var(--text-soft);font-variant-numeric:tabular-nums}.alert-list{display:flex;flex-direction:column}.alert-item{display:flex;gap:9px;padding:10px 14px;border-bottom:1px solid var(--hairline)}.alert-item:last-child{border-bottom:0}.alert-icon{flex:none;margin-top:1px;color:var(--amber)}.alert-critical .alert-icon{color:var(--red)}.alert-item>span:last-child{min-width:0}.alert-item strong{display:block;font-size:var(--text-sm);font-weight:600}.alert-item p{margin:2px 0 0;color:var(--text-soft);font-size:var(--text-2xs);line-height:1.45}.alert-item small{display:block;margin-top:3px;color:var(--text-faint);font-size:var(--text-2xs)}.alert-count{flex:none;padding:1px 6px;border-radius:var(--radius-sm);background:var(--amber-soft);color:var(--amber);font-size:var(--text-2xs);font-weight:600}.table-toolbar{display:flex;height:var(--topbar);align-items:center;justify-content:space-between;gap:8px;padding:0 10px 0 12px;border-bottom:1px solid var(--border)}.filter-group{min-width:0;flex:1;flex-wrap:wrap}.search-field,.select-field{position:relative;display:flex;height:var(--control);align-items:center;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunk);color:var(--text-faint);transition:border-color .12s ease}.search-field>svg,.select-field>svg{flex:none}.search-field{width:min(340px,100%);padding-left:9px}.search-field input{width:100%;height:100%;padding:0 9px 0 7px;border:0;outline:0;background:transparent;color:var(--text);font-size:var(--text-sm)}.select-field select{min-width:120px;height:100%;padding:0 26px 0 9px;border:0;outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:transparent;background-image:linear-gradient(45deg,transparent 50%,var(--text-faint) 50%),linear-gradient(135deg,var(--text-faint) 50%,transparent 50%);background-position:calc(100% - 14px) 11px,calc(100% - 10px) 11px;background-size:4px 4px,4px 4px;background-repeat:no-repeat;color:var(--text);font-size:var(--text-sm)}.select-field option{background:var(--surface);color:var(--text)}.select-field input[type=number]{width:72px;height:100%;padding:0 8px;border:0;outline:0;background:transparent;font-size:var(--text-sm)}.search-field:focus-within,.select-field:focus-within,.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent-line);box-shadow:none}.status-chips{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.status-chip{display:inline-flex;height:var(--control);align-items:center;gap:6px;padding:0 9px;border:1px solid var(--border);border-radius:var(--radius-md);background:transparent;color:var(--text-muted);font-size:var(--text-xs);font-weight:500;white-space:nowrap;transition:background .12s ease,border-color .12s ease,color .12s ease}.status-chip:hover{background:var(--surface-muted)}.status-chip-active,.status-chip-active:hover{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent-fg)}.status-chip-dot{width:5px;height:5px;flex:0 0 5px;border-radius:50%;background:currentColor}.status-chip-count{color:var(--text-faint);font-variant-numeric:tabular-nums}.table-scroll{width:100%;overflow-x:auto}.data-table{width:100%;min-width:980px;border-collapse:collapse;font-size:var(--text-xs)}.data-table th{height:30px;padding:0 12px;border-bottom:1px solid var(--border);background:var(--surface-sunk);color:var(--text-faint);font-size:var(--text-3xs);font-weight:600;letter-spacing:.06em;text-align:left;text-transform:uppercase;white-space:nowrap}.data-table td{max-width:280px;height:var(--row);padding:5px 12px;border-bottom:1px solid var(--hairline);vertical-align:middle}.data-table .numeric{text-align:right;font-variant-numeric:tabular-nums}.data-table tbody tr{transition:background .12s ease}.data-table tbody tr:hover{background:var(--surface-muted)}.data-table tbody tr.row-clickable:hover{background:var(--accent-soft)}.data-table tbody tr.row-clickable{cursor:pointer}.data-table tbody tr:last-child td{border-bottom:0}.workloads-table{min-width:1260px}.workloads-table th:first-child{width:250px}.workloads-table th:nth-child(4){width:190px}.table-primary-link{display:flex;width:100%;min-width:0;flex-direction:column;gap:1px;padding:0;border:0;background:none;text-align:left}.table-primary-link strong{overflow:hidden;color:var(--text);font-size:var(--text-sm);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.table-primary-link:hover strong{color:var(--accent-fg)}.table-primary-link span{overflow:hidden;color:var(--text-faint);font-family:var(--mono);font-size:var(--text-2xs);text-overflow:ellipsis;white-space:nowrap}.cell-note{display:block;max-width:180px;margin-top:2px;overflow:hidden;color:var(--text-faint);font-size:var(--text-3xs);line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.resource-cell strong,.budget-cell strong{font-size:var(--text-xs)}.table-progress{display:flex;width:110px;flex-direction:row;align-items:center;gap:7px}.table-progress .progress-wrap{flex:1}.table-progress small{flex:none;color:var(--text-soft);font-variant-numeric:tabular-nums}.budget-cell{width:132px}.budget-cell>.budget-figure{display:flex;align-items:baseline;gap:5px}.budget-cell .progress-track{margin-top:4px}.table-footer{display:flex;height:34px;align-items:center;justify-content:space-between;gap:14px;padding:0 12px;color:var(--text-faint);font-size:var(--text-2xs)}.empty-state,.page-state{display:flex;min-height:260px;align-items:center;justify-content:center;flex-direction:column;gap:8px;padding:24px;color:var(--text-muted);text-align:center}.empty-state strong,.page-state strong{color:var(--text)}.empty-state span,.page-state span{max-width:460px;font-size:var(--text-sm)}.page-state-error>svg{color:var(--red)}.inline-error,.inline-status{display:flex;min-height:38px;align-items:center;gap:8px;margin:0 14px 12px;padding:8px 10px;border:1px solid var(--red-soft);border-radius:var(--radius-sm);background:var(--red-soft);color:var(--red);font-size:var(--text-xs)}.inline-status{border-color:var(--blue-soft);background:var(--blue-soft);color:var(--blue)}.inline-notice{display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:8px 12px;border:1px solid var(--accent-line);border-radius:var(--radius-lg);background:var(--accent-soft);color:var(--accent-fg);font-size:var(--text-xs)}.auth-screen{display:grid;min-height:100vh;place-items:center;padding:24px;background:var(--bg)}.auth-panel{display:flex;width:min(420px,100%);min-height:260px;align-items:center;justify-content:center;flex-direction:column;gap:13px;padding:34px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);text-align:center}.auth-panel h1{font-size:var(--text-xl)}.auth-panel p{color:var(--text-muted);font-size:var(--text-md);line-height:1.5}.spin{animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@keyframes blip{0%,to{opacity:1}50%{opacity:.28}}.detail-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:11px}.detail-title-row{display:flex;min-width:0;flex:1;align-items:flex-start;gap:11px}.detail-title-row>.icon-button{margin-top:1px}.detail-title-with-status{display:flex;min-width:0;align-items:center;gap:10px;flex-wrap:wrap}.detail-title-row>div{min-width:0;flex:1}.detail-title-row h2{overflow:hidden;font-size:var(--text-lg);font-weight:600;letter-spacing:-.015em;text-overflow:ellipsis;white-space:nowrap}.detail-title-row p{margin-top:3px;color:var(--text-faint);font-size:var(--text-xs)}.detail-title-row p .monospace{color:var(--text-soft)}.detail-wait-banner{display:flex;align-items:center;gap:9px;padding:8px 12px;border:1px solid rgba(217,154,78,.28);border-radius:var(--radius-lg);background:#d99a4e17;font-size:var(--text-sm)}.detail-wait-banner>svg{flex:none;color:var(--amber)}.detail-wait-banner>.detail-wait-message{flex:1;min-width:0}.detail-wait-banner-bad{border-color:#e8837a47;background:#e8837a17}.detail-wait-banner-bad>svg{color:var(--red)}.detail-wait-banner>.detail-wait-age{flex:none;padding:2px 7px;border-radius:var(--radius-sm);background:var(--wash);color:var(--amber);font-size:var(--text-2xs);font-weight:600;font-variant-numeric:tabular-nums}.detail-wait-banner-bad .detail-wait-age{color:var(--red)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border)}.tabs button{position:relative;height:31px;padding:0 11px;border:0;border-bottom:2px solid transparent;background:none;color:var(--text-faint);font-size:var(--text-sm);font-weight:500;transition:color .12s ease,border-color .12s ease}.tabs button:hover{color:var(--text)}.tabs .tab-active{border-bottom-color:var(--accent);color:var(--text);font-weight:600}.detail-overview-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:start}.definition-grid{margin:0;padding:4px 14px 10px}.definition-grid>div{display:grid;min-width:0;grid-template-columns:minmax(132px,auto) minmax(0,1fr);gap:12px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--hairline)}.definition-grid>div:last-child{border-bottom:0}.definition-grid dt,.runtime-list dt{color:var(--text-faint);font-size:var(--text-2xs)}.definition-grid dd,.runtime-list dd{margin:0;overflow-wrap:anywhere;font-size:var(--text-sm);font-weight:500}.large-budget-value{display:flex;align-items:baseline;gap:7px;padding:13px 14px 11px}.large-budget-value strong{font-size:var(--text-xl);font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em}.large-budget-value span{color:var(--text-faint);font-size:var(--text-xs)}.detail-section>.progress-wrap{padding:0 14px}.detail-section>.resource-row-detail{padding:0 14px 12px}.allocation-section,.runtime-section{grid-column:1 / -1}.allocation-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px}.allocation-item{display:grid;min-width:0;grid-template-columns:8px minmax(0,1fr);gap:7px;align-items:start;padding:11px 13px 12px;background:var(--surface);box-shadow:0 0 0 1px var(--border)}.allocation-state{width:6px;height:6px;margin-top:5px;border-radius:50%;background:var(--ok)}.allocation-ready{animation:blip 2.4s ease-in-out infinite}.allocation-starting{background:var(--amber)}.allocation-draining{background:var(--violet)}.allocation-item>span:nth-child(2){display:flex;min-width:0;flex-direction:column;gap:5px}.allocation-item strong,.allocation-item small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.allocation-item strong{font-family:var(--mono);font-size:var(--text-xs);font-weight:600}.allocation-item small{color:var(--text-faint);font-size:var(--text-2xs)}.allocation-item .status-badge{font-size:var(--text-2xs);font-weight:500}.code-block{position:relative;margin:4px 14px 12px;padding:11px 44px 11px 12px;overflow:auto;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunk);color:var(--text-muted);font-family:var(--mono);font-size:var(--text-xs);line-height:1.55}.code-copy{position:absolute;top:5px;right:5px}.runtime-list{margin:0;padding:0 14px 12px}.runtime-list>div{display:grid;min-width:0;grid-template-columns:minmax(132px,auto) minmax(0,1fr);gap:12px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--hairline)}.runtime-list>div:last-child{border-bottom:0}.runtime-list dd{display:flex;flex-wrap:wrap;gap:5px;margin:0}.label-chip{padding:2px 6px;border:1px solid var(--border);border-radius:3px;background:var(--surface-sunk);color:var(--text-soft);font-family:var(--mono);font-size:var(--text-2xs)}.timeline-panel{max-width:1000px}.timeline-list{margin:0;padding:6px 0 10px;list-style:none}.timeline-list li{display:grid;grid-template-columns:108px 22px minmax(0,1fr);padding:0 14px;transition:background .12s ease}.timeline-list li:hover{background:var(--surface-muted)}.timeline-list time{padding:9px 0;color:var(--text-faint);font-family:var(--mono);font-size:var(--text-2xs);font-variant-numeric:tabular-nums}.timeline-rail{position:relative;display:flex;justify-content:center}.timeline-rail:before{position:absolute;top:0;bottom:0;width:1px;background:var(--border-strong);content:""}.timeline-list li:first-child .timeline-rail:before{top:13px}.timeline-list li:last-child .timeline-rail:before{bottom:auto;height:13px}.timeline-marker{position:relative;margin-top:13px;width:7px;height:7px;border-radius:50%;background:var(--text-faint)}.timeline-info .timeline-marker{background:var(--accent)}.timeline-success .timeline-marker{background:var(--ok)}.timeline-warning .timeline-marker{background:var(--amber)}.timeline-critical .timeline-marker{background:var(--red)}.timeline-body{min-width:0;padding:9px 0 10px 12px}.timeline-heading{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.timeline-gap{padding:1px 6px;border-radius:var(--radius-sm);background:var(--wash);color:var(--text-soft);font-size:var(--text-3xs);font-weight:600;font-variant-numeric:tabular-nums}.timeline-gap-heavy{background:var(--amber-soft);color:var(--amber)}.timeline-heading strong{font-size:var(--text-sm);font-weight:600}.timeline-critical .timeline-heading strong{color:var(--red)}.timeline-list p{margin:3px 0 0;color:var(--text-soft);font-size:var(--text-xs);line-height:1.45}.timeline-list small{display:block;margin-top:3px;color:var(--text-faint);font-family:var(--mono);font-size:var(--text-2xs)}.timeline-target{overflow-wrap:anywhere}.timeline-span{color:var(--text-faint);font-size:var(--text-2xs);font-variant-numeric:tabular-nums}.logs-panel{display:flex;flex-direction:column}.log-toolbar{justify-content:flex-start;gap:8px}.log-toolbar .search-field{max-width:300px}.log-toolbar>.spacer{flex:1}.log-stream{min-height:340px;max-height:calc(100vh - 380px);overflow:auto;padding:5px 0 10px;background:var(--surface-sunk);font-family:var(--mono);font-size:var(--text-2xs)}.log-line{display:grid;grid-template-columns:96px 52px 108px minmax(280px,1fr);gap:10px;min-height:24px;align-items:baseline;padding:2px 14px;line-height:1.7;transition:background .12s ease}.log-line:hover{background:var(--surface-muted)}.log-line time{color:var(--log-dim);font-variant-numeric:tabular-nums}.log-line.log-bare{grid-template-columns:1fr}.log-line.log-bare code{grid-column:1}.log-line .log-source{font-variant-numeric:tabular-nums}.log-line code{color:var(--log-text);white-space:pre-wrap;overflow-wrap:anywhere}.log-level{color:var(--text-soft);font-weight:500}.log-warn .log-level,.log-warn code{color:var(--amber)}.log-error .log-level,.log-error code{color:var(--red)}.log-debug .log-level,.log-debug code{color:var(--log-dim)}.log-source{overflow:hidden;color:var(--log-dim);text-overflow:ellipsis;white-space:nowrap}.log-empty{display:grid;min-height:250px;place-items:center;color:var(--text-faint);font-family:Inter,sans-serif;font-size:var(--text-xs)}.log-follow-state{display:inline-flex;flex:none;align-items:center;gap:6px;color:var(--text-faint);font-size:var(--text-2xs);font-weight:500;white-space:nowrap}.log-follow-state:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--text-faint)}.log-follow-live{color:var(--ok)}.log-follow-live:before{background:var(--ok);animation:blip 1.8s ease-in-out infinite}.log-notice{display:flex;align-items:center;gap:8px;padding:7px 13px;font-size:var(--text-xs);color:var(--text-muted);background:var(--surface-muted);border-bottom:1px solid var(--border)}.log-notice>svg{flex:none}.log-notice-error{color:var(--red);background:#e8837a14}.log-footer{display:flex;flex:none;align-items:center;justify-content:space-between;gap:10px;height:32px;padding:0 13px;border-top:1px solid var(--border);color:var(--text-faint);font-size:var(--text-2xs)}.log-stderr{border-left:2px solid #c4746c}.log-stderr .log-source{color:var(--red)}.topology-panel{min-width:0}.topology-regions{display:grid;grid-template-columns:repeat(3,minmax(220px,1fr));gap:1px}.topology-region{min-width:0;padding:12px 14px 13px;background:var(--surface);box-shadow:0 0 0 1px var(--border)}.topology-region-label{display:flex;align-items:center;gap:7px;color:var(--text-faint);font-size:var(--text-2xs)}.topology-region-label strong{color:var(--text);font-family:var(--mono);font-size:var(--text-xs);font-weight:600}.topology-region-label span{margin-left:auto}.topology-cell-row{display:flex;flex-direction:column;gap:6px;margin-top:11px}.topology-node{display:grid;width:100%;grid-template-columns:8px minmax(0,1fr);gap:9px;align-items:center;padding:7px 9px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunk);text-align:left;transition:background .12s ease,border-color .12s ease}.topology-node:hover{border-color:var(--accent-line);background:var(--accent-soft)}.topology-node-state{width:6px;height:6px;border-radius:50%;background:var(--ok)}.topology-degraded{background:var(--amber)}.topology-maintenance{background:var(--violet)}.topology-node span:last-child{display:flex;min-width:0;flex-direction:column;gap:2px}.topology-node strong,.topology-node small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topology-node strong{font-family:var(--mono);font-size:var(--text-xs);font-weight:600}.topology-node small{color:var(--text-faint);font-size:var(--text-2xs)}.fleet-tabs{margin-top:2px}.fleet-cells-section{min-width:0}.cell-grid{display:grid;grid-template-columns:repeat(3,minmax(280px,1fr));gap:1px}.cell-card{min-width:0;background:var(--surface);box-shadow:0 0 0 1px var(--border);transition:background .12s ease}.cell-card:hover{background:var(--surface-muted)}.cell-card-heading{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;padding:12px 14px 0}.budget-scope-icon{display:grid;width:26px;height:26px;place-items:center;border-radius:var(--radius-md);background:var(--accent-soft);color:var(--accent-fg)}.cell-card-heading>div:nth-child(2){min-width:0}.cell-card-heading h3,.cell-card-heading p{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cell-card-heading h3{font-family:var(--mono);font-size:var(--text-sm);font-weight:600}.cell-card-heading p{margin-top:4px;color:var(--text-faint);font-size:var(--text-2xs)}.cell-stat-row{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:9px 14px 0}.cell-stat-row>span{display:grid;min-width:0;grid-template-columns:16px 1fr}.cell-stat-row svg{grid-row:1 / 3;color:var(--text-faint)}.cell-stat-row small{color:var(--text-faint);font-size:var(--text-2xs)}.cell-stat-row strong{margin-top:2px;overflow:hidden;font-size:var(--text-2xs);font-weight:500;text-overflow:ellipsis;white-space:nowrap}.cell-resource-list{display:flex;flex-direction:column;gap:11px;padding:11px 14px 12px}.cell-card-footer{display:flex;min-height:34px;align-items:center;justify-content:space-between;gap:12px;padding:0 14px 12px;color:var(--text-faint);font-size:var(--text-2xs)}.cell-card{display:flex;flex-direction:column}.cell-card-footer{margin-top:auto}.cell-card-heading{align-items:start}.cell-card-heading>.status-badge{margin-top:1px}.panel-header>.attachment-actions{flex:none;margin-left:auto}.discovered-table td.discovered-fleet{max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.discovered-scope strong{color:var(--text);font-weight:600}.cell-card-error{display:flex;align-items:flex-start;gap:7px;margin:0 14px 10px;padding:8px 10px;border:1px solid color-mix(in srgb,var(--amber) 45%,transparent);border-radius:8px;background:color-mix(in srgb,var(--amber) 10%,transparent);color:var(--text-secondary);font-size:var(--text-2xs);overflow-wrap:anywhere}.cell-card-error svg{flex:none;margin-top:1px;color:var(--amber)}.cell-card-error strong{color:var(--text-primary);font-weight:600}.budget-layout{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(300px,.55fr);gap:12px;align-items:start}.budget-card-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.budget-card{position:relative;min-width:0;padding:13px 14px 14px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface)}.budget-card-heading{display:flex;align-items:center;gap:8px}.budget-scope{flex:1;min-width:0;overflow:hidden;color:var(--text-faint);font-size:var(--text-2xs);font-weight:600;letter-spacing:.06em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.budget-card-heading .status-badge{flex:none}.budget-owner{margin-top:5px;overflow:hidden;font-size:var(--text-sm);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.budget-amount-row{display:flex;align-items:baseline;gap:7px;margin:13px 0 11px}.budget-amount-row strong{overflow:hidden;font-size:var(--text-xl);font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.02em;text-overflow:ellipsis}.budget-amount-row span{flex:none;color:var(--text-faint);font-size:var(--text-xs)}.budget-card-footer{display:flex;justify-content:space-between;gap:10px;margin-top:8px;color:var(--text-faint);font-size:var(--text-2xs)}.dual-progress{position:relative;overflow:visible}.forecast-marker{position:absolute;z-index:2;top:-3px;width:1px;height:10px;background:var(--text-muted)}.priority-policy-panel{align-self:start}.priority-band-list{margin:0;padding:0;list-style:none}.priority-band-list li{display:grid;grid-template-columns:22px minmax(0,1fr) auto;gap:9px;align-items:center;min-height:52px;padding:8px 14px;border-bottom:1px solid var(--hairline)}.priority-band-list li:last-child{border-bottom:0}.band-rank{display:grid;width:20px;height:20px;place-items:center;border-radius:var(--radius-sm);background:var(--surface-sunk);color:var(--text-faint);font-size:var(--text-3xs);font-weight:600}.priority-band-list li>span:nth-child(2){display:flex;min-width:0;flex-direction:column;align-items:flex-start;gap:3px}.priority-band-list small{color:var(--text-faint);font-size:var(--text-2xs);line-height:1.35}.priority-band-list li>strong{color:var(--text-soft);font-size:var(--text-2xs);font-weight:500;white-space:nowrap}.policy-callout{display:flex;gap:9px;padding:11px 14px;border-top:1px solid var(--border);color:var(--text-soft)}.policy-callout>svg{flex:none;color:var(--accent-fg)}.policy-callout span{display:flex;flex-direction:column;gap:3px}.policy-callout strong{color:var(--text);font-size:var(--text-xs);font-weight:600}.policy-callout small{color:var(--text-faint);font-size:var(--text-2xs);line-height:1.4}.policies-table{min-width:1060px}.switch-control{position:relative;display:inline-flex;width:26px;height:15px}.switch-control input{position:absolute;opacity:0}.switch-control>span:nth-child(2){position:absolute;top:0;right:0;bottom:0;left:0;border-radius:8px;background:var(--groove);transition:background .12s ease}.switch-control>span:nth-child(2):after{position:absolute;top:2px;left:2px;width:11px;height:11px;border-radius:50%;background:#fff;content:"";transition:transform .12s ease}.switch-control input:checked+span{background:var(--accent)}.switch-control input:checked+span:after{transform:translate(11px)}.switch-control input:focus-visible+span{outline:2px solid var(--accent);outline-offset:2px}.audit-integrity-strip{display:flex;align-items:center;gap:10px;padding:11px 14px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);color:var(--text)}.audit-integrity-icon{flex:none;color:var(--accent-fg)}.audit-integrity-strip>span:nth-child(2){display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}.audit-integrity-strip strong{font-size:var(--text-sm);font-weight:600}.audit-integrity-strip small{color:var(--text-faint);font-size:var(--text-2xs)}.table-count{flex:none;color:var(--text-faint);font-size:var(--text-2xs);font-variant-numeric:tabular-nums;white-space:nowrap}.audit-table{min-width:1080px}.audit-table th:first-child{width:26px}.audit-table th:last-child,.audit-table td:last-child{text-align:right}.audit-table td:last-child .status-badge{display:inline-flex}.audit-table td:first-child{padding-right:0}.audit-caret{transition:transform .12s ease}.audit-caret-open{transform:rotate(90deg)}.action-name{color:var(--text);font-family:var(--mono);font-size:var(--text-xs);font-weight:600}.row-expanded{background:var(--surface-muted)}.audit-detail-row td{background:var(--surface-sunk)}.audit-detail-row:hover{background:var(--surface-sunk)!important}.audit-detail{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;max-width:1100px;padding:5px 0 8px 26px}.audit-detail>div:first-child{grid-column:1 / -1}.audit-detail small{color:var(--text-faint);font-size:var(--text-3xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.audit-detail p{margin-top:3px;color:var(--text-muted);font-size:var(--text-sm);line-height:1.45}.audit-detail code{display:block;margin-top:3px;font-family:var(--mono);font-size:var(--text-xs)}.toast{position:fixed;z-index:80;right:20px;bottom:20px;display:flex;max-width:min(420px,calc(100vw - 32px));min-height:48px;align-items:center;gap:9px;padding:8px 8px 8px 13px;border:1px solid #2f483d;border-radius:var(--radius-md);background:#202b26;box-shadow:0 14px 40px #161d1940;color:#f4f8f5;font-size:var(--text-sm)}.toast>svg{color:#75d3a5}.toast-error{border-color:#8f403b;background:#392421}.toast-error>svg{color:var(--red)}.toast span{min-width:0;flex:1}.toast .icon-button{color:#d8e1db}.modal-layer{position:fixed;z-index:70;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:18px}.modal-scrim,.drawer-scrim{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;padding:0;border:0;background:#1216138f}.modal{position:relative;z-index:1;display:flex;width:min(820px,100%);max-height:calc(100vh - 36px);flex-direction:column;overflow:hidden;border:1px solid var(--border-strong);border-radius:var(--radius-lg);background:var(--surface);box-shadow:0 24px 70px #141b1747}.modal-narrow{width:min(480px,100%)}.confirm-consequence{padding:16px 0 4px;color:var(--text-muted);font-size:var(--text-md);line-height:1.55}.confirm-consequence strong{color:var(--text)}.confirm-phrase{margin-top:6px}.confirm-phrase input{font-family:var(--mono)}.cell-card-actions{display:flex;justify-content:flex-end;gap:6px;padding:0 14px 12px}.modal-header{display:flex;min-height:68px;flex:none;align-items:center;justify-content:space-between;gap:16px;padding:12px 18px;border-bottom:1px solid var(--border)}.modal-header h2{font-size:var(--text-lg)}.modal-header p{margin-top:3px;color:var(--text-muted);font-size:var(--text-xs)}.modal form{display:flex;min-height:0;max-height:calc(100vh - 105px);flex-direction:column}.modal-body{min-height:0;flex:1 1 auto;overflow-y:auto;padding:4px 18px 18px}.modal fieldset{min-width:0;margin:16px 0 0;padding:0;border:0}.modal legend{width:100%;padding:0 0 8px;border-bottom:1px solid var(--border);font-size:var(--text-sm);font-weight:750}.form-grid{display:grid;gap:11px;margin-top:11px}.form-grid-two{grid-template-columns:repeat(2,minmax(0,1fr))}.form-grid-three{grid-template-columns:repeat(3,minmax(0,1fr))}.field{display:flex;min-width:0;flex-direction:column;gap:6px;color:var(--text-muted);font-size:var(--text-xs);font-weight:650}.field-wide{grid-column:1 / -1}.field>label{display:flex;min-width:0;flex-direction:column;gap:6px}.field-hint{color:var(--text-muted);font-weight:450;line-height:1.35}.form-note{margin-top:8px;color:var(--text-muted);font-size:var(--text-xs);line-height:1.45}.field input,.field select,.field textarea{width:100%;min-width:0;border:1px solid var(--border-strong);border-radius:var(--radius-sm);outline:0;background:var(--surface);font-size:var(--text-sm);font-weight:450}.field input,.field select{height:36px;padding:0 9px}.field textarea{resize:vertical;padding:9px;line-height:1.45}.field input:disabled{background:var(--surface);color:var(--text-soft)}.checkbox-field{display:flex;min-height:46px;align-items:flex-start;gap:9px;padding:9px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-muted)}.checkbox-field input{width:16px;height:16px;margin:2px 0 0;accent-color:var(--ok)}.checkbox-field span{display:flex;flex-direction:column;gap:3px}.checkbox-field strong{font-size:var(--text-xs)}.checkbox-field small{color:var(--text-muted);line-height:1.35}.form-error{display:flex;align-items:center;gap:8px;margin-top:13px;padding:9px 10px;border:1px solid var(--red-soft);border-radius:var(--radius-sm);background:var(--red-soft);color:var(--red);font-size:var(--text-xs)}.modal-footer{display:flex;min-height:56px;flex:none;align-items:center;justify-content:flex-end;gap:8px;padding:10px 18px;border-top:1px solid var(--border);background:var(--surface-muted)}.modal-footer .button{height:30px;padding:0 12px}.attachment-actions,.attachment-snippet,.attachment-advanced{display:flex;align-items:center;gap:10px}.attachment-advanced{margin:14px 0;font-size:var(--text-xs)}.attachment-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:12px;border:1px solid var(--border)}.attachment-facts dt{color:var(--text-muted);font-size:var(--text-xs)}.attachment-facts dd{margin:4px 0 0;font-family:var(--mono)}.attachment-steps{padding-left:24px}.attachment-steps li{padding:8px 0;border-bottom:1px solid var(--border)}.attachment-steps li span,.attachment-steps li small{display:block}.attachment-steps li small{color:var(--text-muted)}.attachment-progress{max-height:260px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;padding:12px;border:1px solid var(--border);background:var(--surface-muted);font-size:var(--text-xs);line-height:1.6}.attachment-snippet{justify-content:space-between;flex-wrap:wrap;padding:10px;border:1px solid var(--border)}.stage-pipeline{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));list-style:none;margin:0;padding:16px 14px 15px}@media(max-width:1280px){.metric-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.metric-grid-four{grid-template-columns:repeat(4,minmax(0,1fr))}.cell-grid{grid-template-columns:repeat(2,minmax(280px,1fr))}.allocation-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.stage-pipeline{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:14px}}@media(max-width:1080px){.overview-primary-grid,.overview-secondary-grid,.detail-overview-grid,.budget-layout,.topology-regions{grid-template-columns:1fr}.metric-grid-four{grid-template-columns:repeat(2,minmax(0,1fr))}.allocation-section,.runtime-section{grid-column:auto}}@media(max-width:900px){.sidebar{width:var(--rail-width);transform:translate(-100%);transition:transform .2s ease;box-shadow:8px 0 30px #06080c66}.sidebar-open{transform:translate(0)}.sidebar .rail-label,.sidebar.sidebar-collapsed .rail-label,.sidebar.sidebar-collapsed .nav-label,.sidebar.sidebar-collapsed .profile-button>svg{display:revert}.sidebar.sidebar-collapsed .environment-switcher,.sidebar.sidebar-collapsed .system-health small{display:block}.sidebar .sidebar-close{display:inline-flex}.rail-toggle{display:none}.drawer-scrim{position:fixed;z-index:25}.main-column,.main-collapsed{margin-left:0}.topbar .mobile-menu{display:inline-flex}.page-content{padding:14px 14px 34px}.topbar{padding:0 14px}.allocation-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:700px){.page-content{padding:12px 12px 30px}.metric-grid,.metric-grid-four,.metric-grid-three{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.metric-value{font-size:var(--text-xl)}.compact-workload{grid-template-columns:minmax(140px,1fr) 110px 18px}.compact-workload .mini-progress{display:none}.table-toolbar{height:auto;align-items:stretch;flex-direction:column;gap:8px;padding:10px 12px}.filter-group{align-items:stretch}.search-field{width:100%}.detail-heading{align-items:flex-start;flex-direction:column}.detail-actions{width:100%;justify-content:flex-end}.allocation-grid,.cell-grid,.budget-card-list{grid-template-columns:1fr}.definition-grid>div,.runtime-list>div{grid-template-columns:1fr;gap:3px}.audit-detail{grid-template-columns:1fr;gap:10px;padding-left:0}.timeline-list li{grid-template-columns:88px 22px minmax(0,1fr)}.form-grid-three,.stage-pipeline{grid-template-columns:repeat(2,minmax(0,1fr))}.log-line{grid-template-columns:84px 46px minmax(200px,1fr)}.log-source{display:none}}@media(max-width:480px){.button-label{display:none}.topbar-actions .button{width:var(--control);padding:0}.metric-grid,.metric-grid-four,.metric-grid-three{grid-template-columns:1fr}.bar-chart{gap:5px}.compact-workload{grid-template-columns:minmax(130px,1fr) 18px}.compact-workload>.status-badge{display:none}.detail-title-with-status{align-items:flex-start;flex-direction:column;gap:6px}.tabs{gap:2px;overflow-x:auto}.cell-stat-row{grid-template-columns:1fr;gap:8px}.form-grid-two,.form-grid-three{grid-template-columns:1fr}.modal-layer{padding:0}.modal{width:100%;max-height:100vh;border:0;border-radius:0}.modal form{max-height:calc(100vh - 68px)}.modal-header p{display:none}.modal-footer .button{flex:1}.toast{right:12px;bottom:12px;left:12px;max-width:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.pipeline-panel{min-width:0}.pipeline-caption{flex:1;color:var(--text-faint);font-size:var(--text-2xs)}.stage-node{min-width:0;padding-right:8px;color:var(--text-faint)}.stage-node .stage-icon{display:flex;align-items:center;margin-bottom:8px;color:var(--faint-line)}.stage-node .stage-link{flex:1;margin-left:7px;border-top:1px dashed var(--border-strong)}.stage-node:last-child .stage-link{border-top-color:transparent}.stage-node .stage-label{overflow:hidden;font-size:var(--text-xs);font-weight:600;text-overflow:ellipsis;white-space:nowrap}.stage-node .stage-duration{display:block;margin-top:5px;height:18px}.stage-node .stage-duration>span{padding:2px 6px;border-radius:var(--radius-sm);background:var(--wash);color:var(--text-soft);font-size:var(--text-3xs);font-weight:500;font-variant-numeric:tabular-nums}.stage-node .stage-duration-heavy>span{background:var(--amber-soft);color:var(--amber)}.stage-done,.stage-done .stage-icon{color:var(--ok)}.stage-done .stage-link{border-top-style:solid;border-top-color:var(--ok-line)}.stage-done .stage-label{color:var(--text)}.stage-active,.stage-active .stage-icon{color:var(--accent-fg)}.stage-active .stage-label{color:var(--text)}.stage-failed .stage-icon{color:var(--red)}.stage-bar-wrap{padding:16px 14px 15px}.stage-bar{display:flex;height:10px;gap:1px;overflow:hidden;border-radius:3px;background:var(--hairline)}.stage-bar>span{min-width:2px;flex-basis:0;background:var(--accent)}.stage-bar-legend{display:flex;flex-wrap:wrap;gap:5px 18px;margin-top:13px}.stage-bar-legend>span{display:flex;align-items:center;gap:7px;font-size:var(--text-2xs)}.stage-bar-swatch{width:7px;height:7px;flex:none;border-radius:2px;background:var(--accent)}.stage-bar-legend .stage-bar-duration{color:var(--text-faint);font-family:var(--mono);font-size:var(--text-2xs);font-variant-numeric:tabular-nums}.stage-bar-note{margin-top:12px;padding-top:11px;border-top:1px solid var(--border);color:var(--text-soft);font-size:var(--text-2xs)}.stage-seg-reached{color:var(--text-muted)}.stage-seg-pending{color:var(--text-faint)}.stage-seg-heavy{font-weight:600}.stage-ledger{padding:16px 14px 15px}.stage-ticks{display:flex;align-items:center;gap:4px}.stage-ticks>span{flex:1;height:4px;border-radius:2px;background:var(--border)}.stage-ticks>.stage-tick-done{background:var(--ok)}.stage-ticks>.stage-tick-active{background:var(--accent);animation:blip 1.4s ease-in-out infinite}.stage-ticks>.stage-tick-failed{background:var(--red)}.stage-now{display:flex;align-items:baseline;gap:9px;margin-top:13px}.stage-now strong{font-size:var(--text-md);font-weight:600;letter-spacing:-.01em;color:var(--accent-fg)}.stage-now-done strong{color:var(--ok)}.stage-now-failed strong{color:var(--red)}.stage-now span{color:var(--text-faint);font-size:var(--text-xs)}.stage-notables{display:flex;flex-direction:column;gap:6px;margin-top:12px;padding-top:11px;border-top:1px solid var(--border)}.stage-notable{display:flex;align-items:baseline;gap:10px;font-size:var(--text-xs)}.stage-notable>span:first-child{width:6px;height:6px;flex:none;border-radius:50%;background:var(--text-soft);transform:translateY(-1px)}.stage-notable-heavy>span:first-child{background:var(--amber)}.stage-notable>span:nth-child(2){flex:1;color:var(--text-muted)}.stage-notable>span:last-child{color:var(--text-soft);font-family:var(--mono);font-size:var(--text-2xs);font-weight:500;font-variant-numeric:tabular-nums}.stage-notable-heavy>span:last-child{color:var(--amber)}*,*:before,*:after{border-radius:0!important;box-shadow:none!important}::selection{background:var(--accent-line)}.button-primary{border-color:var(--accent-fill);background:var(--accent-fill);color:var(--on-accent)}.button-primary:hover{border-color:var(--accent-fill-hover);background:var(--accent-fill-hover);color:var(--on-accent)}.brand-mark{background:var(--accent-fill);color:var(--on-accent)}.page-content{max-width:1440px;padding:24px 24px 64px}.panel,.metric-card,.cell-card{background:var(--bg)}.panel-header,.section-toolbar,.audit-integrity-strip,.table-toolbar{background:var(--wash)}.metric-label,.data-table th,.tracking-meta,.run-section-header>span,.chart-cell-heading>span,.chart-readout,.run-stats dt{font-size:var(--text-3xs);letter-spacing:.12em;text-transform:uppercase}.metric-value{letter-spacing:-.04em}.status-unknown,.unknown-value,.quota-state-unknown,[aria-label="Zones with no measurable free balance"] tbody td:nth-child(5),[aria-label="Why cost is not reported"]{color:var(--amber);background-image:repeating-linear-gradient(135deg,var(--amber-soft) 0 6px,transparent 6px 12px);border-bottom:1px dashed var(--accent-line)}.run-dropped{color:var(--amber)}.status-finished{color:var(--ok)}.status-aborted{color:var(--text-muted)}.nav-connection{display:none}.cell-number{color:var(--amber);font-size:var(--text-2xs);font-weight:500}.toast{border-color:var(--border-strong);background:var(--surface);color:var(--text)}.toast-error{border-color:var(--red)}.toast .icon-button{color:var(--text-muted)}@media(min-width:901px){.sidebar{inset:0 0 auto;width:100%;height:48px;flex-direction:row;align-items:center;gap:14px;padding:0 16px;border-right:0;border-bottom:1px solid var(--border);background:var(--nav-bg);-webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%)}.sidebar-collapsed{width:100%}.brand-row,.sidebar-collapsed .brand-row{height:48px;gap:7px;padding:0;border:0}.brand-name{font-size:14px;font-weight:800;letter-spacing:-.02em}.environment-switcher{width:140px;padding:0;border:0}.environment-switcher small,.sidebar-nav .nav-label{display:none}.environment-switcher select{height:28px;font-size:10.5px;background-color:transparent}.environment-dot{top:11px;left:9px}.sidebar-nav{height:48px;flex-direction:row;align-items:stretch;gap:14px;overflow-x:auto;overflow-y:hidden;padding:0}.nav-item,.sidebar-collapsed .nav-item{position:relative;width:auto;height:48px;gap:5px;margin:0;padding:0;font-size:11px;white-space:nowrap}.nav-item>svg{display:none}.sidebar-collapsed .nav-item>svg{display:block}.sidebar-collapsed .nav-item{min-width:30px}.nav-item:hover,.nav-item-active,.nav-item-active:hover{background:transparent;color:var(--text)}.nav-item-active:after{position:absolute;inset:auto 0 0;height:1px;background:var(--amber);content:""}.nav-count{font-size:9px;color:var(--amber)}.sidebar-footer{display:flex;align-items:center;gap:10px;padding:0;border:0}.nav-connection{display:inline;font-size:10px;color:var(--text-soft)}.sidebar-footer .rail-label{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.system-health,.profile-button{width:auto;padding:0}.health-indicator{margin:0}.profile-button{gap:6px}.avatar{width:28px;height:28px;border:1px solid var(--border-strong);background:transparent;color:var(--text)}.main-column,.main-collapsed{margin-left:0;padding-top:48px}.topbar{top:48px;height:60px;padding:0 16px;background:var(--nav-bg);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.page-title h1{color:var(--text);font-size:12px;font-weight:500;letter-spacing:.08em;text-transform:uppercase}}.tracking-meta{display:flex;flex-wrap:wrap;border:1px solid var(--border);background:var(--bg);color:var(--text-soft)}.tracking-meta>span{padding:7px 12px;border-right:1px solid var(--border);overflow-wrap:anywhere}.runs-table{min-width:900px}.run-name{color:var(--text);font-weight:600}.run-id{display:block;color:var(--text-soft);font-size:10px}.run-tags{display:flex;flex-wrap:wrap;gap:4px}.run-tag{display:inline-block;padding:1px 6px;border:1px solid var(--border);color:var(--text-muted);font-size:10.5px}.run-heading{display:flex;justify-content:space-between;gap:20px;padding:24px;border:1px solid var(--border);background:var(--bg)}.run-heading h2{display:flex;flex-wrap:wrap;align-items:center;gap:16px;margin:10px 0 12px;font-size:26px;font-weight:700;letter-spacing:-.045em;overflow-wrap:anywhere}.run-heading h2 .status-badge{font-size:11.5px;font-weight:500}.run-heading-meta{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-end;gap:8px;color:var(--text-soft);font-size:11px}.run-heading-meta strong{margin-left:8px;color:var(--text)}.tracking-toolbar,.tracking-toolbar label{display:flex;flex-wrap:wrap;align-items:center;gap:12px;color:var(--text-soft);font-size:11px}.tracking-toolbar{padding:8px 0;gap:24px}.tracking-toolbar select{padding:4px 10px;border:1px solid var(--border);background:var(--bg);color:var(--text)}.tracking-toolbar input{width:110px;accent-color:var(--amber)}.tracking-toolbar output{min-width:4ch}.run-section-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:10px}.run-section-header h3{font-size:14px}.run-section-header>span{color:var(--text-soft)}.run-chart-grid,.run-panels{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;border:1px solid var(--border);background:var(--border)}.run-chart-cell{min-width:0;padding:14px 16px 12px;background:var(--bg)}.chart-cell-heading,.chart-readout{display:flex;align-items:center;gap:12px;color:var(--text-soft)}.chart-cell-heading h4{flex:1;margin:0;color:var(--text);font-size:12px;font-weight:600;overflow-wrap:anywhere}.cell-index{color:var(--amber)}.line-chart{width:100%;min-height:210px;margin-top:14px}.chart-empty{display:grid;min-height:210px;place-items:center;color:var(--text-soft)}.chart-readout{flex-wrap:wrap;font-size:10px;letter-spacing:0;text-transform:none}.run-panels{gap:16px;border:0;background:transparent}.run-json-panel{min-width:0}.run-kv{margin:0;padding:14px 16px}.run-kv>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.5fr);gap:16px;padding:5px 0;border-bottom:1px solid var(--hairline);font-size:11.5px}.run-kv dt{color:var(--text-soft);overflow-wrap:anywhere}.run-kv dd{margin:0;overflow-wrap:anywhere;white-space:pre-wrap;text-align:right}.run-panel-empty{padding:16px;color:var(--text-soft)}.run-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));margin:0}.run-stats>div{padding:16px;border-right:1px solid var(--border)}.run-stats dt{color:var(--text-soft)}.run-stats dd{width:fit-content;margin:8px 0 0;font-size:20px;font-weight:700}.run-index-errors{padding:16px;color:var(--amber);overflow-wrap:anywhere}.tracker-empty{border:1px dashed var(--accent-line);background:var(--accent-soft)}.tracker-empty strong{color:var(--text)}.tracker-empty code{color:var(--amber)}.run-tab-panel:not([hidden]){display:grid;gap:16px}.run-tabs{margin:0;border-bottom:1px solid var(--border)}.run-tabs button:focus-visible,.actor-tile:focus-visible,.histogram-heatmap:focus-visible{outline:2px solid var(--amber);outline-offset:-2px}.episode-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.episode-return{grid-column:span 2}.episode-wide{grid-column:1 / -1}.episode-note{margin:10px 0;color:var(--text-soft);font-size:10.5px}.actor-tiles{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:4px;margin:18px 0 12px}.actor-tile{position:relative;display:grid;place-items:center;min-height:32px;border:1px solid var(--border);color:var(--text);font-size:10.5px;overflow-wrap:anywhere}.actor-outlier{border:1px dashed var(--red)}.actor-outlier>span{position:absolute;top:0;right:2px;color:var(--red)}.actor-warning{color:var(--red)}.lag-bars{display:flex;align-items:flex-end;gap:3px;height:180px;padding:12px 0}.lag-column{display:flex;flex:1;min-width:0;flex-direction:column;align-items:center;justify-content:flex-end;gap:5px;font-size:9px;color:var(--text-soft)}.lag-column>i{display:block;width:80%;background:var(--amber);opacity:.85}.lag-column>i.lag-warning{background:var(--red)}.eval-legend,.eval-success{color:var(--blue)}.eval-table{margin-top:14px;min-width:760px}.eval-best{background:var(--accent-soft)}.eval-star{color:var(--amber);white-space:nowrap}.eval-success{display:flex;align-items:center;gap:8px}.eval-progress{width:52px;height:4px;background:var(--groove)}.eval-progress i{display:block;height:100%;background:var(--blue)}.replayed-toggle{display:flex;align-items:center;gap:8px;color:var(--text-soft);font-size:11px}.replayed-toggle input{accent-color:var(--amber)}.episode-replayed{color:var(--text-soft)}.episode-list-count{padding:0 16px}.histogram-panel{border:1px solid var(--border)}.histogram-heatmap{display:block;max-width:100%;margin-top:14px}.heatmap-readout{min-height:35px;margin-bottom:8px}.run-tabs{overflow-x:auto}.rollout-layout{display:grid;grid-template-columns:minmax(200px,280px) minmax(0,1fr);gap:1px;background:var(--border);border:1px solid var(--border)}.tracking-item-list{display:flex;flex-direction:column;gap:1px;margin-top:12px}.tracking-item-list button{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 14px;padding:10px;border:1px solid var(--border);background:var(--bg);color:var(--text);text-align:left;font:inherit;cursor:pointer}.tracking-item-list button small{width:100%;color:var(--text-soft)}.tracking-item-list button[aria-pressed=true]{border-color:var(--amber);background:var(--amber-soft)}.rollout-player{min-width:0}.rollout-tracks{display:block;max-width:100%;margin:12px 0;cursor:crosshair}.rollout-controls{display:flex;align-items:center;gap:14px;margin:12px 0}.rollout-controls input{flex:1;min-width:60px;accent-color:var(--amber)}.action-legend,.action-legend span{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.action-legend{margin-top:14px;gap:16px;font-size:10px;color:var(--text-soft)}.action-legend i{width:10px;height:8px}.rollout-video .tracking-media{max-height:260px;width:auto;margin:14px auto}.completion-signal{grid-template-columns:repeat(3,minmax(0,1fr))}.completion-groups{flex-direction:row;flex-wrap:wrap;gap:6px;margin:0}.completion-groups button{flex-direction:column;font-size:11px}.tracking-banner{padding:14px 16px;border:1px solid var(--amber);background:var(--amber-soft);color:var(--amber)}.completion-prompt{padding:16px;border:1px solid var(--border);background:var(--bg)}.completion-prompt pre,.completion-response pre{margin:10px 0;white-space:pre-wrap;overflow-wrap:anywhere;font:inherit}.completion-stats{grid-template-columns:repeat(5,minmax(0,1fr));border:1px solid var(--border);border-top:0;padding:16px}.completion-table td{vertical-align:top}.completion-response{min-width:220px;max-width:480px;white-space:normal}.response-toggle{width:100%;padding:0;border:0;background:none;color:var(--text);font:inherit;text-align:left;cursor:pointer}.response-preview{max-height:4.5em;overflow:hidden}.reward-pills{display:flex;flex-wrap:wrap;gap:4px}.advantage-bar{display:inline-block;position:relative;width:90px;height:10px;margin-right:8px;background:var(--groove);vertical-align:middle}.advantage-bar:before{position:absolute;left:50%;top:-2px;bottom:-2px;width:1px;background:var(--border-strong);content:""}.advantage-bar i{position:absolute;top:0;bottom:0}.truncated-badge{color:var(--red);font-size:10px}.tracking-table td{max-width:400px;white-space:pre-wrap;overflow-wrap:anywhere}.blob-chip{cursor:pointer;background:var(--amber-soft);color:var(--amber);font:inherit}.tracking-media-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:12px}.tracking-media{display:block;max-width:100%;width:100%;max-height:420px;object-fit:contain;margin-top:14px;background:var(--groove)}.media-caption{white-space:pre-wrap;overflow-wrap:anywhere;margin-top:10px}.tracking-media-dialog{width:min(840px,90vw);max-height:90vh;overflow:auto;padding:18px;color:var(--text);background:var(--bg);border:1px solid var(--border-strong)}.tracking-media-dialog::backdrop{background:#0009}@media(max-width:900px){.rollout-layout,.completion-signal{grid-template-columns:1fr}.completion-stats{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:900px){.episode-return{grid-column:auto}.run-chart-grid,.run-panels{grid-template-columns:1fr}.run-stats{grid-template-columns:repeat(3,minmax(0,1fr))}.run-heading{flex-direction:column;padding:18px}.run-heading-meta{align-items:flex-start}}.app-shell-docked .main-column{margin-right:var(--dock-width, 420px)}.dock-toggle-active{border-color:var(--accent-line);background:var(--accent-soft);color:var(--accent-fg)}.assistant-dock{position:fixed;z-index:40;top:0;right:0;bottom:0;display:flex;width:var(--dock-width, 420px);flex-direction:column;border-left:1px solid var(--border-strong);background:var(--surface);color:var(--text);outline:0}.assistant-dock[hidden]{display:none}body.dock-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.dock-resize{position:absolute;z-index:2;top:0;bottom:0;left:-3px;width:6px;cursor:col-resize}.dock-resize:hover,.dock-resize:focus-visible{background:var(--accent-line)}.dock-header{display:flex;height:var(--topbar);flex:none;align-items:center;gap:8px;padding:0 8px 0 12px;border-bottom:1px solid var(--border);background:var(--wash)}.dock-title{display:inline-flex;flex:none;align-items:center;gap:6px;font-size:var(--text-xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase}.dock-title>svg{color:var(--accent-fg)}.dock-header-actions{display:inline-flex;margin-left:auto;gap:2px}.dock-picker{position:relative;min-width:0;flex:1}.dock-picker-button{display:inline-flex;max-width:100%;height:var(--control);align-items:center;gap:5px;padding:0 8px;border:1px solid var(--border-strong);background:var(--surface-sunk);color:var(--text-muted);font-size:var(--text-2xs)}.dock-picker-button:hover,.dock-picker-button[aria-expanded=true]{border-color:var(--accent-line);color:var(--text)}.dock-picker-provider,.dock-picker-model{overflow:hidden;min-width:0;text-overflow:ellipsis;white-space:nowrap}.dock-picker-provider{flex:0 1 auto;color:var(--text-soft)}.dock-picker-model{flex:1 1 auto;color:var(--text)}.dock-picker-sep{color:var(--text-faint)}.dock-picker-popover{position:absolute;z-index:5;top:calc(100% + 4px);left:0;width:min(340px,80vw);border:1px solid var(--border-strong);background:var(--surface);box-shadow:0 14px 40px #00000059}.dock-picker-search{display:flex;align-items:center;gap:6px;padding:0 9px;border-bottom:1px solid var(--border);color:var(--text-soft)}.dock-picker-search input{width:100%;height:32px;border:0;outline:0;background:transparent;font-size:var(--text-xs)}.dock-picker-list{max-height:320px;overflow-y:auto;padding:4px 0}.dock-picker-group{padding:6px 10px 2px;color:var(--text-faint);font-size:var(--text-3xs);letter-spacing:.06em;text-transform:uppercase}.dock-picker-option{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 10px 5px 16px;cursor:pointer;font-size:var(--text-xs);overflow-wrap:anywhere}.dock-picker-option-active{background:var(--accent-soft);color:var(--text)}.dock-picker-option[aria-selected=true]>svg{flex:none;color:var(--accent-fg)}.dock-picker-empty{padding:10px;color:var(--text-soft);font-size:var(--text-xs)}.dock-tabs{flex:none;padding:0 8px}.dock-log{display:flex;min-height:0;flex:1;flex-direction:column;gap:14px;overflow-y:auto;padding:14px 14px 18px}.dock-hint{color:var(--text-soft);font-size:var(--text-xs);line-height:1.5}.dock-empty,.dock-welcome{display:flex;flex-direction:column;align-items:center;gap:8px;margin:auto 0;padding:18px 8px;color:var(--text-muted);font-size:var(--text-xs);text-align:center}.dock-empty>svg,.dock-welcome>svg{color:var(--accent-fg)}.dock-starters{display:flex;width:100%;flex-direction:column;gap:6px;margin-top:8px}.dock-starter{padding:8px 10px;border:1px solid var(--border);background:var(--surface-sunk);color:var(--text-muted);font-size:var(--text-xs);text-align:left}.dock-starter:hover{border-color:var(--accent-line);color:var(--text)}.dock-message{display:flex;min-width:0;flex-direction:column}.dock-message-user{align-items:flex-end}.dock-bubble{max-width:85%;padding:7px 11px;border:1px solid var(--border);border-radius:10px 10px 2px;background:var(--surface-muted);font-size:var(--text-sm);line-height:1.5;overflow-wrap:anywhere;white-space:pre-wrap}.dock-tools{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.dock-tool{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border:1px solid var(--border);background:var(--wash);color:var(--text-soft);font-size:var(--text-3xs)}.dock-tool-failed{border-color:var(--red-soft);color:var(--red)}.dock-card{display:flex;flex-direction:column;gap:6px;padding:10px 11px;border:1px solid var(--border-strong);border-left:2px solid var(--accent);background:var(--surface-sunk);font-size:var(--text-xs)}.dock-card-submitted{border-left-color:var(--ok)}.dock-card-dismissed{border-left-color:var(--border-strong);opacity:.7}.dock-card-title{display:flex;align-items:baseline;justify-content:space-between;gap:8px;overflow-wrap:anywhere}.dock-card-meta{color:var(--text-soft);font-size:var(--text-2xs)}.dock-card-spec summary{cursor:pointer;color:var(--text-soft);font-size:var(--text-2xs)}.dock-card-spec pre{max-height:220px;margin:6px 0 0;overflow:auto;font-size:var(--text-2xs)}.dock-card-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.dock-card-confirm{width:100%;color:var(--text-muted)}.dock-card-error{color:var(--red)}.dock-state{flex:none;color:var(--text-soft);font-size:var(--text-3xs);text-transform:uppercase}.dock-state-open{color:var(--accent-fg)}.dock-state-approved{color:var(--ok)}.dock-state-declined{color:var(--red)}.dock-note{display:flex;align-items:flex-start;gap:6px;padding:6px 9px;border:1px dashed var(--accent-line);background:var(--accent-soft);color:var(--text-muted);font-size:var(--text-2xs)}.dock-note>svg{flex:none;margin-top:3px;color:var(--accent-fg)}.dock-card-plan .dock-card-title strong{display:inline-flex;align-items:center;gap:5px}.dock-card-plan .dock-card-title .status-badge{flex:none;font-size:var(--text-3xs)}.dock-card-plan-running,.dock-card-plan-approved{border-left-color:var(--ok)}.dock-card-plan-stopping{border-left-color:var(--amber)}.dock-card-plan-settled{border-left-color:var(--border-strong)}.research-card-facts{display:grid;gap:3px;margin:0}.research-card-facts>div{display:grid;grid-template-columns:64px 1fr;gap:8px}.research-card-facts dt{color:var(--text-soft);font-size:var(--text-2xs)}.research-card-facts dd{margin:0;color:var(--text-muted);overflow-wrap:anywhere}.research-gate{margin:0;color:var(--accent-fg);font-size:var(--text-2xs)}.research-stale{margin:0;color:var(--amber);font-size:var(--text-2xs)}.research-card-link{align-self:flex-start;font-size:var(--text-2xs)}.research-table{min-width:860px}.research-heading .research-goal{max-width:760px;margin:0 0 8px;color:var(--text-muted);white-space:pre-wrap}.research-budget-line{margin:0 0 10px;color:var(--text-soft);font-size:11.5px}.research-actions{display:flex;flex-direction:column;gap:6px;max-width:640px;font-size:12px}.research-meters{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;padding:14px 16px 18px}.research-meter{display:flex;flex-direction:column;gap:7px}.research-meter-head{display:flex;justify-content:space-between;gap:8px;color:var(--text-soft);font-size:11.5px}.research-meter-head .numeric{color:var(--text);font-variant-numeric:tabular-nums}.research-job-error{display:block;color:var(--red);font-size:10.5px}.research-notes{display:flex;flex-direction:column;margin:0;padding:0;list-style:none}.research-notes li{display:grid;grid-template-columns:110px 90px 1fr;gap:12px;padding:8px 16px;border-top:1px solid var(--border);font-size:12px}.research-note-time{color:var(--text-soft)}.research-note-kind{color:var(--accent-fg);text-transform:uppercase;font-size:10.5px}.dock-typing{display:inline-flex;gap:4px;padding:4px 0}.dock-typing span{width:6px;height:6px;border-radius:50%;background:var(--text-soft);animation:dock-typing 1.2s ease-in-out infinite}.dock-typing span:nth-child(2){animation-delay:.15s}.dock-typing span:nth-child(3){animation-delay:.3s}@keyframes dock-typing{0%,80%,to{opacity:.25;transform:translateY(0)}40%{opacity:1;transform:translateY(-3px)}}.dock-alert{display:flex;flex:none;align-items:center;gap:7px;margin:0 12px 8px;padding:7px 9px;border:1px solid var(--red-soft);background:var(--red-soft);color:var(--red);font-size:var(--text-xs)}.dock-requests{display:flex;min-height:0;flex:1;flex-direction:column;gap:10px;overflow-y:auto;padding:12px 14px}.dock-requests .dock-alert{margin:0}.dock-composer{display:flex;flex:none;align-items:flex-end;gap:6px;margin:0 12px 12px;padding:6px 6px 6px 10px;border:1px solid var(--border-strong);background:var(--surface-sunk)}.dock-composer:focus-within{border-color:var(--accent-line)}.dock-composer textarea{min-height:24px;max-height:200px;flex:1;resize:none;padding:3px 0;border:0;outline:0;background:transparent;font-size:var(--text-sm);line-height:1.45}.dock-send{display:inline-flex;width:28px;height:28px;flex:none;align-items:center;justify-content:center;border:0;background:var(--accent-fill);color:var(--on-accent)}.dock-send:disabled{background:var(--border-strong);color:var(--text-soft)}.dock-stop{background:var(--text-muted)}.icon-button-active{background:var(--accent-soft);color:var(--accent-fg)}.dock-message-assistant{gap:6px}.dock-step{display:inline-flex;align-items:center;gap:6px;color:var(--text-soft);font-family:var(--mono);font-size:var(--text-3xs);letter-spacing:.04em}.dock-trace{display:flex;flex-direction:column;gap:3px;margin:0;padding:0;list-style:none}.dock-tool-row{border:1px solid var(--border);background:var(--wash)}.dock-tool-row-failed{border-color:var(--red-soft)}.dock-tool-head,.dock-thinking>button,.dock-trace-toggle{display:flex;width:100%;min-width:0;align-items:center;gap:6px;padding:3px 7px;border:0;background:transparent;color:var(--text-soft);font-size:var(--text-2xs);text-align:left}.dock-tool-head:hover,.dock-thinking>button:hover,.dock-trace-toggle:hover{color:var(--text)}.dock-tool-chevron{flex:none;transition:transform .12s ease}[aria-expanded=true]>.dock-tool-chevron{transform:rotate(90deg)}.dock-tool-head>svg{flex:none}.dock-tool-name{flex:none;color:var(--text);font-family:var(--mono)}.dock-tool-args{overflow:hidden;min-width:0;flex:1;color:var(--text-faint);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap}.dock-tool-status{display:inline-flex;flex:none;margin-left:auto}.dock-tool-row-ok .dock-tool-status{color:var(--ok)}.dock-tool-row-failed .dock-tool-status{color:var(--red)}.dock-tool-detail{display:flex;flex-direction:column;gap:3px;padding:4px 8px 8px 24px;border-top:1px solid var(--border);font-size:var(--text-2xs)}.dock-tool-detail-label{color:var(--text-faint);font-size:var(--text-3xs);letter-spacing:.06em;text-transform:uppercase}.dock-tool-detail pre{max-height:200px;margin:0;overflow:auto;font-size:var(--text-2xs)}.dock-tool-detail p{color:var(--text-muted);overflow-wrap:anywhere;white-space:pre-wrap}.dock-thinking>p{padding:2px 8px 6px 24px;color:var(--text-faint);font-size:var(--text-2xs);font-style:italic;line-height:1.5;white-space:pre-wrap}.dock-narration .md{color:var(--text-soft);font-size:var(--text-xs)}.dock-trace-toggle{width:auto;padding:2px 0}.dock-answer-streaming>.md>:last-child:after{display:inline-block;width:6px;height:1em;margin-left:2px;vertical-align:text-bottom;background:var(--accent-fg);animation:blip 1s steps(2) infinite;content:""}.dock-answer-note{color:var(--text-faint);font-size:var(--text-3xs);text-transform:uppercase}.dock-inline-error{display:flex;align-items:center;gap:6px;padding:5px 8px;border:1px solid var(--red-soft);background:var(--red-soft);color:var(--red);font-size:var(--text-xs)}.dock-history{display:flex;min-height:0;flex:1;flex-direction:column;gap:12px;overflow-y:auto;padding:12px 10px}.dock-history .dock-alert{margin:0}.dock-history-heading{display:block;padding:0 6px 4px;color:var(--text-faint);font-size:var(--text-3xs);letter-spacing:.08em;text-transform:uppercase}.dock-history-list{margin:0;padding:0;list-style:none}.dock-history-item{position:relative;display:flex;align-items:center;gap:4px;padding:0 4px 0 0}.dock-history-item:hover,.dock-history-item-active{background:var(--surface-muted)}.dock-history-open{display:flex;min-width:0;flex:1;align-items:baseline;gap:8px;padding:6px;border:0;background:transparent;color:var(--text);font-size:var(--text-xs);text-align:left}.dock-history-title{overflow:hidden;min-width:0;flex:1;text-overflow:ellipsis;white-space:nowrap}.dock-history-time{flex:none;color:var(--text-faint);font-size:var(--text-3xs)}.dock-history-actions{display:inline-flex;flex:none;gap:2px;opacity:0}.dock-history-item:hover .dock-history-actions,.dock-history-item:focus-within .dock-history-actions{opacity:1}.dock-history-rename,.dock-history-confirm{display:flex;width:100%;flex-wrap:wrap;align-items:center;gap:6px;padding:6px;font-size:var(--text-xs)}.dock-history-rename input{min-width:0;height:28px;flex:1;padding:0 7px;border:1px solid var(--border-strong);outline:0;background:var(--surface);font-size:var(--text-xs)}.claude-code-card{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border:1px solid var(--border-strong);background:var(--surface-sunk)}.claude-code-card .inline-error{margin:0}.claude-code-status{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:var(--text-sm)}.claude-code-ok{color:var(--ok)}.claude-code-missing{color:var(--amber)}.claude-code-login{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.md{font-size:var(--text-sm);line-height:1.6;overflow-wrap:anywhere}.md>*+*{margin-top:8px}.md ul,.md ol{margin-bottom:0;padding-left:20px}.md li+li{margin-top:2px}.md code{padding:0 4px;border:1px solid var(--border);background:var(--surface-sunk);font-size:.92em}.md-heading{font-weight:600}.md-heading-1{font-size:var(--text-md)}.md-code{border:1px solid var(--border);background:var(--surface-sunk)}.md-code-bar{display:flex;align-items:center;justify-content:space-between;padding:2px 4px 2px 9px;border-bottom:1px solid var(--border);color:var(--text-soft);font-size:var(--text-3xs)}.md-copy{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border:0;background:none;color:var(--text-soft);font-size:var(--text-3xs)}.md-copy:hover{color:var(--text)}.md-code pre{margin:0;overflow-x:auto;padding:9px 10px;font-size:var(--text-xs);line-height:1.5}.md-code pre code{padding:0;border:0;background:none}.badge-tag{display:inline-flex;align-items:center;padding:0 6px;border:1px solid var(--border-strong);color:var(--text-soft);font-size:var(--text-3xs);font-weight:500;white-space:nowrap}.badge-tag-accent{border-color:var(--accent-line);color:var(--accent-fg)}.badge-tag-ok{border-color:var(--ok-line);color:var(--ok)}.provider-alert,.settings-alert{margin:12px 14px 0}.settings-alert{margin:0}.provider-list{margin:0;padding:0;list-style:none}.provider-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--hairline)}.provider-row-main{display:flex;min-width:0;flex:1;flex-direction:column;gap:2px}.provider-row-title{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.provider-row-meta{color:var(--text-soft);font-size:var(--text-2xs)}.provider-row-actions{display:flex;align-items:center;gap:6px}.toggle-field{display:inline-flex;align-items:center;gap:6px;color:var(--text-muted);font-size:var(--text-xs)}.toggle-field input{accent-color:var(--ok)}.provider-choose{padding-bottom:12px}.preset-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px;padding:0 14px}.preset-card{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:40px;padding:8px 10px;border:1px solid var(--border-strong);background:var(--surface-sunk);font-size:var(--text-xs);text-align:left}.preset-card:hover{border-color:var(--accent-line);background:var(--accent-soft)}.provider-choose-actions{padding:12px 14px 0}.provider-form{display:flex;flex-direction:column;gap:12px;padding:14px}.provider-form .form-grid{margin-top:0}.provider-form .inline-error{margin:0}.provider-form-head{display:flex;align-items:center;gap:8px}.provider-signin{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.provider-models{display:flex;flex-direction:column;gap:8px}.model-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px}.model-filter{height:30px;padding:0 9px;border:1px solid var(--border-strong);outline:0;background:var(--surface);font-size:var(--text-xs)}.model-checklist{display:grid;max-height:260px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:2px 12px;overflow-y:auto;padding:8px 10px;border:1px solid var(--border);background:var(--surface-sunk)}.model-check{display:flex;min-width:0;align-items:center;gap:7px;font-size:var(--text-xs)}.model-check span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.model-check input{flex:none;accent-color:var(--ok)}.field-inline{display:flex;gap:6px}.field-inline .button{height:36px}.field-hint a{display:inline-flex;align-items:center;gap:3px;color:var(--accent-fg)}.provider-advanced summary{cursor:pointer;color:var(--text-muted);font-size:var(--text-xs)}.provider-advanced .form-grid{margin-top:10px}.provider-form-actions{display:flex;gap:8px}@media(min-width:901px){.assistant-dock{top:48px}}@media(max-width:900px){.app-shell-docked .main-column{margin-right:0}.assistant-dock{z-index:60;top:0;right:0;bottom:0;left:0;width:100%;border-left:0}.dock-resize{display:none}}@media(prefers-reduced-motion:reduce){.dock-typing span{animation:none}}.fleet-init-body{padding:4px 14px 12px}.fleet-init-body .field{margin-top:12px}.fleet-init-body .field label span{display:inline-flex;align-items:center;gap:6px}.fleet-init-editor{min-height:220px;font-family:var(--mono);font-size:var(--text-xs);-moz-tab-size:2;tab-size:2;white-space:pre}.fleet-init-editor:disabled{color:var(--text-faint);cursor:not-allowed}.fleet-init-meta{display:flex;justify-content:space-between;gap:12px;margin-top:6px;color:var(--text-faint);font-family:var(--mono);font-size:var(--text-2xs)}.fleet-init-over{color:var(--red);font-weight:650}.fleet-init-warning{display:flex;align-items:flex-start;gap:8px;margin-top:12px;padding:9px 10px;border:1px solid var(--amber-soft);border-radius:var(--radius-sm);background:var(--amber-soft);color:var(--amber);font-size:var(--text-xs)}.fleet-init-warning ul{margin:4px 0 0;padding-left:18px}.fleet-init-yaml{margin-top:14px;padding:10px 12px;border:1px solid var(--border)}.fleet-init-yaml h3{font-size:var(--text-xs);font-weight:650}.fleet-init-yaml ul{margin:6px 0 0;padding-left:18px;font-family:var(--mono);font-size:var(--text-xs)}.fleet-init-body .inline-notice{margin:12px 0 0}.fleet-init-actions{display:flex;justify-content:flex-end;gap:8px;padding:10px 14px;border-top:1px solid var(--border)}
|