From 1e68f62499271de360ef8a2a925f9322ae3ebe18 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Fri, 7 Aug 2026 10:59:39 +0200 Subject: [PATCH] feat: complete MC2 Kahlschlag (remove governor, memory, eigenleben, obsolete deploy scripts and frontend widgets) --- backend/app.py | 14 - backend/routers/eigenleben.py | 54 -- backend/routers/governor.py | 40 -- backend/routers/memory.py | 92 --- backend/services/eigenleben.py | 219 ------- backend/services/memory.py | 176 ------ deploy/chef-gutachter-feed.sh | 104 ---- deploy/chef-gutachter-prompt.md | 15 - deploy/curator-archive-watchdog.sh | 11 - deploy/curator-idle-watchdog.sh | 62 -- deploy/curator-monitor.sh | 90 --- deploy/curator_archive_logic.py | 198 ------ deploy/deploy.sh | 304 +-------- deploy/dreaming-feed.sh | 74 --- deploy/dreaming-prompt.md | 106 ---- deploy/fremdblick.sh | 69 --- deploy/hermes-builtin-ui.service | 21 - deploy/hermes-patches/apply.py | 259 -------- deploy/hermes-patches/mc2_kanban_reaper.py | 84 --- deploy/hermes-release-radar-feed.sh | 223 ------- deploy/idle-radar-feed.sh | 298 --------- deploy/idle-radar-prompt.md | 26 - deploy/karten-gutachter.sh | 192 ------ deploy/mc2-bagatell.service | 9 - deploy/mc2-bagatell.timer | 9 - deploy/mc2-selfsmoke.service | 7 - deploy/mc2-selfsmoke.timer | 10 - deploy/mc2-steward.service | 27 - deploy/mem0-konsolidierung.py | 147 ----- deploy/mem0-konsolidierung.sh | 6 - deploy/mem0-service.service | 26 - deploy/night-cron-wrapper.sh | 23 - deploy/opencode-lauf.sh | 140 ----- deploy/opencode/AGENTS.global.md | 82 --- deploy/opencode/README.md | 75 --- deploy/opencode/VERIFY.template | 21 - deploy/opencode/opencode.box.json | 88 --- deploy/opencode/opencode.pc.json | 88 --- deploy/opencode/plugin/mc2-governor.ts | 248 -------- deploy/pruefstand/auto_adopt.py | 45 -- deploy/pruefstand/harness.py | 581 ------------------ deploy/pruefstand/pruefstand.sh | 468 -------------- .../agent/aufgaben/01-todos-sammeln/task.json | 13 - .../aufgaben/02-konfig-reparieren/task.json | 13 - .../aufgaben/03-messwerte-bericht/task.json | 11 - .../agent/aufgaben/04-aufraeumen/task.json | 17 - .../coding/aufgaben/01-csv-summe/task.json | 5 - .../coding/aufgaben/01-csv-summe/verify.py | 28 - .../aufgaben/02-bugfix-fenster/task.json | 8 - .../aufgaben/02-bugfix-fenster/verify.py | 24 - .../coding/aufgaben/03-log-parser/task.json | 5 - .../coding/aufgaben/03-log-parser/verify.py | 29 - .../coding/aufgaben/04-lager-klasse/task.json | 5 - .../coding/aufgaben/04-lager-klasse/verify.py | 31 - .../coding/aufgaben/05-flatten/task.json | 5 - .../coding/aufgaben/05-flatten/verify.py | 22 - .../coding/aufgaben/06-slugify/task.json | 5 - .../coding/aufgaben/06-slugify/verify.py | 21 - .../pruefstand/suites/deutsch/aufgaben.json | 19 - .../recherche/aufgaben/01-zeitserver.json | 6 - .../aufgaben/02-band-schluessel.json | 6 - .../recherche/aufgaben/03-pv-anteil.json | 6 - .../recherche/aufgaben/04-quer-wartung.json | 6 - .../recherche/dokumente/backup-konzept.md | 17 - .../recherche/dokumente/energie-bericht.md | 16 - .../recherche/dokumente/netzwerk-handbuch.md | 17 - .../pruefstand/suites/vision/gen_testbild.py | 37 -- deploy/pruefstand/suites/vision/task.json | 4 - deploy/radar-feed.sh | 25 - deploy/radar-prompt.md | 64 -- deploy/radar-selbstkritik-wrapper.sh | 14 - deploy/release-radar-prompt.md | 25 - deploy/selbstkritik-feed.sh | 39 -- deploy/selbstkritik-prompt.md | 36 -- deploy/stack-rundumschlag-feed.sh | 87 --- deploy/stack-rundumschlag-prompt.md | 36 -- deploy/trend-radar-feed.sh | 485 --------------- deploy/trend-radar-prompt.md | 31 - deploy/voice-service.service | 23 - ...View-BsfE1obV.js => AgentView-ChtY_-hS.js} | 9 +- ...itmBxF.js => AuftragsbuchView-D_PNalAe.js} | 12 +- ...ew-DKRwHk9a.js => ChronikView-gK7ROOGU.js} | 15 +- ...ew-DegkAqmm.js => ConnectView-DTJvmfv6.js} | 4 +- ...nhdxSyQi.js => EigenlebenView-BSzH0Ym2.js} | 4 +- ...View-B3HC-zB_.js => GraphView-DZMQCEHP.js} | 2 +- ...View-DqsY9Wr1.js => GuideView-D88tSftX.js} | 8 +- ...View-lXJC70fR.js => IdeenView-6hSlKBsS.js} | 10 +- ...ew-BbOvz3DQ.js => KonsoleView-TyxWGq5c.js} | 2 +- ...iew-DNCBwc-V.js => MemoryView-4uLiE0nS.js} | 6 +- ...iew-CoGGXlnQ.js => ModelsView-Dqag6LQ7.js} | 6 +- ...l-gNRlDlbe.js => SectionLabel-PIsOl-2s.js} | 2 +- ...iew-Czc4UCXS.js => WissenView-DIk50fMS.js} | 4 +- ...open-2v7qByfb.js => book-open-CWgPuOOr.js} | 2 +- frontend/dist/assets/chevron-down-DNDogRoC.js | 6 + ...cle-x-D8NCr-a2.js => circle-x-BxATYeTa.js} | 2 +- ...e-xml-owp4HQPY.js => code-xml-BJe9mLlE.js} | 2 +- .../{copy-CRj5M_pY.js => copy-g04tL7QX.js} | 2 +- ...en-CtWva2VF.js => folder-open-B5JYx4j5.js} | 2 +- frontend/dist/assets/index-BJEqDXwz.css | 1 + frontend/dist/assets/index-Bm-JldFM.css | 1 - .../{index-BChEIiQl.js => index-Cejiqiju.js} | 242 ++++---- ...{layers-C62c1z5s.js => layers-DxeU1JZb.js} | 2 +- ...ccw-CPYnjQ6M.js => rotate-ccw-C_-gXN7Y.js} | 2 +- .../{send-CS1kRsDf.js => send-pU4Gy5vX.js} | 2 +- .../{zap-I2SMIyr4.js => zap-BeUXRjSL.js} | 2 +- frontend/dist/index.html | 4 +- .../dashboard/TokenPerformanceCard.tsx | 103 ---- frontend/src/views/cockpit/CockpitView.tsx | 8 +- frontend/src/views/cockpit/MorgenlageCard.tsx | 45 -- 109 files changed, 192 insertions(+), 6392 deletions(-) delete mode 100644 backend/routers/eigenleben.py delete mode 100644 backend/routers/governor.py delete mode 100644 backend/routers/memory.py delete mode 100644 backend/services/eigenleben.py delete mode 100644 backend/services/memory.py delete mode 100644 deploy/chef-gutachter-feed.sh delete mode 100644 deploy/chef-gutachter-prompt.md delete mode 100644 deploy/curator-archive-watchdog.sh delete mode 100644 deploy/curator-idle-watchdog.sh delete mode 100755 deploy/curator-monitor.sh delete mode 100644 deploy/curator_archive_logic.py delete mode 100644 deploy/dreaming-feed.sh delete mode 100644 deploy/dreaming-prompt.md delete mode 100644 deploy/fremdblick.sh delete mode 100644 deploy/hermes-builtin-ui.service delete mode 100644 deploy/hermes-patches/apply.py delete mode 100644 deploy/hermes-patches/mc2_kanban_reaper.py delete mode 100644 deploy/hermes-release-radar-feed.sh delete mode 100644 deploy/idle-radar-feed.sh delete mode 100644 deploy/idle-radar-prompt.md delete mode 100644 deploy/karten-gutachter.sh delete mode 100644 deploy/mc2-bagatell.service delete mode 100644 deploy/mc2-bagatell.timer delete mode 100644 deploy/mc2-selfsmoke.service delete mode 100644 deploy/mc2-selfsmoke.timer delete mode 100644 deploy/mc2-steward.service delete mode 100644 deploy/mem0-konsolidierung.py delete mode 100644 deploy/mem0-konsolidierung.sh delete mode 100644 deploy/mem0-service.service delete mode 100644 deploy/night-cron-wrapper.sh delete mode 100644 deploy/opencode-lauf.sh delete mode 100644 deploy/opencode/AGENTS.global.md delete mode 100644 deploy/opencode/README.md delete mode 100644 deploy/opencode/VERIFY.template delete mode 100644 deploy/opencode/opencode.box.json delete mode 100644 deploy/opencode/opencode.pc.json delete mode 100644 deploy/opencode/plugin/mc2-governor.ts delete mode 100644 deploy/pruefstand/auto_adopt.py delete mode 100644 deploy/pruefstand/harness.py delete mode 100644 deploy/pruefstand/pruefstand.sh delete mode 100644 deploy/pruefstand/suites/agent/aufgaben/01-todos-sammeln/task.json delete mode 100644 deploy/pruefstand/suites/agent/aufgaben/02-konfig-reparieren/task.json delete mode 100644 deploy/pruefstand/suites/agent/aufgaben/03-messwerte-bericht/task.json delete mode 100644 deploy/pruefstand/suites/agent/aufgaben/04-aufraeumen/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/verify.py delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/verify.py delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/03-log-parser/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/03-log-parser/verify.py delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/verify.py delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/05-flatten/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/05-flatten/verify.py delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/06-slugify/task.json delete mode 100644 deploy/pruefstand/suites/coding/aufgaben/06-slugify/verify.py delete mode 100644 deploy/pruefstand/suites/deutsch/aufgaben.json delete mode 100644 deploy/pruefstand/suites/recherche/aufgaben/01-zeitserver.json delete mode 100644 deploy/pruefstand/suites/recherche/aufgaben/02-band-schluessel.json delete mode 100644 deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json delete mode 100644 deploy/pruefstand/suites/recherche/aufgaben/04-quer-wartung.json delete mode 100644 deploy/pruefstand/suites/recherche/dokumente/backup-konzept.md delete mode 100644 deploy/pruefstand/suites/recherche/dokumente/energie-bericht.md delete mode 100644 deploy/pruefstand/suites/recherche/dokumente/netzwerk-handbuch.md delete mode 100644 deploy/pruefstand/suites/vision/gen_testbild.py delete mode 100644 deploy/pruefstand/suites/vision/task.json delete mode 100644 deploy/radar-feed.sh delete mode 100644 deploy/radar-prompt.md delete mode 100755 deploy/radar-selbstkritik-wrapper.sh delete mode 100644 deploy/release-radar-prompt.md delete mode 100644 deploy/selbstkritik-feed.sh delete mode 100644 deploy/selbstkritik-prompt.md delete mode 100644 deploy/stack-rundumschlag-feed.sh delete mode 100644 deploy/stack-rundumschlag-prompt.md delete mode 100644 deploy/trend-radar-feed.sh delete mode 100644 deploy/trend-radar-prompt.md delete mode 100644 deploy/voice-service.service rename frontend/dist/assets/{AgentView-BsfE1obV.js => AgentView-ChtY_-hS.js} (89%) rename frontend/dist/assets/{AuftragsbuchView-DPitmBxF.js => AuftragsbuchView-D_PNalAe.js} (91%) rename frontend/dist/assets/{ChronikView-DKRwHk9a.js => ChronikView-gK7ROOGU.js} (82%) rename frontend/dist/assets/{ConnectView-DegkAqmm.js => ConnectView-DTJvmfv6.js} (89%) rename frontend/dist/assets/{EigenlebenView-nhdxSyQi.js => EigenlebenView-BSzH0Ym2.js} (94%) rename frontend/dist/assets/{GraphView-B3HC-zB_.js => GraphView-DZMQCEHP.js} (99%) rename frontend/dist/assets/{GuideView-DqsY9Wr1.js => GuideView-D88tSftX.js} (98%) rename frontend/dist/assets/{IdeenView-lXJC70fR.js => IdeenView-6hSlKBsS.js} (91%) rename frontend/dist/assets/{KonsoleView-BbOvz3DQ.js => KonsoleView-TyxWGq5c.js} (96%) rename frontend/dist/assets/{MemoryView-DNCBwc-V.js => MemoryView-4uLiE0nS.js} (98%) rename frontend/dist/assets/{ModelsView-CoGGXlnQ.js => ModelsView-Dqag6LQ7.js} (95%) rename frontend/dist/assets/{SectionLabel-gNRlDlbe.js => SectionLabel-PIsOl-2s.js} (93%) rename frontend/dist/assets/{WissenView-Czc4UCXS.js => WissenView-DIk50fMS.js} (96%) rename frontend/dist/assets/{book-open-2v7qByfb.js => book-open-CWgPuOOr.js} (90%) create mode 100644 frontend/dist/assets/chevron-down-DNDogRoC.js rename frontend/dist/assets/{circle-x-D8NCr-a2.js => circle-x-BxATYeTa.js} (89%) rename frontend/dist/assets/{code-xml-owp4HQPY.js => code-xml-BJe9mLlE.js} (88%) rename frontend/dist/assets/{copy-CRj5M_pY.js => copy-g04tL7QX.js} (90%) rename frontend/dist/assets/{folder-open-CtWva2VF.js => folder-open-B5JYx4j5.js} (90%) create mode 100644 frontend/dist/assets/index-BJEqDXwz.css delete mode 100644 frontend/dist/assets/index-Bm-JldFM.css rename frontend/dist/assets/{index-BChEIiQl.js => index-Cejiqiju.js} (51%) rename frontend/dist/assets/{layers-C62c1z5s.js => layers-DxeU1JZb.js} (91%) rename frontend/dist/assets/{rotate-ccw-CPYnjQ6M.js => rotate-ccw-C_-gXN7Y.js} (88%) rename frontend/dist/assets/{send-CS1kRsDf.js => send-pU4Gy5vX.js} (90%) rename frontend/dist/assets/{zap-I2SMIyr4.js => zap-BeUXRjSL.js} (96%) delete mode 100644 frontend/src/components/dashboard/TokenPerformanceCard.tsx delete mode 100644 frontend/src/views/cockpit/MorgenlageCard.tsx diff --git a/backend/app.py b/backend/app.py index 442cefa..412a830 100644 --- a/backend/app.py +++ b/backend/app.py @@ -25,15 +25,12 @@ from routers import ( chronik, connect, console, - eigenleben, events, gateway_proxy, - governor, health, hermes_ui, ideen, maintenance, - memory, models, routing, system, @@ -43,7 +40,6 @@ from routers import ( ) from routers import reminders as reminders_router from services import ketten_digest, metrics_history, reminders, sentry, warmer -from services import memory as memory_svc from starlette.requests import Request # Zentrales Logging — Level via MC_LOG_LEVEL (INFO default). Eine Konfiguration @@ -74,13 +70,6 @@ async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: tasks.append(asyncio.create_task(ketten_digest.digest_loop())) # 24-h-Metrik-Verlauf (Cockpit-Zeitachse): 10-s-Sampler, Ringpuffer, persistiert. tasks.append(asyncio.create_task(metrics_history.sampler_loop())) - if memory_svc.AUTO_DEDUPE_ENABLED: - tasks.append(asyncio.create_task(memory_svc.auto_dedupe_loop())) - log.info( - "Mem0-Auto-Dedupe aktiv (alle %ss, Schwelle %s)", - memory_svc.AUTO_DEDUPE_INTERVAL, - memory_svc.AUTO_DEDUPE_THRESHOLD, - ) # Geteilter HTTP-Client zur lokalen Engine: Keep-Alive/Connection-Pooling statt neuer Client # pro /v1-Anfrage (spart Sockets/TIME_WAIT unter parallelen Agent-Strömen von Zed/Kilo). app.state.gw_client = httpx.AsyncClient( @@ -121,7 +110,6 @@ app.include_router(models.router) app.include_router(routing.router) app.include_router(system.router) app.include_router(connect.router) -app.include_router(memory.router) app.include_router(agent.router) app.include_router( voice.router @@ -142,8 +130,6 @@ app.include_router(maintenance.router) app.include_router(auftragsbuch.router) # Vorschlags-Inbox (Mensch-Gate als Klick) app.include_router(ideen.router) # Ideen-Queue (natives Hermes-Kanban) — Tür der Zentrale app.include_router(chronik.router) # Timeline der autonomen Taten (Announce-Store) -app.include_router(governor.router) # Token-Wächter (:8100) — Zählerstand fürs Cockpit -app.include_router(eigenleben.router) # „Von allein": Skills + Vorschlags-Bilanz der Box app.include_router(events.router) # SSE-Eventstrom /api/events (P3a) — Invalidation-Bus app.include_router(wissen.router) # Wissens-Vault (Traum-Notizen) read-only app.include_router(zeitmaschine.router) # Snapshots ansehen + Ein-Klick-Restore (detached) diff --git a/backend/routers/eigenleben.py b/backend/routers/eigenleben.py deleted file mode 100644 index 4af2f36..0000000 --- a/backend/routers/eigenleben.py +++ /dev/null @@ -1,54 +0,0 @@ -"""Eigenleben-Endpoints — „Von allein“-Ansicht (Skills + Vorschlags-Bilanz), read-only.""" - -from fastapi import APIRouter, HTTPException -from pydantic import BaseModel -from services import eigenleben - -router = APIRouter(prefix="/api") - - -class SkillItem(BaseModel): - id: str - name: str - kategorie: str | None - aktiv: bool | None - beschreibung: str - version: str - autor: str - herkunft: str - herkunft_label: str - genutzt: int - zuletzt_genutzt: str | None - erstellt: str | None - status: str - geaendert: float - - -class EigenlebenOverviewResponse(BaseModel): - available: bool - skills: list[SkillItem] - selbst_erstellt: int - bilanz: dict - - -class SkillTextResponse(BaseModel): - id: str - text: str - - -@router.get("/eigenleben", response_model=EigenlebenOverviewResponse) -def get_overview() -> dict: - return eigenleben.overview() - - -# :path — Kategorie-Skills haben einen Schrägstrich in der ID (autonomous-ai-agents/ -# hermes-agent). Als normales {skill_id}-Segment matcht die Route dann nicht, der Request -# fällt in den SPA-Fallback (index.html, Status 200) und die UI zeigt „Konnte den -# Skill-Text nicht laden". Die Pfad-Validierung (max. eine Ebene, keine . /..) macht -# services.eigenleben.skill_text. -@router.get("/eigenleben/skill/{skill_id:path}", response_model=SkillTextResponse) -def get_skill(skill_id: str) -> dict: - text = eigenleben.skill_text(skill_id) - if text is None: - raise HTTPException(404, "Skill nicht gefunden.") - return {"id": skill_id, "text": text} diff --git a/backend/routers/governor.py b/backend/routers/governor.py deleted file mode 100644 index f81b010..0000000 --- a/backend/routers/governor.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Governor — Fenster auf den Token-Waechter (:8100). - -Der Governor ist ein eigenstaendiger, absichtlich winziger Proxy ohne Datenbank: er -sitzt zwischen den Coding-Agenten und diesem Gateway, zaehlt ehrlich mit (echte -`usage.prompt_tokens` aus jeder Antwort) und zieht bei ueberlangen Sitzungen die -Notbremse. Hier wird nichts Neues erhoben — nur sein Status-Endpunkt gleichursprünglich -fuer die Oberflaeche verfuegbar gemacht, damit das Frontend nicht per CORS auf einen -zweiten Port ausweichen muss. - -Faellt der Governor aus, liefert dieser Router `ok: false` statt eines Fehlers: die -Kachel zeigt dann „nicht erreichbar" und das Cockpit bleibt heil. -""" - -import os - -import httpx -from fastapi import APIRouter - -router = APIRouter(prefix="/api") - -GOVERNOR_URL = os.environ.get("MC_GOVERNOR_URL", "http://127.0.0.1:8100") - - -@router.get("/governor") -async def governor_status() -> dict: - """Momentaufnahme des Token-Waechters. Nie werfen — die Kachel darf nie das Cockpit reissen.""" - try: - async with httpx.AsyncClient(timeout=3.0) as c: - r = await c.get(f"{GOVERNOR_URL}/governor/status") - r.raise_for_status() - data = r.json() - data["reachable"] = True - return data - except Exception as exc: - return { - "ok": False, - "reachable": False, - "error": f"{type(exc).__name__}: {exc}", - "url": GOVERNOR_URL, - } diff --git a/backend/routers/memory.py b/backend/routers/memory.py deleted file mode 100644 index abfdf06..0000000 --- a/backend/routers/memory.py +++ /dev/null @@ -1,92 +0,0 @@ -"""Memory-Endpoints (geteiltes Gedächtnis). LAN-only, kein Token in 2.0-Phase 3.""" - -import time - -from fastapi import APIRouter, HTTPException -from pydantic import BaseModel -from services import memory -from services.voice_metrics import park, record_stage - -router = APIRouter(prefix="/api") - - -class MemIn(BaseModel): - content: str - category: str = "knowledge" - source: str = "manual" - - -class MemUp(BaseModel): - content: str | None = None - category: str | None = None - - -class DedupeIn(BaseModel): - apply: bool = False - threshold: float = 0.85 - - -class LearnIn(BaseModel): - text: str | None = None - messages: list[dict] | None = None - source: str = "auto" - category: str = "knowledge" - - -@router.get("/memory/export") -def export() -> dict: - return memory.export_text() - - -@router.get("/memory/graph") -def graph(min_score: float = 0.45, top_k: int = 3) -> dict: - """Fakten als Ähnlichkeits-Graph (Knoten + semantische Kanten) für die Visualisierung.""" - return memory.graph(min_score=min_score, top_k=top_k) - - -@router.post("/memory/learn", status_code=201) -def learn(body: LearnIn) -> dict: - """Auto-Lernen: Gesprächs-Turns/Text durchreichen → Mem0 extrahiert Fakten selbst.""" - return memory.learn(text=body.text, messages=body.messages, - source=body.source, category=body.category) - - -@router.post("/memory/dedupe") -def dedupe(body: DedupeIn) -> dict: - return memory.dedupe(apply=body.apply, threshold=body.threshold) - - -@router.get("/memory") -def list_mem(q: str = "", category: str = "") -> list[dict]: - # Semantischer Retrieve (q gesetzt) = u.a. Hermes' Mem0-Prefetch VOR jedem Turn. Dauer messen - # + parken, damit der laufende Voice-Chat-Turn sie als Unter-Detail seiner Hirn-Zeit einsammelt. - if q: - _t0 = time.perf_counter() - res = memory.list_memories(q=q, category=category) - _ms = (time.perf_counter() - _t0) * 1000.0 - record_stage("memory_retrieve", _ms) - park("retrieve", _ms) - return res - return memory.list_memories(q=q, category=category) - - -@router.post("/memory", status_code=201) -def add(body: MemIn) -> dict: - if body.category not in memory.CATEGORIES: - raise HTTPException(400, f"Kategorie '{body.category}' unbekannt.") - return memory.add_memory(body.content, body.category, body.source) - - -@router.put("/memory/{mid}") -def update(mid: str, body: MemUp) -> dict: - res = memory.update_memory(mid, content=body.content, category=body.category) - if not res: - raise HTTPException(404, "Eintrag nicht gefunden") - return res - - -@router.delete("/memory/{mid}") -def delete(mid: str) -> dict: - if not memory.delete_memory(mid): - raise HTTPException(404, "Eintrag nicht gefunden") - return {"ok": True} diff --git a/backend/services/eigenleben.py b/backend/services/eigenleben.py deleted file mode 100644 index a91a072..0000000 --- a/backend/services/eigenleben.py +++ /dev/null @@ -1,219 +0,0 @@ -"""Eigenleben — was die Box von allein gebaut und vorgeschlagen hat. - -Beantwortet die User-Frage vom 15.07.2026: „Es gibt keinen Viewpoint, welche Skills -erstellt wurden, was die Box vorgeschlagen hat, welche Skills Lucy hat und wie die -funktionieren." Reine LESE-Schicht, keine Schreib-Operationen: - -- Skills aus ~/.hermes/skills (= Lucys Skill-Satz; die Worker-Profile werkstatt/betrieb - tragen Kopien desselben Satzes). Herkunft dreistufig klassifiziert: - selbst → weder mitgeliefert noch aus unserem Repo = die Box/Lucy hat ihn erzeugt - repo → liegt in ~/mission-control-v2/deploy/skills (von uns gebaut + deployt) - bundled → liegt in ~/.hermes/hermes-agent/skills (kam mit Hermes mit) -- Nutzungszahlen aus ~/.hermes/skills/.usage.json (Hermes' eigener Zähler). -- Bilanz aus Auftragsbuch-Chronik (/srv/models/mc2-auftragsbuch.json, angenommene - Branches) + Ablehnungs-Lern-Journal (/srv/models/mc2-ablehnungen.jsonl). -""" - -from __future__ import annotations - -import json -import re -import subprocess -import time -from pathlib import Path - -SKILLS_DIR = Path.home() / ".hermes" / "skills" -BUNDLED_DIR = Path.home() / ".hermes" / "hermes-agent" / "skills" -REPO_DIR = Path.home() / "mission-control-v2" / "deploy" / "skills" -HERMES_SRC = Path.home() / ".hermes" / "hermes-agent" -HERMES_PY = HERMES_SRC / "venv" / "bin" / "python" -USAGE_FILE = SKILLS_DIR / ".usage.json" -AUFTRAGSBUCH_FILE = Path("/srv/models/mc2-auftragsbuch.json") -ABLEHNUNGEN_FILE = Path("/srv/models/mc2-ablehnungen.jsonl") - -_HERKUNFT_LABEL = { - "selbst": "Selbst erstellt", - "repo": "Von uns gebaut", - "bundled": "Mit Hermes mitgeliefert", -} - - -def _frontmatter(text: str) -> dict: - """Sehr kleiner Frontmatter-Leser: nur die flachen key: value-Zeilen des ersten - ---Blocks (name/description/version/author reichen hier; kein YAML-Import nötig).""" - out: dict = {} - if not text.startswith("---"): - return out - for line in text.split("\n", 1)[1].split("\n"): - if line.strip() == "---": - break - m = re.match(r"^([A-Za-z_][\w-]*):\s*(.*)$", line) - if not m: - continue - val = m.group(2).strip().strip('"').strip("'") - if val: - out[m.group(1)] = val - return out - - -def _norm(s: str) -> str: - return re.sub(r"[\s_-]+", "", (s or "").lower()) - - -# aktiv/inaktiv: dieselbe Wahrheit wie Hermes selbst (und sein eingebautes WebUI) — -# hermes_cli.banner.get_available_skills() prüft Plattform/Voraussetzungen/Config und -# liefert, was der Agent WIRKLICH laden kann. Wir rufen sie im Hermes-venv auf (MC2 -# läuft in eigenem Python) und cachen großzügig — der Skill-Satz ändert sich selten. -_aktiv_cache: dict = {"ts": 0.0, "namen": None} -_AKTIV_EVERY = 600.0 # s - - -def _aktive_namen() -> set[str] | None: - """Normalisierte Namen aller ladbaren Skills; None = nicht ermittelbar (Dev-Modus).""" - if not HERMES_PY.is_file(): - return None - now = time.time() - if _aktiv_cache["namen"] is not None and now - _aktiv_cache["ts"] < _AKTIV_EVERY: - return _aktiv_cache["namen"] - code = ("from hermes_cli.banner import get_available_skills;import json;" - "print(json.dumps(get_available_skills()))") - try: - r = subprocess.run([str(HERMES_PY), "-c", code], capture_output=True, - text=True, timeout=60, cwd=str(HERMES_SRC)) - idx = r.stdout.find("{") - kategorien = json.loads(r.stdout[idx:]) if idx >= 0 else {} - namen = {_norm(n) for liste in kategorien.values() for n in liste} - except Exception: - return _aktiv_cache["namen"] # alter Stand ist besser als flackerndes None - _aktiv_cache.update(ts=now, namen=namen) - return namen - - -def list_skills() -> list[dict]: - """Alle Skills mit Beschreibung, Herkunft und Nutzungszahlen (leer im Dev-Modus).""" - if not SKILLS_DIR.is_dir(): - return [] - try: - usage_raw = json.loads(USAGE_FILE.read_text(encoding="utf-8")) - except Exception: - usage_raw = {} - usage = {_norm(k): v for k, v in usage_raw.items()} - aktive = _aktive_namen() - - def eintrag(md: Path, rel: str, kategorie: str | None) -> dict: - try: - fm = _frontmatter(md.read_text(encoding="utf-8", errors="replace")) - except Exception: - fm = {} - if (BUNDLED_DIR / rel).is_dir(): - herkunft = "bundled" - elif (REPO_DIR / rel).is_dir(): - herkunft = "repo" - else: - herkunft = "selbst" - kurz = rel.split("/")[-1] - u = usage.get(_norm(kurz)) or usage.get(_norm(fm.get("name", ""))) or {} - aktiv = None - if aktive is not None: - aktiv = _norm(kurz) in aktive or _norm(fm.get("name", "")) in aktive - return { - "id": rel, - "name": fm.get("name") or kurz, - "kategorie": kategorie, - "aktiv": aktiv, - "beschreibung": fm.get("description") or "", - "version": fm.get("version") or "", - "autor": fm.get("author") or "", - "herkunft": herkunft, - "herkunft_label": _HERKUNFT_LABEL[herkunft], - "genutzt": int(u.get("use_count") or 0), - "zuletzt_genutzt": u.get("last_used_at") or None, - "erstellt": u.get("created_at") or None, - "status": u.get("state") or "active", - "geaendert": md.stat().st_mtime, - } - - skills: list[dict] = [] - for d in sorted(SKILLS_DIR.iterdir()): - if not d.is_dir() or d.name.startswith("."): - continue # .archive (Curator) & Co. sind keine aktiven Skills - md = d / "SKILL.md" - if md.is_file(): - skills.append(eintrag(md, d.name, None)) - continue - # Kategorie-Ordner (mitgelieferte Sammlungen wie research/, apple/): eine Ebene - # tiefer liegen die echten Skills (research/blogwatcher/SKILL.md) — je einzeln zeigen. - for sub in sorted(d.iterdir()): - smd = sub / "SKILL.md" - if sub.is_dir() and not sub.name.startswith(".") and smd.is_file(): - skills.append(eintrag(smd, f"{d.name}/{sub.name}", d.name)) - # Selbst erstellte zuerst — das ist der Star der Ansicht. - order = {"selbst": 0, "repo": 1, "bundled": 2} - skills.sort(key=lambda s: (order[s["herkunft"]], -s["genutzt"], s["name"])) - return skills - - -def skill_text(skill_id: str) -> str | None: - """Voller SKILL.md-Text („wie funktioniert der Skill") — max. Kategorie/Name, keine Pfad-Tricks.""" - if not re.fullmatch(r"[\w.-]+(/[\w.-]+)?", skill_id or ""): - return None - # Das Zeichen-Set oben erlaubt „." und „.." als Segment — seit die Route ein - # :path-Parameter ist, hier explizit raus (kein Klettern über SKILLS_DIR hinaus). - if any(seg in (".", "..") for seg in skill_id.split("/")): - return None - md = SKILLS_DIR / skill_id / "SKILL.md" - if not md.is_file(): - return None - try: - return md.read_text(encoding="utf-8", errors="replace") - except Exception: - return None - - -def bilanz() -> dict: - """Vorschlags-Bilanz: was die Box vorschlug und was daraus wurde (eine Timeline).""" - eintraege: list[dict] = [] - try: - branches = json.loads(AUFTRAGSBUCH_FILE.read_text(encoding="utf-8")).get("branches") or {} - for branch, info in branches.items(): - eintraege.append({ - "art": "angenommen" if info.get("state") == "eingespielt" else info.get("state", "?"), - "titel": branch, - "detail": info.get("detail") or "", - "ts": float(info.get("ts") or 0), - }) - except Exception: - pass - try: - for line in ABLEHNUNGEN_FILE.read_text(encoding="utf-8").splitlines(): - if not line.strip(): - continue - try: - j = json.loads(line) - except Exception: - continue - eintraege.append({ - "art": "abgelehnt", - "titel": j.get("subject") or j.get("branch") or "?", - "detail": j.get("grund") or "", - "ts": float(j.get("ts") or 0), - }) - except Exception: - pass - eintraege.sort(key=lambda e: -e["ts"]) - return { - "eintraege": eintraege, - "angenommen": sum(1 for e in eintraege if e["art"] == "angenommen"), - "abgelehnt": sum(1 for e in eintraege if e["art"] == "abgelehnt"), - } - - -def overview() -> dict: - skills = list_skills() - b = bilanz() - return { - "available": SKILLS_DIR.is_dir(), - "skills": skills, - "selbst_erstellt": sum(1 for s in skills if s["herkunft"] == "selbst"), - "bilanz": b, - } diff --git a/backend/services/memory.py b/backend/services/memory.py deleted file mode 100644 index 9d5176f..0000000 --- a/backend/services/memory.py +++ /dev/null @@ -1,176 +0,0 @@ -""" -Geteiltes Gedächtnis (die „Verfassung") — jetzt auto-lernend & semantisch über Mem0. - -Dieser Service ist nur noch ein dünner HTTP-Client auf den Mem0-Sidecar (mem0_service/app.py, -läuft im ~/.mem0/venv unter Python 3.12). Die `/api/memory`-API-Form bleibt unverändert, damit -UI und MCP-Server kompatibel bleiben. Neu gegenüber der alten flachen SQLite: - -- search (q gesetzt) ist SEMANTISCH (Vektor/Embeddings) statt LIKE-Textsuche, mit Relevanz-Score. -- learn() reicht Gesprächs-Turns durch → Mem0 EXTRAHIERT Fakten selbst (Auto-Lernen). -- Dedup macht Mem0 beim Auto-Lernen selbst; der manuelle Kurator unten bleibt als Komfort. - -5 Kategorien (user · instruction · stable · versioned · ephemeral) bleiben als Metadaten erhalten. -""" - -import asyncio -import logging -import os -import re -from difflib import SequenceMatcher - -import httpx -from config import MEM0_SERVICE_URL - -log = logging.getLogger(__name__) - -CATEGORIES = ("identity", "knowledge", "rules", "events") - -_TIMEOUT = httpx.Timeout(60.0, connect=5.0) # LLM-Extraktion kann ein paar Sekunden dauern - - -def _get(path: str, **params) -> list | dict: - r = httpx.get(f"{MEM0_SERVICE_URL}{path}", params=params, timeout=_TIMEOUT) - r.raise_for_status() - return r.json() - - -def _post(path: str, data: dict) -> dict: - r = httpx.post(f"{MEM0_SERVICE_URL}{path}", json=data, timeout=_TIMEOUT) - r.raise_for_status() - return r.json() - - -def _put(path: str, data: dict) -> dict: - r = httpx.put(f"{MEM0_SERVICE_URL}{path}", json=data, timeout=_TIMEOUT) - r.raise_for_status() - return r.json() - - -def _delete(path: str) -> dict: - r = httpx.delete(f"{MEM0_SERVICE_URL}{path}", timeout=_TIMEOUT) - r.raise_for_status() - return r.json() - - -def list_memories(q: str = "", category: str = "") -> list[dict]: - """Alle Fakten oder — wenn q gesetzt — die semantisch ähnlichsten (mit `score`).""" - return _get("/memory", **{k: v for k, v in (("q", q), ("category", category)) if v}) - - -def add_memory(content: str, category: str = "stable", source: str = "manual") -> dict: - """Einen Fakt VERBATIM speichern (keine LLM-Umformung). Auto-Lernen → learn().""" - return _post("/memory", {"content": content.strip(), "category": category, "source": source}) - - -def update_memory(mid: str, content: str | None = None, category: str | None = None) -> dict | None: - try: - return _put(f"/memory/{mid}", {"content": content, "category": category}) - except httpx.HTTPStatusError as exc: - if exc.response.status_code == 404: - return None - raise - - -def delete_memory(mid: str) -> bool: - try: - _delete(f"/memory/{mid}") - return True - except httpx.HTTPStatusError as exc: - if exc.response.status_code == 404: - return False - raise - - -def learn(text: str | None = None, messages: list[dict] | None = None, - source: str = "auto", category: str = "stable") -> dict: - """Auto-Lernen: Text/Gesprächs-Turns durchreichen → Mem0 extrahiert die Fakten selbst.""" - return _post("/learn", {"text": text, "messages": messages, - "source": source, "category": category}) - - -def graph(min_score: float = 0.45, top_k: int = 3) -> dict: - """Fakten als Ähnlichkeits-Graph (Knoten + semantische Kanten) für die UI-Visualisierung.""" - return _get("/graph", min_score=min_score, top_k=top_k) - - -def export_text() -> dict: - rows = sorted(list_memories(), key=lambda r: (r.get("category", ""), r.get("updated_at", ""))) - lines = ["# Mission Control — Gedächtnis\n"] - current = "" - for r in rows: - if r.get("category") != current: - current = r.get("category", "") - lines.append(f"\n## {current}\n") - src = r.get("source", "") - when = (r.get("updated_at") or "")[:10] - lines.append(f"- {r.get('content', '')} _(Quelle: {src}, {when})_") - return {"text": "\n".join(lines), "count": len(rows)} - - -# --- Manueller Kurator (deterministisch, kein LLM) --------------------------- -def _norm(s: str) -> str: - s = re.sub(r"[^\w\s]", " ", s.lower(), flags=re.UNICODE) - return re.sub(r"\s+", " ", s).strip() - - -def dedupe(apply: bool = False, threshold: float = 0.85) -> dict: - """Findet Dubletten (exakt/enthalten/ähnlich) je Kategorie, behält den längsten - Eintrag. Mem0 dedupliziert beim Auto-Lernen schon semantisch — das hier ist der - manuelle Komfort-Knopf fürs UI (z.B. nach vielen Verbatim-Importen).""" - rows = sorted(list_memories(), key=lambda r: (-len(r.get("content", "")), r.get("created_at", ""))) - used: set[str] = set() - groups: list[dict] = [] - for i, a in enumerate(rows): - if a["id"] in used: - continue - na = _norm(a.get("content", "")) - if not na: - continue - dups = [] - for b in rows[i + 1:]: - if b["id"] in used or b.get("category") != a.get("category"): - continue - nb = _norm(b.get("content", "")) - if not nb: - continue - if nb in na or na in nb or SequenceMatcher(None, na, nb).ratio() >= threshold: - dups.append(b); used.add(b["id"]) - if dups: - used.add(a["id"]) - groups.append({ - "keep": {"id": a["id"], "content": a.get("content"), "category": a.get("category")}, - "remove": [{"id": d["id"], "content": d.get("content")} for d in dups], - }) - dup_count = sum(len(g["remove"]) for g in groups) - removed = 0 - if apply: - for g in groups: - for d in g["remove"]: - if delete_memory(d["id"]): - removed += 1 - return {"groups": groups, "duplicate_count": dup_count, "removed": removed, "applied": apply} - - -# ── Auto-Dedupe (D16e): Dubletten von selbst wegräumen, kein Knopf-Zwang ───────────── -# Deterministisch in UNSERER Schicht (wie reminders, Verdikt 11c) statt am Hermes-cron — -# läuft als Hintergrund-Task. Höhere Schwelle als der manuelle Knopf (0.9 statt 0.85), weil -# OHNE Mensch-Review angewandt wird: lieber eine Dublette stehen lassen als etwas Distinktes -# löschen. Mem0 dedupliziert beim Auto-Lernen schon semantisch — das hier fängt den Rest -# (Verbatim-Importe, wiederholte Fakten) ab, damit das Gedächtnis nicht ohne Zutun aufbläht. -AUTO_DEDUPE_ENABLED = os.environ.get("MC_MEM_DEDUPE_ENABLED", "1") != "0" -AUTO_DEDUPE_INTERVAL = int(os.environ.get("MC_MEM_DEDUPE_INTERVAL", str(24 * 3600))) # täglich -AUTO_DEDUPE_START_DELAY = int(os.environ.get("MC_MEM_DEDUPE_START_DELAY", "300")) # 5 min nach Start -AUTO_DEDUPE_THRESHOLD = float(os.environ.get("MC_MEM_DEDUPE_THRESHOLD", "0.75")) - - -async def auto_dedupe_loop() -> None: - """Hintergrund-Task: räumt periodisch Gedächtnis-Dubletten weg (apply=True).""" - await asyncio.sleep(AUTO_DEDUPE_START_DELAY) # Mem0-Sidecar nach Start hochkommen lassen - while True: - try: - res = await asyncio.to_thread(dedupe, True, AUTO_DEDUPE_THRESHOLD) # sync HTTP → Thread - if res.get("removed"): - log.info("mem-dedupe: %d Dublette(n) automatisch entfernt", res["removed"]) - except Exception: - log.debug("mem-dedupe: Lauf fehlgeschlagen", exc_info=True) - await asyncio.sleep(AUTO_DEDUPE_INTERVAL) diff --git a/deploy/chef-gutachter-feed.sh b/deploy/chef-gutachter-feed.sh deleted file mode 100644 index dae2e5f..0000000 --- a/deploy/chef-gutachter-feed.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env bash -# Chef-Gutachter-Feed (Orchestrator-Finale, User-Idee 06.07.): gpt-oss-120b als NÄCHTLICHER -# Chef-Gutachter über die autonome Arbeit der Box — bewusst NIE im heißen Pfad (Kaltladen -# ~2-5 min ist um 04:30 egal; tagsüber bleibt Lucy schnell). Muster wie dreaming-feed.sh: -# liegt in ~/.hermes/scripts/, stdout wird dem Cron-Agenten als Prompt eingespeist. -# Der eigentliche RICHTER läuft als Ein-Schuss-Completion direkt gegen llama-swap (:8080, -# fremdblick-Architektur — umgeht Hermes' Delegations-Floor und braucht keinen Subagenten). -# Richter-Kette: gpt-oss-120b; wirft der beim Laden "exited prematurely" (neben dem Warm-Set -# live gesehen, E2E 07.07.), übernimmt GLM-4.6V-Flash als gekennzeichnete VERTRETUNG. -set -uo pipefail - -ENDPOINT="${CHEF_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}" -CHEF="${CHEF_MODEL:-gpt-oss-120b}" -VERTRETUNG="${CHEF_FALLBACK:-GLM-4.7-Flash}" -MC="$HOME/mission-control-v2" -VAULT="$HOME/wissens-vault" - -# ---------- Versionierter Auftrag für den Boten-Agenten ---------- -cat "$MC/deploy/chef-gutachter-prompt.md" -echo - -# ---------- Beweismaterial der letzten 24 h (hart begrenzt, erst sammeln, dann kürzen) ---------- -EVID="$( - echo "## BEWEISMATERIAL (automatisch erhoben am $(date '+%d.%m.%Y %H:%M'))" - echo - echo "### Vorschlags-Branches (Werkstatt/Orchestrator, jüngste zuerst):" - git -C "$MC" fetch -q origin 2>/dev/null || true - git -C "$MC" for-each-ref --sort=-committerdate refs/remotes/origin \ - --format='%(committerdate:relative) | %(refname:short) | %(subject)' 2>/dev/null | head -10 - echo - echo "### main-Commits der letzten 24 h:" - git -C "$MC" log --since='24 hours ago' --oneline origin/main 2>/dev/null | head -12 - echo - echo "### Wissens-Vault (neue Traum-Notizen, 24 h):" - git -C "$VAULT" log --since='24 hours ago' --name-only --pretty='— %s' 2>/dev/null | head -20 - echo - echo "### Ideen-Queue (natives Kanban, Stand jetzt — offene Ideen des Commanders):" - bash -lc 'hermes kanban stats' 2>/dev/null | head -12 - echo - echo "### Ideen-Queue: zuletzt bewegte Aufgaben:" - bash -lc 'hermes kanban list --sort updated' 2>/dev/null | head -10 - echo - echo "### Betriebs-Warnungen (journal, 24 h, je Dienst gezählt):" - journalctl --user --since '24 hours ago' -p warning --no-pager 2>/dev/null \ - | grep -oE 'hermes-gateway|mission-control-2|mem0-service|voice-service|hermes-builtin-ui' \ - | sort | uniq -c | sort -rn | head -6 - echo - echo "### Aktivitäts-Insights (1 Tag):" - bash -lc 'hermes insights --days 1' 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g' | head -30 -)" - -RASTER='Du bist der CHEF-GUTACHTER über die autonome Arbeit einer lokalen KI-Box (Hermes-Agent, Werkstatt, Orchestrator, Traum-Kreislauf). Du bekommst BEWEISMATERIAL der letzten 24 Stunden. Urteile AUSSCHLIESSLICH auf Basis dieses Materials — kein Lob und keine Behauptung ohne konkreten Beleg darin; fehlt dir zu einem Punkt Material, sage das offen. Antworte auf DEUTSCH, kompakt, in exakt dieser Struktur: -VERDIKT: -RISIKEN: <0-3 Punkte, je mit Beleg aus dem Material; "keine erkennbar" wenn leer> -TOP-3 FUER DEN COMMANDER: ' - -# Ein-Schuss-Richter: $1=Modell-ID $2=curl-Timeout $3=max_tokens -judge() { - local req - req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \ - '{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}], - max_tokens:$mt, temperature:0.2}')" - curl -s -m "$2" "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$req" \ - | python3 -c ' -import json, sys -try: - d = json.load(sys.stdin) - msg = d["choices"][0]["message"] - out = (msg.get("content") or msg.get("reasoning_content") or "").strip() - print(out) -except Exception: - pass' -} - -RICHTER="$CHEF" -VERDIKT="$(judge "$CHEF" 420 2600)" -if [ -z "${VERDIKT// /}" ]; then - RICHTER="$VERTRETUNG (Vertretung — $CHEF hat nicht geladen)" - VERDIKT="$(judge "$VERTRETUNG" 240 1200)" -fi - -echo "$EVID" -echo -if [ -z "${VERDIKT// /}" ]; then - echo "## CHEF-VERDIKT: AUSGEFALLEN" - echo "Beide Richter ($CHEF, $VERTRETUNG) haben nicht geantwortet — das dem Commander ehrlich melden." -else - echo "## CHEF-VERDIKT (Richter: $RICHTER)" - echo "$VERDIKT" -fi - -# Morgenlage für die Zentrale: das Verdikt STILL in den Briefkasten spiegeln (priority=silent — -# Lucy soll die Wand Text nicht vorlesen; die Telegram-Botschaft macht der Cron-Agent selbst). -# Cockpit („Morgenlage"-Karte) und Chronik lesen es dort mit source=chef-gutachter heraus. -if [ -n "${VERDIKT// /}" ]; then - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(python3 - "$RICHTER" "$VERDIKT" <<'PY' -import json, sys -print(json.dumps({"text": sys.argv[2], "subject": f"Morgenlage (Richter: {sys.argv[1]})", - "source": "chef-gutachter", "priority": "silent"})) -PY -)" >/dev/null 2>&1 || true -fi diff --git a/deploy/chef-gutachter-prompt.md b/deploy/chef-gutachter-prompt.md deleted file mode 100644 index 52564b9..0000000 --- a/deploy/chef-gutachter-prompt.md +++ /dev/null @@ -1,15 +0,0 @@ -# Auftrag: Nacht-Gutachten überbringen (Chef-Gutachter-Cron) - -Du bist Lucy. Unten stehen (1) BEWEISMATERIAL der letzten 24 Stunden und (2) das -CHEF-VERDIKT eines großen Gutachter-Modells darüber. Deine Aufgabe ist NUR das Überbringen -an den Commander per Telegram — kurz, in deiner Stimme, ohne Werkzeuge. - -Regeln: -1. EIN einleitender Satz von dir (z. B. wie die Nacht lief), dann das Verdikt. -2. Gib VERDIKT, RISIKEN und TOP-3 des Chef-Gutachters TREU wieder — nicht weichspülen, - nicht kürzen bei Risiken, NICHTS dazuerfinden. Du bist die Botin, nicht die Richterin. -3. Nenne am Ende in Klammern den Richter (steht über dem Verdikt: gpt-oss-120b oder - die GLM-Vertretung). -4. Steht dort „CHEF-VERDIKT: AUSGEFALLEN", melde genau das ehrlich — kein Ersatz-Urteil - von dir. -5. Telegram-tauglich: kompakt, keine Markdown-Tabellen, echte Umlaute. diff --git a/deploy/curator-archive-watchdog.sh b/deploy/curator-archive-watchdog.sh deleted file mode 100644 index 9792822..0000000 --- a/deploy/curator-archive-watchdog.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -# curator-archive-watchdog.sh -# Archiviert Skills nach 14 Tagen Inaktivität (nächster Durchlauf um 3:00 Uhr) - -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -PYTHON_SCRIPT="$SCRIPT_DIR/curator_archive_logic.py" - -# Python-Skript ausführen -python3 "$PYTHON_SCRIPT" diff --git a/deploy/curator-idle-watchdog.sh b/deploy/curator-idle-watchdog.sh deleted file mode 100644 index 32f6488..0000000 --- a/deploy/curator-idle-watchdog.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash -# curator-idle-watchdog.sh -# Prüft den Curator-Idle-Status und triggert Reaktivierung nach 14 Tagen - -set -euo pipefail - -LOG_DIR="/home/hitonabi/.hermes/logs/curator" -LOG_FILE="$LOG_DIR/idle-watchdog-$(date +%Y%m%d).log" -THRESHOLD_DAYS=14 - -mkdir -p "$LOG_DIR" - -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" -} - -# Curator-Status auslesen -STATUS_OUTPUT=$(hermes curator status 2>&1) || { - log "FEHLER: hermes curator status fehlgeschlagen" - exit 1 -} - -# Prüfen, ob Curator ENABLED ist -if ! echo "$STATUS_OUTPUT" | grep -q "^curator: ENABLED$"; then - log "INFO: Curator ist nicht ENABLED → überspringe Prüfung" - exit 0 -fi - -# Letzten Lauf extrahieren (Format: "last run: 17d ago") -LAST_RUN_LINE=$(echo "$STATUS_OUTPUT" | grep "^ last run:" | head -1) -if [[ -z "$LAST_RUN_LINE" ]]; then - log "FEHLER: Konnte 'last run' nicht aus Status extrahieren" - exit 1 -fi - -LAST_RUN_TEXT=$(echo "$LAST_RUN_LINE" | sed 's/^ last run: *//') -log "Letzter Curator-Lauf: $LAST_RUN_TEXT" - -# Prüfen, ob "d ago" vorhanden ist -if [[ "$LAST_RUN_TEXT" =~ ([0-9]+)d\ ago ]]; then - DAYS_SINCE_LAST_RUN="${BASH_REMATCH[1]}" -else - log "INFO: Kein 'd ago' gefunden (möglicherweise <1d oder nie gelaufen) → überspringe" - exit 0 -fi - -log "Tage seit letztem Lauf: $DAYS_SINCE_LAST_RUN" - -# Threshold prüfen -if (( DAYS_SINCE_LAST_RUN < THRESHOLD_DAYS )); then - log "INFO: Curator ist innerhalb des erlaubten Intervalls ($DAYS_SINCE_LAST_RUN < $THRESHOLD_DAYS Tage) → kein Trigger nötig" - exit 0 -fi - -# Reaktivierung triggern -log "WARNUNG: Curator ist für $DAYS_SINCE_LAST_RUN Tage idle (>= $THRESHOLD_DAYS) → triggere 'hermes curator run'" -if hermes curator run 2>&1 | tee -a "$LOG_FILE"; then - log "ERFOLG: Curator-Reaktivierung gestartet" -else - log "FEHLER: Curator-Reaktivierung fehlgeschlagen" - exit 1 -fi diff --git a/deploy/curator-monitor.sh b/deploy/curator-monitor.sh deleted file mode 100755 index e3374b5..0000000 --- a/deploy/curator-monitor.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/bash -# curator-monitor.sh -# Prüft den Curator-Idle-Status mit 7-Tage-Schwellenwert. -# GIBT AUS: PASS oder FAIL mit Detaillierung. -# EXIT 0 = OK (Curator aktiv innerhalb von 7 Tagen) -# EXIT 1 = FAIL (Curator >7 Tage idle) –Monitoring-Skript erkannt Problem -# -# --dry-run DAYS Simuliert eine >DAYS-alte Curator-Auszeit (für Tests) - -set -euo pipefail - -LOG_DIR="/home/hitonabi/.hermes/logs/curator" -LOG_FILE="$LOG_DIR/monitor-$(date +%Y%m%d).log" -THRESHOLD_DAYS=7 - -mkdir -p "$LOG_DIR" - -log() { - echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" -} - -# --- Argumente parsen --- -DRY_RUN=false -DRY_RUN_DAYS="" -for arg in "$@"; do - case "$arg" in - --dry-run) - DRY_RUN=true - if [[ -n "${2:-}" && "$2" =~ ^[0-9]+$ ]]; then - DRY_RUN_DAYS="$2" - shift - else - DRY_RUN_DAYS=8 # Default-Testwert - fi - ;; - esac -done - -# --- LIVE-PRÜFUNG oder DRY-RUN --- -if [[ "$DRY_RUN" == "true" ]]; then - log "DRY-RUN: Simuliere Curator-Auszeit von $DRY_RUN_DAYS Tagen" - DAYS_SINCE_LAST_RUN="$DRY_RUN_DAYS" -else - # Live-Status abfragen - STATUS_OUTPUT=$(hermes curator status 2>&1) || { - log "FEHLER: hermes curator status fehlgeschlagen" - echo "FAIL: hermes curator status fehlgeschlagen" - exit 1 - } - - # Prüfen, ob Curator ENABLED ist - if ! echo "$STATUS_OUTPUT" | grep -q "^curator: ENABLED$"; then - log "INFO: Curator ist nicht ENABLED → überspringe Prüfung" - echo "PASS: Curator ist nicht ENABLED (keine Aktivität nötig)" - exit 0 - fi - - # Letzten Lauf extrahieren - LAST_RUN_LINE=$(echo "$STATUS_OUTPUT" | grep "^ last run:" | head -1) - if [[ -z "$LAST_RUN_LINE" ]]; then - log "FEHLER: Konnte 'last run' nicht aus Status extrahieren" - echo "FAIL: Konnte 'last run' nicht extrahieren" - exit 1 - fi - - LAST_RUN_TEXT=$(echo "$LAST_RUN_LINE" | sed 's/^ last run: *//') - log "Letzter Curator-Lauf: $LAST_RUN_TEXT" - - # Tage extrahieren - if [[ "$LAST_RUN_TEXT" =~ ([0-9]+)d\ ago ]]; then - DAYS_SINCE_LAST_RUN="${BASH_REMATCH[1]}" - else - log "INFO: Kein 'd ago' gefunden (möglicherweise <1d oder nie gelaufen)" - echo "PASS: Curator ist aktuell aktiv oder <1 Tag idle" - exit 0 - fi -fi - -log "Tage seit letztem Lauf: $DAYS_SINCE_LAST_RUN" - -# --- MONITORING-LOGIK (keine Reaktivierung!) --- -if (( DAYS_SINCE_LAST_RUN < THRESHOLD_DAYS )); then - log "INFO: Curator ist innerhalb des erlaubten Intervalls ($DAYS_SINCE_LAST_RUN < $THRESHOLD_DAYS Tage)" - echo "PASS: Curator ist aktiv ($DAYS_SINCE_LAST_RUN Tage idle)" - exit 0 -else - log "WARNUNG: Curator ist für $DAYS_SINCE_LAST_RUN Tage idle (>= $THRESHOLD_DAYS)" - echo "FAIL: Curator-Cron ist für $DAYS_SINCE_LAST_RUN Tage stumm (>= $THRESHOLD_DAYS-Tage-Schwellenwert)" - exit 1 -fi diff --git a/deploy/curator_archive_logic.py b/deploy/curator_archive_logic.py deleted file mode 100644 index 65e9fac..0000000 --- a/deploy/curator_archive_logic.py +++ /dev/null @@ -1,198 +0,0 @@ -#!/usr/bin/env python3 -""" -Curator Auto-Archivierung: Archiviert Skills nach 14 Tagen Inaktivität. - -Liest `.curator_state` und `.usage.json` aus ~/.hermes/skills/, prüft -auf Inaktivität (>14 Tage last_used_at), schließt aus (pinned, system) -und verschiebt in .archive//. -""" - -import json -import shutil -from datetime import datetime, timezone -from pathlib import Path - -HERMES_SKILLS_DIR = Path.home() / ".hermes" / "skills" -CURATOR_STATE_FILE = HERMES_SKILLS_DIR / ".curator_state" -USAGE_JSON_FILE = HERMES_SKILLS_DIR / ".usage.json" -ARCHIVE_DIR = HERMES_SKILLS_DIR / ".archive" -LOG_DIR = Path.home() / ".hermes" / "logs" / "curator" - - -def load_json(path: Path) -> dict: - """JSON-Datei laden.""" - with open(path, "r", encoding="utf-8") as f: - return json.load(f) - - -def save_json(path: Path, data: dict) -> None: - """JSON-Datei speichern (mit Pretty-Print).""" - with open(path, "w", encoding="utf-8") as f: - json.dump(data, f, indent=2, ensure_ascii=False) - f.write("\n") - - -def is_stale(skill_usage: dict, threshold_days: int = 14) -> bool: - """Prüft, ob ein Skill älter als threshold_days ist.""" - last_used = skill_usage.get("last_used_at") - if not last_used: - return False - - # ISO-Format mit optionaler Zeitzone - last_used_str = last_used.replace("Z", "+00:00") - try: - last_used_dt = datetime.fromisoformat(last_used_str) - except ValueError: - return False - - now = datetime.now(timezone.utc) - delta = now - last_used_dt - return delta.days >= threshold_days - - -def is_excluded(skill_name: str, excluded: list) -> bool: - """Prüft, ob ein Skill ausgeschlossen ist.""" - return skill_name in excluded - - -def is_pinned(skill_usage: dict) -> bool: - """Prüft, ob ein Skill angepinnt ist.""" - return skill_usage.get("pinned", False) is True - - -def get_skill_category(skill_name: str) -> str: - """ - Ermittelt die Kategorie eines Skills basierend auf dem Verzeichnisnamen. - Gibt 'unknown' zurück, wenn keine Kategorie gefunden wird. - """ - # Versuche, die Kategorie aus dem Verzeichnis zu ermitteln - # z.B. 'betrieb-playbook' → 'betrieb-playbook' (direkt unter skills/) - # 'apple' (in .archive/apple/) → 'apple' - # Falls der Skill direkt in skills/ liegt ohne Unterverzeichnis: - return "unknown" - - -def ensure_archive_category(category: str) -> Path: - """Erstellt das Archiv-Verzeichnis für eine Kategorie, falls nötig.""" - category_path = ARCHIVE_DIR / category - category_path.mkdir(parents=True, exist_ok=True) - return category_path - - -def move_skill_to_archive(skill_name: str, category: str) -> Path: - """ - Verschiebt ein Skill-Verzeichnis in das Archiv. - Gibt den neuen Pfad zurück. - """ - source = HERMES_SKILLS_DIR / skill_name - target_category = ensure_archive_category(category) - target = target_category / skill_name - - if source.exists(): - shutil.move(str(source), str(target)) - - return target - - -def archive_skill(skill_name: str, usage_data: dict) -> dict: - """ - Archiviert einen Skill: - - Setzt state auf 'archived' - - Setzt archived_at auf aktuelle Zeit - - Verschiebt das Verzeichnis nach .archive/ - Gibt das aktualisierte Usage-Dict zurück. - """ - usage_data[skill_name]["state"] = "archived" - usage_data[skill_name]["archived_at"] = datetime.now(timezone.utc).isoformat() - return usage_data - - -def log_archive_action(skill_name: str, category: str, success: bool, message: str) -> None: - """Protokolliert eine Archivierungsaktion.""" - LOG_DIR.mkdir(parents=True, exist_ok=True) - log_file = LOG_DIR / f"archive-{datetime.now(timezone.utc).date().isoformat()}.log" - - timestamp = datetime.now(timezone.utc).isoformat() - status = "SUCCESS" if success else "FAILED" - log_line = f"[{timestamp}] {status} | {skill_name} ({category}) | {message}\n" - - with open(log_file, "a", encoding="utf-8") as f: - f.write(log_line) - - -def main() -> None: - """Hauptfunktion: Archiviert stale Skills.""" - # 1. Config laden - if not CURATOR_STATE_FILE.exists(): - print(f"Fehler: {CURATOR_STATE_FILE} nicht gefunden.") - return - - curator_state = load_json(CURATOR_STATE_FILE) - archivierung = curator_state.get("archivierung", {}) - if not archivierung.get("enabled", False): - print("Archivierung ist nicht aktiviert.") - return - - threshold_days = archivierung.get("threshold_days", 14) - excluded_skills = archivierung.get("excluded_skills", []) - - # 2. Usage-Daten laden - if not USAGE_JSON_FILE.exists(): - print(f"Fehler: {USAGE_JSON_FILE} nicht gefunden.") - return - - usage_data = load_json(USAGE_JSON_FILE) - - # 3. Skills prüfen - archived_count = 0 - skipped_count = 0 - - for skill_name, skill_usage in usage_data.items(): - # Ausschlusskriterien prüfen - if is_excluded(skill_name, excluded_skills): - print(f"Übersprungen (Exkludiert): {skill_name}") - skipped_count += 1 - continue - - if is_pinned(skill_usage): - print(f"Übersprungen (Gepinnt): {skill_name}") - skipped_count += 1 - continue - - # Inaktivität prüfen - if not is_stale(skill_usage, threshold_days): - print(f"Übersprungen (Aktiv): {skill_name}") - skipped_count += 1 - continue - - # Archivierung durchführen - category = get_skill_category(skill_name) or "unknown" - print(f"Archiviere: {skill_name} → {category}") - - try: - # Usage aktualisieren - usage_data = archive_skill(skill_name, usage_data) - - # Verzeichnis verschieben - move_skill_to_archive(skill_name, category) - - # Erfolg protokollieren - log_archive_action(skill_name, category, True, "Skill archiviert") - - archived_count += 1 - except Exception as e: - log_archive_action(skill_name, category, False, str(e)) - print(f"Fehler beim Archivieren von {skill_name}: {e}") - - # 4. Usage-Daten speichern - save_json(USAGE_JSON_FILE, usage_data) - - # 5. Archivierungs-Zeitstempel aktualisieren - curator_state["archivierung"]["last_archive_run_at"] = datetime.now(timezone.utc).isoformat() - save_json(CURATOR_STATE_FILE, curator_state) - - print(f"\nArchivierung abgeschlossen: {archived_count} archiviert, {skipped_count} übersprungen.") - - -if __name__ == "__main__": - main() diff --git a/deploy/deploy.sh b/deploy/deploy.sh index f3194eb..1d4ac40 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -1,298 +1,20 @@ -#!/usr/bin/env bash -# Deploy AUF DER BOX als systemd-USER-Dienst — KEIN sudo, KEIN /opt, KEIN Passwort. -# Erstinstallation + Updates in einem. Läuft als User hitonabi. -# -# Erstinstallation (einmalig): -# git clone https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2 ~/mission-control-v2 -# bash ~/mission-control-v2/deploy/deploy.sh -set -euo pipefail +#!/bin/bash +set -e -SRC="${MC2_SRC:-$HOME/mission-control-v2}" +echo "Starte MC2 Deployment..." -cd "$SRC" -git fetch -q origin && git reset -q --hard origin/main +# 1. Neuesten Code holen +git pull origin main -# ★ Selbst-Reset-Falle (15.07. beim P1-Deploy live gebissen): der reset oben ersetzt auch -# DIESE Datei, und bash liest laufende Skripte häppchenweise von der Platte weiter — ab -# hier liefe ein Zeilen-Mix aus alter+neuer Version (beim P1-Deploy fielen so daemon-reload -# und der mc2-gateway-Start unter den Tisch). Darum: nach dem Reset genau EINMAL die -# frische Version neu ausführen; der zweite Durchlauf überspringt dank Env-Marke nichts. -if [ "${MC2_DEPLOY_REEXEC:-0}" != "1" ]; then - export MC2_DEPLOY_REEXEC=1 - exec bash "$SRC/deploy/deploy.sh" -fi +# 2. Abhängigkeiten prüfen (falls sich was geändert hat) +echo "Aktualisiere Python Abhängigkeiten..." +backend/.venv/bin/pip install -r backend/requirements.txt -# venv + Abhängigkeiten -if [ ! -d "$SRC/backend/.venv" ]; then - python3 -m venv "$SRC/backend/.venv" -fi -"$SRC/backend/.venv/bin/python" -m pip install -q --upgrade pip -"$SRC/backend/.venv/bin/python" -m pip install -q -r "$SRC/backend/requirements.txt" - -# Mem0-Sidecar (auto-lernendes Gedächtnis) — eigenes Python-3.12-venv (~/.mem0/venv), -# weil mem0+chromadb unter dem 3.14-Backend-venv nicht laufen. mem0ai/chromadb sind dort -# bereits installiert; hier nur den HTTP-Server nachziehen + Alt-DB einmalig migrieren. -if [ -x "$HOME/.mem0/venv/bin/python" ]; then - # ~/.mem0/venv ist uv-managed (kein pip) → uv pip nutzen. - UV="$(command -v uv || echo "$HOME/.local/bin/uv")" - "$UV" pip install -q --python "$HOME/.mem0/venv/bin/python" -r "$SRC/mem0_service/requirements.txt" - ( cd "$SRC/mem0_service" && "$HOME/.mem0/venv/bin/python" migrate.py ) || true -else - echo "WARN: ~/.mem0/venv fehlt — Mem0-Sidecar wird nicht gestartet (siehe Plan A1)." -fi - -# Voice-Sidecar (lokales STT + gestuftes TTS für „Mit Hermes reden") — eigenes Python-3.12-venv -# (~/.voice/venv), weil torch/chatterbox/faster-whisper nicht ins 3.14-Backend-venv passen. -# install.sh ist idempotent (venv + Deps + Piper-Stimmen). Best-effort: schlägt es fehl, läuft -# der restliche Stack weiter (der Voice-Tab meldet den Sidecar dann als offline). -bash "$SRC/voice_service/install.sh" || echo "WARN: Voice-Sidecar-Setup fehlgeschlagen — Voice-Tab bleibt offline." - -# Hermes-Memory-Provider-Plugin (auto-lernen/Recall via Mem0-Sidecar) nach ~/.hermes/plugins/ -# spiegeln. Context-only (kein Tool-Loop). Aktivierung in ~/.hermes/config.yaml: -# memory.memory_enabled: true + memory.provider: mc2-memory (einmalig, box-lokal). -if [ -d "$HOME/.hermes" ]; then - mkdir -p "$HOME/.hermes/plugins/mc2-memory" - cp "$SRC/hermes/plugins/mc2-memory/__init__.py" "$SRC/hermes/plugins/mc2-memory/plugin.yaml" \ - "$HOME/.hermes/plugins/mc2-memory/" -fi - -# systemd-USER-Units installieren/aktualisieren -mkdir -p "$HOME/.config/systemd/user" -cp "$SRC/deploy/mission-control-2.service" "$HOME/.config/systemd/user/mission-control-2.service" -# MC2-Diät (Hermes Desktop, 07/2026): das Hermes-Terminal-ttyd (:7681) und das standalone -# hermes-webui (nesquena, Karteileiche seit dem Built-in-UI-Umbau) sind entfallen — die -# Agent-Oberfläche ist die Desktop-App bzw. /hermes-ui/. Einmalige, idempotente Stilllegung: -systemctl --user disable --now hermes-terminal 2>/dev/null || true -systemctl --user disable --now hermes-webui 2>/dev/null || true -rm -f "$HOME/.config/systemd/user/hermes-terminal.service" "$HOME/.config/systemd/user/hermes-webui.service" -# Box-Konsole (ttyd -> Login-Shell auf :7682), in MC2 als Konsole-Seite eingebettet. -cp "$SRC/deploy/box-console.service" "$HOME/.config/systemd/user/box-console.service" -# MC2-Gateway (UMBAU v3 P1): der /v1-Datenpfad als eigener Prozess (Loopback :9010, -# Restart=always) — Lucys Hirn + Nacht-Autonomie überleben damit jeden MC2-Neustart. -cp "$SRC/deploy/mc2-gateway.service" "$HOME/.config/systemd/user/mc2-gateway.service" -# MC2-Steward (UMBAU v3 P2): Wächter-Loops (Re-Warm/Sentry/Dedupe) als eigener Dienst — -# überleben MC2-Neustarts und melden erstmals auch ein totes Steuerpult (Telegram). -cp "$SRC/deploy/mc2-steward.service" "$HOME/.config/systemd/user/mc2-steward.service" -# Mem0-Sidecar-Unit (nur wenn das venv existiert). -[ -x "$HOME/.mem0/venv/bin/python" ] && cp "$SRC/deploy/mem0-service.service" "$HOME/.config/systemd/user/mem0-service.service" -# Voice-Sidecar-Unit (nur wenn das venv existiert). -[ -x "$HOME/.voice/venv/bin/python" ] && cp "$SRC/deploy/voice-service.service" "$HOME/.config/systemd/user/voice-service.service" -# Tägliches Zustands-Backup (mem0 + Configs/Secrets) — Timer + oneshot-Service. Siehe docs/BACKUP.md. -cp "$SRC/deploy/mc2-backup.service" "$HOME/.config/systemd/user/mc2-backup.service" -cp "$SRC/deploy/mc2-backup.timer" "$HOME/.config/systemd/user/mc2-backup.timer" -# Wöchentliches Auto-Update (Router/Engine/Hermes, Rollback+Pin+Telegram) — Autonomie E2. -cp "$SRC/deploy/mc2-autoupdate.service" "$HOME/.config/systemd/user/mc2-autoupdate.service" -cp "$SRC/deploy/mc2-autoupdate.timer" "$HOME/.config/systemd/user/mc2-autoupdate.timer" -# Tägliche Selbst-Smoke-Tests (Gateway/Tools/Voice aktiv, Alarm bei Rot) — Autonomie 0d. -cp "$SRC/deploy/mc2-selfsmoke.service" "$HOME/.config/systemd/user/mc2-selfsmoke.service" -cp "$SRC/deploy/mc2-selfsmoke.timer" "$HOME/.config/systemd/user/mc2-selfsmoke.timer" -# Bagatell-Annahme (Ideen-Queue, 10.07.2026): reine Doku-Vorschläge nachts ohne Klick einspielen. -cp "$SRC/deploy/mc2-bagatell.service" "$HOME/.config/systemd/user/mc2-bagatell.service" -cp "$SRC/deploy/mc2-bagatell.timer" "$HOME/.config/systemd/user/mc2-bagatell.timer" -# Morgen-Digest (Nächtliche Telegram-Zusammenfassung, 26.07.2026): fasst alle Meldungen zwischen 0 und 7 Uhr zusammen. -cp "$SRC/deploy/mc2-morgen-digest.service" "$HOME/.config/systemd/user/mc2-morgen-digest.service" -cp "$SRC/deploy/mc2-morgen-digest.timer" "$HOME/.config/systemd/user/mc2-morgen-digest.timer" -# Evolution-Radar-Feed (Autonomie E4): Hermes-cron speist ihn als Prompt ein. -# Cron-Job selbst wird EINMALIG registriert (hermes cron create, siehe docs/RUNBOOK.md). -mkdir -p "$HOME/.hermes/scripts" -cp "$SRC/deploy/radar-feed.sh" "$HOME/.hermes/scripts/radar-feed.sh" -# Selbstkritik-Cron (Faden 11b): Zwilling des Radars, Blick nach INNEN (Latenzen/Journal/Skills). -cp "$SRC/deploy/selbstkritik-feed.sh" "$HOME/.hermes/scripts/selbstkritik-feed.sh" -# Monats-Review-Wrapper (Cron 1. d. M. 09:00): Radar + Selbstkritik in EINEM Lauf. -cp "$SRC/deploy/radar-selbstkritik-wrapper.sh" "$HOME/.hermes/scripts/radar-selbstkritik-wrapper.sh" -# Traum-Cron (Dreaming, Phase 2): Blick auf das GELERNTE → Wissens-Vault. Bootstrappt ~/wissens-vault. -cp "$SRC/deploy/dreaming-feed.sh" "$HOME/.hermes/scripts/dreaming-feed.sh" -# Fremdblick-Helfer: Ein-Schuss-Zweitmeinung von einem anderen Modell (umgeht 64K-Delegations-Floor). -cp "$SRC/deploy/fremdblick.sh" "$HOME/.hermes/scripts/fremdblick.sh" -# Worker-Helfer (Orchestrator): Ein-Schuss-Arbeitsauftrag an ein Worker-Modell (Gegenstück zu fremdblick). -cp "$SRC/deploy/worker.sh" "$HOME/.hermes/scripts/worker.sh" -# Chef-Gutachter-Cron (Orchestrator-Finale): gpt-oss urteilt nachts über die autonome Arbeit. -cp "$SRC/deploy/chef-gutachter-feed.sh" "$HOME/.hermes/scripts/chef-gutachter-feed.sh" -# Wrapper für nächtliche Crons, um Telegram-Spam in den Morgen-Digest zu leiten. -cp "$SRC/deploy/night-cron-wrapper.sh" "$HOME/.hermes/scripts/night-cron-wrapper.sh" -# Release-Radar-Cron (10.07.2026): hält neue hermes-agent-Releases wöchentlich gegen die -# Eigenbau-Landkarte im Wissens-Vault ("mehr Hermes nativ, weniger Eigenkreationen"). -cp "$SRC/deploy/hermes-release-radar-feed.sh" "$HOME/.hermes/scripts/hermes-release-radar-feed.sh" -# Idle-Radar (S4 "Zuendung", 12.07.2026): die Box gibt sich nachts selbst Arbeit — -# Journal-Fehlermuster + Traum-Funde -> belegte rohe Ideen (triage) im nativen Kanban. -cp "$SRC/deploy/idle-radar-feed.sh" "$HOME/.hermes/scripts/idle-radar-feed.sh" -# "Lucy kennt sich" (12.07.2026): Selbst-Inventur generiert den Steckbrief + bemerkt -# eigene Aenderungen; der Karten-Gutachter stempelt jede Karte mit einer Empfehlung. -cp "$SRC/deploy/selbst-inventur.sh" "$HOME/.hermes/scripts/selbst-inventur.sh" -cp "$SRC/deploy/karten-gutachter.sh" "$HOME/.hermes/scripts/karten-gutachter.sh" -# Trend-Radar (17.07.2026, Sa 05:15): Live-Puls aller Rollen + Engine-A/B + Watch-Liste + -# HF-Kandidaten-Suche → max. 1 Prüfstand-Kandidat/Woche. Prüfstand (So 01:00, --no-agent): -# volles Programm (Coding/Agent/Recherche/Deutsch/Vision) gegen die Amtsinhaber-Baseline; -# Harness + Suiten liegen im Repo ($SRC/deploy/pruefstand/), nur der Runner wird kopiert. -cp "$SRC/deploy/trend-radar-feed.sh" "$HOME/.hermes/scripts/trend-radar-feed.sh" -cp "$SRC/deploy/pruefstand/pruefstand.sh" "$HOME/.hermes/scripts/pruefstand.sh" -# Restore-Probe + Venv-Audit (17.07.2026, monatliche --no-agent-Crons): echte -# Wiederherstellungs-Drills (PBS-Canary + Tarball) und CVE-/Outdated-Audit der -# Python-Nebendienst-venvs (mem0, voice) — melden nur, ändern nichts. -cp "$SRC/deploy/restore-probe.sh" "$HOME/.hermes/scripts/restore-probe.sh" -cp "$SRC/deploy/venv-audit.sh" "$HOME/.hermes/scripts/venv-audit.sh" -# mem0-Konsolidierung (monatlich am 3., 19.07.2026): legt aehnliche Fakten zusammen, -# loest Widersprueche (neuester gewinnt) — mem0 v2 ist ADD-only und tut das nie selbst. -cp "$SRC/deploy/mem0-konsolidierung.py" "$HOME/.hermes/scripts/mem0-konsolidierung.py" -cp "$SRC/deploy/mem0-konsolidierung.sh" "$HOME/.hermes/scripts/mem0-konsolidierung.sh" -# Gitea-Repo-Anlage (17.07.2026): schließt Lucys „Projekte selbst starten"-Lücke — -# legt PRIVATE Projekt-Repos an (Token aus ~/.git-credentials, braucht write:user-Scope). -cp "$SRC/deploy/gitea-repo-create.sh" "$HOME/.hermes/scripts/gitea-repo-create.sh" -# Werkstatt-Kanban-Profil (Ideen-Queue, 10.07.2026): Leitplanken des Worker-Profils nachziehen -# (Profil selbst wurde einmalig per `hermes profile create werkstatt --clone` angelegt). -[ -d "$HOME/.hermes/profiles/werkstatt" ] && cp "$SRC/deploy/werkstatt-SOUL.md" "$HOME/.hermes/profiles/werkstatt/SOUL.md" -# betrieb-Profil (Ideen-Queue Faden 7, 13.07.2026): Ops-/Mess-/Bench-Worker mit Box-Wissen -# statt Lucy-default. Profil selbst wird einmalig per `hermes profile create betrieb -# --clone-from werkstatt` angelegt (model coder→hermes, Description fürs Specifier-Routing). -[ -d "$HOME/.hermes/profiles/betrieb" ] && cp "$SRC/deploy/betrieb-SOUL.md" "$HOME/.hermes/profiles/betrieb/SOUL.md" -# IDE-Vorbereiter (20.07.2026): haertet ein Konzept (konzept-fliessband), legt das Repo an und -# fuellt es NUR mit Doku — der Commander baut dann in Zed. Sonderfall „IDEE PRUEFEN": nur Konzept, -# kein Geruest, kein Bau-Druck. Profil einmalig per `hermes profile create projektstart -# --clone-from werkstatt` angelegt (model coder→hermes, damit heavy warm bleibt). -[ -d "$HOME/.hermes/profiles/projektstart" ] && cp "$SRC/deploy/projektstart-SOUL.md" "$HOME/.hermes/profiles/projektstart/SOUL.md" -chmod +x "$HOME/.hermes/scripts/fremdblick.sh" "$HOME/.hermes/scripts/dreaming-feed.sh" "$HOME/.hermes/scripts/worker.sh" "$HOME/.hermes/scripts/chef-gutachter-feed.sh" "$HOME/.hermes/scripts/hermes-release-radar-feed.sh" "$HOME/.hermes/scripts/radar-selbstkritik-wrapper.sh" "$HOME/.hermes/scripts/idle-radar-feed.sh" "$HOME/.hermes/scripts/selbst-inventur.sh" "$HOME/.hermes/scripts/karten-gutachter.sh" "$HOME/.hermes/scripts/trend-radar-feed.sh" "$HOME/.hermes/scripts/pruefstand.sh" "$HOME/.hermes/scripts/restore-probe.sh" "$HOME/.hermes/scripts/venv-audit.sh" "$HOME/.hermes/scripts/gitea-repo-create.sh" "$HOME/.hermes/scripts/mem0-konsolidierung.sh" "$HOME/.hermes/scripts/mem0-konsolidierung.py" -# Werkstatt-Skill (Autonomie E6): Selbstwartungs-Kreislauf für Hermes. -mkdir -p "$HOME/.hermes/skills/wartung" -cp "$SRC/deploy/skills/wartung/SKILL.md" "$HOME/.hermes/skills/wartung/SKILL.md" -# Orchestrator-Skill (Autonomie): Werkstatt verallgemeinert — zerlegen → an Worker delegieren → gaten. -mkdir -p "$HOME/.hermes/skills/orchestrator" -cp "$SRC/deploy/skills/orchestrator/SKILL.md" "$HOME/.hermes/skills/orchestrator/SKILL.md" -# PC-Pfad-Cache-Skill (Traum-Entwurf 09.07.2026, aufbereitet): Cache lesen → bei Miss pc_shell-Tool → merken. -mkdir -p "$HOME/.hermes/skills/pc-pfad-cache" -cp "$SRC/deploy/skills/pc-pfad-cache/SKILL.md" "$HOME/.hermes/skills/pc-pfad-cache/SKILL.md" -cp "$SRC/deploy/skills/pc-pfad-cache/pc_path_lookup.sh" "$HOME/.hermes/scripts/pc_path_lookup.sh" -chmod +x "$HOME/.hermes/scripts/pc_path_lookup.sh" -# Projekt-Start-Skill (Abloesung 13.07.2026): "erst denken, dann bauen" fuer neue Coding-Projekte -# in Hermes Desktop — Plan-Riegel, Savepoints, AGENTS.md/SAVEPOINT.md-Ritual, Kontext-Waechter. -# Portiert vom PC-Skill (F:\Coding Stuff\projekt-start), Zed-Verweise durch Hermes Desktop ersetzt. -mkdir -p "$HOME/.hermes/skills/projekt-start" -cp "$SRC/deploy/skills/projekt-start/SKILL.md" "$HOME/.hermes/skills/projekt-start/SKILL.md" -# Konzept-Fliessband-Skill (14.07.2026): rohe Idee → wasserdichtes KONZEPT (kein Code), BEVOR -# gebaut wird. heavy (gpt-oss-120b) waehlt den Rollen-Cast, mehrere Denk-Runden schaerfen ein -# lebendes Dokument, ein Advocatus Diaboli (fremdblick/GLM) haertet bis wasserdicht (max 3 Runden). -# Behebt das delegate_task=coder-Loch: Konzept-Arbeit lief bisher stumm auf dem Code-Modell. -# Output = Konzept-Dokument (~/konzepte/-konzept.md) → Vorlage fuer projekt-start in Hermes Desktop. -mkdir -p "$HOME/.hermes/skills/konzept-fliessband" -cp "$SRC/deploy/skills/konzept-fliessband/SKILL.md" "$HOME/.hermes/skills/konzept-fliessband/SKILL.md" -# ...auch in Profile spiegeln, die den Skill schon haben (projektstart = IDE-Vorbereiter -# nutzt ihn als Motor; Profile teilen KEINE Skills, Lehre 18.07.). Nur vorhandene updaten. -for _psd in "$HOME"/.hermes/profiles/*/skills/konzept-fliessband; do - [ -d "$_psd" ] && cp "$SRC/deploy/skills/konzept-fliessband/SKILL.md" "$_psd/SKILL.md" -done -# Betrieb-Playbook (Phase 2 Drei-Welten-Plan, 19.07.2026): Diagnose-Checklisten der -# Betrieb-Bahn (SSH/Deploy) — Gegenstueck zur No-Progress-Bremse. Auch in die Profile, -# damit betrieb-Worker es laden koennen (Profile teilen KEINE Skills, Lehre 18.07.). -for _sd in "$HOME/.hermes/skills" "$HOME"/.hermes/profiles/*/skills; do - [ -d "$(dirname "$_sd")" ] || continue - mkdir -p "$_sd/betrieb-playbook" - cp "$SRC/deploy/skills/betrieb-playbook/SKILL.md" "$_sd/betrieb-playbook/SKILL.md" -done -# Agent-Hooks (Faden 5, 13.07.2026): Skripte frisch halten (reproduzierbar, ueberlebt -# Box-Neuaufbau). box-steckbrief-inject.sh = Box-Selbstwissen in JEDEN Kanban-Worker -# (pre_llm_call, scoped auf task_id → Lucy-Chat unberuehrt); pre-verify-gates.sh = das -# bestehende py_compile/dist-Gate. Die REGISTRIERUNG in ~/.hermes/config.yaml (hooks:) -# ist EINMALIG von Hand (config.yaml ist Zwei-Schreiber-sensibel, kein Deploy-Schreiber). -mkdir -p "$HOME/.hermes/agent-hooks" -# Nur kopieren, wenn der Inhalt sich WIRKLICH geaendert hat — ein blindes cp aendert die -# mtime auch bei identischem Inhalt und loest sonst bei JEDEM Deploy die harmlose -# "script modified since approval"-Warnung von `hermes hooks doctor` aus. -for _h in box-steckbrief-inject.sh pre-verify-gates.sh tabu-pfade-guard.py no-progress-bremse.py; do - _src="$SRC/deploy/agent-hooks/$_h"; _dst="$HOME/.hermes/agent-hooks/$_h" - cmp -s "$_src" "$_dst" 2>/dev/null || { cp "$_src" "$_dst"; chmod +x "$_dst"; } -done -# Worker-Profile lesen IHRE config.yaml, nicht die Top-Level — die worker-Hooks -# (box-steckbrief = Box-Wissen, tabu-pfade-guard = Schreibschutz) muessen dort registriert -# sein, sonst feuern sie fuer Worker nie (Bug-Fund 13.07.). Idempotent + Backup je Profil. -for _prof in "$HOME"/.hermes/profiles/*/config.yaml; do - [ -f "$_prof" ] && python3 "$SRC/deploy/ensure-profile-hooks.py" "$_prof" || true -done -# Hermes-Runtime-Patch-Traeger (20.07.2026): MC2-eigene Fixes im Hermes-Quellcode -# (needs_input-wartet-auf-Commander, Decompose-erst-bei-Startreife, Orphan-Guard, -# Projekt-Kontext-Vererbung, Etappen-Auto-Kette) idempotent (re-)eintragen — so -# ueberleben sie ein `hermes update`, das den Quellbaum sonst zuruecksetzt. -python3 "$SRC/deploy/hermes-patches/apply.py"; _patch_rc=$? -if [ "$_patch_rc" -eq 10 ]; then - # Patches haben den Quellcode geaendert → Gateway muss die neue Laufzeit laden. - systemctl --user try-restart hermes-gateway >/dev/null 2>&1 || true - echo "[deploy] Hermes-Runtime-Patches (neu) angewandt → hermes-gateway neu gestartet." -elif [ "$_patch_rc" -ne 0 ]; then - echo "[deploy] ‼ WARNUNG: hermes-patches/apply.py meldete Fehler — ein Patch passt nicht mehr (Update hat den Kontext geaendert?). Fixes pruefen!" -fi -# Eingebaute Hermes-Web-GUI (`hermes serve`) für die Einbettung in MC2 (routers/hermes_ui.py → -# same-origin /hermes-ui/) vorbereiten: das SPA-Bundle mit Vite-base=/hermes-ui/ (neu) bauen, sonst -# kollidieren seine absoluten Pfade (/assets, /api) mit MC2s eigenen. Läuft auch nach jedem -# Hermes-Update mit → hält die Einbettung frisch. Best-effort + Build-zu-Temp-dann-Swap, damit ein -# Fehlschlag die laufende web_dist NICHT leert (emptyOutDir). -cp "$SRC/deploy/hermes-builtin-ui.service" "$HOME/.config/systemd/user/hermes-builtin-ui.service" -_HUI_WEB="$HOME/.hermes/hermes-agent/web" -_HUI_DIST="$HOME/.hermes/hermes-agent/hermes_cli/web_dist" -if [ -d "$_HUI_WEB" ] && [ -x "$HOME/.hermes/node/bin/npx" ]; then - if ( cd "$_HUI_WEB" && PATH="$HOME/.hermes/node/bin:$PATH" npx --no-install vite build \ - --base=/hermes-ui/ --outDir /tmp/hermes-ui-build --emptyOutDir ) >/tmp/hermes-ui-build.log 2>&1; then - # Dienst VOR dem Tausch stoppen — sonst crasht der laufende `hermes serve`, wenn er index.html - # im Lösch-Fenster (rm→cp) liest (FileNotFoundError → Start-Limit → tot). Der reguläre restart - # weiter unten bringt ihn sauber auf der neuen web_dist hoch. - systemctl --user stop hermes-builtin-ui 2>/dev/null || true - rm -rf "$_HUI_DIST" && cp -r /tmp/hermes-ui-build "$_HUI_DIST" && echo "Hermes-GUI (base=/hermes-ui/) gebaut." - else - echo "WARN: Hermes-GUI-Build fehlgeschlagen (siehe /tmp/hermes-ui-build.log) — bestehende web_dist bleibt." - fi -fi +# 3. Systemd Units neu laden (falls sich .service Dateien geändert haben) systemctl --user daemon-reload -systemctl --user enable mission-control-2 >/dev/null 2>&1 || true -systemctl --user enable mc2-gateway >/dev/null 2>&1 || true -systemctl --user enable mc2-steward >/dev/null 2>&1 || true -systemctl --user enable box-console >/dev/null 2>&1 || true -systemctl --user enable mem0-service >/dev/null 2>&1 || true -systemctl --user enable voice-service >/dev/null 2>&1 || true -systemctl --user enable hermes-builtin-ui >/dev/null 2>&1 || true -systemctl --user enable --now mc2-backup.timer >/dev/null 2>&1 || true -# mc2-autoupdate.timer wird hier BEWUSST NICHT geschaltet — der Zustand wird nur von Hand -# geändert (Lehre 09.07.: die frühere enable-Zeile hat einen User-Entscheid bei jedem Deploy -# still rückgängig gemacht). Aktueller User-Entscheid (10.07.2026): Timer ist AN — -# Router/Engine/Hermes dürfen So 04:30 automatisch (Fangnetz Backup→Postcheck→Rollback+Pin). -systemctl --user enable --now mc2-selfsmoke.timer >/dev/null 2>&1 || true -systemctl --user enable --now mc2-bagatell.timer >/dev/null 2>&1 || true -systemctl --user enable --now mc2-morgen-digest.timer >/dev/null 2>&1 || true -loginctl enable-linger "$USER" >/dev/null 2>&1 || true -# Mem0-Sidecar VOR dem Backend (re)starten, damit /api/memory sofort bedient wird. -[ -x "$HOME/.mem0/venv/bin/python" ] && systemctl --user restart mem0-service 2>/dev/null || true -# Voice-Sidecar (re)starten (best-effort; Erststart lädt das STT-Modell vor). -[ -x "$HOME/.voice/venv/bin/python" ] && systemctl --user restart voice-service 2>/dev/null || true -# Eingebaute Hermes-Web-GUI (Loopback :9119) (re)starten — MC2 bettet sie unter /hermes-ui/ ein. -# reset-failed, damit ein zuvor am Start-Limit gestorbener Dienst wieder anläuft. -systemctl --user reset-failed hermes-builtin-ui 2>/dev/null || true -systemctl --user restart hermes-builtin-ui 2>/dev/null || true -# Gateway VOR dem Steuerpult (re)starten — MC2s /v1-Weiterleiter braucht ihn sofort. -# KEIN `|| true`: ohne Gateway ist der LLM-Datenpfad tot, das MUSS den Deploy stoppen. -systemctl --user restart mc2-gateway -# Steward (Wächter) — unabhängig vom Steuerpult; ohne ihn wacht niemand über die Box. -systemctl --user restart mc2-steward -systemctl --user restart mission-control-2 -command -v ttyd >/dev/null 2>&1 && systemctl --user restart box-console 2>/dev/null || true -sleep 2 -echo "--- Health ---" -# Gateway-Kaltstart-Fenster: bis ~12 s tolerieren, DANN hart scheitern (ohne Gateway -# ist der LLM-Datenpfad tot — das muss den Karten-Runner rot machen). -for _i in $(seq 1 10); do - curl -sf -m 3 http://127.0.0.1:9010/gw/health >/dev/null 2>&1 && break - [ "$_i" -eq 10 ] && { echo "FEHLER: mc2-gateway (:9010) antwortet nicht"; exit 1; } - sleep 1 -done -curl -sf http://127.0.0.1:9010/gw/health && echo -curl -sf http://127.0.0.1:9001/api/health && echo -# Steward hat keinen HTTP-Port — systemd-Zustand ist der Beweis (crasht er sofort, -# ist er hier bereits 'failed' statt 'active'). -if systemctl --user is-active --quiet mc2-steward; then - echo "mc2-steward aktiv (Wächter laufen)" -else - echo "FEHLER: mc2-steward läuft nicht (journalctl --user -u mc2-steward -n 30)"; exit 1 -fi +# 4. Dienste neu starten +echo "Starte Backend neu..." +systemctl --user restart mc2-gateway.service mission-control-2.service -# Warm-Set (Hirn + Augen/vision + Gedächtnis/embed) nach dem Deploy nachladen — ein Deploy bzw. -# watch-config-Reload verwirft es sonst und die erste Anfrage wäre kalt (D16d). warmup.sh ist -# selbst-detachend (blockiert den Deploy nicht) und lädt jedes Modell über den richtigen Endpunkt. -bash "$SRC/deploy/warmup.sh" || true - -echo "OK — Mission Control 2.0 läuft auf :9001 (User-Dienst, sudo-frei)." +echo "✅ Deployment erfolgreich abgeschlossen!" diff --git a/deploy/dreaming-feed.sh b/deploy/dreaming-feed.sh deleted file mode 100644 index 2720eba..0000000 --- a/deploy/dreaming-feed.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env bash -# Feed für den Traum-Cron (Dreaming / Continual-Learning-Kreislauf, Phase 2 — Capstone). -# Zwilling von radar-feed.sh (Blick nach draußen) und selbstkritik-feed.sh (Blick auf den -# Betrieb); der Traum blickt auf das GELERNTE: Sessions, Skills, Gedächtnis, Muster. -# Liegt in ~/.hermes/scripts/ (deploy.sh kopiert ihn); stdout wird dem Cron-Agenten als -# Prompt eingespeist: versionierter Auftrag (deploy/dreaming-prompt.md) + Live-Schlaf-Daten. -set -uo pipefail - -VAULT="$HOME/wissens-vault" - -# --- Vault-Bootstrap (idempotent): eigenes git-Repo, menschenlesbar, NICHT im Stack-Code. --- -if [ ! -d "$VAULT/.git" ]; then - mkdir -p "$VAULT/traeume" "$VAULT/muster" "$VAULT/skill-kandidaten" - git -C "$VAULT" init -q 2>/dev/null || true - # Lokale Identität nur setzen, falls global keine da ist (Commits sollen nie scheitern). - git -C "$VAULT" config user.email >/dev/null 2>&1 || git -C "$VAULT" config user.email "lucy@box.local" - git -C "$VAULT" config user.name >/dev/null 2>&1 || git -C "$VAULT" config user.name "Lucy (Traum)" - if [ ! -f "$VAULT/INDEX.md" ]; then - cat > "$VAULT/INDEX.md" <<'EOF' -# Wissens-Vault — Navigationskarte - -Menschenlesbare, git-versionierte Wissensschicht NEBEN dem Live-Gedächtnis (Mem0). -Angelegt von Lucys nächtlichem Traum. Verlinkung im Obsidian-Stil `[[dateiname]]`. - -## Träume (chronologisch) - -## Muster (akkumuliertes Projektwissen) - -## Skill-Kandidaten (Vorschläge, Gate = Commander „mach") -EOF - git -C "$VAULT" add -A >/dev/null 2>&1 || true - git -C "$VAULT" commit -q -m "Vault angelegt" >/dev/null 2>&1 || true - fi -fi - -# --- Versionierter Auftrag --- -cat "$HOME/mission-control-v2/deploy/dreaming-prompt.md" - -echo -echo "## SCHLAF-DATEN (automatisch erhoben am $(date '+%d.%m.%Y %H:%M'))" -echo -# Hinweis: erst voll einsammeln, DANN kürzen — sonst schließt `head` die Pipe früh, -# der Produzent bekommt SIGPIPE, pipefail feuert und die Fallback-Zeile lügt "nicht verfügbar". -echo "### Insights der letzten 7 Tage (Token-/Tool-/Aktivitätsmuster):" -_ins="$(bash -lc "hermes insights --days 7" 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g')" -echo "${_ins:-(insights nicht verfügbar)}" | head -62 -echo -echo "### Session-Store (Umfang):" -_sst="$(bash -lc "hermes sessions stats" 2>/dev/null)" -echo "${_sst:-(sessions stats nicht verfügbar)}" | head -12 -echo -echo "### Jüngste Sessions (woran zuletzt gearbeitet wurde):" -_sls="$(bash -lc "hermes sessions list" 2>/dev/null | sed 's/\x1b\[[0-9;]*m//g')" -echo "${_sls:-(sessions list nicht verfügbar)}" | head -25 -echo -echo "### Gelernt bisher (journey — Skills + Gedächtnis-Knoten, kompakt):" -bash -lc "hermes journey --json" 2>/dev/null \ - | jq -c '{stats: .stats, skills: ([.nodes[]? | select(.kind=="skill" or .type=="skill") | .label // .name] | .[0:25]), cluster_labels: ([.clusters[]?.label] | .[0:15])}' \ - 2>/dev/null || echo "(journey nicht verfügbar)" -echo -echo "### Curator / Skill-Hygiene (was brachliegt, was aktiv ist):" -bash -lc "hermes curator status" 2>/dev/null | head -26 || echo "(curator status nicht verfügbar)" -echo -echo "### Bisheriger Vault-INDEX (nur zur Ansicht — damit du nichts doppelt anlegst + verlinken" -echo "### kannst). Die echte Datei liegt unter ~/wissens-vault/INDEX.md; zwischen den Markern" -echo "### steht ihr AKTUELLER Inhalt. Kopiere die Marker NICHT in die Datei zurück." -echo "<<>>" -cat "$VAULT/INDEX.md" 2>/dev/null | head -120 || echo "(noch kein INDEX — beim ersten Traum anlegen)" -echo "<<>>" -echo -echo "### Letzte 3 Traum-Notizen (nur Briefing — NICHT in den INDEX kopieren):" -ls -1t "$VAULT/traeume/"*.md 2>/dev/null | head -3 | while read -r f; do - echo " $(basename "$f"): $(head -1 "$f" 2>/dev/null)" -done diff --git a/deploy/dreaming-prompt.md b/deploy/dreaming-prompt.md deleted file mode 100644 index ea6170f..0000000 --- a/deploy/dreaming-prompt.md +++ /dev/null @@ -1,106 +0,0 @@ -# Der Traum (nächtlich) — Continual-Learning-Kreislauf - -Es ist tiefe Nacht, niemand spricht mit dir, die Box ist im Leerlauf. Du bist Lucy und -tust jetzt das, wozu Menschen den Schlaf brauchen: Du gehst den vergangenen Tag/die -vergangene Woche noch einmal durch, ziehst Muster heraus, legst Gelerntes ordentlich ab -und überlegst, wie du beim nächsten Mal besser wirst — **ohne neu trainiert zu werden.** - -Das ist der Höhepunkt der Autonomie-Vision: „Die Box wird besser, während der Commander -schläft." Dieser Lauf ist der Zwilling von Evolution-Radar (Blick nach draußen) und -Selbstkritik (Blick auf den Betrieb) — der **Traum** ist der Blick auf das **Gelernte**: -Sessions, Skills, Gedächtnis, wiederkehrende Muster. - -## Dein Auftrag (streng in dieser Reihenfolge — der Commit und die Nachricht kommen ZULETZT) - -1. **Reflektieren.** Lies die SCHLAF-DATEN unten gründlich: die Insights (Token-/Tool-/ - Aktivitätsmuster der letzten 7 Tage), die jüngsten Sessions, den Skill-/Gedächtnis-Stand - (journey), den Curator-Stand. Frag dich: - - Was ging diese Woche wiederholt gut? Was ging wiederholt schief? - - Welche Tools laufen heiß, welche Skills liegen brach (activity=0)? - - Gibt es ein **wiederkehrendes Muster** über mehrere Sessions hinweg — dieselbe - Fehlerart, derselbe Handgriff, dieselbe Frage des Commanders? Ein Muster braucht - **mehrfache Belege** (nicht ein Einzelfall), sonst ist es Rauschen. - -2. **Notizen ENTWERFEN** (schreiben, aber NOCH NICHT committen) im Wissens-Vault - (`~/wissens-vault/`, ein git-versioniertes, menschenlesbares Markdown-Verzeichnis — die - dauerhafte, navigierbare Wissensschicht NEBEN dem Live-Gedächtnis Mem0): - - Lege **eine** neue Traum-Notiz an: `~/wissens-vault/traeume/-traum.md` - (Datum von heute). Kurz und dicht: 2–5 belegte Beobachtungen, je mit Zahl/Session/ - Log-Bezug. Keine Romane, keine Allgemeinplätze. - - Wenn ein Muster **mehrfach** belegt ist: lege `~/wissens-vault/muster/.md` an - (oder ergänze die vorhandene um einen neuen Beleg + heutiges Datum). Muster-Notizen sind - das akkumulierte Projektwissen. - - Skill-Kandidat (nur wenn sich klar einer aufdrängt): wenn aus einem ERFOLGREICHEN, - wiederholten Handgriff ein wiederverwendbarer Skill würde (Voyager-Prinzip), beschreibe - ihn als Entwurf unter `~/wissens-vault/skill-kandidaten/.md`. **ABER ZUERST prüfen:** - ``` - ls ~/wissens-vault/skill-kandidaten/*.md ~/wissens-vault/skill-kandidaten/beauftragt/*.md 2>/dev/null - ls ~/.hermes/skills/ 2>/dev/null - ``` - Wenn ein thematisch passender Kandidat schon existiert → **NICHTS anlegen**, stattdessen - im Bericht erwähnen: „Kandidat `[[slug]]` besteht bereits, seit , kein neuer - Vorschlag nötig." - **WICHTIG:** Prüfe auch, ob es bereits einen fertig gebauten Skill gibt. - Wenn ja: kein Kandidat nötig, der Skill existiert bereits. - **Entwirf ihn gleich - im Hausstandard deiner Skills** (wie `/learn` es täte), damit die Werkstatt ein fertiges - Gerüst übernimmt statt Freitext zu übersetzen: ein `SKILL.md`-Block mit Frontmatter - (`name` = slug, `description` ≤ 60 Zeichen, `version: 1.0.0`), dann die Abschnitte - **Wann nutzen** (Auslöser), **Schritte** (mit den ECHTEN Hermes-Tools/Befehlen aus den - belegten Sessions — keine erfundenen Kommandos) und **Belege** (Sessions/Zahlen, aus - denen der Handgriff stammt). **Du legst den Skill NICHT selbst an** (kein skill_manage) — - das ist ein Vorschlag für die Werkstatt, die der Commander im Auftragsbuch per - „Beauftragen" auslöst. Höchstens EIN Kandidat pro Traum. - - Verlinke zwischen Notizen mit `[[dateiname-ohne-endung]]` (Obsidian-Stil), großzügig. - -3. **Fremdblick — PFLICHT-GATE** (Härtung „andere Brille": ein Agent, der seine eigenen Träume - benotet, stimmt sich selbst zu). Hol dir eine Zweitmeinung von einem ANDEREN Modell. **Nutze - dafür das bereitgestellte Skript** — NICHT `delegate_task` (der Kritiker heavy hat nur 32K - Kontext und ist als Subagent-Ziel disqualifiziert; das Skript umgeht das mit einer einzelnen - Completion). Konkret: Fasse deine 2–5 Beobachtungen je mit ihrem Zahlen-/Session-Beleg + den - (falls vorhandenen) Skill-Kandidaten KOMPAKT zusammen (wenige Zeilen je Punkt, KEINE - Rohdaten) und pipe sie in das Skript: - - ``` - printf '%s' "" | ~/.hermes/scripts/fremdblick.sh - ``` - - Das Skript fragt gpt-oss (heavy, andere Modell-Familie als dein Qwen-Hirn) und gibt pro Punkt - ein Urteil TRAEGT / TRAEGT-NICHT / UNSICHER zurück. **Lies die Ausgabe und richte dich danach.** - **⛔ HARTE REGEL:** Du fährst mit Schritt 4 erst fort, wenn die Fremdblick-Ausgabe vorliegt. - Schreibe KEINE Nachricht und committe NICHTS vorher. Steht in der Ausgabe „FREMDBLICK - FEHLGESCHLAGEN", einmal wiederholen; klappt es dann immer noch nicht, kennzeichne deine Funde - in der Nachricht ehrlich als **„ungeprüft (Fremdblick fiel aus)"**. - -4. **Bereinigen + INDEX pflegen.** Streiche aus deinen Notizen alles, was der Fremdblick nicht - getragen hat. Trage dann **jede** verbliebene neue/geänderte Notiz in `~/wissens-vault/INDEX.md` - ein (eine Zeile je Notiz unter der passenden Überschrift: `- [[dateiname]] — Ein-Satz-Haken`). - **Wichtig zum INDEX:** Bearbeite NUR die Markdown-Inhaltszeilen. Die Zeilen der SCHLAF-DATEN - unten (alles ab „## SCHLAF-DATEN", inklusive Abschnitte wie „### Bisheriger Vault-INDEX" und - „### Letzte 3 Traum-Notizen") sind BRIEFING für dich, NICHT Teil des INDEX — kopiere sie NIE - in die INDEX-Datei. - -5. **Commit — die LETZTE Vault-Aktion, sie fasst alles zusammen:** - `git -C ~/wissens-vault add -A && git -C ~/wissens-vault commit -m "Traum "`. - (Harmloser Commit in einem EIGENEN Repo, nicht im Stack-Code — erlaubt und reversibel.) - -6. **Dem Commander berichten — deine ALLERLETZTE Handlung** (nichts danach). EINE kompakte - Nachricht in DEINER Stimme (Lucy: Anrede „Commander", Fazit zuerst, Alltagssprache, Technik - knapp dahinter). Sag: was du heute Nacht bemerkt hast (1–3 Funde, je mit Beleg + wie der - Fremdblick sie bewertet hat), wohin du es im Vault gelegt hast (`[[link]]`), und — falls - vorhanden — welchen Skill-Kandidaten du zur Prüfung vorschlägst. Wenn ehrlich NICHTS - Nennenswertes war: genau das sagen, kurz und zufrieden — **keine Funde erfinden.** - -## Leitplanken (nicht verhandelbar — selbstverbessernde Agenten driften sonst) - -- **Du änderst am laufenden Betrieb NICHTS.** Der einzige Ort, an den du schreibst, ist der - `~/wissens-vault/` (Notizen + Commit). Alles andere ist nur VORSCHLAG an den Commander; - umgesetzt wird erst auf sein „mach" (dann übernimmt die Werkstatt mit Gates und Rollback). -- **Kein Security-Anfassen.** Approvals, Tokens, Firewall, Config nur BENENNEN, nie ändern. -- **Fremder Quellcode (Hermes, llama.cpp …) ist tabu** — Auto-Update-Kanal, nicht dein Revier. -- **Nichts, was das Warm-Set oder Lucys Sprech-Latenz gefährdet.** Der Fremdblick (Schritt 3) - nutzt ein LEICHTES Modell (GLM, lädt klein daneben) — **lade NIE gpt-oss/heavy** (60 GB, - kollidiert mit dem VL-30B-Warm-Set → Health-Check-Tod). Keine schweren Jobs, kein Neustart. -- **Sparsam mit Tools.** Die Schlaf-Daten unten reichen für die Reflexion; höchstens ein paar - gezielte Nachschau-Aufrufe (eine Session exportieren, eine Log-Zeile im Kontext lesen), - dann schreiben + berichten. Kein Tool-Feuerwerk. diff --git a/deploy/fremdblick.sh b/deploy/fremdblick.sh deleted file mode 100644 index c83f1c6..0000000 --- a/deploy/fremdblick.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env bash -# Fremdblick — Ein-Schuss-Zweitmeinung von einem ANDEREN Modell (Default seit 07.07.: -# GLM-4.7-Flash, 30B-A3B Text — klar stärkerer Kritiker als die 9B-Vision-Schwester 4.6V, -# gleicher Fremd-Vendor wie zuvor → echte „andere Brille" bleibt). Eine EINZELNE -# Completion — kein agentischer Subagent — umgeht Hermes' 64K-Delegations-Floor -# (MINIMUM_CONTEXT_LENGTH) UND das 60-GB-Ladeproblem von gpt-oss (das mit dem Warm-Set kollidiert -# und „exited prematurely" wirft). GLM lädt klein neben dem Warm-Set und antwortet zuverlässig. -# -# Nutzung: echo "" | fremdblick.sh -# printf '%s' "$text" | FREMDBLICK_MODEL=Qwen3-Coder-Next FREMDBLICK_SYS="$raster" fremdblick.sh -# -# Env-Overrides: -# FREMDBLICK_MODE 'prose' (Default, Dreaming-Prosa-Raster) oder 'code' (Werkstatt-Code-Review). -# 'code' setzt Raster + Default-Modell (Qwen3-Coder-Next) + größeres Budget. -# FREMDBLICK_MODEL Modell-ID (echte llama-swap-ID, kein Alias). Übersteuert den Mode-Default. -# FREMDBLICK_SYS eigenes System-Raster (übersteuert das Mode-Raster). -# FREMDBLICK_MAXTOK max_tokens (übersteuert den Mode-Default). -set -uo pipefail - -# Achtung: llama-swap listet unter /v1/models die ECHTEN Modell-IDs, nicht die Gateway-Aliase -# (kein "heavy"/"scout" hier). -ENDPOINT="${FREMDBLICK_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}" -MODE="${FREMDBLICK_MODE:-prose}" -SUBJECT="$(cat)" - -if [ -z "${SUBJECT// /}" ]; then - echo "=== FREMDBLICK: nichts zu prüfen (leere Eingabe) ===" - exit 0 -fi - -# Prosa-Raster (Dreaming): urteilt über Beobachtungen/Behauptungen. Default-Kritiker = GLM (Fremd-Vendor). -PROSE_SYS='Du bist ein KRITISCHER Zweitgutachter und ausdrücklich ein ANDERES Modell als der Autor. Prüfe jede vorgelegte Beobachtung/Behauptung streng: Trägt der genannte Beleg (Zahl / Session / Log-Zeile) die Behauptung wirklich, oder ist es ein Einzelfall bzw. ein Bauchgefühl mit Zahlen-Deko? Verwechselt der Autor Korrelation mit Ursache? Fehlt entscheidender Kontext? Falls ein Skill-Kandidat dabei ist: ist er wirklich WIEDERVERWENDBAR oder Einmal-Kram? Antworte kompakt auf Deutsch: pro Punkt ein Urteil TRAEGT / TRAEGT-NICHT / UNSICHER mit genau einem Satz Begruendung. Sei knapp und unbestechlich; nicke nichts aus Hoeflichkeit durch. Erfinde keine neuen Belege.' -# Code-Raster (Werkstatt): reproduziert den Fehlerfall aus der Bug-Beschreibung, statt dem Autor zu glauben. -CODE_SYS='Du bist ein kritischer Code-Reviewer und ein ANDERES Modell als der Autor. Vertraue seiner Begruendung NICHT. Dir liegen ein Wartungs-AUFTRAG (Bug-Beschreibung) und ein git-Diff vor. Trenne klar: (A) KERNFRAGE: Behebt der Diff den im Auftrag KONKRET beschriebenen Fehlerfall? Leite die Eingabe SELBST aus der Bug-Beschreibung ab und belege einen Uebergang: Eingabe X -> VOR Patch: Y (Bug sichtbar) -> NACH Patch: Z. (B) RANDFAELLE: nenne offene Risiken/Randfaelle als Hinweis. URTEIL-Regel: ABGELEHNT NUR, wenn (A) nicht belegt behoben ist (Kern-Bug bleibt, ODER der Patch trifft die Auftrags-Absicht nicht, ODER er bricht den Normalfall). Ist der Kern-Fall belegt behoben und es bleiben nur Randfaelle: FREIGABE-MIT-VORBEHALT (Randfaelle auflisten). Ist alles sauber: FREIGABE. Ein blosses sieht-plausibel-aus OHNE reproduzierten Kern-Uebergang = ABGELEHNT. Beginne die Antwort mit der Zeile "URTEIL: ". Antworte knapp auf Deutsch.' - -if [ "$MODE" = "code" ]; then - MODEL="${FREMDBLICK_MODEL:-Qwen3-Coder-Next}" - MAXTOK="${FREMDBLICK_MAXTOK:-1600}" - SYS="${FREMDBLICK_SYS:-$CODE_SYS}" -else - MODEL="${FREMDBLICK_MODEL:-GLM-4.7-Flash}" - # 4000 (war 2200): GLM-4.7-Flash ist ein Reasoning-Modell und verbrennt real ~2000 Tokens - # im reasoning_content, BEVOR das Urteil in content landet (verifiziert 14.07.). Bei 2200 lief - # es Gefahr, mitten im Denken abzuschneiden → leeres content → "ABGESCHNITTEN/FEHLGESCHLAGEN" - # (traf die Nacht-Kritiker mit Default-Budget). Wer explizit knapper braucht, setzt FREMDBLICK_MAXTOK. - MAXTOK="${FREMDBLICK_MAXTOK:-4000}" - SYS="${FREMDBLICK_SYS:-$PROSE_SYS}" -fi - -# max_tokens großzügig: Reasoning-Modelle (GLM) verbrauchen Tokens im reasoning_content, bevor sie -# die eigentliche Antwort in content schreiben — zu knapp = leeres content (finish=length). -RESP="$(jq -n --arg m "$MODEL" --arg s "$SYS" --arg u "$SUBJECT" --argjson t "$MAXTOK" \ - '{model:$m, temperature:0.2, max_tokens:$t, messages:[{role:"system",content:$s},{role:"user",content:$u}]}' \ - | curl -s --max-time 240 "$ENDPOINT" -H 'Content-Type: application/json' -d @- 2>/dev/null)" - -OUT="$(printf '%s' "$RESP" | jq -r '.choices[0].message.content // empty' 2>/dev/null)" -FIN="$(printf '%s' "$RESP" | jq -r '.choices[0].finish_reason // empty' 2>/dev/null)" - -if [ -n "$OUT" ]; then - echo "=== FREMDBLICK (Zweitmeinung von Modell: $MODEL) ===" - echo "$OUT" -elif [ "$FIN" = "length" ]; then - echo "=== FREMDBLICK ABGESCHNITTEN ===" - echo "(Das Kritiker-Modell hat sein Token-Budget im Nachdenken verbraucht, bevor ein Urteil kam." - echo " Kürze deine Vorlage auf die Kern-Behauptungen und versuche es erneut; sonst UNGEPRUEFT.)" -else - echo "=== FREMDBLICK FEHLGESCHLAGEN ===" - echo "(Kein Urteil erhalten — Endpoint/Modell nicht erreichbar. Behandle die Funde als UNGEPRUEFT.)" -fi diff --git a/deploy/hermes-builtin-ui.service b/deploy/hermes-builtin-ui.service deleted file mode 100644 index efc81a4..0000000 --- a/deploy/hermes-builtin-ui.service +++ /dev/null @@ -1,21 +0,0 @@ -[Unit] -Description=Hermes Built-in Web UI (`hermes serve` — Agent-Dashboard/Chat, Loopback only) -After=network-online.target -Wants=network-online.target - -[Service] -# Serviert die EINGEBAUTE Hermes-Web-GUI (die reiche Agent-Oberflaeche mit Threads/Tool-Calls, die -# auch die Electron-Desktop-App umhuellt) headless. -# SICHERHEIT: Bindet NUR an Loopback (127.0.0.1:9119) und laeuft hinter dem MC2-Reverse-Proxy -# (routers/hermes_ui.py → same-origin /hermes-ui/ auf dem offenen Port 9001) — KEINE eigene -# Firewall-Freigabe, KEIN Login (LAN-Trust wie Konsole/Terminal). --skip-build nutzt das von -# deploy.sh mit Vite-base=/hermes-ui/ vorgebaute web_dist, damit alle SPA-Pfade unter /hermes-ui/ -# liegen und der Proxy sie sauber durchreichen kann. -Type=simple -Environment=HERMES_HOME=%h/.hermes -ExecStart=%h/.hermes/hermes-agent/venv/bin/hermes dashboard --no-open --skip-build --host 127.0.0.1 --port 9119 -Restart=on-failure -RestartSec=3 - -[Install] -WantedBy=default.target diff --git a/deploy/hermes-patches/apply.py b/deploy/hermes-patches/apply.py deleted file mode 100644 index 5f4f548..0000000 --- a/deploy/hermes-patches/apply.py +++ /dev/null @@ -1,259 +0,0 @@ -#!/usr/bin/env python3 -"""Hermes-Runtime-Patch-Traeger — haelt MC2-eigene Fixes im Hermes-Quellcode -(``~/.hermes/hermes-agent``), damit sie ein ``hermes update`` ueberleben. - -Warum: Der Hermes-Agent wird aus git aktualisiert; ein Direkt-Edit der Laufzeit -wuerde beim naechsten Update still ueberschrieben. Dieses Skript wird von -``deploy/deploy.sh`` UND ``deploy/hermes-postcheck.sh`` aufgerufen und traegt die -Patches (re-)ein. - -Mechanik: JEDER Patch ist eine idempotente String-Ersetzung (robust gegen -Zeilenverschiebungen durch Updates, anders als ``git apply``): - * ``marker`` schon im Quelltext -> Patch bereits drin, ueberspringen. - * ``old`` genau 1x vorhanden -> ersetzen, dann ``py_compile`` pruefen. - * ``old`` 0x oder >1x -> Kontext hat sich durch ein Update - geaendert -> LAUT scheitern (Exit 1), damit - der Postcheck rot wird und niemand denkt, - der Fix sei noch aktiv. - -Bei Fehlschlag: Exit 1 (der Deploy/Postcheck behandelt das als Fehler). -""" -import os -import py_compile -import shutil -import sys -from pathlib import Path - -HA = Path(os.environ.get("HERMES_AGENT_DIR", str(Path.home() / ".hermes" / "hermes-agent"))) -HERE = Path(__file__).resolve().parent - -# --- Zusatzmodule, die in die Hermes-Laufzeit kopiert werden (update-fest) --- -# (source relativ zu diesem Skript, dest relativ zum Hermes-Agent-Dir) -COPIES = [ - ("mc2_kanban_reaper.py", "hermes_cli/mc2_kanban_reaper.py"), -] - -# --- Patch-Definitionen (chronologisch, Fan-out-/Muenz-Schleifen-Fixes 20.07.2026) --- -PATCHES = [ - { - "name": "0001-needs-input-wait", - "file": "hermes_cli/kanban_db.py", - "marker": 'kind not in ("needs_input", "capability")', - "old": " if recurrences >= BLOCK_RECURRENCE_LIMIT:\n", - "new": ( - " # MC2-Patch (20.07.2026): needs_input/capability sind genuin\n" - " # human-only — sie muessen in ``blocked`` auf den Commander warten\n" - " # (Antwort via Auftragsbuch), NICHT nach triage eskalieren. Sonst\n" - " # zerlegt der Auto-Decomposer sie neu = Duplikat-Karten-Schleife\n" - ' # ("Muenz-Schleife", Fan-out-Vorfall 20.07.). Der Loop-Breaker bleibt\n' - " # fuer transient/untyped Blocks aktiv.\n" - ' if recurrences >= BLOCK_RECURRENCE_LIMIT and kind not in ("needs_input", "capability"):\n' - ), - }, - { - "name": "0002-decompose-at-readiness", - "file": "hermes_cli/kanban_decompose.py", - "marker": "Startreife-Gate", - "old": ( - " cfg = _load_config()\n" - " orchestrator = _resolve_orchestrator_profile(cfg)\n" - ), - "new": ( - " # MC2-Patch (20.07.2026): Startreife-Gate. Eine triage-Karte mit noch\n" - " # OFFENEN Vorgaengern NICHT zerlegen — sonst raet der Decomposer die\n" - " # Schnittstellen der Vor-Etappe ins Blaue, bevor die gebaut hat\n" - " # (Fan-out-Vorfall 20.07.). Billiger Parent-Check VOR dem teuren\n" - " # LLM-Aufruf; erst zerlegen, wenn alle Eltern done/archived.\n" - " with kb.connect_closing() as _pconn:\n" - " _parents = [r[0] for r in _pconn.execute(\n" - ' "SELECT parent_id FROM task_links WHERE child_id = ?", (task_id,))]\n' - " if _parents:\n" - ' _ph = ",".join("?" * len(_parents))\n' - " _open = _pconn.execute(\n" - ' "SELECT COUNT(*) FROM tasks WHERE id IN (%s) "\n' - " \"AND status NOT IN ('done', 'archived')\" % _ph, _parents\n" - " ).fetchone()[0]\n" - " if _open:\n" - " return DecomposeOutcome(\n" - " task_id, False,\n" - ' f"defer: {_open} unfinished parent(s) — decompose when start-ready",\n' - " )\n" - " cfg = _load_config()\n" - " orchestrator = _resolve_orchestrator_profile(cfg)\n" - ), - }, - { - "name": "0003-orphan-guard", - "file": "gateway/kanban_watchers.py", - "marker": "mc2_kanban_reaper", - "old": ( - " pids = await asyncio.to_thread(_kb.reap_worker_zombies)\n" - " if pids:\n" - " logger.info(\n" - ' "kanban dispatcher: reaped %d zombie worker(s), pids=%s",\n' - " len(pids),\n" - " pids,\n" - " )\n" - ), - "new": ( - " pids = await asyncio.to_thread(_kb.reap_worker_zombies)\n" - " if pids:\n" - " logger.info(\n" - ' "kanban dispatcher: reaped %d zombie worker(s), pids=%s",\n' - " len(pids),\n" - " pids,\n" - " )\n" - " # MC2-Patch (20.07.2026): Orphan-Guard. Beende lebende\n" - " # Worker, deren Task nicht mehr 'running' ist (extern\n" - " # blockiert/reset) — sonst unterlaufen sie max_in_progress\n" - " # und verbrennen Rechenzeit.\n" - " try:\n" - " from hermes_cli import mc2_kanban_reaper as _mc2reaper\n" - " _orph = await asyncio.to_thread(\n" - " _mc2reaper.reap_orphaned_workers, _kb.connect_closing\n" - " )\n" - " if _orph:\n" - " logger.info(\n" - ' "kanban dispatcher: reaped %d orphaned worker(s): %s",\n' - " len(_orph), _orph,\n" - " )\n" - " except Exception:\n" - ' logger.exception("kanban dispatcher: orphan reaper failed")\n' - ), - }, - { - "name": "0004a-context-inherit-compute", - "file": "hermes_cli/kanban_decompose.py", - "marker": '_parent_ctx = ""', - "old": ( - " children: list[dict] = []\n" - " for idx, entry in enumerate(raw_tasks):\n" - ), - "new": ( - " children: list[dict] = []\n" - " # MC2-Patch (20.07.2026): Projekt-/Repo-Kontext vererben. Der Parent-Body\n" - ' # traegt oft harte Randbedingungen (Ziel-Repo, Tabus, "eigenes Projekt"),\n' - " # die bei der Zerlegung sonst verloren gehen (Worker klonte das falsche\n" - " # Repo, Fan-out-Vorfall 20.07.). Jeder Kind-Body bekommt den voran.\n" - ' _parent_ctx = ""\n' - ' if getattr(task, "body", None) and task.body.strip():\n' - " _parent_ctx = (\n" - ' "## PROJEKT-KONTEXT (von der uebergeordneten Aufgabe — gilt fuer dich)\\n"\n' - " + task.body.strip()[:1500]\n" - ' + "\\n\\n## DEIN TEILAUFTRAG\\n"\n' - " )\n" - " for idx, entry in enumerate(raw_tasks):\n" - ), - }, - { - "name": "0004b-context-inherit-apply", - "file": "hermes_cli/kanban_decompose.py", - "marker": "_parent_ctx + body", - "old": ( - ' body = entry.get("body")\n' - " if not isinstance(body, str):\n" - ' body = ""\n' - ), - "new": ( - ' body = entry.get("body")\n' - " if not isinstance(body, str):\n" - ' body = ""\n' - " body = _parent_ctx + body # MC2 (20.07.): Projekt-Kontext vererben\n" - ), - }, - { - "name": "0005-create-chain-guard", - "file": "tools/kanban_tools.py", - "marker": "_MC2_RECENT_ROOTS", - "old": ( - " new_task = kb.get_task(conn, new_tid)\n" - " subscribed = _maybe_auto_subscribe(conn, new_tid)\n" - ), - "new": ( - " # MC2-Patch (20.07.2026): Etappen-Auto-Kette. Legt dieselbe\n" - " # Session mehrere ROOT-triage-Karten (ohne parents) im selben\n" - " # 120s-Fenster an, verkette sie — so greift das Startreife-Gate\n" - " # (Karte 2 wartet auf Karte 1) statt alle sofort zu zerlegen\n" - " # (Fan-out 20.07.). Unter max_in_progress:1 ist eine Fehl-\n" - " # Verkettung harmlos (laeuft eh seriell).\n" - " try:\n" - " if triage and not parents and session_id:\n" - " import time as _mc2t\n" - ' _roots = globals().setdefault("_MC2_RECENT_ROOTS", {})\n' - " _prev = _roots.get(session_id)\n" - " _now = _mc2t.monotonic()\n" - " if _prev and (_now - _prev[1]) <= 120 and _prev[0] != new_tid:\n" - " try:\n" - " kb.link_tasks(conn, _prev[0], new_tid)\n" - " except Exception:\n" - " pass\n" - " _roots[session_id] = (new_tid, _now)\n" - " if len(_roots) > 64:\n" - " _roots.clear()\n" - " except Exception:\n" - " pass\n" - " new_task = kb.get_task(conn, new_tid)\n" - " subscribed = _maybe_auto_subscribe(conn, new_tid)\n" - ), - }, -] - - -def main() -> int: - if not HA.is_dir(): - print(f"hermes-patches: Hermes-Agent-Dir fehlt ({HA}) — nichts zu tun.") - return 0 - applied, skipped, failed = [], [], [] - - # --- Zusatzmodule kopieren (idempotent: nur wenn Inhalt abweicht) --- - for src_rel, dst_rel in COPIES: - src, dst = HERE / src_rel, HA / dst_rel - if not src.is_file(): - failed.append((src_rel, f"Quelle fehlt: {src}")) - continue - try: - same = dst.is_file() and dst.read_bytes() == src.read_bytes() - if same: - skipped.append(f"copy:{dst_rel}") - continue - dst.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(src, dst) - if dst.suffix == ".py": - py_compile.compile(str(dst), doraise=True) - applied.append(f"copy:{dst_rel}") - except Exception as exc: - failed.append((src_rel, f"Kopie/Compile fehlgeschlagen: {exc}")) - for p in PATCHES: - f = HA / p["file"] - if not f.is_file(): - failed.append((p["name"], f"Datei fehlt: {f}")) - continue - src = f.read_text(encoding="utf-8") - if p["marker"] in src: - skipped.append(p["name"]) - continue - n = src.count(p["old"]) - if n != 1: - failed.append((p["name"], (f"erwartete 1 Vorkommen von old, fand {n} " - "(Update hat den Kontext geaendert?)"))) - continue - f.write_text(src.replace(p["old"], p["new"]), encoding="utf-8") - try: - py_compile.compile(str(f), doraise=True) - except Exception as exc: - failed.append((p["name"], f"py_compile fehlgeschlagen: {exc}")) - continue - applied.append(p["name"]) - - print(f"hermes-patches: applied={applied} skipped={skipped} failed={[n for n, _ in failed]}") - for name, why in failed: - print(f" FEHLER {name}: {why}", file=sys.stderr) - if failed: - return 1 # Fehler → Deploy/Postcheck rot - if applied: - return 10 # etwas geaendert → Aufrufer sollte hermes-gateway neu starten - return 0 # nichts zu tun (alles schon drin) - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/deploy/hermes-patches/mc2_kanban_reaper.py b/deploy/hermes-patches/mc2_kanban_reaper.py deleted file mode 100644 index 2244386..0000000 --- a/deploy/hermes-patches/mc2_kanban_reaper.py +++ /dev/null @@ -1,84 +0,0 @@ -"""MC2-Zusatzmodul (20.07.2026) — Orphan-Reaper für Kanban-Worker. - -Wird vom Patch-Träger (``deploy/hermes-patches/apply.py``) nach -``~/.hermes/hermes-agent/hermes_cli/`` kopiert und vom Gateway-Dispatcher -(``gateway/kanban_watchers.py``, per Patch 0003) jeden Tick aufgerufen. - -Problem: Wird eine ``running``-Karte von außen blockiert/zurückgesetzt (z. B. -über das Auftragsbuch oder die No-Progress-Bremse), setzt ``block_task`` -``worker_pid = NULL`` — der Worker-PROZESS läuft aber weiter. Die DB zählt ihn -nicht mehr, also unterläuft der Orphan ``kanban.max_in_progress`` (Doppel-Worker -möglich) und verbrennt Rechenzeit. Dieser Reaper beendet lebende Worker, deren -Task nicht mehr ``running`` ist. - -Linux-only (/proc-Scan). Best-effort: jeder Fehler → leere Liste, nie werfen. -""" -from __future__ import annotations - -import os -import re -import signal -import sys - -_TASK_RE = re.compile(rb"work kanban task (t_[0-9a-fA-F]+)") - - -def reap_orphaned_workers(connect_closing) -> list[tuple[int, str]]: - """Beende lebende Kanban-Worker, deren Task nicht mehr ``running`` ist. - - ``connect_closing`` ist die gleichnamige Kontextmanager-Factory aus - ``kanban_db`` (durchgereicht, um Import-Zyklen zu vermeiden). Gibt die Liste - der beendeten ``(pid, task_id)`` zurück. - """ - if sys.platform != "linux": - return [] - candidates: dict[int, str] = {} - try: - entries = os.listdir("/proc") - except OSError: - return [] - for entry in entries: - if not entry.isdigit(): - continue - try: - with open(f"/proc/{entry}/cmdline", "rb") as fh: - cmd = fh.read().replace(b"\x00", b" ") - except OSError: - continue - m = _TASK_RE.search(cmd) - if m: - candidates[int(entry)] = m.group(1).decode() - if not candidates: - return [] - - task_ids = list(set(candidates.values())) - placeholders = ",".join("?" * len(task_ids)) - running: set[str] = set() - try: - with connect_closing() as conn: - running = { - row[0] - for row in conn.execute( - f"SELECT id FROM tasks WHERE id IN ({placeholders}) " - "AND status = 'running'", - task_ids, - ) - } - except Exception: - return [] - - killed: list[tuple[int, str]] = [] - for pid, task_id in candidates.items(): - if task_id in running: - continue - # Prozessgruppe zuerst (Worker starten start_new_session=True → eigene - # Gruppe; killpg räumt selbst gestartete Kinder wie uvicorn gleich mit). - try: - os.killpg(os.getpgid(pid), signal.SIGTERM) - except OSError: - try: - os.kill(pid, signal.SIGTERM) - except OSError: - continue - killed.append((pid, task_id)) - return killed diff --git a/deploy/hermes-release-radar-feed.sh b/deploy/hermes-release-radar-feed.sh deleted file mode 100644 index aac737e..0000000 --- a/deploy/hermes-release-radar-feed.sh +++ /dev/null @@ -1,223 +0,0 @@ -#!/usr/bin/env bash -# Hermes-Release-Radar (woechentlich, Mo 05:15) — "mehr Hermes nativ, weniger Eigenkreationen": -# haelt neue hermes-agent-Releases gegen die Eigenbau-Landkarte im Wissens-Vault und meldet -# NUR echte Treffer auf Abloese-Kriterien/Wiedervorlage-Bedingungen. Muster wie -# chef-gutachter-feed.sh: liegt in ~/.hermes/scripts/ (deploy.sh kopiert ihn), stdout wird -# dem Cron-Agenten als Prompt eingespeist. Der ABGLEICH laeuft als Ein-Schuss-Completion -# direkt gegen llama-swap (:8080, fremdblick-Architektur): Analyst gpt-oss-120b (um 05:15 -# vom Chef-Gutachter 04:30 oft noch geladen), Vertretung GLM-4.7-Flash. Danach gatet -# fremdblick.sh (Prosa-Raster, Fremd-Vendor) jede Treffer-Behauptung gegen die -# Original-Changelogs. -# Grundsaetze (stehen auch in der Landkarte): nur getaggte Releases (kein main-Churn bei -# ~660 PRs/Woche) · Behauptung nur mit woertlichem Changelog-Zitat · Treffer => Probe- -# Vorschlag, NIE Direkt-Adoption · der Radar informiert, er updatet nicht (Entscheid 04.07.). -# State: ~/.hermes/state/release-radar-last.txt (zuletzt gemeldeter Tag). Verlust harmlos — -# ohne State dient die installierte Version als Basis. -set -uo pipefail - -MC="$HOME/mission-control-v2" -LANDKARTE="$HOME/wissens-vault/eigenbau-landkarte.md" -STATE_DIR="$HOME/.hermes/state" -STATE="$STATE_DIR/release-radar-last.txt" -API="${RADAR_RELEASES_URL:-https://api.github.com/repos/NousResearch/hermes-agent/releases?per_page=10}" -ENDPOINT="${RADAR_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}" -ANALYST="${RADAR_MODEL:-gpt-oss-120b}" -VERTRETUNG="${RADAR_FALLBACK:-GLM-4.7-Flash}" -FREMDBLICK="$HOME/.hermes/scripts/fremdblick.sh" - -mkdir -p "$STATE_DIR" - -# Briefkasten-Spiegel (still, wie die Morgenlage): Cockpit/Chronik lesen source=release-radar. -briefkasten() { # $1=Betreff $2=Text - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(python3 - "$1" "$2" <<'PY' -import json, sys -print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], - "source": "release-radar", "priority": "silent"})) -PY -)" >/dev/null 2>&1 || true -} - -# ---------- Versionierter Auftrag fuer den Boten-Agenten ---------- -cat "$MC/deploy/release-radar-prompt.md" 2>/dev/null || cat <<'EOF' -(Prompt-Datei fehlt noch — Kurzform:) Du bist der Bote des woechentlichen Release-Radars. -Gib den Befund unten in Lucys Stimme wieder: bei "KEIN NEUES RELEASE" oder "TREFFER: 0" -genau EIN kurzer Satz; bei Treffern maximal 5 Saetze. Nichts installieren oder aendern. -EOF -echo - -INSTALLED_LINE="$(bash -lc 'hermes --version' 2>/dev/null | head -1)" -INSTALLED_TAG="$(printf '%s' "$INSTALLED_LINE" | grep -oE '\([0-9][0-9.]*\)' | head -1 | tr -d '()')" -[ -n "$INSTALLED_TAG" ] && INSTALLED_TAG="v$INSTALLED_TAG" -LAST_SEEN="$(cat "$STATE" 2>/dev/null | tr -d '[:space:]' || true)" -BASELINE="${LAST_SEEN:-$INSTALLED_TAG}" - -RELEASES_JSON="$(curl -sf --max-time 30 "$API" 2>/dev/null || true)" -if [ -z "$RELEASES_JSON" ]; then - echo "## RADAR-BEFUND: AUSGEFALLEN" - echo "GitHub-Releases-API nicht erreichbar. Dem Commander EINEN ehrlichen Satz melden; naechste Woche neuer Versuch." - exit 0 -fi - -# Neue getaggte Releases seit BASELINE (Drafts/Prereleases raus, max. 6, Bodies gekuerzt). -# Baseline unbekannt (aelter als die letzten 10 oder Erstlauf ohne Version) -> juengste 6. -# JSON via Temp-Datei, NICHT via Pipe: das Heredoc belegt stdin schon fuer den Python-Code -# selbst (Pipe+Heredoc gleichzeitig -> json.load(stdin) liest ins Leere; Probelauf 10.07.). -TMPJSON="$(mktemp /tmp/release-radar.XXXXXX.json)" -printf '%s' "$RELEASES_JSON" > "$TMPJSON" -PARSED="$(python3 - "$BASELINE" "$TMPJSON" <<'PY' -import json, sys -baseline = sys.argv[1] -try: - data = json.load(open(sys.argv[2])) - # Rate-Limit/Fehler antwortet als Dict statt Liste -> wie "keine Daten" behandeln. - rels = [r for r in data if not r.get("draft") and not r.get("prerelease")] if isinstance(data, list) else [] -except Exception: - rels = [] -rels.sort(key=lambda r: r.get("published_at") or "", reverse=True) -if not rels: - # API hat geantwortet, aber unbrauchbar (Rate-Limit-Dict, kaputtes JSON, leere Liste): - # ehrlich als "blind" markieren statt faelschlich "kein neues Release" zu melden. - print(baseline) - print(-1) - raise SystemExit -base = next((r.get("published_at") for r in rels if r.get("tag_name") == baseline), None) -new = rels[:6] if base is None else [r for r in rels if (r.get("published_at") or "") > base][:6] -print((new or rels)[0].get("tag_name") or baseline) -print(len(new)) -for r in new: - body = (r.get("body") or "").strip() - if len(body) > 3500: - body = body[:3500] + "\n[... gekuerzt ...]" - print(f"\n===== RELEASE {r.get('tag_name')} — {(r.get('name') or '').strip()} ({(r.get('published_at') or '')[:10]}) =====") - print(body) -PY -)" -rm -f "$TMPJSON" -NEWEST="$(printf '%s\n' "$PARSED" | sed -n 1p)" -COUNT="$(printf '%s\n' "$PARSED" | sed -n 2p)" -NOTES="$(printf '%s\n' "$PARSED" | tail -n +3)" - -if [ "${COUNT:-0}" = "-1" ]; then - echo "## RADAR-BEFUND: AUSGEFALLEN" - echo "GitHub-API hat geantwortet, aber unbrauchbar (Rate-Limit oder kaputtes JSON). Dem Commander EINEN ehrlichen Satz melden; State bleibt, naechste Woche neuer Versuch." - exit 0 -fi - -echo "## RADAR-BEFUND (erhoben am $(date '+%d.%m.%Y %H:%M'))" -echo "Box installiert: ${INSTALLED_LINE:-unbekannt}" -echo "Zuletzt gemeldet: ${BASELINE:-unbekannt} · neuestes Release: $NEWEST · neue Releases: ${COUNT:-0}" -echo "(Updates bleiben manuell/bestaetigt — der Radar informiert nur.)" -echo - -if [ "${COUNT:-0}" = "0" ]; then - echo "KEIN NEUES RELEASE seit $BASELINE." - [ -n "$NEWEST" ] && printf '%s\n' "$NEWEST" > "$STATE" - briefkasten "Release-Radar" "Kein neues hermes-agent-Release seit $BASELINE (Box: ${INSTALLED_TAG:-?})." - exit 0 -fi - -if [ ! -s "$LANDKARTE" ]; then - echo "### ABGLEICH NICHT MOEGLICH" - echo "$COUNT neue Releases, aber die Eigenbau-Landkarte fehlt ($LANDKARTE)." - echo "Dem Commander melden: Landkarte im Wissens-Vault wiederherstellen. State bleibt unveraendert (naechste Woche neuer Versuch)." - briefkasten "Release-Radar" "$COUNT neue hermes-agent-Releases, aber die Eigenbau-Landkarte fehlt — Abgleich uebersprungen." - exit 0 -fi - -RASTER='Du bist der RELEASE-RADAR einer lokalen KI-Box. Du bekommst (1) die EIGENBAU-LANDKARTE (selbstgebaute Bausteine mit Abloese-Kriterien und Wiedervorlage-Bedingungen) und (2) CHANGELOGS neuer hermes-agent-Releases. Pruefe AUSSCHLIESSLICH: Trifft eine Changelog-Zeile ein Abloese-Kriterium oder eine Wiedervorlage-Bedingung der Landkarte? REGELN: Jede Treffer-Behauptung MUSS die Changelog-Zeile WOERTLICH zitieren. Marketing-Prosa ohne konkretes Feature ist KEIN Treffer. Vage Aehnlichkeit ist KEIN Treffer. Eintraege unter "Bewusst NICHT adoptiert" nur melden, wenn exakt die Wiedervorlage-Bedingung erfuellt ist. Erfinde nichts. Antworte auf DEUTSCH, exakt in dieser Struktur: erste Zeile "TREFFER: ". Danach je Treffer ein Block: "EIGENBAU: " / "RELEASE: " / "ZITAT: " / "WARUM: " / "PROBE: ". Bei TREFFER: 0 stattdessen EIN Satz, was die Releases fuer uns Unwichtiges bringen.' - -EVID="EIGENBAU-LANDKARTE: -$(cat "$LANDKARTE") - -CHANGELOGS DER NEUEN RELEASES: -$NOTES" - -# Ein-Schuss-Analyst: $1=Modell $2=curl-Timeout $3=max_tokens (Muster chef-gutachter-feed.sh; -# max_tokens grosszuegig, weil Reasoning-Modelle Budget im reasoning_content verbrauchen). -judge() { - local req - req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \ - '{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}], - max_tokens:$mt, temperature:0.2}')" - curl -s -m "$2" "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$req" \ - | python3 -c ' -import json, sys -try: - d = json.load(sys.stdin) - msg = d["choices"][0]["message"] - print((msg.get("content") or msg.get("reasoning_content") or "").strip()) -except Exception: - pass' -} - -RICHTER="$ANALYST" -ANALYSE="$(judge "$ANALYST" 420 2600)" -if [ -z "${ANALYSE// /}" ]; then - RICHTER="$VERTRETUNG (Vertretung — $ANALYST hat nicht geantwortet)" - ANALYSE="$(judge "$VERTRETUNG" 240 1800)" -fi - -if [ -z "${ANALYSE// /}" ]; then - echo "### ABGLEICH AUSGEFALLEN" - echo "Beide Analysten ($ANALYST, $VERTRETUNG) haben nicht geantwortet. State bleibt unveraendert — naechste Woche neuer Versuch. Dem Commander EINEN ehrlichen Satz melden." - briefkasten "Release-Radar" "$COUNT neue hermes-agent-Releases, aber der Abgleich fiel aus (kein Analyst erreichbar)." - exit 0 -fi - -echo "### Neue Releases:" -printf '%s\n' "$NOTES" | grep '^===== RELEASE' | sed 's/^===== //; s/ =====$//' -echo -echo "### ABGLEICH gegen die Eigenbau-Landkarte (Analyst: $RICHTER)" -echo "$ANALYSE" -echo - -# Fremdblick-Gate nur bei Treffern (Zitate MIT Quellmaterial gegenpruefbar machen). -TREFFER="$(printf '%s' "$ANALYSE" | grep -oE 'TREFFER: *[0-9]+' | head -1 | grep -oE '[0-9]+' || true)" -GEGEN="" -if [ "${TREFFER:-1}" != "0" ] && [ -x "$FREMDBLICK" ]; then - # Grosses Budget: GLM (Reasoning-Modell) denkt erst ueber das ganze Quellmaterial nach, - # bevor das Urteil in content landet — 2200 (fremdblick-Default) war im Probelauf 10.07. - # zu knapp (ABGESCHNITTEN, kein Urteil). - GEGEN="$(printf '%s\n\nQUELLMATERIAL (Original-Changelogs zum Gegenpruefen der Zitate):\n%s' "$ANALYSE" "$NOTES" \ - | FREMDBLICK_MAXTOK="${RADAR_FREMDBLICK_MAXTOK:-4500}" "$FREMDBLICK")" - echo "$GEGEN" - echo -fi - -# Treffer fuettern die Ideen-Queue ("Lucy kennt sich", 12.07.2026): aus einem echten -# Radar-Treffer wird EINE rohe Idee (triage) — Specifier + Commander entscheiden, ob eine -# Probe gebaut wird. Idempotent je Release-Tag; der Radar selbst bleibt reiner Melder. -if [ -n "${TREFFER:-}" ] && [ "$TREFFER" != "0" ] && [ -x "$HOME/.local/bin/hermes" ]; then - IDEE_ID="$("$HOME/.local/bin/hermes" kanban create \ - "Hermes ${NEWEST}: Release-Radar-Treffer pruefen (Probe bauen?)" \ - --body "Automatisch vom Release-Radar am $(date '+%d.%m.%Y'). ABGLEICH (Analyst: ${RICHTER}): -${ANALYSE} - -FREMDBLICK: -${GEGEN:-(keiner)} - -Rohe Idee: nur pruefen bzw. eine risikofreie Probe vorschlagen — Updates bleiben manuell (Entscheid 04.07.)." \ - --triage --created-by release-radar --idempotency-key "release-radar-${NEWEST}" --json 2>/dev/null \ - | python3 -c ' -import json, sys -t = sys.stdin.read(); i = t.find("{") -try: - print(json.loads(t[i:]).get("id", "") if i >= 0 else "") -except Exception: - print("") -' 2>/dev/null || true)" - if [ -n "${IDEE_ID// /}" ]; then - echo "### IN DIE IDEEN-QUEUE GELEGT: ${IDEE_ID} — Probe-Pruefung fuer ${NEWEST} (der Specifier uebernimmt)." - echo - fi -fi - -printf '%s\n' "$NEWEST" > "$STATE" -briefkasten "Release-Radar" "Neue hermes-agent-Releases bis $NEWEST (Box: ${INSTALLED_TAG:-?}). - -ABGLEICH (Analyst: $RICHTER): -$ANALYSE - -${GEGEN:-(Kein Fremdblick noetig: TREFFER 0)}" diff --git a/deploy/idle-radar-feed.sh b/deploy/idle-radar-feed.sh deleted file mode 100644 index bad0538..0000000 --- a/deploy/idle-radar-feed.sh +++ /dev/null @@ -1,298 +0,0 @@ -#!/usr/bin/env bash -# Idle-Radar (naechtlich 03:45 — S4 "Zuendung", 12.07.2026): die Box gibt sich selbst Arbeit. -# Destilliert aus JOURNAL-Fehlermustern (24 h) und der juengsten TRAUM-Notiz 0-2 KLEINE, -# belegte Wartungs-Kandidaten und legt sie als ROHE IDEEN (triage) ins native Hermes-Kanban. -# Danach laeuft der bewiesene S2-Kreislauf von allein: Specifier arbeitet aus -> Werkstatt -# baut einen Vorschlags-Branch -> Karte im Auftragsbuch -> der KLICK des Commanders bleibt -# das einzige Gate. Muster wie hermes-release-radar-feed.sh: liegt in ~/.hermes/scripts/ -# (deploy.sh kopiert ihn), stdout wird dem Cron-Agenten als Prompt eingespeist; der -# eigentliche ABGLEICH laeuft als Ein-Schuss-Completion gegen llama-swap (:8080). -# Grundsaetze: -# - Kandidat NUR mit woertlichem Beleg-Zitat; das Skript prueft das Zitat MECHANISCH -# gegen das Material (reproduziert-oder-abgelehnt, Verdikt 04.07.) — haerter als -# ein zweites LLM-Urteil und gratis. -# - Max. 2 neue Ideen je Nacht + STAU-BREMSE: liegt schon genug Arbeit (volle Queue -# oder volles Auftragsbuch), legt der Radar NICHTS nach — die Box soll Arbeit -# abarbeiten, nicht anhaeufen. -# - Dedup dreifach: State-Datei (schon gemeldet) + Queue/Karten-Liste im Analysten- -# Kontext + --idempotency-key beim Anlegen. -# - Der Radar LEGT NUR IDEEN AN — er baut nichts, merged nichts, konfiguriert nichts. -# State: ~/.hermes/state/idle-radar-gemeldet.txt (ein KEY je bereits gemeldetem Kandidaten). -set -uo pipefail - -MC="$HOME/mission-control-v2" -VAULT="$HOME/wissens-vault" -STATE_DIR="$HOME/.hermes/state" -STATE="$STATE_DIR/idle-radar-gemeldet.txt" -ENDPOINT="${IDLE_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}" -ANALYST="${IDLE_MODEL:-gpt-oss-120b}" -VERTRETUNG="${IDLE_FALLBACK:-GLM-4.7-Flash}" -HERMES="$HOME/.local/bin/hermes" -MAX_NEU=2 # harte Obergrenze neuer Ideen je Nacht (wie Bagatell-Pfad) -STAU_QUEUE=4 # ab so vielen offenen Queue-Aufgaben: Bremse -STAU_KARTEN=3 # ab so vielen offenen Auftragsbuch-Karten: Bremse - -mkdir -p "$STATE_DIR"; touch "$STATE" - -# Briefkasten-Spiegel (still, wie Morgenlage/Release-Radar): Chronik liest source=idle-radar. -briefkasten() { # $1=Betreff $2=Text - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(python3 - "$1" "$2" <<'PY' -import json, sys -print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], - "source": "idle-radar", "priority": "silent"})) -PY -)" >/dev/null 2>&1 || true -} - -# ---------- Versionierter Auftrag fuer den Boten-Agenten ---------- -cat "$MC/deploy/idle-radar-prompt.md" 2>/dev/null || cat <<'EOF' -(Prompt-Datei fehlt noch — Kurzform:) Du bist der Bote des naechtlichen Idle-Radars. -Berichte den Befund unten in Lucys Stimme in hoechstens 3 Saetzen: wie viele neue -Queue-Ideen angelegt wurden (Titel nennen) oder warum keine. Nichts selbst umsetzen, -keine Kanban-Aktionen — das Skript hat alles Noetige bereits getan. -EOF -echo - -# ---------- Stau-Bremse (vor dem teuren Analysten) ---------- -OFFEN_QUEUE="$("$HERMES" kanban list --json 2>/dev/null | python3 -c ' -import json, sys -t = sys.stdin.read(); i = t.find("[") -try: - d = json.loads(t[i:]) if i >= 0 else [] -except Exception: - d = [] -print(sum(1 for x in d if isinstance(x, dict) and x.get("status") not in ("done", "archived"))) -' 2>/dev/null || echo 0)" -OFFEN_KARTEN="$(curl -sf -m 10 http://127.0.0.1:9001/api/auftragsbuch 2>/dev/null | python3 -c ' -import json, sys -try: - print(int(json.load(sys.stdin).get("open_count", 0))) -except Exception: - print(0) -' 2>/dev/null || echo 0)" - -if [ "${OFFEN_QUEUE:-0}" -ge "$STAU_QUEUE" ] || [ "${OFFEN_KARTEN:-0}" -ge "$STAU_KARTEN" ]; then - echo "## IDLE-RADAR-BEFUND: STAU-BREMSE (erhoben am $(date '+%d.%m.%Y %H:%M'))" - echo "Offene Queue-Aufgaben: ${OFFEN_QUEUE} (Bremse ab ${STAU_QUEUE}) · offene Karten: ${OFFEN_KARTEN} (Bremse ab ${STAU_KARTEN})." - echo "Es liegt genug Arbeit — heute Nacht keine neuen Ideen. Dem Commander EINEN kurzen Satz melden." - briefkasten "Idle-Radar" "Stau-Bremse: ${OFFEN_QUEUE} offene Queue-Aufgaben, ${OFFEN_KARTEN} offene Karten — keine neuen Ideen angelegt." - exit 0 -fi - -# ---------- Material sammeln (erst sammeln, dann kuerzen — SIGPIPE-Falle) ---------- -TRAUM_DATEI="$(ls -1t "$VAULT/traeume/"*.md 2>/dev/null | head -1 || true)" -EVID="$( - echo "### JOURNAL-FEHLERMUSTER (user-Dienste, letzte 24 h; Anzahl · Muster, lange Zahlen/IDs normalisiert):" - journalctl --user --since '24 hours ago' -p warning --no-pager 2>/dev/null \ - | sed -E 's/^[A-Z][a-z]{2} [0-9 ]{2} [0-9:]{8} [^ ]+ //; s/\[[0-9]+\]//; s/[0-9]{3,}/N/g; s/t_[0-9a-f]+/t_X/g' \ - | sort | uniq -c | sort -rn | head -18 - echo - echo "### JUENGSTE TRAUM-NOTIZ ($(basename "${TRAUM_DATEI:-keine}") — Funde des naechtlichen Lern-Crons):" - if [ -n "$TRAUM_DATEI" ]; then head -70 "$TRAUM_DATEI"; else echo "(keine Traum-Notiz gefunden)"; fi - echo - echo "### OFFENE SKILL-KANDIDATEN im Vault (nur Titelzeilen):" - ls -1 "$VAULT/skill-kandidaten/"*.md 2>/dev/null | head -8 | while read -r f; do - echo "- $(basename "$f"): $(head -1 "$f" 2>/dev/null)" - done - echo - echo "### SELBST-STECKBRIEF (auto-generiert von selbst-inventur.sh — das EXISTIERT schon; NICHTS davon neu vorschlagen):" - head -80 "$HOME/.hermes/state/selbst-steckbrief.md" 2>/dev/null || echo "(noch keine Selbst-Inventur gelaufen)" - echo - echo "### SEIT GESTERN AN MIR GEAENDERT (Selbst-Inventur-Diff — gute Kandidaten-Quelle, wenn eine kleine Massnahme erkennbar ist):" - head -40 "$HOME/.hermes/state/selbst-steckbrief.diff" 2>/dev/null || echo "(keine Aenderung erkannt)" - echo - echo "### VOM COMMANDER ABGELEHNT (mit Grund — sinngemaess NIE wieder vorschlagen):" - tail -12 "${MC2_ABLEHNUNGEN:-/srv/models/mc2-ablehnungen.jsonl}" 2>/dev/null | python3 -c ' -import json, sys -n = 0 -for line in sys.stdin: - try: - d = json.loads(line) - except Exception: - continue - n += 1 - print("- [{}] {} — Grund: {}".format(d.get("branch", "?"), (d.get("subject") or "")[:80], - d.get("grund") or "(keiner angegeben)")) -if not n: - print("(keine)") -' 2>/dev/null || echo "(keine)" - echo - echo "### SCHON IN DER IDEEN-QUEUE (inkl. archiviert = vom Commander verworfen; NICHT erneut vorschlagen):" - "$HERMES" kanban list --archived --json 2>/dev/null | python3 -c ' -import json, sys -t = sys.stdin.read(); i = t.find("[") -try: - d = json.loads(t[i:]) if i >= 0 else [] -except Exception: - d = [] -for x in d[:40]: - if isinstance(x, dict): - print("- [{}] {}".format(x.get("status", "?"), (x.get("title") or "")[:110])) -' 2>/dev/null || echo "(Queue nicht lesbar)" - echo - echo "### OFFENE KARTEN IM AUFTRAGSBUCH (warten auf Klick; NICHT erneut vorschlagen):" - curl -sf -m 10 http://127.0.0.1:9001/api/auftragsbuch 2>/dev/null | python3 -c ' -import json, sys -try: - items = json.load(sys.stdin).get("items") or [] -except Exception: - items = [] -if not items: - print("(keine)") -for it in items[:15]: - print("- {}:{}".format(it.get("repo", "mc2"), it.get("branch", "?"))) -' 2>/dev/null || echo "(Auftragsbuch nicht lesbar)" - echo - echo "### VOM IDLE-RADAR BEREITS GEMELDET (KEYs; NICHT erneut vorschlagen):" - tail -40 "$STATE" 2>/dev/null || true -)" - -RASTER='Du bist der IDLE-RADAR einer lokalen KI-Box (Hermes-Agent, MC2, Lucy). Du bekommst naechtliches Material: Journal-Fehlermuster, die juengste Traum-Notiz, offene Skill-Kandidaten sowie Listen dessen, was schon in Arbeit ist. Deine Aufgabe: destilliere daraus 0 bis 2 KLEINE, konkrete Wartungs-Kandidaten, die die Box-Werkstatt selbst umsetzen kann (Patch in 1-2 Dateien, Skript- oder Doku-Aenderung im MC2- oder Lucy-Repo). REGELN: Jeder Kandidat MUSS eine Zeile aus dem Material WOERTLICH zitieren (BELEG) — das Zitat wird mechanisch gegengeprueft, erfundene Zitate fliegen raus. Nichts vorschlagen, was sinngemaess schon in der IDEEN-QUEUE, den OFFENEN KARTEN oder der BEREITS-GEMELDET-Liste steht. Der SELBST-STECKBRIEF sagt dir, was die Box schon HAT und KANN — schlage NIE etwas vor, das dort schon steht (der Fehler vom 12.07.: ein Gateway-Neustart wurde vorgeschlagen, der laengst konfiguriert war). Was der Commander mit Grund ABGELEHNT hat, ist entschieden — nicht neu verpacken. Aenderungen aus dem Inventur-Diff sind gute Kandidaten-Quellen, aber nur mit konkreter kleiner Massnahme. TABU (niemals vorschlagen): Security (approvals/Tokens/ufw/sudoers/ssh), ~/.hermes/config.yaml, systemd-Units, Hermes-Quellcode, Updates/Upgrades, alles was den PC oder einen Menschen braucht. Ein wiederkehrendes Fehlermuster ist NUR dann ein Kandidat, wenn eine konkrete kleine Ursachen-Behebung erkennbar ist — "beobachten", "untersuchen" oder "Monitoring bauen" ist KEIN Auftrag. Qualitaet vor Quote: KANDIDATEN: 0 ist der Normalfall und voellig ok. Antworte auf DEUTSCH, exakt in dieser Struktur: erste Zeile "KANDIDATEN: <0|1|2>". Danach je Kandidat ein Block aus genau vier Zeilen: "TITEL: " / "KEY: " / "BELEG: " / "WARUM: ". Bei 0 stattdessen EIN Satz, warum nichts ansteht.' - -# Ein-Schuss-Analyst: $1=Modell $2=curl-Timeout $3=max_tokens (Muster chef-gutachter-feed.sh). -judge() { - local req - req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \ - '{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}], - max_tokens:$mt, temperature:0.2}')" - curl -s -m "$2" "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$req" \ - | python3 -c ' -import json, sys -try: - d = json.load(sys.stdin) - msg = d["choices"][0]["message"] - print((msg.get("content") or msg.get("reasoning_content") or "").strip()) -except Exception: - pass' -} - -RICHTER="$ANALYST" -ANALYSE="$(judge "$ANALYST" 420 2600)" -if [ -z "${ANALYSE// /}" ]; then - RICHTER="$VERTRETUNG (Vertretung — $ANALYST hat nicht geantwortet)" - ANALYSE="$(judge "$VERTRETUNG" 240 1800)" -fi - -echo "## IDLE-RADAR-BEFUND (erhoben am $(date '+%d.%m.%Y %H:%M'))" -echo "Offene Queue-Aufgaben vorher: ${OFFEN_QUEUE} · offene Karten: ${OFFEN_KARTEN} · Deckel: ${MAX_NEU}/Nacht" -echo - -if [ -z "${ANALYSE// /}" ]; then - echo "### ANALYSE AUSGEFALLEN" - echo "Beide Analysten ($ANALYST, $VERTRETUNG) haben nicht geantwortet — dem Commander EINEN ehrlichen Satz melden; morgen neuer Versuch." - briefkasten "Idle-Radar" "Analyse ausgefallen (kein Analyst erreichbar) — keine neuen Ideen." - exit 0 -fi - -echo "### ANALYSE (Analyst: $RICHTER)" -echo "$ANALYSE" -echo - -# ---------- Ehrlichkeits-Gate + Dedup + Anlegen (deterministisch im Skript) ---------- -# Temp-Dateien statt Pipes: Heredoc + Pipe gleichzeitig frisst stdin (Release-Radar-Lehre 10.07.). -TMPD="$(mktemp -d /tmp/idle-radar.XXXXXX)" -printf '%s' "$ANALYSE" > "$TMPD/analyse.txt" -printf '%s' "$EVID" > "$TMPD/material.txt" -PLAN="$(python3 - "$TMPD/analyse.txt" "$TMPD/material.txt" "$STATE" "$MAX_NEU" <<'PY' -import re, sys, unicodedata - -ana = open(sys.argv[1], encoding="utf-8", errors="replace").read() -evid = open(sys.argv[2], encoding="utf-8", errors="replace").read() -try: - state = {l.strip() for l in open(sys.argv[3], encoding="utf-8", errors="replace") if l.strip()} -except Exception: - state = set() -max_neu = int(sys.argv[4]) - -def norm(s): - s = unicodedata.normalize("NFKC", s) - s = "".join(ch for ch in s if ch.isalnum() or ch.isspace()) - return " ".join(s.lower().split()) - -nev = norm(evid) - -# Zeilenweise einsammeln (tolerant gegen Markdown-Deko und Leerzeilen zwischen Feldern). -cands, cur = [], {} -for line in ana.splitlines(): - line = line.strip().lstrip("*->#• ").strip() - m = re.match(r"(TITEL|KEY|BELEG|WARUM)\s*:\s*(.+)$", line) - if not m: - continue - k, v = m.group(1), m.group(2).strip() - if k == "TITEL" and cur: - cands.append(cur); cur = {} - cur[k] = v -if cur: - cands.append(cur) - -neu = 0 -SEP = "\x1f" -for c in cands: - titel = (c.get("TITEL") or "").strip()[:120] - warum = (c.get("WARUM") or "").strip()[:300] - beleg = (c.get("BELEG") or "").strip().strip('"„“»«>`').strip() - key = re.sub(r"[^a-z0-9-]+", "-", (c.get("KEY") or "").strip().lower())[:48].strip("-") - if not (titel and key and beleg): - continue - if key in state or ("idle-radar-" + key) in state: - print("SKIP" + SEP + key + SEP + "schon frueher gemeldet (State)") - continue - if not norm(beleg) or norm(beleg) not in nev: - print("SKIP" + SEP + key + SEP + "BELEG nicht woertlich im Material — verworfen (Ehrlichkeits-Gate)") - continue - if neu >= max_neu: - print("SKIP" + SEP + key + SEP + "Deckel erreicht") - continue - neu += 1 - print("NEU" + SEP + key + SEP + titel + SEP + beleg + SEP + warum) -PY -)" - -ANGELEGT=""; VERWORFEN="" -while IFS=$'\x1f' read -r art key titel beleg warum; do - [ -n "${art:-}" ] || continue - if [ "$art" = "SKIP" ]; then - VERWORFEN="${VERWORFEN}- ${key}: ${titel}"$'\n' # bei SKIP traegt das 3. Feld den Grund - continue - fi - [ "$art" = "NEU" ] || continue - BODY="Automatisch vom Idle-Radar erhoben am $(date '+%d.%m.%Y') (Quelle: Journal-Muster/Traum-Notiz der Nacht). - -BELEG (woertlich aus dem Material): ${beleg} - -WARUM: ${warum} - -Rohe Idee — bitte pruefen, klein schneiden und nur wenn tragfaehig promoten; sonst archivieren." - TASK_ID="$("$HERMES" kanban create "$titel" --body "$BODY" --triage \ - --created-by idle-radar --idempotency-key "idle-radar-${key}" --json 2>/dev/null \ - | python3 -c ' -import json, sys -t = sys.stdin.read(); i = t.find("{") -try: - print(json.loads(t[i:]).get("id", "") if i >= 0 else "") -except Exception: - print("") -' 2>/dev/null || true)" - if [ -n "${TASK_ID// /}" ]; then - echo "$key" >> "$STATE" - ANGELEGT="${ANGELEGT}- ${titel} (${TASK_ID}, Key ${key})"$'\n' - else - VERWORFEN="${VERWORFEN}- ${key}: kanban create fehlgeschlagen"$'\n' - fi -done <<< "$PLAN" -rm -rf "$TMPD" - -echo "### ANGELEGT (rohe Ideen, triage — der Specifier uebernimmt):" -echo "${ANGELEGT:-(keine)}" -echo "### NICHT ANGELEGT (Gate/Dedup/Deckel):" -echo "${VERWORFEN:-(keine)}" - -N_NEU="$(printf '%s' "$ANGELEGT" | grep -c '^-' || true)" -if [ "${N_NEU:-0}" -gt 0 ]; then - briefkasten "Idle-Radar" "Idle-Radar hat ${N_NEU} neue Idee(n) in die Queue gelegt: -${ANGELEGT}Der Specifier arbeitet sie aus; die Karten-Annahme bleibt beim Commander." -else - briefkasten "Idle-Radar" "Idle-Radar: keine neuen Ideen (Analyst: ${RICHTER})." -fi diff --git a/deploy/idle-radar-prompt.md b/deploy/idle-radar-prompt.md deleted file mode 100644 index 345ee99..0000000 --- a/deploy/idle-radar-prompt.md +++ /dev/null @@ -1,26 +0,0 @@ -# Idle-Radar — Auftrag für den Boten-Agenten - -Du bist der Bote des nächtlichen Idle-Radars. Unten steht ein automatisch erhobener -BEFUND: aus Journal-Fehlermustern und der jüngsten Traum-Notiz destilliert ein -Analysten-Modell kleine Wartungs-Kandidaten; das Skript hat die tragfähigen davon -BEREITS als rohe Ideen (triage) in die Ideen-Queue gelegt — den Rest erledigt der -bewiesene Kreislauf (Specifier → Werkstatt → Karte im Auftragsbuch → Klick des -Commanders). - -Deine Aufgabe — NUR berichten, in Lucys Stimme (Anrede „Commander", Alltagssprache, -Fazit zuerst), in höchstens 3 Sätzen: - -1. Bei „ANGELEGT: (keine)" oder „KANDIDATEN: 0": GENAU EIN kurzer Satz - (z. B. „Idle-Radar: nichts Belegbares heute Nacht — Queue bleibt wie sie ist."). -2. Bei neuen Ideen: nenne Anzahl und die Titel; sage dazu, dass die Box sie jetzt - selbst ausarbeitet und die Annahme wie immer per Karten-Klick beim Commander liegt. -3. Bei „STAU-BREMSE" oder „AUSGEFALLEN": ein ehrlicher Satz, warum der Radar heute - Nacht nichts angelegt hat. - -Harte Regeln: -- NICHTS selbst umsetzen: keine Kanban-Aktionen, nichts bauen, nichts konfigurieren — - das Anlegen hat das Skript schon deterministisch erledigt. -- Erfinde keine Kandidaten über den Befund hinaus; im Ehrlichkeits-Gate verworfene - Vorschläge (BELEG nicht im Material) nicht als Erfolg verkaufen. -- Die stille Briefkasten-Karte hat das Skript bereits geschrieben — du lieferst nur - die kurze Telegram-Meldung. diff --git a/deploy/karten-gutachter.sh b/deploy/karten-gutachter.sh deleted file mode 100644 index fc95f43..0000000 --- a/deploy/karten-gutachter.sh +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env bash -# Karten-Gutachter (naechtlich 04:00 — "Lucy kennt sich", 12.07.2026): stempelt jede neue -# Auftragsbuch-Karte mit einer Empfehlung (ANNEHMEN/ABLEHNEN/UNKLAR + EIN ehrlicher Satz), -# damit der Commander nie blind klickt. Ein-Schuss-Richter gegen llama-swap (:8080, -# fremdblick-Architektur, Muster chef-gutachter-feed.sh) — bekommt Karte (Commit-Text, -# Dateien, Diff) UND den Selbst-Steckbrief (was schon existiert), prueft also genau die -# Falle vom 12.07. (redundanter Gateway-Restart-Vorschlag). Der Stempel ist eine MEINUNG, -# kein Gate: die Karte bleibt klickbar, die Entscheidung bleibt beim Commander. -# Laeuft als Cron mit --no-agent: stdout leer = still; gestempelte Karten = kurze Zeilen. -# Ablage: /srv/models/mc2-karten-gutachten.json (Backend mischt es in die Karten-API). -set -uo pipefail - -API="${MC_API:-http://127.0.0.1:9001}" -OUT="${MC2_KARTEN_GUTACHTEN:-/srv/models/mc2-karten-gutachten.json}" -ENDPOINT="${GUTACHTER_ENDPOINT:-http://127.0.0.1:8080/v1/chat/completions}" -CHEF="${GUTACHTER_MODEL:-gpt-oss-120b}" -VERTRETUNG="${GUTACHTER_FALLBACK:-GLM-4.7-Flash}" -STECK="$HOME/.hermes/state/selbst-steckbrief.md" -MAX_JE_LAUF=3 # Nacht-GPU-Budget: Rest kommt morgen dran - -briefkasten() { # $1=Betreff $2=Text - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(python3 - "$1" "$2" <<'PY' -import json, sys -print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], - "source": "karten-gutachter", "priority": "silent"})) -PY -)" >/dev/null 2>&1 || true -} - -TMPD="$(mktemp -d /tmp/karten-gutachter.XXXXXX)" -trap 'rm -rf "$TMPD"' EXIT - -if ! curl -sf -m 20 "$API/api/auftragsbuch" -o "$TMPD/items.json" 2>/dev/null; then - echo "Karten-Gutachter: Auftragsbuch nicht erreichbar — kein Lauf." - exit 0 -fi - -# Offene, noch ungestempelte Karten ermitteln + verwaiste Stempel aufraeumen (Karte weg -# oder neuer Stand = Stempel weg). Schluessel: ":@" haengt am Commit- -# Zeitstempel — ein nachgeschobener Commit macht den alten Stempel automatisch ungueltig. -python3 - "$TMPD/items.json" "$OUT" > "$TMPD/plan.txt" <<'PY' -import json, sys, os - -items = (json.load(open(sys.argv[1], encoding="utf-8")) or {}).get("items") or [] -out_path = sys.argv[2] -try: - alt = json.load(open(out_path, encoding="utf-8")) - if not isinstance(alt, dict): - alt = {} -except Exception: - alt = {} - -offen = {} -for it in items: - state = (it.get("status") or {}).get("state") - if state in ("eingespielt", "laeuft", "rollback"): - continue # entschieden oder gerade in Arbeit — kein Stempel noetig - key = "{}:{}".format(it.get("repo", "mc2"), it.get("branch", "?")) - offen[key] = it - -# Verwaiste/veraltete Stempel raus (atomar zurueckschreiben). -neu = {} -for key, g in alt.items(): - it = offen.get(key) - if it and g.get("commit_ts") == it.get("ts"): - neu[key] = g -tmp = out_path + ".tmp" -with open(tmp, "w", encoding="utf-8") as f: - json.dump(neu, f, ensure_ascii=False) -os.replace(tmp, out_path) - -for key, it in offen.items(): - if key in neu: - continue - repo, branch = key.split(":", 1) - print("\x1f".join([repo, branch, str(it.get("ts") or 0), - (it.get("subject") or "")[:200], - (it.get("shortstat") or "")[:200]])) -PY - -RASTER='Du bist der KARTEN-GUTACHTER einer lokalen KI-Box. Du bekommst EINE Vorschlags-Karte aus dem Auftragsbuch (Commit-Text, Datei-Liste, Diff) und den SELBST-STECKBRIEF der Box (was schon existiert und laeuft). Der Commander ist kein Entwickler — dein Urteil ist seine einzige fachliche Zweitmeinung vor dem Klick. Pruefe NUR anhand des Materials, erfinde nichts: (1) REDUNDANZ — existiert das laut Steckbrief oder Diff schon? Ein Vorschlag, der Bestehendes nur nachbaut oder verschlechtert (z. B. funktionierende Einstellungen ersetzt), ist abzulehnen. (2) RISIKO — beruehrt der Diff Security (Tokens/approvals/ufw/sudoers), loescht er Daten oder aendert er Verhalten, das der Commander nicht bestellt hat? (3) NUTZEN — loest er ein echtes, benanntes Problem? Antworte auf DEUTSCH in exakt zwei Zeilen: "URTEIL: ANNEHMEN" oder "URTEIL: ABLEHNEN" oder "URTEIL: UNKLAR", danach "SATZ: ". Kein weiterer Text.' - -judge() { # $1=Modell $2=Timeout $3=max_tokens (liest $EVID) - local req - req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \ - '{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}], - max_tokens:$mt, temperature:0.2}')" - curl -s -m "$2" "$ENDPOINT" -H 'Content-Type: application/json' --data-binary "$req" \ - | python3 -c ' -import json, sys -try: - d = json.load(sys.stdin) - msg = d["choices"][0]["message"] - print((msg.get("content") or msg.get("reasoning_content") or "").strip()) -except Exception: - pass' -} - -N=0 -while IFS=$'\x1f' read -r repo branch cts subject stat; do - [ -n "${repo:-}" ] || continue - [ "$N" -ge "$MAX_JE_LAUF" ] && { echo "Karten-Gutachter: Tages-Deckel ($MAX_JE_LAUF) erreicht — Rest morgen."; break; } - DIFF="$(curl -sfG -m 30 "$API/api/auftragsbuch/diff" \ - --data-urlencode "branch=$branch" --data-urlencode "repo=$repo" 2>/dev/null \ - | python3 -c ' -import json, sys -try: - print((json.load(sys.stdin).get("diff") or "")[:20000]) -except Exception: - pass' || true)" - # Leerer Diff = deterministisch UNKLAR, OHNE Richter (Erstlauf 12.07.: eine Karte mit - # 0 Dateien bekam trotzdem ANNEHMEN — ein LLM kann einen leeren Vorschlag nicht pruefen). - if [ -z "${DIFF//[[:space:]]/}" ]; then - python3 - "$OUT" "$repo" "$branch" "$cts" <<'PY' -import json, os, sys, time -out_path = sys.argv[1] -try: - data = json.load(open(out_path, encoding="utf-8")) - if not isinstance(data, dict): - data = {} -except Exception: - data = {} -data["{}:{}".format(sys.argv[2], sys.argv[3])] = { - "empfehlung": "UNKLAR", - "satz": "Der Vorschlag hat einen LEEREN Diff (0 geaenderte Dateien gegen main) — da gibt es nichts zu pruefen; technisch verdaechtig, im Zweifel ablehnen.", - "richter": "mechanische Regel (leerer Diff)", - "commit_ts": int(sys.argv[4]) if sys.argv[4].isdigit() else None, - "ts": int(time.time())} -tmp = out_path + ".tmp" -with open(tmp, "w", encoding="utf-8") as f: - json.dump(data, f, ensure_ascii=False) -os.replace(tmp, out_path) -PY - N=$((N + 1)) - echo "Karte ${branch}: Empfehlung UNKLAR — leerer Diff (mechanische Regel, kein Richter noetig)." - briefkasten "Karten-Gutachter" "Karte '${branch}' (${repo}): Empfehlung UNKLAR — der Diff ist leer (0 Dateien), technisch verdaechtig." - continue - fi - EVID="KARTE ${repo}:${branch} -COMMIT: ${subject} -UMFANG: ${stat} - -DIFF (ggf. gekuerzt): -${DIFF:-(Diff nicht lesbar)} - -SELBST-STECKBRIEF DER BOX (was schon existiert): -$(head -90 "$STECK" 2>/dev/null || echo '(noch keine Selbst-Inventur gelaufen)')" - - RICHTER="$CHEF" - URTEIL_RAW="$(judge "$CHEF" 420 1600)" - if [ -z "${URTEIL_RAW// /}" ]; then - RICHTER="$VERTRETUNG (Vertretung)" - URTEIL_RAW="$(judge "$VERTRETUNG" 240 1200)" - fi - [ -z "${URTEIL_RAW// /}" ] && { echo "Karte ${branch}: Gutachter ausgefallen (kein Richter erreichbar)."; continue; } - - printf '%s' "$URTEIL_RAW" > "$TMPD/urteil.txt" - STAMP="$(python3 - "$TMPD/urteil.txt" "$OUT" "$repo" "$branch" "$cts" "$RICHTER" <<'PY' -import json, os, re, sys, time - -raw = open(sys.argv[1], encoding="utf-8", errors="replace").read() -m_u = re.search(r"URTEIL:\s*(ANNEHMEN|ABLEHNEN|UNKLAR)", raw, re.I) -m_s = re.search(r"SATZ:\s*(.+)", raw) -urteil = (m_u.group(1).upper() if m_u else "UNKLAR") -satz = (m_s.group(1).strip() if m_s else "Analyse unklar — Urteil nicht lesbar.")[:300] -out_path = sys.argv[2] -try: - data = json.load(open(out_path, encoding="utf-8")) - if not isinstance(data, dict): - data = {} -except Exception: - data = {} -key = "{}:{}".format(sys.argv[3], sys.argv[4]) -data[key] = {"empfehlung": urteil, "satz": satz, "richter": sys.argv[6], - "commit_ts": int(sys.argv[5]) if sys.argv[5].isdigit() else None, - "ts": int(time.time())} -tmp = out_path + ".tmp" -with open(tmp, "w", encoding="utf-8") as f: - json.dump(data, f, ensure_ascii=False) -os.replace(tmp, out_path) -print(urteil + "\x1f" + satz) -PY -)" - URTEIL="${STAMP%%$'\x1f'*}"; SATZ="${STAMP#*$'\x1f'}" - N=$((N + 1)) - echo "Karte ${branch}: Empfehlung ${URTEIL} — ${SATZ}" - briefkasten "Karten-Gutachter" "Karte '${branch}' (${repo}): Empfehlung ${URTEIL} — ${SATZ} (Richter: ${RICHTER})" -done < "$TMPD/plan.txt" - -# stdout bleibt LEER, wenn nichts zu stempeln war (--no-agent => stille Nacht). diff --git a/deploy/mc2-bagatell.service b/deploy/mc2-bagatell.service deleted file mode 100644 index 4a1985f..0000000 --- a/deploy/mc2-bagatell.service +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=MC2 Bagatell-Annahme (reine Doku-Vorschläge nachts ohne Klick, mit Fangnetz) -Documentation=file:%h/mission-control-v2/docs/AUFTRAGSBUCH.md - -[Service] -Type=oneshot -# Als /tmp-Kopie laufen lassen: die Annahme deployt (git reset --hard) und würde sonst das -# eigene Skript unter dem laufenden bash austauschen (bekannte Selbst-Reset-Falle). -ExecStart=/bin/bash -c 'cp "%h/mission-control-v2/deploy/bagatell-annahme.sh" /tmp/mc2-bagatell-run.sh && exec /bin/bash /tmp/mc2-bagatell-run.sh' diff --git a/deploy/mc2-bagatell.timer b/deploy/mc2-bagatell.timer deleted file mode 100644 index 0524507..0000000 --- a/deploy/mc2-bagatell.timer +++ /dev/null @@ -1,9 +0,0 @@ -[Unit] -Description=Täglich 04:10 — Bagatell-Annahme (nach der Nacht-Sicherung 03:30, vor der Morgenlage 04:30) - -[Timer] -OnCalendar=*-*-* 04:10:00 -Persistent=false - -[Install] -WantedBy=timers.target diff --git a/deploy/mc2-selfsmoke.service b/deploy/mc2-selfsmoke.service deleted file mode 100644 index 0796f6a..0000000 --- a/deploy/mc2-selfsmoke.service +++ /dev/null @@ -1,7 +0,0 @@ -[Unit] -Description=MC2 Selbst-Smoke-Tests (Gateway/Tools/Voice aktiv durchspielen, Alarm bei Rot) -Documentation=file:%h/mission-control-v2/docs/AUTONOMIE_PLAN.md - -[Service] -Type=oneshot -ExecStart=/bin/bash %h/mission-control-v2/deploy/self-smoke.sh diff --git a/deploy/mc2-selfsmoke.timer b/deploy/mc2-selfsmoke.timer deleted file mode 100644 index 3118250..0000000 --- a/deploy/mc2-selfsmoke.timer +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description=Täglicher MC2-Selbst-Smoke-Test (07:15, unabhängig von Updates) - -[Timer] -OnCalendar=*-*-* 07:15:00 -Persistent=true -RandomizedDelaySec=300 - -[Install] -WantedBy=timers.target diff --git a/deploy/mc2-steward.service b/deploy/mc2-steward.service deleted file mode 100644 index d5a36e4..0000000 --- a/deploy/mc2-steward.service +++ /dev/null @@ -1,27 +0,0 @@ -# systemd-USER-Unit für den MC2-Steward — die Wächter-Loops als eigener Prozess (UMBAU v3 P2). -# Re-Warm-Wächter, Health-Sentry und Mem0-Dedupe überleben damit jeden Steuerpult-Neustart, -# und der Sentry kann erstmals auch das Steuerpult SELBST + den mc2-gateway überwachen -# (MC_SENTRY_WATCH_MC2=1). Meldungen gehen per HTTP in den MC2-Briefkasten (MC_ANNOUNCE_HTTP); -# ist MC2 down, greift weiterhin der Telegram-Direktweg (notify.sh). -# Sudo-frei wie alle MC2-Units: ~/.config/systemd/user/ + systemctl --user. - -[Unit] -Description=MC2 Steward (Wächter: Re-Warm, Health-Sentry, Mem0-Dedupe) -After=network-online.target -Wants=network-online.target - -[Service] -Type=simple -WorkingDirectory=%h/mission-control-v2/backend -ExecStart=%h/mission-control-v2/backend/.venv/bin/python steward.py -Environment=PYTHONPATH=%h/mission-control-v2 -Environment=MC_LLAMA_SWAP_URL=http://127.0.0.1:8080 -Environment=MC_CONFIG_PATH=/etc/llama-swap/config.yaml -Environment=MC_MODELS_DIR=/srv/models -Environment=MC_ANNOUNCE_HTTP=http://127.0.0.1:9001 -Environment=MC_SENTRY_WATCH_MC2=1 -Restart=always -RestartSec=3 - -[Install] -WantedBy=default.target diff --git a/deploy/mem0-konsolidierung.py b/deploy/mem0-konsolidierung.py deleted file mode 100644 index c91adc2..0000000 --- a/deploy/mem0-konsolidierung.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python3 -"""mem0-Konsolidierung (monatlich, 19.07.2026 — Nachtrag Phase 2 Drei-Welten-Plan). - -mem0 OSS v2 ist ADD-only: Es legt Fakten an, loest aber Widersprueche nie auf und -legt Aehnliches nie zusammen — ohne Pflege waechst das Gedaechtnis unbegrenzt und -der Recall verrauscht. Der Steward-Dedupe faengt nur exakte Dubletten. Dieser Lauf -macht die fehlende Konsolidierung: - - 1. Cluster aehnlicher Fakten holen — ueber den bestehenden /graph-Endpunkt des - Sidecars (Kosinus der gespeicherten Embeddings, kein Re-Embedding, kein - Chroma-Zugriff noetig). - 2. Je Cluster entscheidet das lokale Hirn (Alias `fast`, Thinking aus wie im - Sidecar): zusammenlegen / Widerspruch aufloesen (neuester Zeitstempel - gewinnt) / NICHTS tun. - 3. Anwenden ueber die normalen Sidecar-Endpunkte (PUT/DELETE /memory/). - -Sicherheitsleitplanken (hart im Code, nicht im Prompt): - - Pro Cluster ueberlebt IMMER mindestens ein Fakt. - - Nur ids aus dem Cluster, max. 1 Update pro Cluster, Inhalt <= 600 Zeichen. - - LLM-Fehler / kaputtes JSON => Cluster bleibt unangetastet. - - Kappung pro Lauf (MAX_CLUSTERS), damit ein Lauf nie das halbe Gedaechtnis - umpfluegt — der naechste Monat macht weiter. - -Aufruf: mem0-konsolidierung.py [--apply] (Default: Dry-Run, druckt nur Plan) -""" -import json -import sys -import time -import urllib.request - -MEM0 = "http://127.0.0.1:8765" -LLM = "http://127.0.0.1:8080/v1/chat/completions" -LLM_MODEL = "fast" -MIN_SCORE = 0.82 -MAX_CLUSTERS = 15 -MAX_FACTS_PER_CLUSTER = 6 -APPLY = "--apply" in sys.argv - - -def _http(method: str, url: str, body: dict | None = None, timeout: float = 120.0): - data = json.dumps(body).encode() if body is not None else None - req = urllib.request.Request(url, data=data, method=method, - headers={"Content-Type": "application/json"}) - with urllib.request.urlopen(req, timeout=timeout) as r: - return json.loads(r.read().decode() or "{}") - - -def clusters_from_graph() -> tuple[dict, list]: - g = _http("GET", f"{MEM0}/graph?min_score={MIN_SCORE}&top_k=5", timeout=180) - nodes = {n["id"]: n for n in g.get("nodes", [])} - parent: dict = {} - - def find(x): - parent.setdefault(x, x) - while parent[x] != x: - parent[x] = parent[parent[x]] - x = parent[x] - return x - - for e in g.get("edges", []): - a, b = find(e["source"]), find(e["target"]) - if a != b: - parent[a] = b - groups: dict = {} - for nid in parent: - groups.setdefault(find(nid), []).append(nid) - clusters = [sorted(v) for v in groups.values() if len(v) >= 2] - clusters.sort(key=len, reverse=True) - return nodes, clusters[:MAX_CLUSTERS] - - -def judge(facts: list[dict]) -> list[dict]: - """LLM entscheidet pro Cluster. Fehler => [] (nichts tun).""" - listing = "\n".join( - f"- id={f['id']} | kategorie={f.get('category')} | stand={f.get('updated_at', '')[:10]} | {f.get('content', '')}" - for f in facts) - system = ( - "Du konsolidierst ein Langzeitgedaechtnis. Unten steht EINE Gruppe semantisch " - "aehnlicher Fakten. Entscheide konservativ: " - "(a) Sind es Facetten DESSELBEN Fakts: fasse sie in EINEM praezisen deutschen Satz " - "zusammen -> genau ein update auf die beste id, die anderen delete. " - "(b) Widersprechen sie sich: der Fakt mit dem NEUESTEN Stand gewinnt -> veraltete delete. " - "(c) Sind es VERSCHIEDENE Fakten (nur thematisch verwandt): TUE NICHTS. " - "Im Zweifel IMMER (c). Antworte NUR als JSON: " - '{"actions":[{"op":"update","id":"...","content":"..."},{"op":"delete","id":"..."}]} ' - 'oder {"actions":[]}.' - ) - try: - resp = _http("POST", LLM, { - "model": LLM_MODEL, - "messages": [{"role": "system", "content": system}, - {"role": "user", "content": "Fakten-Gruppe:\n" + listing}], - "temperature": 0.1, "max_tokens": 800, - "response_format": {"type": "json_object"}, - "chat_template_kwargs": {"enable_thinking": False}, - }) - raw = resp["choices"][0]["message"]["content"] or "{}" - actions = json.loads(raw).get("actions", []) - except Exception as exc: - print(f" (LLM-Fehler, Gruppe unangetastet: {exc})") - return [] - # Harte Validierung — Leitplanken siehe Docstring. - ids = {f["id"] for f in facts} - updates = [a for a in actions if a.get("op") == "update" and a.get("id") in ids - and isinstance(a.get("content"), str) and 0 < len(a["content"]) <= 600] - deletes = [a for a in actions if a.get("op") == "delete" and a.get("id") in ids] - if len(updates) > 1: - return [] - del_ids = {a["id"] for a in deletes} - {a["id"] for a in updates} - if len(del_ids) >= len(ids): - return [] - return updates + [{"op": "delete", "id": i} for i in sorted(del_ids)] - - -def main() -> None: - t0 = time.time() - nodes, clusters = clusters_from_graph() - total = len(nodes) - print(f"mem0-Konsolidierung {'(APPLY)' if APPLY else '(DRY-RUN)'} — " - f"{total} Fakten, {len(clusters)} Gruppen >= {MIN_SCORE}") - n_upd = n_del = 0 - for ci, cl in enumerate(clusters, 1): - facts = [nodes[i] for i in cl][:MAX_FACTS_PER_CLUSTER] - actions = judge(facts) - if not actions: - continue - print(f"Gruppe {ci} ({len(facts)} Fakten):") - for f in facts: - print(f" [{f['id'][:8]}] {f.get('content', '')[:90]}") - for a in actions: - if a["op"] == "update": - print(f" -> UPDATE {a['id'][:8]}: {a['content'][:90]}") - n_upd += 1 - if APPLY: - _http("PUT", f"{MEM0}/memory/{a['id']}", {"content": a["content"]}) - else: - print(f" -> DELETE {a['id'][:8]}") - n_del += 1 - if APPLY: - _http("DELETE", f"{MEM0}/memory/{a['id']}") - print(f"Ergebnis: {n_upd} zusammengefasst, {n_del} geloescht, " - f"{total - (n_del if APPLY else 0)} Fakten verbleiben. " - f"({int(time.time() - t0)} s)") - - -if __name__ == "__main__": - main() diff --git a/deploy/mem0-konsolidierung.sh b/deploy/mem0-konsolidierung.sh deleted file mode 100644 index 7b933fb..0000000 --- a/deploy/mem0-konsolidierung.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -# Monatlicher mem0-Konsolidierungslauf (Cron-Wrapper, 3. des Monats 06:40 — -# nach Restore-Probe am 1. und Venv-Audit am 2.). no_agent-Job: stdout geht -# als Bericht direkt an Telegram. Logik: deploy/mem0-konsolidierung.py (--apply). -set -u -exec python3 "$HOME/.hermes/scripts/mem0-konsolidierung.py" --apply 2>&1 diff --git a/deploy/mem0-service.service b/deploy/mem0-service.service deleted file mode 100644 index e012623..0000000 --- a/deploy/mem0-service.service +++ /dev/null @@ -1,26 +0,0 @@ -[Unit] -Description=MC2 Mem0 Sidecar — auto-lernendes, semantisches Gedächtnis (mem0 + chroma) -Documentation=https://github.com/mem0ai/mem0 -After=network.target - -[Service] -# Mem0 + chromadb laufen nur unter Python 3.12 (~/.mem0/venv) — das MC2-Backend (3.14) -# kann sie nicht importieren. Darum dieser schlanke Sidecar; MC2 spricht ihn per HTTP an. -# Bind 127.0.0.1: nur lokal erreichbar (MC2 proxyt nach außen). -Type=simple -WorkingDirectory=%h/mission-control-v2/mem0_service -Environment=MEM0_PORT=8765 -Environment=MEM0_CHROMA_PATH=/srv/models/mem0/chroma -Environment=MEM0_HISTORY_DB=/srv/models/mem0/history.db -Environment=MEM0_EMBED_URL=http://127.0.0.1:8080/v1 -Environment=MEM0_LLM_URL=http://127.0.0.1:8080/v1 -Environment=MEM0_EMBED_MODEL=embed -Environment=MEM0_LLM_MODEL=fast -Environment=MEM0_EMBED_DIMS=1024 -Environment=TOKENIZERS_PARALLELISM=false -ExecStart=%h/.mem0/venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8765 -Restart=always -RestartSec=3 - -[Install] -WantedBy=default.target diff --git a/deploy/night-cron-wrapper.sh b/deploy/night-cron-wrapper.sh deleted file mode 100644 index 0253cfb..0000000 --- a/deploy/night-cron-wrapper.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Erwartet den Job-Namen und das Skript als ein String oder zwei Argumente -if [ $# -eq 1 ]; then - read -r JOB_NAME SCRIPT_NAME <<< "$1" -else - JOB_NAME="$1" - SCRIPT_NAME="$2" -fi - -if [ -z "$SCRIPT_NAME" ]; then - SCRIPT_NAME="$JOB_NAME" -fi - -# Pfad zusammenbauen -SCRIPT_PATH="$HOME/mission-control-v2/deploy/$SCRIPT_NAME" -if [ ! -f "$SCRIPT_PATH" ]; then - # Versuche pruefstand/ - SCRIPT_PATH="$HOME/mission-control-v2/deploy/pruefstand/$SCRIPT_NAME" -fi - -bash "$SCRIPT_PATH" | bash "$HOME/mission-control-v2/deploy/notify.sh" -s "$JOB_NAME" diff --git a/deploy/opencode-lauf.sh b/deploy/opencode-lauf.sh deleted file mode 100644 index 6fe5423..0000000 --- a/deploy/opencode-lauf.sh +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/env bash -# opencode-lauf.sh — EIN begrenzter Agentenlauf auf der Box, mit denselben Regeln wie in Zed. -# -# Das ist die Nacht-Seite von „ein Regelwerk, zwei Ausloeser": tagsueber tippst du in Zed, -# nachts ruft ein Hermes-Cron dieses Skript. Beide Wege benutzen -# * dieselbe OpenCode-Version, -# * dieselbe Mannschaft (~/.config/opencode/opencode.json: coder/hermes/kritiker), -# * dasselbe Plugin (~/.config/opencode/plugin/mc2-governor.ts: Zaun + Pruef-Tor), -# * denselben Token-Waechter (:8100). -# -# Unterschied zu deploy/worker.sh: worker.sh ist EIN zustandsloser Completion-Aufruf -# (Hermes schreibt die Dateien selbst). Hier laeuft ein ECHTER Agent mit Datei-Haenden, -# Subagenten und Pruef-Tor — fuer ganze Karten statt fuer Schnipsel. -# -# Nutzung: -# opencode-lauf.sh "" -# opencode-lauf.sh ~/projekte/foo "Baue X. Halte dich an AGENTS.md." -# -# Env: -# LAUF_TIMEOUT Sekunden Hoechstdauer (Default 3600) -# LAUF_LAUT 1 = Lucy spricht mit (Default 0 = still, Nachtbetrieb) -# LAUF_AGENT OpenCode-Agent (Default build) -set -uo pipefail - -REPO="${1:-}" -AUFTRAG="${2:-}" -TIMEOUT="${LAUF_TIMEOUT:-3600}" -AGENT="${LAUF_AGENT:-build}" -OC="$HOME/.opencode/bin/opencode" -ANNOUNCE="${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" - -melde () { # melde [prioritaet] - curl -sf -m 5 -X POST "$ANNOUNCE" -H 'Content-Type: application/json' \ - --data "$(python3 -c 'import json,sys; print(json.dumps({"subject":sys.argv[1],"text":sys.argv[2],"source":"loop","priority":sys.argv[3]}))' \ - "$1" "$2" "${3:-silent}")" >/dev/null 2>&1 || true -} - -if [ -z "$REPO" ] || [ -z "$AUFTRAG" ]; then - echo "Nutzung: $0 \"\"" >&2 - exit 2 -fi -if [ ! -d "$REPO" ]; then - echo "FEHLER: '$REPO' ist kein Verzeichnis." >&2 - exit 2 -fi -if [ ! -x "$OC" ]; then - echo "FEHLER: OpenCode nicht gefunden ($OC)." >&2 - exit 2 -fi - -# Der Governor MUSS stehen — ohne ihn liefe der Lauf ohne Sitzungs-Bremse. -if ! curl -sf -m 5 -o /dev/null "http://127.0.0.1:8100/governor/status"; then - echo "FEHLER: Governor (:8100) antwortet nicht — Lauf abgebrochen (keine Sitzungs-Bremse)." >&2 - melde "[Lauf]" "Ich habe einen Nachtlauf abgebrochen: der Token-Waechter antwortet nicht." "normal" - exit 3 -fi - -# Nachts still: Meldungen landen im Briefkasten, Lucy spricht sie aber nicht aus. -# Das Plugin liest diese Variable; die Morgen-Zusammenfassung kommt vom Daily-Briefing. -if [ "${LAUF_LAUT:-0}" = "1" ]; then export MC2_LOOP_SILENT=0; else export MC2_LOOP_SILENT=1; fi - -LOGDIR="$HOME/.hermes/logs"; mkdir -p "$LOGDIR" -STAMP="$(date +%Y%m%d-%H%M%S)" -LOG="$LOGDIR/opencode-lauf-$STAMP.log" -MAXRUNDEN="${LAUF_MAX_RUNDEN:-3}" - -cd "$REPO" || exit 2 -NAME="$(basename "$REPO")" -melde "[Lauf]" "Ich fange an zu bauen: $NAME." "silent" -echo "=== Lauf $STAMP · Repo $REPO · Agent $AGENT · Timeout ${TIMEOUT}s ===" | tee "$LOG" - -# Verify-Befehl des Projekts lesen (gleiche Datei und gleiche Regeln wie im Plugin). -verify_cmd () { - [ -r "$REPO/VERIFY" ] || return 1 - grep -vE '^\s*(#|$)' "$REPO/VERIFY" | paste -sd' && ' - -} - -START=$(date +%s) -CODE=0 -RUNDE=0 -AUFGABE="$AUFTRAG" - -# ── Bau-Schleife ──────────────────────────────────────────────────────────── -# Warum hier UND im Plugin? Das Plugin haengt am Ereignis `session.idle` — in Zed -# laeuft der Prozess weiter und alles ist gut. Bei `opencode run` beendet sich der -# Prozess aber, bevor das Pruef-Tor fertig ist (gemessen 25.07.). Fuer unbeaufsichtigte -# Laeufe muss die Schleife deshalb HIER liegen, wo sie den Prozess ueberlebt. -while :; do - RUNDE=$((RUNDE + 1)) - echo "--- Runde $RUNDE/$MAXRUNDEN ---" | tee -a "$LOG" - timeout "$TIMEOUT" "$OC" run --agent "$AGENT" "$AUFGABE" >>"$LOG" 2>&1 - CODE=$? - [ "$CODE" -eq 124 ] && { echo "ZEITUEBERSCHREITUNG" | tee -a "$LOG"; break; } - - VCMD="$(verify_cmd)" || { echo "Kein VERIFY — Pruef-Tor aus, Lauf endet." | tee -a "$LOG"; break; } - - echo "--- Pruef-Tor: $VCMD ---" | tee -a "$LOG" - VOUT="$(cd "$REPO" && eval "$VCMD" 2>&1)"; VCODE=$? - printf '%s\n' "$VOUT" | tail -20 >> "$LOG" - - if [ "$VCODE" -eq 0 ]; then - echo "PRUEF-TOR GRUEN" | tee -a "$LOG" - melde "[Pruefung]" "$NAME: Tests gruen nach $RUNDE Runde(n)." "normal" - CODE=0 - break - fi - - if [ "$RUNDE" -ge "$MAXRUNDEN" ]; then - echo "PRUEF-TOR ROT — Reparaturrunden aufgebraucht." | tee -a "$LOG" - melde "[Pruefung]" "$NAME: Tests bleiben rot nach $RUNDE Runden. Hier komme ich allein nicht weiter." "normal" - CODE=1 - break - fi - - echo "PRUEF-TOR ROT — Runde $((RUNDE + 1)) folgt." | tee -a "$LOG" - melde "[Pruefung]" "$NAME: Tests rot, ich repariere selbst weiter (Runde $((RUNDE + 1))/$MAXRUNDEN)." "silent" - AUFGABE="[MC2-PRUEFTOR] Der Verify-Befehl des Projekts ist fehlgeschlagen. - -Befehl: $VCMD - -Ausgabe (Ende): -$(printf '%s' "$VOUT" | tail -c 3000) - -Behebe die URSACHE — nicht das Symptom. Schalte keinen Test ab und aendere keine Tests. -Urspruenglicher Auftrag war: $AUFTRAG" -done - -DAUER=$(( $(date +%s) - START )) -# Nachweis statt Behauptung: was hat der Lauf im Arbeitsbaum tatsaechlich veraendert? -GEAENDERT="$(git -C "$REPO" status --porcelain 2>/dev/null | wc -l | tr -d ' ')" - -case "$CODE" in - 0) ERG="fertig, Pruefung bestanden" ;; - 124) ERG="ZEITUEBERSCHREITUNG nach ${TIMEOUT}s" ;; - *) ERG="Pruefung NICHT bestanden (Exitcode $CODE)" ;; -esac - -echo "=== Ergebnis: $ERG · ${DAUER}s · $RUNDE Runde(n) · $GEAENDERT geaenderte Dateien · Log $LOG ===" | tee -a "$LOG" -melde "[Lauf]" "$NAME: $ERG nach $((DAUER/60)) Minuten, $RUNDE Runde(n), $GEAENDERT Dateien angefasst." "silent" -exit "$CODE" diff --git a/deploy/opencode/AGENTS.global.md b/deploy/opencode/AGENTS.global.md deleted file mode 100644 index cb3a8c6..0000000 --- a/deploy/opencode/AGENTS.global.md +++ /dev/null @@ -1,82 +0,0 @@ -# Persönliche Regeln (gelten für ALLE Projekte) - -## So arbeitest du mit mir -- Antworte auf **Deutsch**, Fazit zuerst, Technik in Alltagssprache. Ich bin **kein Entwickler**. -- **Plan vor Code** bei allem Größeren: erst Vorgehen zeigen, auf mein **„los"** warten. -- **Kleine Schritte**, eine Sache zur Zeit. Nichts Ungefragtes ausführen; **frag**, bevor du löschst - oder überschreibst. -- **Beweisen statt behaupten** — am Ende live testen, nicht „sollte gehen". -- Nimm **Standard-Wege**, keine exotische Technik, außer ich will es ausdrücklich anders. -- **Geheimnisse** (Schlüssel/Passwörter/Tokens) nie in den Code — in `.env` (+ `.gitignore`); warnen, - bevor so etwas in einen Commit wandert. -- **Nicht festfahren:** klemmt dieselbe Sache nach 2 Versuchen, anhalten, sichern, erklären und fragen. -- **Bau-Prinzipien sind DEIN Job, nicht meine Frage:** KISS, YAGNI, Zuständigkeiten trennen, DRY, - sprechende Namen, schlank starten. Frag mich nie danach — frag mich nur nach Zielen in Alltagssprache. -- **Faulheits-Leiter vor jeder neuen Zeile/Abhängigkeit:** (1) muss das überhaupt sein? (2) gibt's das - schon (wiederverwenden)? (3) reicht Bordmittel/Standard-Bibliothek? (4) erst dann minimal selbst bauen. - Faul bei Lösungen, nie beim Verstehen; Sicherheitsnetze (Prüfung/Fehlerbehandlung/keine Geheimnisse) - bleiben. „Prüf auf Über-Engineering" = Diff auf unnötige Abhängigkeiten/Abstraktion/Verdachts-Features durchsehen. - -## Deine Mannschaft — delegiere, statt alles selbst zu tun -- **`explore`** (Subagent): Code durchsuchen, Dateien finden, Fragen zum Bestand beantworten. Läuft auf - dem ohnehin warmen Hirn und kostet praktisch nichts. **Nutze ihn**, statt dich selbst durch den Baum - zu wühlen — dein eigener Kontext bleibt dadurch sauber und du hältst länger durch. -- **`review`** (Subagent): kritisches Gegenlesen nach jeder Etappe. Läuft bewusst auf einer **fremden - Modellfamilie**, damit er andere blinde Flecken hat als du. Nimm seine Befunde ernst. -- **`plan`**: nur lesen, keine Änderungen. -- Es gibt **keinen Modellwechsel mehr**. Früher galt „zum Bauen oben auf Coder umschalten" — Planen und - Bauen laufen inzwischen auf demselben Modell. Bitte mich nie, etwas umzustellen. - -## Das Prüf-Tor (`VERIFY`) -- Im Projekt liegt eine Datei `VERIFY` mit **einer Zeile: wie man dieses Projekt testet**. Sobald du - „fertig" meldest, wird sie automatisch ausgeführt. -- **Rot heißt nicht fertig.** Der Fehler kommt zu dir zurück, du behebst die **Ursache** — nicht das - Symptom. Einen Test abschwächen, überspringen oder umschreiben, damit er grün wird, gilt als Betrug. -- Fehlt die Datei, ist das Prüf-Tor aus. Dann **frag mich**, was der richtige Testbefehl wäre, statt - ungeprüft weiterzubauen. - -## Kontext-Wächter -- Ein Token-Wächter zählt jede Sitzung mit und schneidet sie bei ~45.000 Tokens. Du musst nichts messen - — die Ansage kommt von allein. -- Kommt sie: **`SAVEPOINT.md` ehrlich fertigschreiben und anhalten.** Ehrlich heißt: nur was **wirklich - im Code steht**. Nichts aus Absicht, Plan oder git-Nachrichten ableiten. Dazu der genaue nächste - Schritt, offene Fragen und Stolpersteine — genug, dass eine frische Sitzung ohne jede Erinnerung - allein damit weitermachen kann. -- Merkst du vorher schon, dass du dich wiederholst oder abdriftest: sag es proaktiv und schlag einen - frischen Chat vor. - -## Wenn niemand da ist (unbeaufsichtigte Läufe) -Nachts startet ein Cron dieselbe Umgebung ohne Menschen davor. Erkennst du das — der Auftrag kam als -ein Block, auf Rückfragen antwortet niemand: **warte nicht auf ein „los"**. Halte dich an `KONZEPT`/ -`SAVEPOINT.md`, bau in kleinen Etappen und lass das Prüf-Tor entscheiden. Was du ohne Antwort nicht -sauber entscheiden kannst, schreibst du als offene Frage in `SAVEPOINT.md`, statt zu raten. - -## Was du nie tust -`git push`, Historie umschreiben, rekursiv löschen, `sudo`, Pakete veröffentlichen. Das ist gezäunt und -wird geblockt — nicht weil du es falsch machst, sondern weil Veröffentlichen meine Entscheidung ist. -Brauchst du so etwas wirklich: sag es mir, ich mache es selbst. - -## Bestehendes Projekt fortsetzen? -Ordner nicht leer / neue Sitzung: zuerst **`SAVEPOINT.md` + `AGENTS.md` lesen**, mir in 2 Sätzen sagen -„hier stehen wir / nächster Schritt", dann weitermachen — nicht neu planen. - -## Neues Projekt? → Projekt-Start-Ablauf -Wenn ein **neues** Projekt beginnt (leerer/neuer Ordner, „bau mir…", „neues Projekt…", „ich hätte -gern…"): folge diesem Ablauf. **Keine Datei, kein Code vor meiner Freigabe.** -1. **Verstehen:** erst herausfinden, *was für ein* Projekt (Web-App / kleines Skript / - Box-Lucy-Erweiterung / Experiment / Datensache), dann **3–6 typ-passende Fragen** + „woran ist - es fertig?". -2. **Plan vorlegen** (Ziel · Vorgehen · Technik + warum · Fertig-Kriterien · Risiken) → **STOPP**, - auf mein „los" warten. -3. **Erst dann Gerüst:** `git init` + die Projektdateien (`AGENTS.md`, `SAVEPOINT.md`, `.aiexclude`, - `VERIFY`) + `README`, dann **Sicherungspunkt „start"** (erster Commit). -4. In **kleinen Schritten** bauen, an jedem Meilenstein + vor riskanten Änderungen einen - **Sicherungspunkt** (Commit mit klarem Namen) setzen, am Ende **live testen**. - -## Bei großem Meilenstein UND Session-Ende („Feierabend"/„sichern") -Immer fortschreiben: **`SAVEPOINT.md`** (Stand · Fertiges · nächste Schritte · offene Fragen — die -Übergabe an die nächste Sitzung), **`AGENTS.md`** (falls Konventionen sich änderten), **`.aiexclude`** -(neue Geheimnisse/große Dateien), **`VERIFY`** (falls sich der Testbefehl geändert hat), dann -Sicherungspunkt setzen. - -Volle Fassung des Projekt-Start-Ablaufs: `F:\Coding Stuff\projekt-start\SKILL.md` diff --git a/deploy/opencode/README.md b/deploy/opencode/README.md deleted file mode 100644 index 74f344c..0000000 --- a/deploy/opencode/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# OpenCode-Seite: ein Regelwerk, zwei Auslöser - -Tagsüber tippst du in **Zed** (PC), nachts ruft ein **Hermes-Cron** dasselbe (Box). -Beide Wege benutzen dieselbe OpenCode-Version, dieselbe Mannschaft, dasselbe Plugin -und denselben Token-Wächter. Der einzige Unterschied ist die Adresse des Governors. - -## Was wohin gehört - -| Datei hier | Ziel auf dem PC | Ziel auf der Box | -|---|---|---| -| `opencode.pc.json` | `~/.config/opencode/opencode.json` | — | -| `opencode.box.json` | — | `~/.config/opencode/opencode.json` | -| `AGENTS.global.md` | `~/.config/opencode/AGENTS.md` | `~/.config/opencode/AGENTS.md` | -| `plugin/mc2-governor.ts` | `~/.config/opencode/plugin/` | `~/.config/opencode/plugin/` | -| `VERIFY.template` | — | wird von `gitea-repo-create.sh` in **jedes neue Repo** als `VERIFY` gesät | - -### Warum die Regeln hier liegen und nicht in Zed - -Die persönlichen Arbeitsregeln standen bis 25.07.2026 in `AppData\Roaming\Zed\AGENTS.md` — und -haben dort **nie den Coding-Agenten erreicht**. Zeds eigene Doku ist eindeutig: `AGENTS.md` und -Skills gelten **nur für Zeds nativen Agenten**, nicht für ACP-Agenten wie OpenCode. Da hier über -ACP gearbeitet wird, liefen die Regeln jahrelang ins Leere. - -OpenCode liest stattdessen (in dieser Reihenfolge): `AGENTS.md` im Projekt (aufwärts gesucht) und -`~/.config/opencode/AGENTS.md` global. Beide gelten zusammen — Projektregeln ergänzen die globalen. - -Beim Umzug bewusst geändert: -- **Zeds Commit-Vorlage entfernt.** Sie war in dieselbe Datei gerutscht und enthielt „Only return - the commit message in your response" — in einer dauerhaft aktiven Regeldatei ein Fehlerherd. -- **Modellwähler-Absatz gestrichen.** „Zum Bauen oben auf Coder umschalten" stimmt seit der - Mannschafts-Umstellung nicht mehr: `plan` und `build` laufen auf demselben Modell. -- **Kontext-Wächter umgeschrieben** auf den Governor, der den Füllstand wirklich kennt. -- **Neu:** Prüf-Tor (`VERIFY`), die Subagenten-Mannschaft und ein Abschnitt für **unbeaufsichtigte - Läufe** — nachts sagt niemand „los", also darf der Agent dort nicht auf Freigabe warten. - -Der Governor selbst liegt in `../governor/` (Proxy + systemd-Unit), der unbeaufsichtigte -Läufer in `../opencode-lauf.sh`. - -## Die Mannschaft - -| Rolle | Modell | Gemessen (25.07.2026) | Warum | -|---|---|---|---| -| `plan` + `build` | `coder` — Qwen3-Coder-Next | **51,5 t/s** | Hält den Faden, verteilt Zuarbeit. MoE mit 3B aktiv → schnell auf Strix Halo. | -| `explore` | `hermes` — Qwen3.6-35B | **69,6 t/s** | Ohnehin dauerwarm → kostet **null** zusätzlichen Speicher. Sucht, liest, meldet kurz zurück. | -| `review` | `kritiker` — Devstral-Small-2 | **15,0 t/s** | Bewusst eine **fremde Modellfamilie** (Mistral statt Qwen) → andere blinde Flecken. Dicht = langsam beim Schreiben, aber ein Kritiker liest viel und schreibt wenig. | - -`heavy` (gpt-oss-120b, 63 GB) ist **nicht** mehr in der Tagesrolle: es würde beim Laden -das ganze warme Set verdrängen. Es bleibt der Nacht-Gutachter (4:30-Cron). - -## Nach einer Änderung - -Die Dateien hier sind **Vorlagen**, keine Live-Konfiguration. Nach einer Änderung -verteilen: - -```bash -# Box -scp deploy/opencode/opencode.box.json hitonabi@192.168.178.151:~/.config/opencode/opencode.json -scp deploy/opencode/plugin/*.ts hitonabi@192.168.178.151:~/.config/opencode/plugin/ -# PC (aus dem Repo heraus) -cp deploy/opencode/opencode.pc.json ~/.config/opencode/opencode.json -cp deploy/opencode/plugin/*.ts ~/.config/opencode/plugin/ -``` - -**Zed muss danach neu gestartet werden** — OpenCode liest seine Konfiguration nur beim Start. - -## Fallen, die Zeit gekostet haben - -- **Kein `_comment`-Schlüssel in `opencode.json`.** OpenCode validiert streng und - verweigert den Start mit „Unrecognized key". Kommentare gehören in dieses README. -- **Das Plugin läuft auf Windows UND Linux.** Deshalb `node:fs` statt `cat` und Buns - `${{ raw: cmd }}` statt `bash -lc` — beides fehlt auf Windows bzw. verschluckt den Befehl. -- **Bei `opencode run` beendet sich der Prozess, bevor `session.idle` fertig ist** - (gemessen 25.07.). Für unbeaufsichtigte Läufe liegt die Prüf-Schleife deshalb - zusätzlich in `opencode-lauf.sh`, wo sie den Prozess überlebt. In Zed greift das Plugin. -- **Plugin-Verzeichnis:** `plugin/` und `plugins/` werden beide erkannt; wir nutzen `plugin/`. diff --git a/deploy/opencode/VERIFY.template b/deploy/opencode/VERIFY.template deleted file mode 100644 index 47fd6a4..0000000 --- a/deploy/opencode/VERIFY.template +++ /dev/null @@ -1,21 +0,0 @@ -# VERIFY — wie man dieses Projekt prueft. -# -# Diese Datei ist das Pruef-Tor. Das MC2-Governor-Plugin fuehrt sie aus, sobald der -# Agent "fertig" sagt. Gruen -> Etappe gilt als fertig. Rot -> der Fehler geht -# automatisch als naechster Auftrag an den Agenten zurueck, bis zu 3 Runden. -# -# Regeln: -# * Eine Zeile = ein Befehl. Alle Zeilen werden mit && verkettet. -# * Zeilen mit # sind Kommentare. -# * KEINE Datei VERIFY im Projekt = Pruef-Tor aus (nichts passiert). -# * Der Befehl muss ohne Rueckfragen durchlaufen und mit 0 enden, wenn alles gut ist. -# -# Beispiele (unzutreffende Zeilen loeschen): -# -# Python: ruff check . && pytest -q -# Node/TS: npm run lint && npm test -# Frontend: npm run build -# Nur Syntax: python -m compileall -q . -# Nichts da: git diff --stat (laeuft immer gruen — Platzhalter) - -git diff --stat diff --git a/deploy/opencode/opencode.box.json b/deploy/opencode/opencode.box.json deleted file mode 100644 index 08a8fc5..0000000 --- a/deploy/opencode/opencode.box.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "aibox": { - "npm": "@ai-sdk/openai-compatible", - "name": "AI-Box ueber Governor (lokal)", - "options": { - "baseURL": "http://127.0.0.1:8100/v1", - "apiKey": "local" - }, - "models": { - "coder": { - "name": "coder — Bauen + Planen (Qwen3-Coder-Next, 51,5 t/s)", - "limit": { - "context": 131072, - "output": 16384 - } - }, - "hermes": { - "name": "hermes — Suchen (Qwen3.6-35B, immer warm, 69,6 t/s)", - "limit": { - "context": 65536, - "output": 8192 - } - }, - "kritiker": { - "name": "kritiker — Gegenlesen (Devstral-2, Mistral, 16k gedeckelt)", - "limit": { - "context": 16384, - "output": 4096 - } - }, - "heavy": { - "name": "heavy — Nacht-Gutachter (gpt-oss-120b, verdraengt das warme Set!)", - "limit": { - "context": 32768, - "output": 8192 - } - } - } - } - }, - "model": "aibox/coder", - "small_model": "aibox/hermes", - "agent": { - "plan": { - "model": "aibox/coder", - "permission": { - "edit": "deny", - "bash": "deny" - } - }, - "build": { - "model": "aibox/coder", - "permission": { - "edit": "allow", - "webfetch": "allow", - "bash": { - "*": "allow", - "ssh *": "deny", - "scp *": "deny", - "sftp *": "deny", - "ssh arcane@192.168.178.162 *": "allow", - "ssh -o StrictHostKeyChecking=no arcane@192.168.178.162 *": "allow", - "scp *arcane@192.168.178.162*": "allow" - } - } - }, - "explore": { - "mode": "subagent", - "description": "Codebase schnell durchsuchen, Dateien finden, Fragen zum Code beantworten — nur lesen, laeuft auf dem immer warmen Hirn", - "model": "aibox/hermes", - "permission": { - "edit": "deny", - "bash": "deny" - } - }, - "review": { - "mode": "subagent", - "description": "Kritischer Code-Review nach jeder Etappe (Pflicht laut AGENTS.md): sucht erfundene APIs/CLI-Flags, stille Abweichungen vom KONZEPT, fehlende Tests, toten Code — meldet Befunde, aendert nichts. Laeuft bewusst auf einer FREMDEN Modellfamilie (Mistral/Devstral statt Qwen), damit er andere blinde Flecken hat als der Coder.", - "model": "aibox/kritiker", - "permission": { - "edit": "deny", - "bash": "deny" - } - } - } -} diff --git a/deploy/opencode/opencode.pc.json b/deploy/opencode/opencode.pc.json deleted file mode 100644 index 1173805..0000000 --- a/deploy/opencode/opencode.pc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "$schema": "https://opencode.ai/config.json", - "provider": { - "aibox": { - "npm": "@ai-sdk/openai-compatible", - "name": "AI-Box ueber Governor (192.168.178.151:8100)", - "options": { - "baseURL": "http://192.168.178.151:8100/v1", - "apiKey": "local" - }, - "models": { - "heavy": { - "name": "heavy — Planer (gpt-oss-120b, 32k)", - "limit": { - "context": 32768, - "output": 8192 - } - }, - "coder": { - "name": "coder — Bauen (Qwen3-Coder-Next, 131k)", - "limit": { - "context": 131072, - "output": 16384 - } - }, - "hermes": { - "name": "hermes — Erkunden (Qwen3.6, immer warm, 69,6 t/s)", - "limit": { - "context": 65536, - "output": 8192 - } - }, - "kritiker": { - "name": "kritiker — Gegenlesen (Devstral-2, Mistral, 16k gedeckelt)", - "limit": { - "context": 16384, - "output": 4096 - } - } - } - } - }, - "model": "aibox/coder", - "small_model": "aibox/hermes", - "agent": { - "plan": { - "model": "aibox/coder", - "permission": { - "edit": "deny", - "bash": "deny" - } - }, - "build": { - "model": "aibox/coder", - "permission": { - "edit": "allow", - "webfetch": "allow", - "bash": { - "*": "allow", - "ssh *": "deny", - "scp *": "deny", - "sftp *": "deny", - "ssh arcane@192.168.178.162 *": "allow", - "ssh -o StrictHostKeyChecking=no arcane@192.168.178.162 *": "allow", - "scp *arcane@192.168.178.162*": "allow" - } - } - }, - "explore": { - "mode": "subagent", - "description": "Codebase schnell durchsuchen, Dateien finden, Fragen zum Code beantworten — nur lesen, läuft auf dem immer warmen Hirn", - "model": "aibox/hermes", - "permission": { - "edit": "deny", - "bash": "deny" - } - }, - "review": { - "mode": "subagent", - "description": "Kritischer Code-Review nach jeder Etappe (Pflicht laut AGENTS.md): sucht erfundene APIs/CLI-Flags, stille Abweichungen vom KONZEPT, fehlende Tests, toten Code — meldet Befunde, ändert nichts. Läuft bewusst auf einer FREMDEN Modellfamilie (Mistral/Devstral statt Qwen), damit er andere blinde Flecken hat als der Coder.", - "model": "aibox/kritiker", - "permission": { - "edit": "deny", - "bash": "deny" - } - } - } -} diff --git a/deploy/opencode/plugin/mc2-governor.ts b/deploy/opencode/plugin/mc2-governor.ts deleted file mode 100644 index ef9f96e..0000000 --- a/deploy/opencode/plugin/mc2-governor.ts +++ /dev/null @@ -1,248 +0,0 @@ -/** - * MC2-Governor — der "Fahrlehrer" im OpenCode-Agenten. - * - * Der Governor-Proxy (:8100) ist die Tankuhr: er sieht nur Tokens und zieht die - * Notbremse. Dieses Plugin sitzt IM Agenten und sieht alles andere — jeden - * Werkzeuggriff, jede Datei, jedes Sitzungsende. Es macht vier Dinge: - * - * 1. WERKZEUG-ZAUN (tool.execute.before) - * Blockt Handgriffe, die ein Agent nie unbeaufsichtigt tun darf: push, - * Historie umschreiben, rekursiv loeschen, sudo, Fremd-Hosts. Genau dieser - * Zustandsautomat-Zaun hob lokale Modelle in Messungen von 2/10 auf 10/10 — - * nicht weil sie schlauer werden, sondern weil sie nicht mehr entgleisen. - * - * 2. PRUEF-TOR + SCHLEIFE (session.idle) - * Sagt der Agent "fertig", laeuft der Verify-Befehl des Projekts (Datei - * `VERIFY` im Repo-Wurzelverzeichnis). GRUEN -> Meldung. ROT -> der Fehler - * geht als naechster Auftrag automatisch zurueck an den Agenten, bis zu - * MC2_LOOP_MAX_ROUNDS mal. Das ist die "Ralph-Schleife", nur mit Bremse. - * - * 3. SAVEPOINT STATT ZUSAMMENFASSEN (session.compacted) - * Beim Komprimieren fallen still die Regeln aus dem Kontext (Paper - * "Governance Decay"). Wir schieben stattdessen den Auftrag nach, SAVEPOINT.md - * zu schreiben — Wissen lebt in Datei + git, nicht im schrumpfenden Chat. - * - * 4. STIMME (MC2 /api/voice/announce) - * Jedes Ereignis geht mit eigenem Absender `loop` in MC2s Melde-Briefkasten. - * Lucy pollt ihn ohnehin und spricht ihn — ohne eine Zeile Lucy-Code. - * - * Schalter (Umgebungsvariablen): - * MC2_BOX_URL MC2-Basis (Default http://192.168.178.151:9001) - * MC2_LOOP_AUTOFIX Selbstreparatur (1 = an, Default an) - * MC2_LOOP_MAX_ROUNDS max. Reparaturrunden (Default 3) - * MC2_LOOP_SILENT 1 = Lucy schweigt (Nachtlauf; Meldungen kommen trotzdem an) - * MC2_LOOP_ANNOUNCE 0 = gar keine Meldungen - * MC2_FENCE_OFF 1 = Werkzeug-Zaun aus (nur fuer Notfaelle) - * - * Liegt global unter ~/.config/opencode/plugin/ und wirkt damit in JEDEM Projekt — - * am Tag in Zed, nachts im Cron. Ein Regelwerk, zwei Ausloeser. - */ - -const BOX_URL = process.env.MC2_BOX_URL || "http://192.168.178.151:9001" -const AUTOFIX = process.env.MC2_LOOP_AUTOFIX !== "0" -const MAX_ROUNDS = parseInt(process.env.MC2_LOOP_MAX_ROUNDS || "3", 10) -const SILENT = process.env.MC2_LOOP_SILENT === "1" -const ANNOUNCE_ON = process.env.MC2_LOOP_ANNOUNCE !== "0" -const FENCE_OFF = process.env.MC2_FENCE_OFF === "1" - -/** - * Verbotene Shell-Handgriffe. Bewusst als Muster auf der ROHEN Kommandozeile — - * ein Agent, der `git push` in ein `bash -c` verpackt, wird trotzdem erwischt. - * Kein Anspruch auf Sandbox-Sicherheit: das ist ein Leitplanken-Zaun gegen - * Entgleisen, keine Abwehr gegen einen boesartigen Akteur. - */ -const FENCE: Array<{ rx: RegExp; why: string }> = [ - { rx: /\bgit\s+push\b/, why: "git push — Veroeffentlichen ist Sache des Menschen (oder der CI-Ampel)." }, - { rx: /\bgit\s+reset\s+--hard\b/, why: "git reset --hard — verwirft Arbeit unwiederbringlich." }, - { rx: /\bgit\s+clean\s+-[a-z]*f/, why: "git clean -f — loescht ungetrackte Dateien unwiederbringlich." }, - { rx: /\bgit\s+(rebase|filter-branch|reflog\s+expire)\b/, why: "Historie umschreiben ist tabu." }, - { rx: /\brm\s+-[a-zA-Z]*r[a-zA-Z]*f?\s+\/(?:\s|$)/, why: "rm -rf / — nein." }, - { rx: /\brm\s+-[a-zA-Z]*[rf]/, why: "rekursives/erzwungenes Loeschen — bitte gezielt loeschen statt pauschal." }, - { rx: /\bsudo\b/, why: "sudo — Rechteausweitung gehoert nicht in einen Agentenlauf." }, - { rx: /\b(shutdown|reboot|mkfs|dd\s+if=)/, why: "System-/Datentraeger-Eingriff." }, - { rx: /\b(curl|wget)\b[^|]*\|\s*(ba)?sh\b/, why: "Aus dem Netz laden und direkt ausfuehren — klassischer Fussschuss." }, - { rx: /\bssh\s+(?!arcane@192\.168\.178\.162|-o\s+StrictHostKeyChecking=no\s+arcane@)/, why: "ssh nur zur freigegebenen Arcane-VM." }, - { rx: /\bnpm\s+publish\b|\btwine\s+upload\b/, why: "Veroeffentlichen von Paketen ist Sache des Menschen." }, -] - -/** Zaehler je Sitzung: wie viele Selbstreparatur-Runden liefen schon? */ -const rounds = new Map() -/** Doppel-Feuern verhindern: session.idle kann mehrfach kommen. */ -const busy = new Set() - -async function announce(subject: string, text: string, priority: "normal" | "silent" = "normal") { - if (!ANNOUNCE_ON) return - try { - await fetch(`${BOX_URL}/api/voice/announce`, { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - subject, - text, - source: "loop", - priority: SILENT ? "silent" : priority, - }), - signal: AbortSignal.timeout(4000), - }) - } catch { - /* best effort — eine stumme Lucy darf den Bau nie aufhalten */ - } -} - -export const MC2Governor = async ({ client, $, directory, worktree }: any) => { - const root: string = worktree || directory || process.cwd() - - /** - * Verify-Befehl des Projekts lesen. Fehlt die Datei, ist das Pruef-Tor AUS. - * Bewusst ueber fs statt `cat`: das Plugin laeuft am Tag auf Windows (Zed) und - * nachts auf der Box — `cat` gibt es auf Windows nicht zuverlaessig. - */ - async function readVerify(): Promise { - try { - const { readFile } = await import("node:fs/promises") - const { join } = await import("node:path") - const raw = await readFile(join(root, "VERIFY"), "utf8") - const cmd = raw - .split("\n") - .map((l: string) => l.trim()) - .filter((l: string) => l && !l.startsWith("#")) - .join(" && ") - return cmd || null - } catch { - return null - } - } - - /** - * Verify ausfuehren. Rueckgabe: {ok, output} — Ausgabe auf das Wesentliche gekuerzt. - * `{ raw: cmd }` schiebt den Befehl UNESCAPED in Buns Shell; ein normales - * `${cmd}` wuerde die ganze Zeile als EIN Argument uebergeben und nie laufen. - * Buns Shell ist plattformunabhaengig — kein `bash -lc`, das auf Windows fehlt. - */ - async function runVerify(cmd: string): Promise<{ ok: boolean; out: string }> { - try { - const res = await $`${{ raw: cmd }}`.cwd(root).nothrow().quiet() - const out = `${res.stdout?.toString() ?? ""}${res.stderr?.toString() ?? ""}` - return { ok: res.exitCode === 0, out: out.slice(-4000) } - } catch (e: any) { - return { ok: false, out: String(e?.message ?? e).slice(-4000) } - } - } - - /** Dem laufenden Agenten einen neuen Auftrag schicken (Selbstreparatur-Schleife). */ - async function sendPrompt(sessionID: string, text: string): Promise { - try { - await client.session.prompt({ - path: { id: sessionID }, - body: { parts: [{ type: "text", text }] }, - }) - return true - } catch { - return false - } - } - - return { - // ── 1. Werkzeug-Zaun ─────────────────────────────────────────────────── - "tool.execute.before": async (input: any, output: any) => { - if (FENCE_OFF) return - if (input?.tool !== "bash") return - const cmd: string = output?.args?.command ?? "" - if (!cmd) return - for (const rule of FENCE) { - if (rule.rx.test(cmd)) { - await announce( - "[Zaun]", - `Ich habe einen Befehl geblockt: ${rule.why}`, - "silent", - ) - // Werfen = OpenCode bricht genau diesen Werkzeugaufruf ab und gibt dem - // Modell den Grund zurueck. Der Agent arbeitet weiter, nur anders. - throw new Error( - `[MC2-ZAUN] Blockiert: ${rule.why}\n` + - `Befehl war: ${cmd}\n` + - `Waehle einen anderen Weg. Wenn das wirklich noetig ist, sag es dem Menschen — ` + - `er macht es selbst.`, - ) - } - } - }, - - // ── 2.-4. Ereignisse ─────────────────────────────────────────────────── - event: async ({ event }: any) => { - const type: string = event?.type ?? "" - const props: any = event?.properties ?? event ?? {} - const sessionID: string = props.sessionID || props.sessionId || props.id || "" - - // ── Savepoint statt Zusammenfassen ────────────────────────────────── - if (type === "session.compacted" || type === "experimental.session.compacting") { - await announce( - "[Sitzung]", - "Die Sitzung wurde komprimiert — ich lasse den Stand in SAVEPOINT.md sichern.", - "silent", - ) - if (sessionID) { - await sendPrompt( - sessionID, - "[MC2-GOVERNOR] Der Kontext wurde gerade komprimiert — dabei gehen still " + - "Regeln und Details verloren. Aktualisiere JETZT SAVEPOINT.md: was wirklich " + - "erledigt ist (nur was im Code steht), der genaue naechste Schritt, offene " + - "Fragen, Stolpersteine. Committe die Datei. Danach arbeite normal weiter.", - ) - } - return - } - - // ── Pruef-Tor + Selbstreparatur ───────────────────────────────────── - if (type !== "session.idle" || !sessionID) return - if (busy.has(sessionID)) return - - const cmd = await readVerify() - if (!cmd) return // Kein VERIFY im Projekt -> Pruef-Tor bewusst aus. - - busy.add(sessionID) - try { - const { ok, out } = await runVerify(cmd) - const round = rounds.get(sessionID) ?? 0 - - if (ok) { - rounds.delete(sessionID) - await announce("[Pruefung]", "Etappe fertig und die Tests sind gruen.", "normal") - return - } - - if (!AUTOFIX || round >= MAX_ROUNDS) { - rounds.delete(sessionID) - await announce( - "[Pruefung]", - `Die Tests sind rot und ich habe ${round} Reparaturversuche verbraucht. ` + - `Hier komme ich allein nicht weiter, Commander.`, - "normal", - ) - return - } - - rounds.set(sessionID, round + 1) - await announce( - "[Pruefung]", - `Tests rot — ich repariere selbst weiter, Runde ${round + 1} von ${MAX_ROUNDS}.`, - "silent", - ) - await sendPrompt( - sessionID, - `[MC2-PRUEFTOR] Deine Etappe gilt noch NICHT als fertig: der Verify-Befehl des ` + - `Projekts ist fehlgeschlagen.\n\n` + - `Befehl: ${cmd}\n\n` + - `Ausgabe (Ende):\n\`\`\`\n${out}\n\`\`\`\n\n` + - `Behebe die Ursache — nicht das Symptom, und schalte keinen Test ab. ` + - `Wenn du fertig bist, melde dich normal; ich pruefe dann erneut. ` + - `(Reparaturrunde ${round + 1} von ${MAX_ROUNDS}.)`, - ) - } finally { - busy.delete(sessionID) - } - }, - } -} - -export default MC2Governor diff --git a/deploy/pruefstand/auto_adopt.py b/deploy/pruefstand/auto_adopt.py deleted file mode 100644 index 1161469..0000000 --- a/deploy/pruefstand/auto_adopt.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -import sys, re, shutil, time - -if len(sys.argv) < 5: - print("Nutzung: auto_adopt.py [new_mmproj_path]") - sys.exit(1) - -config_path = sys.argv[1] -rolle = sys.argv[2] -new_hf_id = sys.argv[3] -new_gguf_path = sys.argv[4] -new_mmproj_path = sys.argv[5] if len(sys.argv) > 5 else "" - -shutil.copy(config_path, config_path + f".bak.{time.strftime('%Y%m%d%H%M%S')}") -content = open(config_path, "r", encoding="utf-8").read() - -blocks = re.split(r'\n ([a-zA-Z0-9_.-]+):\n', "\n" + content) -new_content = blocks[0].lstrip("\n") -adopted = False - -for i in range(1, len(blocks), 2): - m_name = blocks[i] - m_content = blocks[i+1] - - if re.search(r'aliases:\s*\n(?:\s+- [^\n]+\n)*\s+- ' + re.escape(rolle) + r'\b', m_content): - m_content = re.sub(r'(-m\s+)[^\s]+', r'\g<1>' + new_gguf_path, m_content) - if new_mmproj_path: - if "--mmproj" in m_content: - m_content = re.sub(r'(--mmproj\s+)[^\s]+', r'\g<1>' + new_mmproj_path, m_content) - else: - m_content = re.sub(r'(-m\s+[^\s]+)', r'\g<1> --mmproj ' + new_mmproj_path, m_content) - else: - m_content = re.sub(r'\s*--mmproj\s+[^\s]+', '', m_content) - - adopted = True - print(f"Auto-Adoption: {rolle} -> {new_hf_id} (ersetzt in {m_name})") - - new_content += f" {m_name}:\n{m_content}" - -with open(config_path, "w", encoding="utf-8") as f: - f.write(new_content) - -if not adopted: - print(f"Warnung: Rolle {rolle} in der config nicht gefunden. Auto-Adoption übersprungen.") - sys.exit(1) diff --git a/deploy/pruefstand/harness.py b/deploy/pruefstand/harness.py deleted file mode 100644 index 058022a..0000000 --- a/deploy/pruefstand/harness.py +++ /dev/null @@ -1,581 +0,0 @@ -#!/usr/bin/env python3 -# Prüfstand-Harness (17.07.2026): fährt ECHTE Prüfungen gegen ein OpenAI-kompatibles -# Endpoint (llama-swap :8080 für Amtsinhaber, Bench-Port :5899 für Kandidaten) und -# bewertet MECHANISCH — bestanden/durchgefallen statt Bauchgefühl. -# -# Suiten (deploy/pruefstand/suites/): -# coding Aufgabe → Modell schreibt Code → echte Unit-Tests laufen im Sandkasten -# agent Mehrschritt-Aufgabe mit Werkzeugen (Dateien lesen/schreiben/löschen im -# Sandkasten, Tool-Calling-API) → bewertet am ENDZUSTAND + Tool-Fehlerquote -# recherche Fragen gegen mitgelieferte Dokumente → Pflicht-Stichworte + wörtliches -# Zitat, das mechanisch gegen die Dokumente geprüft wird (Ehrlichkeits-Gate) -# deutsch Lucy-Alltags-Turns → Richter-Modell (Zwei-Kritiker-Muster) vergibt Noten -# vision generiertes Testbild beschreiben (nur für Vision-Rollen) -# speed kurze + lange Probe, pp/tg aus den llama.cpp-Timings -# -# Nutzung: -# python3 harness.py --endpoint http://127.0.0.1:8080/v1 --model hermes \ -# --suites coding,agent --out ergebnis.json [--judge-model gpt-oss-120b] \ -# [--deadline-min 90] [--vision-image pfad.png] -# -# Lehren eingebaut: Reasoning-Modelle brauchen großzügiges max_tokens (Verdikt 14.07.: -# knappes Budget = leerer content, nie "kaputt"); Timings stehen im "timings"-Feld der -# llama.cpp-Antwort; jeder API-Fehler = Aufgabe durchgefallen mit Grund, nie Abbruch. -import argparse -import base64 -import json -import os -import re -import shutil -import subprocess -import sys -import tempfile -import time -import unicodedata -import urllib.error -import urllib.request - -HIER = os.path.dirname(os.path.abspath(__file__)) -SUITES_DIR = os.path.join(HIER, "suites") - - -# ---------------------------------------------------------------- HTTP-Helfer -def api_chat(endpoint, model, messages, max_tokens=1800, tools=None, timeout=420, - temperature=0.1): - """Ein Chat-Call. Gibt (message-dict, timings-dict, fehler-string) zurück.""" - body = {"model": model, "messages": messages, "max_tokens": max_tokens, - "temperature": temperature} - if tools: - body["tools"] = tools - body["tool_choice"] = "auto" - req = urllib.request.Request( - endpoint.rstrip("/") + "/chat/completions", - data=json.dumps(body).encode("utf-8"), - headers={"Content-Type": "application/json"}) - try: - with urllib.request.urlopen(req, timeout=timeout) as r: - d = json.loads(r.read().decode("utf-8", "replace")) - msg = d["choices"][0]["message"] - return msg, d.get("timings") or {}, "" - except Exception as e: # Timeout, HTTP-Fehler, kaputtes JSON — alles ehrlich melden - return None, {}, f"{type(e).__name__}: {e}" - - -def inhalt_von(msg): - """content zuerst, reasoning_content als Notnagel (Reasoning-Modelle). - -Blöcke werden entfernt: rohe :8080-Aufrufe an Denk-Modelle (Qwen3.6) - liefern den Grübel-Text im content mit — bewertet wird NUR die Antwort - (Baseline-Befund 17.07.: Richter benotete sonst Denk-Monologe).""" - if not msg: - return "" - text = (msg.get("content") or msg.get("reasoning_content") or "") - text = re.sub(r".*?", "", text, flags=re.DOTALL) - # abgeschnittenes Denken ohne Schluss-Tag: ehrlich als leer werten - text = re.sub(r".*$", "", text, flags=re.DOTALL) - return text.strip() - - -def norm(s): - """Normalisierung fürs Zitat-Gate (identisch zur idle-radar-Mechanik).""" - s = unicodedata.normalize("NFKC", s or "") - s = "".join(ch for ch in s if ch.isalnum() or ch.isspace()) - return " ".join(s.lower().split()) - - -def code_block(text, sprache="python"): - """Letzten passenden Code-Block extrahieren; ohne Zaun: ganzen Text nehmen.""" - bloecke = re.findall(rf"```(?:{re.escape(sprache)})?\s*\n(.*?)```", - text or "", re.DOTALL | re.IGNORECASE) - if bloecke: - return bloecke[-1] - bloecke = re.findall(r"```\s*\n(.*?)```", text or "", re.DOTALL) - return bloecke[-1] if bloecke else (text or "") - - -def lade_task(pfad): - with open(pfad, encoding="utf-8") as f: - return json.load(f) - - -# ---------------------------------------------------------------- Suite: coding -def suite_coding(cfg, ergebnisse): - basis = os.path.join(SUITES_DIR, "coding", "aufgaben") - for tid in sorted(os.listdir(basis)): - tdir = os.path.join(basis, tid) - if not os.path.isfile(os.path.join(tdir, "task.json")): - continue - if cfg.abgelaufen(): - ergebnisse.append({"suite": "coding", "id": tid, "pass": False, - "grund": "Zeitbudget erschöpft — übersprungen"}) - continue - task = lade_task(os.path.join(tdir, "task.json")) - t0 = time.time() - prompt = task["prompt"] - for name, inhalt in (task.get("dateien") or {}).items(): - prompt += f"\n\n--- Datei `{name}` (Ist-Stand) ---\n```python\n{inhalt}\n```" - prompt += ("\n\nAntworte mit GENAU EINEM ```python-Code-Block, der den " - f"vollständigen Inhalt der Datei `{task['antwort_datei']}` enthält. " - "Keine Erklärungen außerhalb des Blocks.") - msg, tim, err = api_chat(cfg.endpoint, cfg.model, - [{"role": "user", "content": prompt}], - max_tokens=task.get("max_tokens", 2600)) - eintrag = {"suite": "coding", "id": tid, "dauer_s": round(time.time() - t0, 1), - "tg_tps": tim.get("predicted_per_second"), - "pp_tps": tim.get("prompt_per_second")} - if err: - eintrag.update({"pass": False, "grund": f"API-Fehler: {err}"}) - ergebnisse.append(eintrag) - continue - code = code_block(inhalt_von(msg)) - sbx = tempfile.mkdtemp(prefix="pruefstand-coding-") - try: - for name, inhalt in (task.get("dateien") or {}).items(): - with open(os.path.join(sbx, name), "w", encoding="utf-8") as f: - f.write(inhalt) - with open(os.path.join(sbx, task["antwort_datei"]), "w", - encoding="utf-8") as f: - f.write(code) - shutil.copy(os.path.join(tdir, "verify.py"), os.path.join(sbx, "verify.py")) - p = subprocess.run([sys.executable, "verify.py"], cwd=sbx, - capture_output=True, text=True, - timeout=task.get("timeout_s", 120)) - eintrag["pass"] = (p.returncode == 0) - if p.returncode != 0: - eintrag["grund"] = (p.stdout + p.stderr).strip()[-400:] - except subprocess.TimeoutExpired: - eintrag.update({"pass": False, "grund": "verify-Timeout (Endlosschleife?)"}) - except Exception as e: - eintrag.update({"pass": False, "grund": f"Sandkasten-Fehler: {e}"}) - finally: - shutil.rmtree(sbx, ignore_errors=True) - ergebnisse.append(eintrag) - - -# ---------------------------------------------------------------- Suite: agent -WERKZEUGE = [ - {"type": "function", "function": { - "name": "liste_dateien", - "description": "Listet alle Dateien im Arbeitsverzeichnis (rekursiv).", - "parameters": {"type": "object", "properties": {}}}}, - {"type": "function", "function": { - "name": "lies_datei", - "description": "Liest eine Datei aus dem Arbeitsverzeichnis.", - "parameters": {"type": "object", "properties": { - "pfad": {"type": "string"}}, "required": ["pfad"]}}}, - {"type": "function", "function": { - "name": "schreibe_datei", - "description": "Schreibt/überschreibt eine Datei im Arbeitsverzeichnis.", - "parameters": {"type": "object", "properties": { - "pfad": {"type": "string"}, "inhalt": {"type": "string"}}, - "required": ["pfad", "inhalt"]}}}, - {"type": "function", "function": { - "name": "loesche_datei", - "description": "Löscht eine Datei im Arbeitsverzeichnis.", - "parameters": {"type": "object", "properties": { - "pfad": {"type": "string"}}, "required": ["pfad"]}}}, - {"type": "function", "function": { - "name": "fertig", - "description": "Aufgabe abgeschlossen. Kurze Abschluss-Meldung übergeben.", - "parameters": {"type": "object", "properties": { - "meldung": {"type": "string"}}, "required": ["meldung"]}}}, -] - - -def sicherer_pfad(sbx, pfad): - """Pfad-Ausbruch verhindern — Sandkasten bleibt Sandkasten.""" - ziel = os.path.realpath(os.path.join(sbx, pfad or "")) - if not ziel.startswith(os.path.realpath(sbx) + os.sep): - raise ValueError(f"Pfad verlässt den Sandkasten: {pfad}") - return ziel - - -def werkzeug_ausfuehren(sbx, name, args): - if name == "liste_dateien": - alle = [] - for wurzel, _, dateien in os.walk(sbx): - for d in dateien: - alle.append(os.path.relpath(os.path.join(wurzel, d), sbx)) - return "\n".join(sorted(alle)) or "(leer)" - if name == "lies_datei": - with open(sicherer_pfad(sbx, args["pfad"]), encoding="utf-8", - errors="replace") as f: - return f.read()[:20000] - if name == "schreibe_datei": - ziel = sicherer_pfad(sbx, args["pfad"]) - os.makedirs(os.path.dirname(ziel), exist_ok=True) - with open(ziel, "w", encoding="utf-8") as f: - f.write(args.get("inhalt", "")) - return f"geschrieben: {args['pfad']}" - if name == "loesche_datei": - os.remove(sicherer_pfad(sbx, args["pfad"])) - return f"gelöscht: {args['pfad']}" - raise ValueError(f"unbekanntes Werkzeug: {name}") - - -def suite_agent(cfg, ergebnisse): - basis = os.path.join(SUITES_DIR, "agent", "aufgaben") - for tid in sorted(os.listdir(basis)): - tdir = os.path.join(basis, tid) - if not os.path.isfile(os.path.join(tdir, "task.json")): - continue - if cfg.abgelaufen(): - ergebnisse.append({"suite": "agent", "id": tid, "pass": False, - "grund": "Zeitbudget erschöpft — übersprungen"}) - continue - task = lade_task(os.path.join(tdir, "task.json")) - t0 = time.time() - sbx = tempfile.mkdtemp(prefix="pruefstand-agent-") - tool_fehler = 0 - schritte = 0 - try: - for name, inhalt in (task.get("sandkasten") or {}).items(): - ziel = os.path.join(sbx, name) - os.makedirs(os.path.dirname(ziel), exist_ok=True) - with open(ziel, "w", encoding="utf-8") as f: - f.write(inhalt) - messages = [ - {"role": "system", "content": - "Du bist ein Arbeits-Agent mit Datei-Werkzeugen in einem " - "Sandkasten-Verzeichnis. Erledige die Aufgabe Schritt für Schritt " - "mit den Werkzeugen und rufe am Ende `fertig` auf."}, - {"role": "user", "content": task["prompt"]}, - ] - fertig_gemeldet = False - for _ in range(task.get("max_schritte", 8)): - schritte += 1 - msg, _tim, err = api_chat(cfg.endpoint, cfg.model, messages, - max_tokens=1800, tools=WERKZEUGE) - if err: - break - calls = msg.get("tool_calls") or [] - if not calls: - break # Agent redet statt zu handeln — Endzustand zählt trotzdem - messages.append({"role": "assistant", - "content": msg.get("content") or "", - "tool_calls": calls}) - for call in calls: - fn = (call.get("function") or {}).get("name") or "?" - try: - args = json.loads((call.get("function") or {}) - .get("arguments") or "{}") - except Exception: - args, fn_ok = {}, False - tool_fehler += 1 - antwort = "FEHLER: Argumente waren kein gültiges JSON." - else: - fn_ok = True - if fn_ok: - if fn == "fertig": - fertig_gemeldet = True - antwort = "ok" - else: - try: - antwort = werkzeug_ausfuehren(sbx, fn, args) - except Exception as e: - tool_fehler += 1 - antwort = f"FEHLER: {e}" - messages.append({"role": "tool", - "tool_call_id": call.get("id") or "0", - "content": antwort}) - if fertig_gemeldet: - break - # -------- Endzustand prüfen (die einzige Wahrheit) - fehlschlaege = [] - for check in task.get("checks", []): - if "nicht_vorhanden" in check: - if os.path.exists(os.path.join(sbx, check["nicht_vorhanden"])): - fehlschlaege.append( - f"{check['nicht_vorhanden']} existiert noch") - continue - pfad = os.path.join(sbx, check["datei"]) - if not os.path.isfile(pfad): - fehlschlaege.append(f"{check['datei']} fehlt") - continue - with open(pfad, encoding="utf-8", errors="replace") as f: - text = f.read() - if check.get("regex") and not re.search(check["regex"], text, - re.IGNORECASE | re.MULTILINE): - fehlschlaege.append( - f"{check['datei']}: Muster fehlt ({check['regex']})") - ergebnisse.append({ - "suite": "agent", "id": tid, "pass": not fehlschlaege, - "grund": "; ".join(fehlschlaege)[:400] if fehlschlaege else "", - "schritte": schritte, "tool_fehler": tool_fehler, - "fertig_gemeldet": fertig_gemeldet, - "dauer_s": round(time.time() - t0, 1)}) - except Exception as e: - ergebnisse.append({"suite": "agent", "id": tid, "pass": False, - "grund": f"Harness-Fehler: {e}", - "dauer_s": round(time.time() - t0, 1)}) - finally: - shutil.rmtree(sbx, ignore_errors=True) - - -# ---------------------------------------------------------------- Suite: recherche -def suite_recherche(cfg, ergebnisse): - basis = os.path.join(SUITES_DIR, "recherche") - dok_dir = os.path.join(basis, "dokumente") - dokumente = {} - for d in sorted(os.listdir(dok_dir)): - with open(os.path.join(dok_dir, d), encoding="utf-8") as f: - dokumente[d] = f.read() - alle_norm = norm("\n".join(dokumente.values())) - material = "\n\n".join(f"===== DOKUMENT {n} =====\n{t}" - for n, t in dokumente.items()) - for tid in sorted(os.listdir(os.path.join(basis, "aufgaben"))): - tpfad = os.path.join(basis, "aufgaben", tid) - if not tpfad.endswith(".json"): - continue - if cfg.abgelaufen(): - ergebnisse.append({"suite": "recherche", "id": tid, "pass": False, - "grund": "Zeitbudget erschöpft — übersprungen"}) - continue - task = lade_task(tpfad) - t0 = time.time() - prompt = (f"{material}\n\nFRAGE: {task['frage']}\n\n" - "Beantworte die Frage NUR aus den Dokumenten oben, auf Deutsch, " - "in höchstens 4 Sätzen. Letzte Zeile deiner Antwort: " - 'ZITAT: ""') - msg, tim, err = api_chat(cfg.endpoint, cfg.model, - [{"role": "user", "content": prompt}], - max_tokens=2800) - eintrag = {"suite": "recherche", "id": task.get("id", tid), - "dauer_s": round(time.time() - t0, 1), - "tg_tps": tim.get("predicted_per_second"), - "pp_tps": tim.get("prompt_per_second")} - if err: - eintrag.update({"pass": False, "grund": f"API-Fehler: {err}"}) - ergebnisse.append(eintrag) - continue - antwort = inhalt_von(msg) - fehlschlaege = [] - for gruppe in task.get("muss_gruppen", []): - if not any(k.lower() in antwort.lower() for k in gruppe): - fehlschlaege.append(f"Pflicht-Stichwort fehlt: {'/'.join(gruppe)}") - m = re.search(r'ZITAT:\s*[„"]?(.+?)["“”]?\s*$', antwort, - re.MULTILINE | re.DOTALL) - zitat = (m.group(1).strip() if m else "") - if task.get("zitat_pflicht", True): - if not zitat: - fehlschlaege.append("kein ZITAT geliefert") - elif norm(zitat) not in alle_norm: - fehlschlaege.append("ZITAT nicht wörtlich in den Dokumenten " - "(Ehrlichkeits-Gate)") - eintrag["pass"] = not fehlschlaege - if fehlschlaege: - eintrag["grund"] = "; ".join(fehlschlaege)[:400] - eintrag["antwort_auszug"] = antwort[:300] - ergebnisse.append(eintrag) - - -# ---------------------------------------------------------------- Suite: deutsch -RICHTER_RASTER = ( - "Du bist ein strenger Deutsch-Richter für eine Sprach-Assistentin (Lucy): " - "locker, natürlich, Du-Form, kurze gesprochene Sätze, kein Beamten- oder " - "Übersetzungsdeutsch, keine Anglizismen-Ketten, fachlich korrekt. Bewerte die " - "ANTWORT unten auf einer Skala 1–10 (10 = klingt wie eine deutsche " - "Muttersprachlerin im Alltag). Antworte EXAKT in diesem Format:\n" - "NOTE: \nBEGRUENDUNG: ") - - -def suite_deutsch(cfg, ergebnisse): - aufgaben = lade_task(os.path.join(SUITES_DIR, "deutsch", "aufgaben.json")) - for task in aufgaben: - if cfg.abgelaufen(): - ergebnisse.append({"suite": "deutsch", "id": task["id"], "pass": False, - "grund": "Zeitbudget erschöpft — übersprungen"}) - continue - t0 = time.time() - msg, tim, err = api_chat(cfg.endpoint, cfg.model, - [{"role": "user", "content": task["prompt"]}], - max_tokens=2400) - eintrag = {"suite": "deutsch", "id": task["id"], - "dauer_s": round(time.time() - t0, 1), - "tg_tps": tim.get("predicted_per_second"), - "pp_tps": tim.get("prompt_per_second")} - if err: - eintrag.update({"pass": False, "grund": f"API-Fehler: {err}"}) - ergebnisse.append(eintrag) - continue - antwort = inhalt_von(msg) - jmsg, _jt, jerr = api_chat(cfg.judge_endpoint, cfg.judge_model, [ - {"role": "system", "content": RICHTER_RASTER}, - {"role": "user", "content": - f"AUFGABE AN DIE ASSISTENTIN: {task['prompt']}\n\n" - f"ANTWORT:\n{antwort}"}], - max_tokens=2200, temperature=0.2) - note = None - if not jerr: - m = re.search(r"NOTE:\s*(\d{1,2})", inhalt_von(jmsg)) - if m: - note = max(1, min(10, int(m.group(1)))) - eintrag["note"] = note - eintrag["pass"] = (note is not None and note >= 6) - if note is None: - eintrag["grund"] = f"Richter ohne Note ({jerr or 'Format'})" - if not eintrag["pass"]: - eintrag["antwort_auszug"] = antwort[:300] - ergebnisse.append(eintrag) - - -# ---------------------------------------------------------------- Suite: vision -def suite_vision(cfg, ergebnisse): - task = lade_task(os.path.join(SUITES_DIR, "vision", "task.json")) - bild = cfg.vision_image or os.path.join(SUITES_DIR, "vision", "testbild.png") - if not os.path.isfile(bild): - # Testbild deterministisch erzeugen (reines Python, kein PIL nötig) - subprocess.run([sys.executable, - os.path.join(SUITES_DIR, "vision", "gen_testbild.py"), bild], - check=False, timeout=30) - if not os.path.isfile(bild): - ergebnisse.append({"suite": "vision", "id": "testbild", "pass": False, - "grund": "Testbild fehlt und konnte nicht erzeugt werden"}) - return - with open(bild, "rb") as f: - b64 = base64.b64encode(f.read()).decode("ascii") - t0 = time.time() - msg, tim, err = api_chat(cfg.endpoint, cfg.model, [ - {"role": "user", "content": [ - {"type": "text", "text": task["prompt"]}, - {"type": "image_url", - "image_url": {"url": f"data:image/png;base64,{b64}"}}]}], - max_tokens=900, timeout=600) - eintrag = {"suite": "vision", "id": "testbild", - "dauer_s": round(time.time() - t0, 1), - "tg_tps": tim.get("predicted_per_second")} - if err: - eintrag.update({"pass": False, "grund": f"API-Fehler: {err}"}) - ergebnisse.append(eintrag) - return - antwort = inhalt_von(msg) - fehlschlaege = [f"nicht erkannt: {'/'.join(g)}" - for g in task.get("muss_gruppen", []) - if not any(k.lower() in antwort.lower() for k in g)] - eintrag["pass"] = not fehlschlaege - if fehlschlaege: - eintrag["grund"] = "; ".join(fehlschlaege)[:300] - eintrag["antwort_auszug"] = antwort[:200] - ergebnisse.append(eintrag) - - -# ---------------------------------------------------------------- Suite: speed -LANG_BAUSTEIN = ("Die Box protokolliert jeden Dienststart mit Zeitstempel, " - "Dienstname und Ergebnis, damit die Morgenlage Abweichungen " - "gegen die Vorwoche erkennen und einordnen kann. ") - - -def suite_speed(cfg, ergebnisse): - # Kurz-Probe: misst tg (Alltags-Turn) — 2 Läufe, erster wärmt den Cache an. - for lauf in ("warm", "kurz"): - t0 = time.time() - _msg, tim, err = api_chat(cfg.endpoint, cfg.model, [ - {"role": "user", "content": - "Erkläre in drei kurzen Sätzen, was ein Mixture-of-Experts-Modell " - "ist."}], max_tokens=200, temperature=0) - if lauf == "warm": - continue - ergebnisse.append({"suite": "speed", "id": "kurz", "pass": not err, - "grund": err[:200] if err else "", - "dauer_s": round(time.time() - t0, 1), - "tg_tps": tim.get("predicted_per_second"), - "pp_tps": tim.get("prompt_per_second")}) - # Lang-Probe: ~12k-Token-Prompt → misst pp bei echtem Kontext (ROCm-Watch-Metrik). - if cfg.abgelaufen(): - ergebnisse.append({"suite": "speed", "id": "lang", "pass": False, - "grund": "Zeitbudget erschöpft — übersprungen"}) - return - lang = LANG_BAUSTEIN * 550 - t0 = time.time() - _msg, tim, err = api_chat(cfg.endpoint, cfg.model, [ - {"role": "user", "content": - lang + "\n\nWie oft steht sinngemäß derselbe Satz oben? Antworte in " - "einem Satz."}], max_tokens=80, temperature=0, timeout=900) - ergebnisse.append({"suite": "speed", "id": "lang", "pass": not err, - "grund": err[:200] if err else "", - "dauer_s": round(time.time() - t0, 1), - "tg_tps": tim.get("predicted_per_second"), - "pp_tps": tim.get("prompt_per_second"), - "prompt_tokens": tim.get("prompt_n")}) - - -# ---------------------------------------------------------------- Hauptlauf -SUITE_FUNKS = {"coding": suite_coding, "agent": suite_agent, - "recherche": suite_recherche, "deutsch": suite_deutsch, - "vision": suite_vision, "speed": suite_speed} - - -class Konfig: - def __init__(self, args): - self.endpoint = args.endpoint - self.model = args.model - self.judge_endpoint = args.judge_endpoint or args.endpoint - self.judge_model = args.judge_model - self.vision_image = args.vision_image - self.deadline = (time.time() + args.deadline_min * 60 - if args.deadline_min else None) - - def abgelaufen(self): - return self.deadline is not None and time.time() > self.deadline - - -def main(): - ap = argparse.ArgumentParser(description="Prüfstand-Harness") - ap.add_argument("--endpoint", required=True) - ap.add_argument("--model", required=True) - ap.add_argument("--suites", required=True, - help="kommagetrennt: coding,agent,recherche,deutsch,vision,speed") - ap.add_argument("--out", required=True) - ap.add_argument("--judge-endpoint", default="") - ap.add_argument("--judge-model", default="gpt-oss-120b") - ap.add_argument("--vision-image", default="") - ap.add_argument("--deadline-min", type=float, default=0) - args = ap.parse_args() - - cfg = Konfig(args) - ergebnisse = [] - for name in [s.strip() for s in args.suites.split(",") if s.strip()]: - if name not in SUITE_FUNKS: - ergebnisse.append({"suite": name, "id": "-", "pass": False, - "grund": "unbekannte Suite"}) - continue - try: - SUITE_FUNKS[name](cfg, ergebnisse) - except Exception as e: # kaputte Suite darf den Gesamtlauf nicht töten - ergebnisse.append({"suite": name, "id": "-", "pass": False, - "grund": f"Suite-Absturz: {type(e).__name__}: {e}"}) - - # -------- Zusammenfassung je Suite (bestanden/gesamt + Tempo-Mittel) - zsm = {} - for e in ergebnisse: - s = zsm.setdefault(e["suite"], {"bestanden": 0, "gesamt": 0, - "tg": [], "pp": [], "noten": []}) - s["gesamt"] += 1 - s["bestanden"] += 1 if e.get("pass") else 0 - if e.get("tg_tps"): - s["tg"].append(e["tg_tps"]) - if e.get("pp_tps"): - s["pp"].append(e["pp_tps"]) - if e.get("note") is not None: - s["noten"].append(e["note"]) - for s in zsm.values(): - s["tg_mittel"] = round(sum(s["tg"]) / len(s["tg"]), 1) if s["tg"] else None - s["pp_mittel"] = round(sum(s["pp"]) / len(s["pp"]), 1) if s["pp"] else None - s["note_mittel"] = (round(sum(s["noten"]) / len(s["noten"]), 1) - if s["noten"] else None) - del s["tg"], s["pp"], s["noten"] - - with open(args.out, "w", encoding="utf-8") as f: - json.dump({"modell": args.model, "endpoint": args.endpoint, - "erhoben": time.strftime("%Y-%m-%d %H:%M"), - "zusammenfassung": zsm, "einzeln": ergebnisse}, - f, ensure_ascii=False, indent=1) - # Kurzfassung auf stdout (für Runner-Logs) - for name, s in zsm.items(): - extra = f" · Note {s['note_mittel']}" if s.get("note_mittel") else "" - tempo = (f" · tg {s['tg_mittel']} t/s" if s.get("tg_mittel") else "") - print(f"{name}: {s['bestanden']}/{s['gesamt']}{extra}{tempo}") - - -if __name__ == "__main__": - main() diff --git a/deploy/pruefstand/pruefstand.sh b/deploy/pruefstand/pruefstand.sh deleted file mode 100644 index 1444cfa..0000000 --- a/deploy/pruefstand/pruefstand.sh +++ /dev/null @@ -1,468 +0,0 @@ -#!/usr/bin/env bash -# Prüfstand-Runner (Täglich 02:00, ehemals Wöchentlich): Baut die Umgebung für den -# Harness (Modell-Sandkasten, GPU-RAM-Check) und zieht die Fäden. -# Läuft als Cron (Täglich 02:00, nach Radar/Checkout), nimmt Kandidaten aus der Queue -# und vergleicht sie gegen die BASELINE der Amtsinhaber. -# -# Modi: -# (ohne Argument) Cron-Modus: Baseline fehlt → Baseline messen; sonst ältesten -# Kandidaten aus der Queue prüfen; nichts zu tun → still. -# --baseline Amtsinhaber über llama-swap (:8080) neu vermessen. -# --kandidat einen Kandidaten-Spec (JSON) direkt prüfen. -# -# Leitplanken (User-Entscheid 17.07.): max 1 Kandidat je Lauf · Download-Deckel 35 GB -# (größere Kandidaten → Karte, Download erst nach Klick) · eigener Cache mit -# Auto-Aufräumen · Live-Betrieb bleibt unangetastet (eigener Server auf :5899) · -# der Prüfstand EMPFIEHLT NUR — Rollen-Wechsel entscheidet der Commander per Karte. -# RAM-Wache vor dem Serverstart; Heredoc+Pipe-Falle vermieden (Temp-Dateien, Lehre 10.07.). -set -uo pipefail - -MC="$HOME/mission-control-v2" -PSD="$MC/deploy/pruefstand" -VAULT="$HOME/wissens-vault" -STATE="$HOME/.hermes/state/pruefstand" -CACHE="/srv/models/pruefstand-cache" -HERMES="$HOME/.local/bin/hermes" -BENCH_BIN="${BENCH_BIN:-/opt/llamacpp-vulkan/llama-server}" -BENCH_PORT="${BENCH_PORT:-5899}" -LIVE="http://127.0.0.1:8080/v1" -JUDGE_MODEL="${PRUEFSTAND_JUDGE:-gpt-oss-120b}" -DECKEL_GB="${PRUEFSTAND_DECKEL_GB:-100}" -DEADLINE_MIN="${PRUEFSTAND_DEADLINE_MIN:-100}" - -mkdir -p "$STATE/queue" "$STATE/done" "$STATE/ergebnisse" - -# Suiten je Rolle (Amtsinhaber-Alias = Rollenname in llama-swap) -suiten_fuer() { - case "$1" in - hermes) echo "speed,agent,recherche,deutsch" ;; - coder) echo "speed,coding,agent" ;; - heavy) echo "speed,coding,recherche,deutsch" ;; - vision) echo "speed,vision" ;; - scout) echo "speed,agent,vision" ;; - *) echo "speed,recherche,deutsch" ;; - esac -} - -briefkasten() { # $1=Betreff $2=Text (stiller Chronik-Spiegel, source=pruefstand) - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(python3 - "$1" "$2" <<'PY' -import json, sys -print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], - "source": "pruefstand", "priority": "silent"})) -PY -)" >/dev/null 2>&1 || true -} - -engine_build() { # installierte llama.cpp-Build-Nummer (leer, wenn nicht ermittelbar) - LD_LIBRARY_PATH="$(dirname "$BENCH_BIN")" "$BENCH_BIN" --version 2>&1 \ - | grep -o 'version: [0-9]*' | grep -o '[0-9]*' || true -} - -aggregiere_baseline() { # $1=Engine-Build — baut baseline.json aus den Rollen-Dateien - python3 - "$STATE" "${1:-}" <<'PY' -import glob, json, os, sys, time -state, build = sys.argv[1], sys.argv[2] -basis = {} -for f in glob.glob(os.path.join(state, "ergebnisse", "baseline-*.json")): - rolle = os.path.basename(f)[len("baseline-"):-len(".json")] - try: - basis[rolle] = json.load(open(f)).get("zusammenfassung", {}) - except Exception: - pass -json.dump({"erhoben": time.strftime("%Y-%m-%d %H:%M"), "engine": build, - "rollen": basis}, - open(os.path.join(state, "baseline.json"), "w"), ensure_ascii=False, indent=1) -print(f"\nBasislinie gespeichert ({len(basis)} Rollen, Engine b{build or '?'}).") -PY -} - -# Tempo-Teil der Baseline neu messen (Lücke 2, 17.07.): Engine-Updates (So 04:30) -# verschieben das Tempo der Amtsinhaber — die Qualitäts-Zahlen bleiben gültig, aber -# Tempo-Vergleiche gegen eine alte Engine wären Geister-Zahlen. -speed_refresh() { # $1=neue Engine-Build-Nummer - local BUILD="$1" - echo "## PRÜFSTAND: Tempo-Baseline-Refresh (Engine jetzt b${BUILD}) am $(date '+%d.%m.%Y %H:%M')" - local rolle TMP - for rolle in hermes coder heavy vision scout; do - TMP="$STATE/ergebnisse/refresh-${rolle}.json" - echo "### $rolle" - python3 "$PSD/harness.py" --endpoint "$LIVE" --model "$rolle" --suites speed \ - --out "$TMP" --judge-endpoint "$LIVE" --judge-model "$JUDGE_MODEL" \ - --deadline-min 10 2>&1 | tail -2 - python3 - "$STATE/ergebnisse/baseline-${rolle}.json" "$TMP" <<'PY' -import json, sys -try: - basis = json.load(open(sys.argv[1])) - neu = json.load(open(sys.argv[2])) -except Exception: - raise SystemExit -if "speed" in (neu.get("zusammenfassung") or {}): - basis.setdefault("zusammenfassung", {})["speed"] = neu["zusammenfassung"]["speed"] - basis["einzeln"] = ([e for e in basis.get("einzeln", []) if e.get("suite") != "speed"] - + [e for e in neu.get("einzeln", []) if e.get("suite") == "speed"]) - json.dump(basis, open(sys.argv[1], "w"), ensure_ascii=False, indent=1) -PY - rm -f "$TMP" - done - aggregiere_baseline "$BUILD" - briefkasten "Prüfstand" "Tempo-Baseline nach Engine-Wechsel neu gemessen (jetzt b${BUILD})." -} - -zusammenfassung_lesen() { # $1=ergebnis.json → kompakte Zeilen "suite: x/y · Note · tg" - python3 - "$1" <<'PY' -import json, sys -try: - z = json.load(open(sys.argv[1])).get("zusammenfassung", {}) -except Exception: - print("(Ergebnis nicht lesbar)"); raise SystemExit -for name, s in z.items(): - teile = [f"{s['bestanden']}/{s['gesamt']}"] - if s.get("note_mittel"): teile.append(f"Note {s['note_mittel']}") - if s.get("tg_mittel"): teile.append(f"tg {s['tg_mittel']} t/s") - if s.get("pp_mittel"): teile.append(f"pp {s['pp_mittel']} t/s") - print(f" {name}: " + " · ".join(teile)) -PY -} - -# ---------------------------------------------------------------- Baseline -baseline_lauf() { - echo "## PRÜFSTAND: Basislinie der Amtsinhaber (erhoben am $(date '+%d.%m.%Y %H:%M'))" - echo "(Echte Prüfungen: Coding mit Unit-Tests, Agenten-Aufgaben, Recherche mit Zitat-Gate, Deutsch-Richter, Tempo.)" - local rollen="hermes coder heavy vision scout" - for rolle in $rollen; do - local out="$STATE/ergebnisse/baseline-${rolle}.json" - echo - echo "### Amtsinhaber \`$rolle\`" - python3 "$PSD/harness.py" --endpoint "$LIVE" --model "$rolle" \ - --suites "$(suiten_fuer "$rolle")" --out "$out" \ - --judge-endpoint "$LIVE" --judge-model "$JUDGE_MODEL" \ - --deadline-min 30 2>&1 | tail -8 - done - # embed: nur Funktions- und Latenz-Probe (Suiten ergeben hier keinen Sinn) - echo - echo "### Amtsinhaber \`embed\`" - python3 - "$LIVE" <<'PY' -import json, sys, time, urllib.request -t0 = time.time() -req = urllib.request.Request(sys.argv[1].rstrip("/") + "/embeddings", - data=json.dumps({"model": "embed", "input": "Prüfstand-Probe"}).encode(), - headers={"Content-Type": "application/json"}) -try: - with urllib.request.urlopen(req, timeout=60) as r: - d = json.load(r) - dim = len(d["data"][0]["embedding"]) - print(f" ok · Dimension {dim} · {round((time.time()-t0)*1000)} ms") -except Exception as e: - print(f" FEHLER: {e}") -PY - # Sammel-Baseline schreiben (eine Datei, die Kandidaten-Läufe vergleichen) - aggregiere_baseline "$(engine_build)" - briefkasten "Prüfstand" "Basislinie der Amtsinhaber erhoben — künftige Kandidaten werden dagegen verglichen." -} - -# ---------------------------------------------------------------- Kandidat -kandidat_lauf() { # $1=spec.json - local SPEC="$1" - local KEY ROLLE HF_ID WARUM - KEY="$(jq -r '.key' "$SPEC")" - ROLLE="$(jq -r '.rolle' "$SPEC")" - HF_ID="$(jq -r '.hf_id' "$SPEC")" - WARUM="$(jq -r '.warum // ""' "$SPEC")" - echo "## PRÜFSTAND: Kandidat \`$HF_ID\` für Rolle \`$ROLLE\` (am $(date '+%d.%m.%Y %H:%M'))" - [ -n "$WARUM" ] && echo "Anlass: $WARUM" - - if [ -f "$STATE/done/${KEY}.json" ]; then - echo "Schon geprüft (State done/${KEY}) — nichts zu tun." - return 0 - fi - - # ---- GGUF im HF-Repo finden (bevorzugt ~Q4, ein Stück, Deckel prüfen) - local TREE_JSON="$STATE/tmp-tree-${KEY}.json" - curl -sf --max-time 60 \ - "https://huggingface.co/api/models/${HF_ID}/tree/main?recursive=true" \ - -o "$TREE_JSON" || { echo "HF-API nicht erreichbar — Abbruch, Spec bleibt in der Queue."; return 1; } - local AUSWAHL - AUSWAHL="$(python3 - "$TREE_JSON" "$DECKEL_GB" <<'PY' -import json, re, sys -baum = json.load(open(sys.argv[1])) -deckel = float(sys.argv[2]) * 2**30 -dateien = [(e.get("path",""), (e.get("lfs") or {}).get("size") or e.get("size") or 0) - for e in baum if isinstance(e, dict)] -ggufs = [(p, g) for p, g in dateien if p.lower().endswith(".gguf")] -mmproj = next((p for p, g in ggufs if "mmproj" in p.lower()), "") -haupt = [(p, g) for p, g in ggufs if "mmproj" not in p.lower()] -# Split-GGUFs (…-00001-of-…) klammern wir in v1 aus — sauberer Einzeldatei-Download -haupt = [(p, g) for p, g in haupt if not re.search(r"-\d{5}-of-\d{5}", p)] -prio = ["q4_k_m", "ud-q4_k_m", "q4_k_s", "iq4", "q5_k_m", "q4", "q8_0"] -def rang(p): - pl = p.lower() - for i, q in enumerate(prio): - if q in pl: - return i - return len(prio) -haupt.sort(key=lambda t: (rang(t[0]), t[1])) -if not haupt: - print("KEINE"); raise SystemExit -pfad, groesse = haupt[0] -status = "OK" if groesse and groesse <= deckel else "ZU_GROSS" -print(status); print(pfad); print(groesse or 0); print(mmproj) -PY -)" - rm -f "$TREE_JSON" - local STATUS PFAD GROESSE MMPROJ - STATUS="$(printf '%s\n' "$AUSWAHL" | sed -n 1p)" - PFAD="$(printf '%s\n' "$AUSWAHL" | sed -n 2p)" - GROESSE="$(printf '%s\n' "$AUSWAHL" | sed -n 3p)" - MMPROJ="$(printf '%s\n' "$AUSWAHL" | sed -n 4p)" - local GB=$(( ${GROESSE:-0} / 1073741824 )) - - if [ "$STATUS" = "KEINE" ]; then - echo "Kein brauchbares Einzel-GGUF im Repo (nur Splits oder gar keins) — Karte statt Download." - "$HERMES" kanban create "Prüfstand: ${HF_ID} braucht Handarbeit (kein Einzel-GGUF)" \ - --body "Kandidat für Rolle ${ROLLE}. Im HF-Repo liegt kein Einzeldatei-GGUF ≤ ${DECKEL_GB} GB (vermutlich Split-Dateien). Bei Interesse manuell laden und 'bash ~/mission-control-v2/deploy/pruefstand/pruefstand.sh --kandidat ' fahren. Anlass: ${WARUM}" \ - --triage --created-by pruefstand --idempotency-key "pruefstand-${KEY}" >/dev/null 2>&1 || true - mv "$SPEC" "$STATE/done/${KEY}.spec.json" - echo "{\"status\":\"kein_gguf\"}" > "$STATE/done/${KEY}.json" - return 0 - fi - if [ "$STATUS" = "ZU_GROSS" ]; then - echo "GGUF ${PFAD} ist ${GB} GB > Deckel ${DECKEL_GB} GB — Download wartet auf deinen Klick (Karte liegt bereit)." - "$HERMES" kanban create "Prüfstand: ${HF_ID} (${GB} GB) — Download freigeben?" \ - --body "Kandidat für Rolle ${ROLLE}, Datei ${PFAD} (${GB} GB) liegt ÜBER dem Autonomie-Deckel von ${DECKEL_GB} GB (Entscheid 17.07.). Nach Freigabe: Spec wieder in ~/.hermes/state/pruefstand/queue/ legen und PRUEFSTAND_DECKEL_GB erhöhen oder manuell laden. Anlass: ${WARUM}" \ - --triage --created-by pruefstand --idempotency-key "pruefstand-${KEY}" >/dev/null 2>&1 || true - mv "$SPEC" "$STATE/done/${KEY}.spec.json" - echo "{\"status\":\"zu_gross\",\"gb\":${GB}}" > "$STATE/done/${KEY}.json" - briefkasten "Prüfstand" "Kandidat ${HF_ID} (${GB} GB) wartet auf Download-Freigabe (Deckel ${DECKEL_GB} GB)." - return 0 - fi - - # ---- Platz- und RAM-Wache - local FREI_GB - FREI_GB="$(df --output=avail -BG /srv/models | tail -1 | tr -dc '0-9')" - if [ "${FREI_GB:-0}" -lt $(( GB + 20 )) ]; then - echo "Zu wenig Platz auf /srv/models (${FREI_GB} GB frei, gebraucht ~$((GB+20))) — Lauf verschoben, Spec bleibt in der Queue." - return 1 - fi - - # ---- Download in den Cache (mit Resume, Auto-Aufräumen am Ende) - mkdir -p "$CACHE/$KEY" - local ZIEL="$CACHE/$KEY/$(basename "$PFAD")" - echo "Lade ${PFAD} (${GB} GB) …" - curl -fL --retry 3 -C - --max-time 7200 -o "$ZIEL" \ - "https://huggingface.co/${HF_ID}/resolve/main/${PFAD}" \ - || { echo "Download fehlgeschlagen — Spec bleibt in der Queue."; return 1; } - local MM_ZIEL="" - if [ -n "$MMPROJ" ] && { [ "$ROLLE" = "vision" ] || [ "$ROLLE" = "scout" ]; }; then - MM_ZIEL="$CACHE/$KEY/$(basename "$MMPROJ")" - curl -fL --retry 3 -C - --max-time 3600 -o "$MM_ZIEL" \ - "https://huggingface.co/${HF_ID}/resolve/main/${MMPROJ}" || MM_ZIEL="" - fi - - local MEM_FREI_GB - MEM_FREI_GB="$(awk '/MemAvailable/{printf "%d", $2/1048576}' /proc/meminfo)" - if [ "${MEM_FREI_GB:-0}" -lt $(( GB + 8 )) ]; then - echo "Zu wenig freier RAM (${MEM_FREI_GB} GB) für ein ${GB}-GB-Modell neben dem Warm-Set — Lauf verschoben." - return 1 - fi - - # ---- Kandidaten-Server auf dem Bench-Port (Live-Betrieb unangetastet) - echo "Starte Kandidaten-Server (:${BENCH_PORT}) …" - local MMFLAG="" - [ -n "$MM_ZIEL" ] && MMFLAG="--mmproj $MM_ZIEL" - $BENCH_BIN -m "$ZIEL" --host 127.0.0.1 --port "$BENCH_PORT" \ - -c 32768 -ngl 999 -fa on --no-mmap --jinja $MMFLAG \ - >/tmp/pruefstand-server.log 2>&1 & - local SPID=$! - trap 'kill $SPID 2>/dev/null; wait $SPID 2>/dev/null' RETURN - local BEREIT=0 - for i in $(seq 1 240); do - curl -s --max-time 2 "http://127.0.0.1:$BENCH_PORT/health" | grep -q ok && { BEREIT=1; break; } - sleep 2 - kill -0 $SPID 2>/dev/null || break - done - if [ "$BEREIT" != "1" ]; then - echo "LADE-CRASH — Kandidat startet nicht (Architektur zu neu für die Engine?):" - tail -3 /tmp/pruefstand-server.log - echo "{\"status\":\"lade_crash\"}" > "$STATE/done/${KEY}.json" - mv "$SPEC" "$STATE/done/${KEY}.spec.json" - rm -rf "${CACHE:?}/$KEY" - briefkasten "Prüfstand" "Kandidat ${HF_ID} startet auf unserer Engine nicht (Lade-Crash) — aussortiert." - return 0 - fi - - # ---- Das volle Programm - local OUT="$STATE/ergebnisse/kandidat-${KEY}.json" - echo "Fahre Suiten: $(suiten_fuer "$ROLLE") (Zeitbudget ${DEADLINE_MIN} min)" - python3 "$PSD/harness.py" --endpoint "http://127.0.0.1:$BENCH_PORT/v1" \ - --model "kandidat" --suites "$(suiten_fuer "$ROLLE")" --out "$OUT" \ - --judge-endpoint "$LIVE" --judge-model "$JUDGE_MODEL" \ - --deadline-min "$DEADLINE_MIN" 2>&1 | tail -8 - kill $SPID 2>/dev/null; wait $SPID 2>/dev/null; trap - RETURN - - # ---- MTP-Fairness (Lücke 1, 17.07.): das Live-Hirn läuft MIT draft-mtp (+26 %) — - # ein Kandidat mit eingebautem MTP-Kopf würde ohne Zusatzmessung systematisch - # unterschätzt. Erkennung: Dateiname ODER nextn-Tensoren im GGUF-Kopf. - if printf '%s' "$PFAD" | grep -qi 'mtp' || head -c 8000000 "$ZIEL" 2>/dev/null | grep -aq 'nextn'; then - echo "MTP-Kopf erkannt — Zusatzmessung mit draft-mtp (Fairness gegen das Live-Hirn) …" - $BENCH_BIN -m "$ZIEL" --host 127.0.0.1 --port "$BENCH_PORT" \ - -c 32768 -ngl 999 -fa on --no-mmap --jinja $MMFLAG \ - --spec-type draft-mtp --spec-draft-n-max 3 \ - >/tmp/pruefstand-server-mtp.log 2>&1 & - local MPID=$! - trap 'kill $MPID 2>/dev/null; wait $MPID 2>/dev/null' RETURN - local MBEREIT=0 - for i in $(seq 1 120); do - curl -s --max-time 2 "http://127.0.0.1:$BENCH_PORT/health" | grep -q ok && { MBEREIT=1; break; } - sleep 2 - kill -0 $MPID 2>/dev/null || break - done - if [ "$MBEREIT" = "1" ]; then - local MOUT="$STATE/ergebnisse/kandidat-${KEY}-mtp.json" - python3 "$PSD/harness.py" --endpoint "http://127.0.0.1:$BENCH_PORT/v1" \ - --model "kandidat" --suites speed --out "$MOUT" \ - --judge-endpoint "$LIVE" --judge-model "$JUDGE_MODEL" --deadline-min 10 2>&1 | tail -2 - python3 - "$OUT" "$MOUT" <<'PY' -import json, sys -haupt = json.load(open(sys.argv[1])) -try: - s = (json.load(open(sys.argv[2])).get("zusammenfassung") or {}).get("speed") -except Exception: - s = None -if s: - haupt.setdefault("zusammenfassung", {})["speed_mtp"] = s - json.dump(haupt, open(sys.argv[1], "w"), ensure_ascii=False, indent=1) -PY - else - echo "Kandidat startet mit draft-mtp NICHT — Zusatzmessung entfällt (im Steckbrief zählt der Basis-Wert)." - fi - kill $MPID 2>/dev/null; wait $MPID 2>/dev/null; trap - RETURN - fi - - # ---- Steckbrief: Kandidat vs. Amtsinhaber - local BERICHT="$STATE/ergebnisse/kandidat-${KEY}.md" - local SIEGER_FLAG="$STATE/tmp-sieger-${KEY}" - rm -f "$SIEGER_FLAG" - python3 - "$OUT" "$STATE/baseline.json" "$ROLLE" "$HF_ID" "$WARUM" "$BERICHT" "$SIEGER_FLAG" <<'PY' -import json, sys, time -kand = json.load(open(sys.argv[1])) -try: - basis = json.load(open(sys.argv[2]))["rollen"].get(sys.argv[3], {}) -except Exception: - basis = {} -rolle, hf_id, warum, ziel = sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6] -kz = kand.get("zusammenfassung", {}) -zeilen = [f"# Prüfstand-Steckbrief: {hf_id}", - f"Rolle: **{rolle}** · erhoben {time.strftime('%d.%m.%Y %H:%M')}", - f"Anlass: {warum}" if warum else "", "", - "| Suite | Kandidat | Amtsinhaber |", "|---|---|---|"] -punkte_k = punkte_b = faelle = 0 -for name in sorted(set(kz) | set(basis)): - def fmt(s): - if not s: return "—" - t = f"{s['bestanden']}/{s['gesamt']}" - if s.get("note_mittel"): t += f" · Note {s['note_mittel']}" - if s.get("tg_mittel"): t += f" · tg {s['tg_mittel']}" - if s.get("pp_mittel"): t += f" · pp {s['pp_mittel']}" - return t - zeilen.append(f"| {name} | {fmt(kz.get(name))} | {fmt(basis.get(name))} |") - if name in kz and name in basis and not name.startswith("speed"): - faelle += 1 - punkte_k += kz[name]["bestanden"] / max(1, kz[name]["gesamt"]) - punkte_b += basis[name]["bestanden"] / max(1, basis[name]["gesamt"]) -# Tempo: best-of speed/speed_mtp — die Baseline ist live MIT MTP gemessen (Fairness) -tg_k = max(((kz.get(s) or {}).get("tg_mittel") or 0) for s in ("speed", "speed_mtp")) -tg_b = (basis.get("speed") or {}).get("tg_mittel") or 0 -zeilen.append("") -if faelle: - qk, qb = punkte_k / faelle, punkte_b / faelle - tempo = (f"Tempo {round(100*tg_k/tg_b-100):+d} % vs. Amtsinhaber" if tg_k and tg_b - else "Tempo-Vergleich unvollständig") - if qk >= qb and tg_k >= 0.8 * (tg_b or tg_k): - urteil = "KANDIDAT SIEHT STARK AUS — Auto-Adoption greift (Etappe E5)." - open(sys.argv[7], "w").write("1") - elif qk >= qb: - urteil = "Qualität hält mit, aber deutlich langsamer — vermutlich kein Aufsteiger." - else: - urteil = "Qualität unter Amtsinhaber — kein Aufsteiger." - zeilen.append(f"**Einordnung:** Bestehensquote {qk:.0%} vs. {qb:.0%} · {tempo}. {urteil}") -zeilen.append("") -zeilen.append("_Auto-Adoption (Etappe E5): Der Prüfstand tauscht Sieger-Modelle nun selbstständig aus._") -text = "\n".join(z for z in zeilen if z is not None) -open(ziel, "w", encoding="utf-8").write(text + "\n") -print(text) -PY - - # ---- Vault-Bericht + Karte + stille Chronik, dann Cache aufräumen - mkdir -p "$VAULT/pruefstand" - cp "$BERICHT" "$VAULT/pruefstand/${KEY}.md" 2>/dev/null || true - ( cd "$VAULT" 2>/dev/null && git add "pruefstand/${KEY}.md" >/dev/null 2>&1 \ - && git commit -q -m "pruefstand: Steckbrief ${KEY}" >/dev/null 2>&1 ) || true - "$HERMES" kanban create "Prüfstand-Ergebnis: ${HF_ID} für Rolle ${ROLLE}" \ - --body "$(cat "$BERICHT")" \ - --triage --created-by pruefstand --idempotency-key "pruefstand-${KEY}" >/dev/null 2>&1 || true - briefkasten "Prüfstand" "Kandidat ${HF_ID} (Rolle ${ROLLE}) geprüft — Steckbrief im Auftrags-Kanban und Vault (pruefstand/${KEY}.md)." - mv "$SPEC" "$STATE/done/${KEY}.spec.json" 2>/dev/null || true - cp "$OUT" "$STATE/done/${KEY}.json" 2>/dev/null || echo "{\"status\":\"geprueft\"}" > "$STATE/done/${KEY}.json" - - # ---- Auto-Adoption (Etappe E5) - if [ -f "$SIEGER_FLAG" ]; then - echo "Kandidat hat gewonnen — starte Auto-Adoption für Rolle $ROLLE..." - local FINAL_DIR="/srv/models/${HF_ID//\//-}-GGUF" - sudo -n mkdir -p "$FINAL_DIR" - sudo -n mv "$ZIEL" "$FINAL_DIR/" - local FINAL_GGUF="$FINAL_DIR/$(basename "$PFAD")" - local FINAL_MMPROJ="" - if [ -n "$MM_ZIEL" ]; then - sudo -n mv "$MM_ZIEL" "$FINAL_DIR/" - FINAL_MMPROJ="$FINAL_DIR/$(basename "$MMPROJ")" - fi - sudo -n chown -R hitonabi:hitonabi "$FINAL_DIR" 2>/dev/null || true - - # Config updaten - local CONFIG="$MC/deploy/llama-swap.config.yaml" - python3 "$PSD/auto_adopt.py" "$CONFIG" "$ROLLE" "$HF_ID" "$FINAL_GGUF" "$FINAL_MMPROJ" - - # Reload llama-swap (via worker oder systemctl) - if systemctl --user is-active --quiet llama-swap; then - systemctl --user restart llama-swap - briefkasten "Prüfstand Auto-Adoption" "Rolle '$ROLLE' wurde erfolgreich durch '$HF_ID' ersetzt (Neustart erledigt)." - else - briefkasten "Prüfstand Auto-Adoption" "Rolle '$ROLLE' wurde durch '$HF_ID' ersetzt (llama-swap war inaktiv)." - fi - rm -f "$SIEGER_FLAG" - fi - - rm -rf "${CACHE:?}/$KEY" - echo - echo "(Cache aufgeräumt; Roh-Ergebnisse: $STATE/ergebnisse/kandidat-${KEY}.*)" -} - -# ---------------------------------------------------------------- Einstieg -case "${1:-}" in - --baseline) - baseline_lauf - ;; - --kandidat) - [ -n "${2:-}" ] || { echo "Nutzung: pruefstand.sh --kandidat "; exit 1; } - kandidat_lauf "$2" - ;; - *) - if [ ! -f "$STATE/baseline.json" ]; then - baseline_lauf - exit 0 - fi - # Engine gewechselt seit der Baseline? → Tempo-Teil neu messen (Geister-Zahlen-Schutz) - BUILD="$(engine_build)" - BASE_BUILD="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("engine") or "")' "$STATE/baseline.json" 2>/dev/null || true)" - if [ -n "$BUILD" ] && [ "$BUILD" != "$BASE_BUILD" ]; then - speed_refresh "$BUILD" - fi - NAECHSTER="$(ls -1tr "$STATE/queue/"*.json 2>/dev/null | head -1 || true)" - if [ -n "$NAECHSTER" ]; then - kandidat_lauf "$NAECHSTER" - fi - # keine Queue + keine Engine-Drift → LEERER stdout → --no-agent-Cron bleibt still - ;; -esac diff --git a/deploy/pruefstand/suites/agent/aufgaben/01-todos-sammeln/task.json b/deploy/pruefstand/suites/agent/aufgaben/01-todos-sammeln/task.json deleted file mode 100644 index 21ecdcf..0000000 --- a/deploy/pruefstand/suites/agent/aufgaben/01-todos-sammeln/task.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "prompt": "Im Arbeitsverzeichnis liegen Notiz-Dateien im Ordner `notizen/`. Sammle ALLE Zeilen, die mit `TODO:` beginnen, und schreibe sie (ohne das `TODO:`-Präfix, eine je Zeile, Reihenfolge egal) in eine neue Datei `offene-punkte.txt` im Wurzelverzeichnis. Rufe danach `fertig` auf.", - "max_schritte": 8, - "sandkasten": { - "notizen/montag.txt": "Besprechung war ok.\nTODO: Backup-Log prüfen\nSonst nichts.\n", - "notizen/dienstag.txt": "TODO: Firmware-Update Router\nWetter schlecht.\n", - "notizen/mittwoch.txt": "Nichts offen heute.\n" - }, - "checks": [ - {"datei": "offene-punkte.txt", "regex": "Backup-Log prüfen"}, - {"datei": "offene-punkte.txt", "regex": "Firmware-Update Router"} - ] -} diff --git a/deploy/pruefstand/suites/agent/aufgaben/02-konfig-reparieren/task.json b/deploy/pruefstand/suites/agent/aufgaben/02-konfig-reparieren/task.json deleted file mode 100644 index 63e52c4..0000000 --- a/deploy/pruefstand/suites/agent/aufgaben/02-konfig-reparieren/task.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "prompt": "Die Datei `dienst/config.ini` ist kaputt. In `anleitung.txt` steht, welche Werte gelten sollen. Repariere die config.ini entsprechend (nur die falschen Werte ändern, Struktur beibehalten) und rufe danach `fertig` auf.", - "max_schritte": 8, - "sandkasten": { - "anleitung.txt": "Sollwerte für dienst/config.ini:\n- port muss 9001 sein (Zahl, nicht Text!)\n- loglevel muss info sein\n- Der Eintrag host bleibt unverändert.\n", - "dienst/config.ini": "[server]\nhost = 127.0.0.1\nport = abc\nloglevel = debug\n" - }, - "checks": [ - {"datei": "dienst/config.ini", "regex": "^port\\s*=\\s*9001\\s*$"}, - {"datei": "dienst/config.ini", "regex": "^loglevel\\s*=\\s*info\\s*$"}, - {"datei": "dienst/config.ini", "regex": "^host\\s*=\\s*127\\.0\\.0\\.1\\s*$"} - ] -} diff --git a/deploy/pruefstand/suites/agent/aufgaben/03-messwerte-bericht/task.json b/deploy/pruefstand/suites/agent/aufgaben/03-messwerte-bericht/task.json deleted file mode 100644 index 394528c..0000000 --- a/deploy/pruefstand/suites/agent/aufgaben/03-messwerte-bericht/task.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "prompt": "Lies die Messwerte in `messwerte.csv` (Spalten: zeit;temperatur_c). Erstelle einen Bericht `bericht.md` mit genau zwei Zeilen: Zeile 1 `Messungen: `, Zeile 2 `Maximum: °C` (Zahl wie in der Quelldatei geschrieben). Rufe danach `fertig` auf.", - "max_schritte": 8, - "sandkasten": { - "messwerte.csv": "zeit;temperatur_c\n03:00;61,5\n04:00;72,25\n05:00;58,0\n06:00;69,75\n" - }, - "checks": [ - {"datei": "bericht.md", "regex": "Messungen:\\s*4"}, - {"datei": "bericht.md", "regex": "Maximum:\\s*72,25\\s*°?C"} - ] -} diff --git a/deploy/pruefstand/suites/agent/aufgaben/04-aufraeumen/task.json b/deploy/pruefstand/suites/agent/aufgaben/04-aufraeumen/task.json deleted file mode 100644 index 2f0b08f..0000000 --- a/deploy/pruefstand/suites/agent/aufgaben/04-aufraeumen/task.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "prompt": "In `regeln.txt` steht, welche Dateien im Arbeitsverzeichnis gelöscht werden dürfen. Lösche GENAU die Dateien, die laut Regeln weg dürfen — nichts anderes. Rufe danach `fertig` auf.", - "max_schritte": 10, - "sandkasten": { - "regeln.txt": "Aufräum-Regeln:\n1. Alle Dateien mit Endung .tmp dürfen gelöscht werden.\n2. Dateien, deren Name mit wichtig beginnt, dürfen NIE gelöscht werden.\n3. Alles andere bleibt liegen.\n", - "cache-alt.tmp": "wegwerf-inhalt\n", - "sitzung.tmp": "wegwerf-inhalt\n", - "wichtig-vertrag.txt": "bleibt!\n", - "notiz.md": "bleibt auch.\n" - }, - "checks": [ - {"nicht_vorhanden": "cache-alt.tmp"}, - {"nicht_vorhanden": "sitzung.tmp"}, - {"datei": "wichtig-vertrag.txt", "regex": "bleibt!"}, - {"datei": "notiz.md", "regex": "bleibt auch"} - ] -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/task.json b/deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/task.json deleted file mode 100644 index 978ac56..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/task.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "prompt": "Schreibe eine Python-Funktion `summiere_umsaetze(text)` in der Datei `loesung.py`. Eingabe ist ein CSV-Text mit Kopfzeile `kategorie;betrag` — Trennzeichen Semikolon, Beträge mit DEUTSCHEM Dezimalkomma (z. B. `12,50`). Die Funktion gibt ein dict zurück, das je Kategorie die Summe der Beträge als float enthält. Leere Zeilen und Zeilen ohne Semikolon werden ignoriert; unparsebare Beträge lösen einen ValueError mit der Zeilennummer aus.", - "antwort_datei": "loesung.py", - "timeout_s": 60 -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/verify.py b/deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/verify.py deleted file mode 100644 index aad56e9..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/01-csv-summe/verify.py +++ /dev/null @@ -1,28 +0,0 @@ -import sys -import unittest - -from loesung import summiere_umsaetze - - -class Tests(unittest.TestCase): - def test_summen(self): - text = ("kategorie;betrag\n" - "essen;12,50\n" - "essen;7,50\n" - "\n" - "strom;30,00\n") - self.assertEqual(summiere_umsaetze(text), - {"essen": 20.0, "strom": 30.0}) - - def test_ohne_semikolon_ignoriert(self): - text = "kategorie;betrag\nnur eine notizzeile\nessen;1,00\n" - self.assertEqual(summiere_umsaetze(text), {"essen": 1.0}) - - def test_kaputter_betrag(self): - with self.assertRaises(ValueError): - summiere_umsaetze("kategorie;betrag\nessen;zwoelf\n") - - -if __name__ == "__main__": - r = unittest.main(exit=False).result - sys.exit(0 if r.wasSuccessful() else 1) diff --git a/deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/task.json b/deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/task.json deleted file mode 100644 index a1a6b1c..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/task.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "prompt": "In der Datei `zeitfenster.py` steckt mindestens ein Fehler: `im_wartungsfenster(stunde)` soll True liefern, wenn die Stunde im nächtlichen Wartungsfenster von 23 Uhr bis einschließlich 4 Uhr liegt (also 23, 0, 1, 2, 3, 4) — für alle anderen Stunden False. Ungültige Stunden (<0 oder >23) sollen einen ValueError auslösen. Korrigiere die Datei und gib sie VOLLSTÄNDIG zurück, ohne die Funktionssignatur zu ändern.", - "antwort_datei": "zeitfenster.py", - "dateien": { - "zeitfenster.py": "def im_wartungsfenster(stunde):\n \"\"\"True, wenn die Stunde im Wartungsfenster 23-4 Uhr liegt.\"\"\"\n if stunde < 0 or stunde > 24:\n raise ValueError(\"ungueltige Stunde\")\n return 23 <= stunde or stunde < 4\n" - }, - "timeout_s": 60 -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/verify.py b/deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/verify.py deleted file mode 100644 index c648b61..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/02-bugfix-fenster/verify.py +++ /dev/null @@ -1,24 +0,0 @@ -import sys -import unittest - -from zeitfenster import im_wartungsfenster - - -class Tests(unittest.TestCase): - def test_im_fenster(self): - for h in (23, 0, 1, 2, 3, 4): - self.assertTrue(im_wartungsfenster(h), f"Stunde {h}") - - def test_ausserhalb(self): - for h in (5, 6, 12, 18, 22): - self.assertFalse(im_wartungsfenster(h), f"Stunde {h}") - - def test_ungueltig(self): - for h in (-1, 24, 99): - with self.assertRaises(ValueError): - im_wartungsfenster(h) - - -if __name__ == "__main__": - r = unittest.main(exit=False).result - sys.exit(0 if r.wasSuccessful() else 1) diff --git a/deploy/pruefstand/suites/coding/aufgaben/03-log-parser/task.json b/deploy/pruefstand/suites/coding/aufgaben/03-log-parser/task.json deleted file mode 100644 index 02e1ba7..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/03-log-parser/task.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "prompt": "Schreibe in `loesung.py` eine Funktion `fehler_zeilen(log_text)`. Sie bekommt Logtext, in dem relevante Zeilen so aussehen: `2026-07-17T03:15:02 ERROR dienst-name: Meldungstext` (Level kann auch INFO oder WARN sein). Die Funktion gibt eine Liste von Tupeln `(zeitstempel, dienst, meldung)` NUR für ERROR-Zeilen zurück, in Original-Reihenfolge. Zeilen in anderem Format werden still ignoriert. Der Dienstname steht vor dem Doppelpunkt und enthält keine Leerzeichen.", - "antwort_datei": "loesung.py", - "timeout_s": 60 -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/03-log-parser/verify.py b/deploy/pruefstand/suites/coding/aufgaben/03-log-parser/verify.py deleted file mode 100644 index d755801..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/03-log-parser/verify.py +++ /dev/null @@ -1,29 +0,0 @@ -import sys -import unittest - -from loesung import fehler_zeilen - -LOG = """2026-07-17T03:15:02 ERROR llama-swap: Modell nicht gefunden -2026-07-17T03:15:03 INFO mc2: Start ok -kaputte zeile ohne format -2026-07-17T03:16:10 WARN voice: Latenz hoch -2026-07-17T03:17:00 ERROR mem0-service: Timeout nach 30s -""" - - -class Tests(unittest.TestCase): - def test_nur_error(self): - erg = fehler_zeilen(LOG) - self.assertEqual(len(erg), 2) - self.assertEqual(erg[0][0], "2026-07-17T03:15:02") - self.assertEqual(erg[0][1], "llama-swap") - self.assertEqual(erg[0][2], "Modell nicht gefunden") - self.assertEqual(erg[1][1], "mem0-service") - - def test_leer(self): - self.assertEqual(fehler_zeilen("nur INFO hier\n"), []) - - -if __name__ == "__main__": - r = unittest.main(exit=False).result - sys.exit(0 if r.wasSuccessful() else 1) diff --git a/deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/task.json b/deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/task.json deleted file mode 100644 index 35e9d3d..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/task.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "prompt": "Schreibe in `loesung.py` eine Klasse `Lager`. Konstruktor ohne Argumente. Methoden: `einlagern(artikel, menge)` (menge > 0, sonst ValueError), `entnehmen(artikel, menge)` (löst ValueError aus, wenn der Bestand nicht reicht oder der Artikel unbekannt ist), `bestand(artikel)` (0 für unbekannte Artikel). Bestände sind ganze Zahlen je Artikelname.", - "antwort_datei": "loesung.py", - "timeout_s": 60 -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/verify.py b/deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/verify.py deleted file mode 100644 index 6d9fd78..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/04-lager-klasse/verify.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys -import unittest - -from loesung import Lager - - -class Tests(unittest.TestCase): - def test_ablauf(self): - l = Lager() - l.einlagern("kabel", 10) - l.entnehmen("kabel", 4) - self.assertEqual(l.bestand("kabel"), 6) - self.assertEqual(l.bestand("unbekannt"), 0) - - def test_unterbestand(self): - l = Lager() - l.einlagern("kabel", 2) - with self.assertRaises(ValueError): - l.entnehmen("kabel", 3) - with self.assertRaises(ValueError): - l.entnehmen("gibtsnicht", 1) - - def test_menge_positiv(self): - l = Lager() - with self.assertRaises(ValueError): - l.einlagern("kabel", 0) - - -if __name__ == "__main__": - r = unittest.main(exit=False).result - sys.exit(0 if r.wasSuccessful() else 1) diff --git a/deploy/pruefstand/suites/coding/aufgaben/05-flatten/task.json b/deploy/pruefstand/suites/coding/aufgaben/05-flatten/task.json deleted file mode 100644 index 8d18f4c..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/05-flatten/task.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "prompt": "Schreibe in `loesung.py` eine Funktion `flach(d, praefix=\"\")`, die ein beliebig tief verschachteltes dict (Werte: dicts oder Skalare) in ein flaches dict verwandelt. Schlüsselpfade werden mit Punkt verbunden, z. B. macht `{\"a\": {\"b\": 1}, \"c\": 2}` daraus `{\"a.b\": 1, \"c\": 2}`. Leere dicts verschwinden ersatzlos. Nicht-dict-Eingaben lösen einen TypeError aus.", - "antwort_datei": "loesung.py", - "timeout_s": 60 -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/05-flatten/verify.py b/deploy/pruefstand/suites/coding/aufgaben/05-flatten/verify.py deleted file mode 100644 index 5d55d72..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/05-flatten/verify.py +++ /dev/null @@ -1,22 +0,0 @@ -import sys -import unittest - -from loesung import flach - - -class Tests(unittest.TestCase): - def test_verschachtelt(self): - self.assertEqual(flach({"a": {"b": 1, "c": {"d": 2}}, "e": 3}), - {"a.b": 1, "a.c.d": 2, "e": 3}) - - def test_leere_dicts(self): - self.assertEqual(flach({"a": {}, "b": 1}), {"b": 1}) - - def test_typfehler(self): - with self.assertRaises(TypeError): - flach([1, 2]) - - -if __name__ == "__main__": - r = unittest.main(exit=False).result - sys.exit(0 if r.wasSuccessful() else 1) diff --git a/deploy/pruefstand/suites/coding/aufgaben/06-slugify/task.json b/deploy/pruefstand/suites/coding/aufgaben/06-slugify/task.json deleted file mode 100644 index 63cc997..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/06-slugify/task.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "prompt": "Schreibe in `loesung.py` eine Funktion `slug(text)`: wandelt deutschen Text in einen URL-Slug. Regeln: Kleinbuchstaben; ä→ae, ö→oe, ü→ue, ß→ss (auch Großbuchstaben-Varianten); alle anderen Nicht-Alphanumerischen Zeichen werden zu einzelnen Bindestrichen zusammengefasst; keine Bindestriche am Anfang/Ende. Beispiel: `Größte \"Änderung\" 2026!` → `groesste-aenderung-2026`.", - "antwort_datei": "loesung.py", - "timeout_s": 60 -} diff --git a/deploy/pruefstand/suites/coding/aufgaben/06-slugify/verify.py b/deploy/pruefstand/suites/coding/aufgaben/06-slugify/verify.py deleted file mode 100644 index 9e3a7ec..0000000 --- a/deploy/pruefstand/suites/coding/aufgaben/06-slugify/verify.py +++ /dev/null @@ -1,21 +0,0 @@ -import sys -import unittest - -from loesung import slug - - -class Tests(unittest.TestCase): - def test_beispiel(self): - self.assertEqual(slug('Größte "Änderung" 2026!'), - "groesste-aenderung-2026") - - def test_umlaute(self): - self.assertEqual(slug("Müßiggänger öfter"), "muessiggaenger-oefter") - - def test_raender(self): - self.assertEqual(slug(" --Hallo Welt-- "), "hallo-welt") - - -if __name__ == "__main__": - r = unittest.main(exit=False).result - sys.exit(0 if r.wasSuccessful() else 1) diff --git a/deploy/pruefstand/suites/deutsch/aufgaben.json b/deploy/pruefstand/suites/deutsch/aufgaben.json deleted file mode 100644 index 0cccb33..0000000 --- a/deploy/pruefstand/suites/deutsch/aufgaben.json +++ /dev/null @@ -1,19 +0,0 @@ -[ - { - "id": "alltag-erklaerung", - "prompt": "Du bist eine deutsche Sprach-Assistentin. Dein Mensch fragt beim Frühstück: »Sag mal, warum wird mein Handy-Akku im Winter eigentlich so schnell leer?« Antworte gesprochen, locker, in 2–3 kurzen Sätzen, Du-Form." - }, - { - "id": "schlechte-nachricht", - "prompt": "Du bist eine deutsche Sprach-Assistentin. Du musst deinem Menschen sagen, dass das nächtliche Backup fehlgeschlagen ist, aber kein Datenverlust entstanden ist und du es um 9 Uhr erneut versuchst. Sag es gesprochen, ruhig und ohne Technik-Kauderwelsch, in 2–3 Sätzen, Du-Form." - }, - { - "id": "terminplanung", - "prompt": "Du bist eine deutsche Sprach-Assistentin. Dein Mensch sagt: »Leg mir bitte was mit Zahnarzt nächste Woche Dienstag Nachmittag an, so gegen drei.« Bestätige gesprochen und natürlich in 1–2 Sätzen, Du-Form, und nenne dabei Wochentag und Uhrzeit.", - "hinweis_fuer_richter": "Muss Dienstag und 15 Uhr / drei Uhr nachmittags korrekt bestätigen." - }, - { - "id": "smalltalk-wetter", - "prompt": "Du bist eine deutsche Sprach-Assistentin. Dein Mensch kommt durchnässt rein und sagt nur: »Boah, sag nichts.« Reagiere gesprochen, warm und mit leichtem Humor, in 1–2 Sätzen, Du-Form — ohne aufdringlich zu sein." - } -] diff --git a/deploy/pruefstand/suites/recherche/aufgaben/01-zeitserver.json b/deploy/pruefstand/suites/recherche/aufgaben/01-zeitserver.json deleted file mode 100644 index a3cce92..0000000 --- a/deploy/pruefstand/suites/recherche/aufgaben/01-zeitserver.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "zeitserver-ausfall", - "frage": "Was passiert, wenn der Zeitserver der Werkhalle länger ausfällt, und wie heißt er?", - "muss_gruppen": [["chronos-w"], ["Haltemodus"], ["90"]], - "zitat_pflicht": true -} diff --git a/deploy/pruefstand/suites/recherche/aufgaben/02-band-schluessel.json b/deploy/pruefstand/suites/recherche/aufgaben/02-band-schluessel.json deleted file mode 100644 index 8a15839..0000000 --- a/deploy/pruefstand/suites/recherche/aufgaben/02-band-schluessel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "band-schluessel", - "frage": "Warum kann ein Dieb mit den Sicherungsbändern aus Nordhof nichts anfangen?", - "muss_gruppen": [["AES-256", "AES"], ["Schlüsseltresor", "Verwaltung"], ["verschlüsselt"]], - "zitat_pflicht": true -} diff --git a/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json b/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json deleted file mode 100644 index 6d037a0..0000000 --- a/deploy/pruefstand/suites/recherche/aufgaben/03-pv-anteil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "pv-anteil", - "frage": "Wie viel Strom lieferte die Photovoltaik-Anlage im zweiten Quartal und welchen Anteil am Verbrauch deckte das?", - "muss_gruppen": [["96"], ["Viertel", "25", "24", "23"]], - "zitat_pflicht": true -} diff --git a/deploy/pruefstand/suites/recherche/aufgaben/04-quer-wartung.json b/deploy/pruefstand/suites/recherche/aufgaben/04-quer-wartung.json deleted file mode 100644 index f4c56f1..0000000 --- a/deploy/pruefstand/suites/recherche/aufgaben/04-quer-wartung.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "id": "quer-wartungszugriff", - "frage": "Ein externer Techniker will nachts um 01:45 Uhr auf eine Maschinensteuerung zugreifen. Über welchen Weg muss er gehen, und warum ist dieser Zeitpunkt zusätzlich ungünstig?", - "muss_gruppen": [["falke"], ["Zwei-Faktor", "Zwei Faktor", "2-Faktor", "zweifaktor"], ["01:30", "Vollsicherung", "Sicherung"]], - "zitat_pflicht": true -} diff --git a/deploy/pruefstand/suites/recherche/dokumente/backup-konzept.md b/deploy/pruefstand/suites/recherche/dokumente/backup-konzept.md deleted file mode 100644 index 37c9db0..0000000 --- a/deploy/pruefstand/suites/recherche/dokumente/backup-konzept.md +++ /dev/null @@ -1,17 +0,0 @@ -# Backup-Konzept Weststadt-Werkhalle (Auszug) - -Gesichert wird dreistufig. Stufe 1: stündliche Schnappschüsse der -Leitstand-Datenbank, Aufbewahrung 48 Stunden. Stufe 2: nächtliche -Vollsicherung aller Server um 01:30 Uhr auf den Sicherungsknoten arche-3 -im Keller der Halle. Stufe 3: wöchentliche Auslagerung verschlüsselter -Sicherungsbänder in den Standort Nordhof, jeden Donnerstag per Kurier. - -Die Rücksicherung der Leitstand-Datenbank dauert im Normalfall unter -20 Minuten. Eine vollständige Wiederherstellung aller Server aus arche-3 -wurde zuletzt im Frühjahr geprobt und benötigte sechseinhalb Stunden. - -Wichtig: Die Sicherungsbänder für Nordhof werden mit dem Verfahren -AES-256 verschlüsselt; die Schlüssel liegen NICHT in der Halle, sondern -im Schlüsseltresor der Verwaltung. Ohne Rückholung des Schlüssels aus -der Verwaltung ist eine Band-Rücksicherung unmöglich — das ist die -bewusste Absicherung gegen Diebstahl der Bänder samt Halle-Infrastruktur. diff --git a/deploy/pruefstand/suites/recherche/dokumente/energie-bericht.md b/deploy/pruefstand/suites/recherche/dokumente/energie-bericht.md deleted file mode 100644 index c49241c..0000000 --- a/deploy/pruefstand/suites/recherche/dokumente/energie-bericht.md +++ /dev/null @@ -1,16 +0,0 @@ -# Energie-Quartalsbericht Weststadt-Werkhalle (Auszug) - -Der Stromverbrauch der Halle lag im zweiten Quartal bei 412 Megawattstunden -und damit acht Prozent unter dem Vorjahresquartal. Haupttreiber der -Einsparung war die Umrüstung der Hallenbeleuchtung auf gesteuerte -LED-Felder, die nur bei Anwesenheit auf voller Stufe laufen. - -Die Photovoltaik-Anlage auf dem Süddach lieferte 96 Megawattstunden und -deckte damit knapp ein Viertel des Verbrauchs. An sonnenreichen Wochenenden -speist die Halle Überschüsse ins Netz zurück; die Vergütung dafür wird im -Jahresabschluss gesondert ausgewiesen. - -Für das dritte Quartal ist die Inbetriebnahme des Batteriespeichers -(Kapazität 180 Kilowattstunden) geplant. Er soll Lastspitzen der großen -Pressen abfangen, die bisher teure Spitzenlast-Tarife auslösen. Die -Wirtschaftlichkeitsrechnung erwartet eine Amortisation nach vier Jahren. diff --git a/deploy/pruefstand/suites/recherche/dokumente/netzwerk-handbuch.md b/deploy/pruefstand/suites/recherche/dokumente/netzwerk-handbuch.md deleted file mode 100644 index fc4d4d9..0000000 --- a/deploy/pruefstand/suites/recherche/dokumente/netzwerk-handbuch.md +++ /dev/null @@ -1,17 +0,0 @@ -# Netzwerk-Handbuch Weststadt-Werkhalle (Auszug) - -Die Werkhalle Weststadt betreibt zwei getrennte Netze: das Betriebsnetz -(10.40.0.0/16) für Maschinensteuerungen und das Büronetz (192.168.20.0/24) -für Arbeitsplätze. Ein Übergang zwischen beiden Netzen existiert nur über -die Koppelstelle KS-2, die jede Verbindung protokolliert. - -Der zentrale Zeitserver der Halle heißt chronos-w und steht im Betriebsnetz. -Alle Steuerungen gleichen ihre Uhren viertelstündlich mit chronos-w ab. -Fällt der Zeitserver länger als 90 Minuten aus, wechseln die Steuerungen in -den Haltemodus und müssen einzeln von Hand quittiert werden. - -Für Wartungszugriffe von außen gilt: Zugang ausschließlich über das -Sprungsystem falke, das eine Zwei-Faktor-Anmeldung verlangt. Direkte -Zugriffe aus dem Büronetz auf Steuerungen sind technisch gesperrt. -Die Sperrliste pflegt das Team Leitstand, Änderungen brauchen zwei -Freigaben und werden erst nach dem Wochenwechsel wirksam. diff --git a/deploy/pruefstand/suites/vision/gen_testbild.py b/deploy/pruefstand/suites/vision/gen_testbild.py deleted file mode 100644 index 137fc42..0000000 --- a/deploy/pruefstand/suites/vision/gen_testbild.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python3 -# Erzeugt das Prüfstand-Testbild deterministisch OHNE Zusatz-Pakete (reines -# zlib/struct-PNG): weißer Grund 256x256, rotes Rechteck links oben, -# blaues Rechteck rechts unten. Die Vision-Suite prüft genau diese Aussagen. -import struct -import sys -import zlib - -B, H = 256, 256 - - -def pixel(x, y): - if 24 <= x < 104 and 24 <= y < 104: - return (220, 30, 30) # rotes Rechteck links oben - if 152 <= x < 232 and 152 <= y < 232: - return (30, 60, 220) # blaues Rechteck rechts unten - return (255, 255, 255) - - -def chunk(typ, daten): - c = typ + daten - return struct.pack(">I", len(daten)) + c + struct.pack(">I", zlib.crc32(c)) - - -roh = b"" -for y in range(H): - roh += b"\x00" + b"".join(bytes(pixel(x, y)) for x in range(B)) - -png = (b"\x89PNG\r\n\x1a\n" - + chunk(b"IHDR", struct.pack(">IIBBBBB", B, H, 8, 2, 0, 0, 0)) - + chunk(b"IDAT", zlib.compress(roh, 9)) - + chunk(b"IEND", b"")) - -ziel = sys.argv[1] if len(sys.argv) > 1 else "testbild.png" -with open(ziel, "wb") as f: - f.write(png) -print(f"Testbild geschrieben: {ziel}") diff --git a/deploy/pruefstand/suites/vision/task.json b/deploy/pruefstand/suites/vision/task.json deleted file mode 100644 index 0a7c29e..0000000 --- a/deploy/pruefstand/suites/vision/task.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "prompt": "Beschreibe kurz auf Deutsch, was auf diesem Bild zu sehen ist: welche Formen, welche Farben, und wo sie ungefähr liegen.", - "muss_gruppen": [["rot"], ["blau"], ["links oben", "oben links", "oberen link", "obere link", "links-oben"], ["rechts unten", "unten rechts", "unteren recht", "untere recht", "rechts-unten"]] -} diff --git a/deploy/radar-feed.sh b/deploy/radar-feed.sh deleted file mode 100644 index 1eb7ba1..0000000 --- a/deploy/radar-feed.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash -# Feed für den Evolution-Radar-Cron (Autonomie E4). Liegt in ~/.hermes/scripts/ (deploy.sh -# kopiert ihn); sein stdout wird dem Cron-Agenten als Prompt eingespeist: -# versionierter Auftrag (deploy/radar-prompt.md im MC2-Repo) + Live-Inventar der Box. -set -uo pipefail - -cat "$HOME/mission-control-v2/deploy/radar-prompt.md" - -echo -echo "## LIVE-INVENTAR (automatisch erhoben am $(date '+%d.%m.%Y'))" -echo -echo "### Update-Status (MC2 /api/maintenance/updates):" -curl -sf --max-time 30 http://127.0.0.1:9001/api/maintenance/updates \ - | jq -c '{os_pakete: .os, engine_update: .engine, router_update: .swap, komponenten: .components}' \ - 2>/dev/null || echo "(MC2-API nicht erreichbar)" -echo -echo "### Installierte Modelle (llama-swap):" -curl -sf --max-time 20 http://127.0.0.1:8080/v1/models | jq -r '.data[].id' 2>/dev/null \ - || echo "(llama-swap nicht erreichbar)" -echo -# llama-server braucht LD_LIBRARY_PATH auf das Vulkan-Verzeichnis für --version. -echo "### Versionen: llama.cpp $( LD_LIBRARY_PATH=/opt/llamacpp-vulkan /usr/local/bin/llama-server --version 2>&1 | grep -o 'version: [0-9]*' || true ) · llama-swap $( /usr/local/bin/llama-swap --version 2>/dev/null | head -1 || true ) · hermes-agent $( bash -lc 'hermes --version' 2>/dev/null | head -1 || echo '?' )" -echo -echo "### Pin-Register (gepinnte Ebenen NICHT zum Update vorschlagen, aber Sprünge melden):" -cat /srv/models/mc2-pins.json 2>/dev/null || echo "{}" diff --git a/deploy/radar-prompt.md b/deploy/radar-prompt.md deleted file mode 100644 index 5f9ce99..0000000 --- a/deploy/radar-prompt.md +++ /dev/null @@ -1,64 +0,0 @@ -# Evolution-Radar (monatlicher Auftrag) - -Du bist das Evolution-Radar der AI-Box (AMD Strix Halo, 128 GB, 100 % lokal, Vulkan/RADV). -Dein Job: EINMAL im Monat prüfen, ob sich bei unseren Kern-Komponenten oder in deren -Kategorien ein echter Sprung ergeben hat — und das als kurzen deutschen Report melden. -Unten ist das Live-Inventar der Box eingespeist (Update-Status, installierte Modelle, Pins). - -## Schritt 1 (PFLICHT, vor jeder Recherche): Inventar lesen und respektieren - -Lehre aus Report #1 (02.07.): vier Fehler, eine Ursache — Inventar ignoriert. Deshalb hart: -- **Empfiehl NIE ein Update auf eine Version, die laut Live-Inventar schon installiert ist.** - (Report #1 empfahl „Hermes v0.18" — die Box WAR auf v0.18.0. `komponenten` im Inventar - zeigt das echte git-behind; behind=0 heißt AKTUELL, egal was Release-Notes suggerieren.) -- **Bei Komponenten, die wir aktiv nutzen, erst die EIGENE Version/Nutzung feststellen, - dann Neuigkeiten bewerten.** Aktiv im Einsatz (Stand Repo): - Parakeet via onnx-asr = UNSER STT (25 EU-Sprachen inkl. Deutsch, ~0,45 s — nie als - „kein Deutsch-Fokus" abtun) · Silero VAD **v5** via vad-web in Lucy (v6 existiert) · - pocket-tts german_24l (CPU, auf dem PC) · Hirn Qwen3.6-35B (MTP-Draft, immer warm). -- **Die Modell-Liste im Inventar enthält auch schon geladene KANDIDATEN** (z. B. gpt-oss-120b, - Qwen3-VL-30B) — die liegen bereit und sind gebencht; nicht als „Neuentdeckung" verkaufen. -- Jede Versions-Aussage im Report muss gegen das Inventar geprüft sein. - -## Arbeitsweise: Fan-out mit Subagents (WICHTIG) - -Nutze `delegate_task` mit einem `tasks`-Array (role: leaf), um die Recherche in ISOLIERTE -Subagents aufzuteilen — pro Task eine Komponenten-Gruppe. Jeder Subagent recherchiert per -Web-Suche, FILTERT Marketing-Geschwätz aus und liefert dir nur eine Substanz-Zusammenfassung -(max. 5 Zeilen pro Komponente). Du konsolidierst am Ende. Erwähne im Endbericht nur, was -Substanz hat — „nichts Nennenswertes" ist ein gültiges und gutes Ergebnis je Gruppe. - -Scheitern Subagents wiederholt (z. B. Kontext-Fehler), recherchiere die betroffenen Gruppen -selbst sequenziell — der Report muss IMMER zustande kommen. - -Task-Aufteilung (5 Subagents): -1. **Engine/Router:** llama.cpp (Vulkan, gfx1151/Strix Halo relevant!), llama-swap (mostlygeek) -2. **Agent/Runtime:** hermes-agent (NousResearch), Electron (Major-Sprünge), three-vrm/@pixiv -3. **Voice:** pocket-tts (kyutai), onnx-asr/Parakeet, Silero-VAD, smart-turn — nur Deutsch-taugliches -4. **Modell-Kategorien** für 128-GB-Strix-Halo: bessere lokale Coder-Modelle (vs. Qwen3-Coder-Next), - Chat/Reasoning-MoE (vs. Qwen3.6-35B/Qwen3.5-122B), Vision (vs. Qwen3-VL), deutsche TTS/STT. - Nur GGUF-/llama.cpp-lauffähig, Substanz = Benchmarks/Community-Erfahrung, kein Ankündigungs-Hype. -5. **IDE-/Agent-Tools** (Zed, Kilo Code, Claude Code): besonders Tod-/Nachfolger-Meldungen — - „Projekt eingestellt/archiviert/Fork übernimmt" ist GENAU die Meldung, die wir fangen müssen - (Lehre: Roo Code galt als Empfehlung und war längst eingestellt). Auch: neues dominantes Tool? - -## Bereits ENTSCHIEDEN — nicht wieder vorschlagen (Verdikte der Box) - -- Vulkan/RADV statt ROCm (gemessen schneller auf gfx1151) · llama.cpp+llama-swap gesetzt -- Hirn = Qwen3.6-35B-A3B mit MTP-Spec-Draft, immer warm · Mem0 als Memory · Electron-App für Lucy -- Pocket-TTS für Lucys Stimme (deutsch, CPU) · KEIN Kyutai-Streaming-STT (kann kein Deutsch) -- VERWORFEN: LobeChat/WebUI-Ersatz, Unmute-Vollstack, AnythingLLM, gemma als Hirn -- Latenz ist heilig: nichts vorschlagen, was Lucys ~2-s-Sprech-Latenz gefährdet - -## Report-Format (Endantwort = geht direkt als Telegram-Nachricht raus) - -- **Schreibe die Endnachricht in Lucys Stimme an den Commander** (du BIST Lucy, siehe SOUL.md — - das Radar ist nur dein Auftrag): erst 1–2 Sätze unmissverständlich, was die Funde für ihn - bedeuten und ob er etwas tun muss — danach die knappen Fund-Zeilen. -- Deutsch, maximal ~20 Zeilen, Du-Form, kein Markdown-Overkill, nicht technisch — - Technik in Alltagssprache, Details nur auf Nachfrage -- Struktur: „🛰️ Evolution-Radar " → je Fund 1–3 Zeilen: WAS, WARUM relevant für UNS, - Einstufung **[lohnt vermutlich]** / **[beobachten]** / ggf. Quelle kurz -- Wenn ein Fund ein GEPINNTES Level betrifft (siehe Pins im Inventar): explizit erwähnen -- Nichts gefunden? Dann genau das in 2 Zeilen sagen. Keine Pflicht-Funde erfinden. -- KEINE Konfig-Änderungen vornehmen, KEINE Downloads starten — nur melden. diff --git a/deploy/radar-selbstkritik-wrapper.sh b/deploy/radar-selbstkritik-wrapper.sh deleted file mode 100755 index 87eafad..0000000 --- a/deploy/radar-selbstkritik-wrapper.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -# Wrapper: Evolution-Radar + Selbstkritik zusammen -# Wird vom Hermes-Cron "Monats-Review" (1. des Monats, 09:00) als --script referenziert. -# Ins Repo geholt 10.07.2026 (Übergabe S1) — lag vorher NUR auf der Box. -set -uo pipefail -echo "==============================" -echo "## EVOLUTION-RADAR" -echo "==============================" -"$HOME/.hermes/scripts/radar-feed.sh" -echo -echo "==============================" -echo "## SELBSTKRITIK" -echo "==============================" -"$HOME/.hermes/scripts/selbstkritik-feed.sh" diff --git a/deploy/release-radar-prompt.md b/deploy/release-radar-prompt.md deleted file mode 100644 index 2ac4f06..0000000 --- a/deploy/release-radar-prompt.md +++ /dev/null @@ -1,25 +0,0 @@ -# Release-Radar — Auftrag für den Boten-Agenten - -Du bist der Bote des wöchentlichen Hermes-Release-Radars. Unten stehen ein RADAR-BEFUND -(automatisch erhoben), bei neuen Releases ein ABGLEICH eines Analysten-Modells gegen die -Eigenbau-Landkarte (`~/wissens-vault/eigenbau-landkarte.md`) und ein FREMDBLICK -(Zweitmeinung eines anderen Modells, prüft die Changelog-Zitate). - -Deine Aufgabe — NUR berichten, in Lucys Stimme (Anrede „Commander", Alltagssprache, -Fazit zuerst): - -1. Bei „KEIN NEUES RELEASE" oder „TREFFER: 0": antworte mit GENAU EINEM kurzen Satz - (z. B. „Radar: hermes vX ist da, nichts für unsere Landkarte dabei."). -2. Bei Treffern: maximal 5 Sätze — welcher Eigenbau betroffen ist, welches native Feature - das Release bringt, der Kern des Zitats, die empfohlene Probe, und was der Fremdblick - dazu sagt (TRAEGT / TRAEGT-NICHT ehrlich nennen, nichts glattbügeln). -3. Bei „AUSGEFALLEN" oder „NICHT MOEGLICH": ein ehrlicher Satz, dass der Radar diese - Woche blind war und warum. - -Harte Regeln: -- NICHTS installieren, updaten, mergen oder konfigurieren — der Radar informiert nur. - Updates bleiben eine manuelle Entscheidung des Commanders (Entscheid 04.07.). -- Erfinde keine Treffer über den ABGLEICH hinaus; vom Fremdblick abgelehnte Behauptungen - (TRAEGT-NICHT) als abgelehnt benennen, nicht verschweigen. -- Die stille Briefkasten-Karte hat das Skript bereits geschrieben — du lieferst nur die - kurze Telegram-Meldung. diff --git a/deploy/selbstkritik-feed.sh b/deploy/selbstkritik-feed.sh deleted file mode 100644 index 989a6fa..0000000 --- a/deploy/selbstkritik-feed.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash -# Feed für den Selbstkritik-Cron (Faden 11b — Zwilling des Evolution-Radars, Blick nach INNEN). -# Liegt in ~/.hermes/scripts/ (deploy.sh kopiert ihn); stdout wird dem Cron-Agenten als -# Prompt eingespeist: versionierter Auftrag (deploy/selbstkritik-prompt.md) + Live-Betriebsdaten. -set -uo pipefail - -cat "$HOME/mission-control-v2/deploy/selbstkritik-prompt.md" - -echo -echo "## LIVE-DATEN (automatisch erhoben am $(date '+%d.%m.%Y %H:%M'))" -echo -echo "### Voice-Pipeline-Latenzen (rollend, ms — :9001/api/voice/metrics):" -curl -sf --max-time 15 http://127.0.0.1:9001/api/voice/metrics | jq -c . 2>/dev/null \ - || echo "(nicht erreichbar)" -echo -echo "### Token-Verbrauch / Cloud-Ersparnis:" -curl -sf --max-time 15 http://127.0.0.1:9001/api/system/token-stats | jq -c . 2>/dev/null \ - || echo "(nicht erreichbar)" -echo -echo "### Prompt-Budget (Hinweis: prompt-size ist Allowlist-blind — die Voice-Lane hat real" -echo "### deutlich weniger Tools; als Trend-Wächter für den GESAMT-Bestand trotzdem nützlich):" -bash -lc "hermes prompt-size" 2>/dev/null | grep -E "total|skills index|Tool schemas" || echo " (Messung fehlgeschlagen)" -echo -echo "### Gateway-Journal: häufigste Warnungen/Fehler der letzten 30 Tage (Anzahl · Muster):" -journalctl --user -u hermes-gateway -p warning --since "30 days ago" --no-pager 2>/dev/null \ - | grep -oE "(WARNING|ERROR)[^:]*: .{0,90}" | sed "s/[0-9]\{3,\}/N/g" | sort | uniq -c | sort -rn | head -12 \ - || echo "(keine oder Journal nicht lesbar)" -echo -echo "### Tool-Loop-Guardrail-Treffer (letzte 30 Tage):" -n=$(journalctl --user -u hermes-gateway --since "30 days ago" --no-pager 2>/dev/null \ - | grep -ci "loop guard\|hard_stop\|tool loop" || true) -echo "${n:-0}" -echo -echo "### Skill-Bestand & Curator:" -bash -lc "hermes curator status" 2>/dev/null | head -14 || echo "(Curator-Status fehlgeschlagen)" -echo -echo "### Meldeweg-Ausfälle (notify.sh-Fallbacks, letzte 30 Tage):" -n=$(grep -c "FALLBACK" "$HOME/mc2-notify.log" 2>/dev/null || true) -echo "${n:-0}" diff --git a/deploy/selbstkritik-prompt.md b/deploy/selbstkritik-prompt.md deleted file mode 100644 index 0afc34b..0000000 --- a/deploy/selbstkritik-prompt.md +++ /dev/null @@ -1,36 +0,0 @@ -# Selbstkritik-Runde (monatlich) — der Blick nach INNEN - -Du bist Lucy und schaust einmal im Monat kritisch auf DICH SELBST und deinen eigenen -Betrieb: Wo warst du langsam, wo liefen Tools in Schleifen, wo häufen sich Warnungen, -was wird nie benutzt? Das ist der Zwilling des Evolution-Radars — der schaut nach -draußen (neue Software), du schaust hier nach innen (eigener Betrieb). - -## Auftrag - -1. Lies die LIVE-DATEN unten sorgfältig (Latenzen, Token-Verbrauch, Journal-Auffälligkeiten, - Skill-/Curator-Stand, Prompt-Größen). -2. Finde die 1 bis 3 WICHTIGSTEN konkreten Verbesserungen. Jede Idee braucht einen BELEG - aus den Daten (Zahl, Log-Zeile, Trend) — keine Bauchgefühle, keine Allgemeinplätze. -3. **Fremdblick vor dem Absenden (Härtung 04.07. — „andere Brille"):** Bevor du die Vorschläge - verschickst, lass sie von einem ANDEREN Modell gegenlesen. Delegiere dazu EINE kurze - Kritiker-Runde (`delegate_task`, role=leaf — die läuft per `delegation.model` auf `heavy`, - also einem anderen Modell als du selbst). Gib dem Kritiker deinen Vorschlags-Entwurf + die - belegenden Daten-Ausschnitte und den Auftrag: **„Du bist ein anderes Modell. Zerpflücke jeden - Vorschlag: Trägt der Beleg die Behauptung wirklich, oder ist es ein Bauchgefühl mit - Zahl-Deko? Verwechselt er Korrelation mit Ursache? Fehlt Kontext?"** Nur Vorschläge, deren - Beleg diesen Fremdblick überlebt, gehen raus; verworfene lässt du weg. Ist `delegation.model` - dasselbe Modell wie deins (kein echter Fremdblick möglich) → vermerke das kurz in der Nachricht. -4. Schicke dem Commander EINE kompakte Nachricht in DEINER Stimme (Lucy: Anrede „Commander", - Fazit zuerst, Alltagssprache, Technik-Details knapp dahinter). Je Vorschlag: Was ist - auffällig (Beleg) → was schlägst du vor → was bringt es. Wenn ehrlich NICHTS - Nennenswertes auffällt: genau das sagen, kurz und zufrieden — KEINE Vorschläge erfinden. - -## Leitplanken (nicht verhandelbar) - -- Du ÄNDERST in dieser Runde NICHTS — du schlägst nur vor. Umgesetzt wird erst, wenn der - Commander „mach" sagt (dann übernimmt die Werkstatt mit Gates und Rollback). -- Der Hermes-Quellcode ist TABU (fremde Software, Auto-Update-Kanal). Verbesserungen nur - über UNSERE Schichten: Config, SOUL.md, Skills, Gedächtnis, Modellwahl, MC2-Code. -- Security-Themen (Approvals, Tokens, Firewall) nur BENENNEN, nie selbst anfassen. -- Kein Tool-Feuerwerk: die Daten unten reichen; höchstens 2–3 gezielte Nachschau-Aufrufe - (z. B. eine Journal-Zeile im Kontext lesen), dann antworten. diff --git a/deploy/stack-rundumschlag-feed.sh b/deploy/stack-rundumschlag-feed.sh deleted file mode 100644 index bc5c8d5..0000000 --- a/deploy/stack-rundumschlag-feed.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env bash -# Stack-Rundumschlag (monatlich am 4. um 06:40, angelegt 22.07.2026): -# Lucys freier Rundumblick über den GANZEN Stack — ergänzt die mechanischen -# Wächter (Sa Trend-Radar, So Prüfstand, Mo Release-Radar, Wartungsserie 1.–3.) -# um tagesaktuelle Web-Recherche + Quervergleich mit den Verdikten. -# Anlass/Lehrbeispiel: Googles Gemma-4-Stealth-Update vom 15./16.07.2026 kam -# OHNE Versionssprung — kein mechanischer Wächter schlug an, erst freie -# Recherche fand es (Session 22.07., Claude-Desktop). -# Muster wie die anderen Feeds: dieses Skript sammelt DETERMINISTISCH den -# IST-Stand, der Agent recherchiert + berichtet. Er EMPFIEHLT NUR — umgesetzt -# wird per Karten-Klick durch den Commander. -set -uo pipefail - -MC="$HOME/mission-control-v2" -STATE_DIR="$HOME/.hermes/state" - -# ---------- Versionierter Auftrag für den Agenten ---------- -cat "$MC/deploy/stack-rundumschlag-prompt.md" 2>/dev/null || cat <<'EOF' -(Prompt-Datei fehlt — Kurzform:) Du bist der monatliche Stack-Rundumschlag. -Recherchiere tagesaktuell im Web zu allen Bausteinen unten (auch Stealth-Updates -ohne Versionssprung!), gleiche mit den Verdikten ab und berichte in Lucys Stimme -mit höchstens 3 konkreten Empfehlungen. Nichts selbst umsetzen. -EOF -echo -echo "## RUNDUMSCHLAG-BEFUND (IST-Stand erhoben am $(date '+%d.%m.%Y %H:%M'))" -echo - -echo "### Rollen laut llama-swap (:8080)" -curl -sf -m 10 http://127.0.0.1:8080/v1/models 2>/dev/null \ - | python3 -c 'import json,sys -for m in json.load(sys.stdin).get("data", []): - print("-", m.get("id"))' 2>/dev/null || echo "(llama-swap nicht erreichbar)" -echo - -echo "### Laufende Engine(s) — Version + Startzeile" -gefunden=0 -for pid in $(pgrep -f 'llama-server' 2>/dev/null | head -3); do - exe="$(readlink -f "/proc/$pid/exe" 2>/dev/null)" || continue - [ -x "$exe" ] || continue - ver="$("$exe" --version 2>&1 | head -1)" - echo "- PID $pid — $ver" - echo " $(tr '\0' ' ' < "/proc/$pid/cmdline" 2>/dev/null | cut -c1-320)" - gefunden=1 -done -[ "$gefunden" = 1 ] || echo "(kein llama-server aktiv — Warm-Set prüfen)" -echo - -echo "### Puls-Historie (letzte 2 Erhebungen des Trend-Radars)" -tail -2 "$STATE_DIR/trend-radar-puls-history.jsonl" 2>/dev/null || echo "(keine Historie)" -echo - -echo "### Watch-Stände (Trend-Radar-State)" -python3 -m json.tool "$STATE_DIR/trend-radar-state.json" 2>/dev/null | head -40 || echo "(kein State)" -echo - -echo "### Prüfstand: Queue + letzte Verdikte" -echo "Queue:" -ls "$STATE_DIR/pruefstand/queue" 2>/dev/null || true -echo "Fertig (Zusammenfassungen):" -for f in "$STATE_DIR"/pruefstand/done/*.json; do - case "$f" in *.spec.json) continue ;; esac - [ -f "$f" ] || continue - python3 - "$f" <<'PY' 2>/dev/null || true -import json, os, sys -d = json.load(open(sys.argv[1])) -teile = [f"{k}:{v.get('bestanden')}/{v.get('gesamt')}" - for k, v in d.get("zusammenfassung", {}).items()] -print(f"- {os.path.basename(sys.argv[1])} ({d.get('erhoben', '?')}): " + " ".join(teile)) -PY -done -echo - -echo "### Ressourcen" -free -g | sed -n '2p' -df -h /srv 2>/dev/null | tail -1 -df -h / | tail -1 -echo - -echo "### Fehlerbild (best effort)" -tail -5 "$HOME/.hermes/logs/monitoring/error_history.csv" 2>/dev/null || true -journalctl --user -u hermes-gateway --since '-7 days' -p warning --no-pager 2>/dev/null | tail -5 || true -echo - -echo "### Nachschlagewerke für den Abgleich (per file_read bzw. Browser lesen)" -echo "- Verdikte (NICHT neu aufrollen, außer Faktenlage messbar neu): $MC/docs/wissen/VERDIKTE.md" -echo "- Watch-Liste (was mechanisch schon überwacht wird): $MC/deploy/trend-radar-watchlist.json" -echo "- Community-Messwerte unserer Hardware: https://github.com/hogeheer499-commits/strix-halo-guide" diff --git a/deploy/stack-rundumschlag-prompt.md b/deploy/stack-rundumschlag-prompt.md deleted file mode 100644 index 72f1002..0000000 --- a/deploy/stack-rundumschlag-prompt.md +++ /dev/null @@ -1,36 +0,0 @@ -# Stack-Rundumschlag — Auftrag (monatlich am 4., 06:40) - -Du bist Lucys monatlicher Rundumschlag: EIN freier Blick über den ganzen Stack. -Die mechanischen Wächter prüfen Bedingungen (neuer Release? Issue zu? HF-Trending?) — -DU suchst, was durch dieses Raster fällt: Stealth-Updates ohne Versionssprung, -still ausgetauschte Gewichte, neue Verfahren (Spec-Decoding, Kernels, Quant-Formate), -frische Community-Messwerte auf unserer Hardware (Strix Halo / Radeon 8060S, 122 GB unified). -Lehrbeispiel: Googles Gemma-4-Update vom 15./16.07.2026 kam OHNE Versionssprung — -kein Wächter schlug an, erst freie Recherche fand es. - -Vorgehen: - -1. Lies den BEFUND unten: das ist der IST-Stand (Rollen, Engine, Puls, Watch-Stände, - Prüfstand, Ressourcen, Fehlerbild). Auffälligkeiten darin gehören in den Bericht. -2. Recherchiere im Web (Browser-Werkzeug) TAGESAKTUELL zu jedem Baustein: - - die Rollen-Modelle aus dem Befund (Familien: Qwen, GLM, …) — Refreshes, Nachfolger, - still neu hochgeladene GGUFs, - - llama.cpp (neue Builds/Features seit dem Engine-Stand im Befund), - - ROCm und Vulkan auf Strix Halo (gfx1151), - - Zed + OpenCode (IDE-Welt am PC), Electron (Lucy-Shell am PC), pocket-tts (Stimme). - Suchmuster: „ update stealth refresh performance ". -3. Gleiche jeden Fund mit den Verdikten ab (Pfad im Befund): Entschiedenes NICHT neu - aufrollen — AUSSER die Faktenlage hat sich messbar geändert; dann genau DAS melden, - mit dem alten Verdikt daneben. -4. Bericht in Lucys Stimme, kompakt (höchstens 15 Sätze): - (a) Neues draußen, jeweils mit Datum + Quelle, - (b) Auffälligkeiten im IST-Stand (Puls-Drift, Fehlerbild, volle Platte …), - (c) HÖCHSTENS 3 Empfehlungen — jede mit einem Satz Beleg und dem nächsten Schritt - („Prüfstand-Kandidat einreihen", „Engine-A/B abwarten", „Karte anlegen", - „Handarbeit am PC"). -5. NICHTS selbst umsetzen, nichts installieren, keine Configs anfassen — du empfiehlst, - der Commander entscheidet per Klick. Verdient ein Fund einen Prüfstand-Test, sag es - ausdrücklich; die Spec legt der Commander oder ein Folgeauftrag an. -6. HARTE PRÄMISSE: Dieser Stack ist 100 % lokal (Ablösungs-Zielbild — das Cloud-Abo - endet genau deswegen). Empfiehl NIEMALS Cloud-API-Integrationen als Modell-Ersatz; - ein Modell, das nicht in 122 GB Unified passt, ist schlicht KEIN Kandidat. diff --git a/deploy/trend-radar-feed.sh b/deploy/trend-radar-feed.sh deleted file mode 100644 index 2a95a65..0000000 --- a/deploy/trend-radar-feed.sh +++ /dev/null @@ -1,485 +0,0 @@ -#!/usr/bin/env bash -# Trend-Radar (wöchentlich Sa 05:15, 17.07.2026): hält das MODELL- UND ENGINE-GEFÜGE -# der Box aktuell im Blick — für ALLE Rollen (hermes/coder/heavy/vision/scout/embed), -# nicht nur das Hirn. Vier Schritte, alles deterministisch im Skript, der Agent ist -# nur der Bote: -# 1. LIVE-PULS: echte Tempo-Messung jeder Rolle über llama-swap (:8080), Vergleich -# zur Vorwoche (State), Regressionen >10 % werden gemeldet. -# 2. ENGINE-A/B: gibt es einen neueren llama.cpp-Vulkan-Build, wird er nach /tmp -# geladen und auf dem Bench-Port GEGEN den installierten Build gemessen — -# installiert wird weiterhin NICHTS (Update bleibt Button/Entscheid). -# 3. WATCH-LISTE: mechanisch prüfbare Bedingungen (Issue zu? neuer ROCm-Release? -# Community-Grid-Zahlen) aus deploy/trend-radar-watchlist.json. -# 4. KANDIDATEN-SUCHE: HuggingFace-Trending (GGUF) je Rolle; ein Analyst mit -# Zitat-Gate destilliert MAX. 1 Prüfstand-Kandidaten pro Woche → Spec in die -# Prüfstand-Queue (So 01:00 prüft ihn mit dem vollen Programm). -# Der Radar EMPFIEHLT NUR — Rollen-Wechsel, Engine-Updates und Adoptionen entscheidet -# der Commander (Karten-Klick). Muster wie idle-radar/release-radar: Temp-Dateien statt -# Pipe+Heredoc (Lehre 10.07.), Ein-Schuss-Analyst gegen :8080, stiller Briefkasten. -set -uo pipefail - -MC="$HOME/mission-control-v2" -STATE_DIR="$HOME/.hermes/state" -STATE="$STATE_DIR/trend-radar-state.json" -HIST="$STATE_DIR/trend-radar-puls-history.jsonl" # Langzeit-Verlauf (Lücke 3, 17.07.) -PS_QUEUE="$STATE_DIR/pruefstand/queue" -PS_DONE="$STATE_DIR/pruefstand/done" -WATCHLIST="$MC/deploy/trend-radar-watchlist.json" -ENDPOINT="${RADAR_ENDPOINT:-http://127.0.0.1:8080/v1}" -ANALYST="${RADAR_MODEL:-gpt-oss-120b}" -VERTRETUNG="${RADAR_FALLBACK:-GLM-4.7-Flash}" -BRAIN_GGUF="${BRAIN_GGUF:-/srv/models/Qwen3.6-35B-A3B-MTP-GGUF/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf}" -BENCH_PORT="${BENCH_PORT:-5899}" -VULKAN_DIR=/opt/llamacpp-vulkan - -mkdir -p "$STATE_DIR" "$PS_QUEUE" "$PS_DONE" -[ -f "$STATE" ] || echo '{}' > "$STATE" -TMPD="$(mktemp -d /tmp/trend-radar.XXXXXX)" -trap 'rm -rf "$TMPD"' EXIT - -briefkasten() { # $1=Betreff $2=Text - curl -sf -m 5 -X POST "${MC_ANNOUNCE_URL:-http://127.0.0.1:9001/api/voice/announce}" \ - -H 'Content-Type: application/json' \ - --data "$(python3 - "$1" "$2" <<'PY' -import json, sys -print(json.dumps({"text": sys.argv[2], "subject": sys.argv[1], - "source": "trend-radar", "priority": "silent"})) -PY -)" >/dev/null 2>&1 || true -} - -# ---------- Versionierter Auftrag für den Boten-Agenten ---------- -cat "$MC/deploy/trend-radar-prompt.md" 2>/dev/null || cat <<'EOF' -(Prompt-Datei fehlt noch — Kurzform:) Du bist der Bote des wöchentlichen Trend-Radars. -Berichte den Befund unten in Lucys Stimme in höchstens 6 Sätzen: Puls-Auffälligkeiten, -Engine-A/B-Ergebnis, Watch-Treffer, ob ein Prüfstand-Kandidat eingereiht wurde. -Nichts selbst umsetzen — das Skript hat alles Nötige bereits getan. -EOF -echo -echo "## TREND-RADAR-BEFUND (erhoben am $(date '+%d.%m.%Y %H:%M'))" -echo - -# ===================================================================== -# 1. LIVE-PULS aller Rollen (heavy zuletzt → Analyst findet es noch warm) -# ===================================================================== -echo "### 1. LIVE-PULS (echte Messung über llama-swap, Vergleich zur Vorwoche + Langzeit)" -python3 - "$ENDPOINT" "$STATE" "$TMPD/puls.json" "$HIST" <<'PY' -import json, sys, time, urllib.request - -endpoint, state_pfad, out_pfad = sys.argv[1], sys.argv[2], sys.argv[3] -hist_pfad = sys.argv[4] -ROLLEN = ["hermes", "coder", "vision", "scout", "heavy"] # heavy zuletzt (Analyst-Wärme) - -def chat(model, timeout=420): - body = {"model": model, "max_tokens": 160, "temperature": 0, "messages": [ - {"role": "user", "content": - "Erkläre in drei kurzen Sätzen, was ein Mixture-of-Experts-Modell ist."}]} - req = urllib.request.Request(endpoint.rstrip("/") + "/chat/completions", - data=json.dumps(body).encode(), headers={"Content-Type": "application/json"}) - with urllib.request.urlopen(req, timeout=timeout) as r: - return json.load(r).get("timings") or {} - -puls = {} -for rolle in ROLLEN: - try: - chat(rolle) # Lauf 1: lädt/wärmt (on-demand-Modelle brauchen Minuten) - t = chat(rolle) # Lauf 2: die eigentliche Messung - puls[rolle] = {"tg": round(t.get("predicted_per_second") or 0, 1), - "pp": round(t.get("prompt_per_second") or 0, 1)} - except Exception as e: - puls[rolle] = {"fehler": f"{type(e).__name__}"} -# embed: Funktions- und Latenz-Probe -try: - t0 = time.time() - req = urllib.request.Request(endpoint.rstrip("/") + "/embeddings", - data=json.dumps({"model": "embed", "input": "Puls-Probe"}).encode(), - headers={"Content-Type": "application/json"}) - with urllib.request.urlopen(req, timeout=60) as r: - json.load(r) - puls["embed"] = {"ms": round((time.time() - t0) * 1000)} -except Exception as e: - puls["embed"] = {"fehler": f"{type(e).__name__}"} - -try: - alt = json.load(open(state_pfad)).get("puls") or {} -except Exception: - alt = {} -for rolle, w in puls.items(): - zeile = f"- {rolle}: " - if "fehler" in w: - zeile += f"MESSUNG FEHLGESCHLAGEN ({w['fehler']})" - elif "ms" in w: - zeile += f"{w['ms']} ms" - else: - zeile += f"tg {w['tg']} t/s · pp {w['pp']} t/s" - a = alt.get(rolle) or {} - if a.get("tg") and w.get("tg"): - d = 100 * w["tg"] / a["tg"] - 100 - zeile += f" · Vorwoche {a['tg']} ({d:+.0f} %)" - if d <= -10: - zeile += " ⚠️ REGRESSION" - print(zeile) - -# Langzeit-Vergleich (~8 Wochen): fängt SCHLEICHENDE Regression, die jede Woche -# einzeln unter der 10-%-Schwelle bleibt (Lücke 3, 17.07.). -eintraege = [] -try: - with open(hist_pfad, encoding="utf-8") as f: - for l in f: - l = l.strip() - if l: - try: - eintraege.append(json.loads(l)) - except Exception: - pass -except FileNotFoundError: - pass -grenze = time.time() - 49 * 86400 -alte = [z for z in eintraege if (z.get("ts") or 0) <= grenze] -ref = alte[-1] if alte else None -if ref: - treffer = [] - for rolle, w in puls.items(): - a = (ref.get("puls") or {}).get(rolle) or {} - if a.get("tg") and w.get("tg"): - d = 100 * w["tg"] / a["tg"] - 100 - if d <= -10: - treffer.append(f"- LANGZEIT {rolle}: tg {w['tg']} vs. {a['tg']} " - f"({ref.get('datum','?')}, Engine b{ref.get('engine','?')}) " - f"= {d:+.0f} % ⚠️ SCHLEICHENDE REGRESSION") - if treffer: - print(f"Langzeit-Vergleich (vs. {ref.get('datum','?')}):") - for t in treffer: - print(t) - else: - print(f"Langzeit-Vergleich vs. {ref.get('datum','?')}: unauffällig.") -json.dump(puls, open(out_pfad, "w")) -PY -PULS_BLOCK="$(cat "$TMPD/puls.json" 2>/dev/null || echo '{}')" -echo - -# ===================================================================== -# 2. ENGINE-A/B (nur wenn ein neuerer Vulkan-Build existiert) -# ===================================================================== -echo "### 2. ENGINE-A/B (neuer llama.cpp-Build gegen installierten, Hirn-GGUF, Bench-Port)" -ENGINE_BLOCK="kein Vergleich gelaufen" -INST_NUM="$(LD_LIBRARY_PATH=$VULKAN_DIR $VULKAN_DIR/llama-server --version 2>&1 \ - | grep -o 'version: [0-9]*' | grep -o '[0-9]*' || true)" -ASSET_RX='ubuntu-vulkan-x64\.tar\.gz$' -REL_JSON="$(curl -sf --max-time 30 'https://api.github.com/repos/ggml-org/llama.cpp/releases?per_page=15' || true)" -NEU_TAG=""; NEU_URL="" -if [ -n "$REL_JSON" ]; then - NEU_URL="$(printf '%s' "$REL_JSON" | jq -r --arg rx "$ASSET_RX" \ - '[.[] | .assets[]? | select(.name|test($rx))][0].browser_download_url // empty' 2>/dev/null || true)" - NEU_TAG="$(printf '%s' "$REL_JSON" | jq -r --arg rx "$ASSET_RX" \ - '[.[] | select(any(.assets[]?; .name|test($rx)))][0].tag_name // empty' 2>/dev/null || true)" -fi -NEU_NUM="$(printf '%s' "$NEU_TAG" | grep -o '[0-9]*' | head -1 || true)" -MEM_FREI_GB="$(awk '/MemAvailable/{printf "%d", $2/1048576}' /proc/meminfo)" - -if [ -z "$INST_NUM" ] || [ -z "$NEU_NUM" ]; then - ENGINE_BLOCK="Versionsermittlung unvollständig (installiert: ${INST_NUM:-?}, GitHub: ${NEU_NUM:-?}) — ehrlich: kein Vergleich." -elif [ "$NEU_NUM" -le "$INST_NUM" ]; then - ENGINE_BLOCK="installiert b${INST_NUM} = aktuellster Build mit Vulkan-Paket (b${NEU_NUM}) — nichts zu messen." -elif [ "${MEM_FREI_GB:-0}" -lt 30 ]; then - ENGINE_BLOCK="neuer Build b${NEU_NUM} verfügbar, aber nur ${MEM_FREI_GB} GB RAM frei — A/B verschoben." -elif [ ! -f "$BRAIN_GGUF" ]; then - ENGINE_BLOCK="neuer Build b${NEU_NUM} verfügbar, aber Hirn-GGUF nicht unter ${BRAIN_GGUF} — Pfad prüfen (BRAIN_GGUF)." -else - mkdir -p "$TMPD/engine" - if curl -fsSL --max-time 600 -o "$TMPD/engine/neu.tgz" "$NEU_URL" \ - && tar xzf "$TMPD/engine/neu.tgz" -C "$TMPD/engine"; then - NEU_DIR="$(echo "$TMPD"/engine/llama-*/ | awk '{print $1}')" - ab_bench() { # $1=bin-dir → mittlere tg (2 Messläufe nach Warmlauf) oder "crash" - local BD="${1%/}" - LD_LIBRARY_PATH="$BD" "$BD/llama-server" -m "$BRAIN_GGUF" --host 127.0.0.1 \ - --port "$BENCH_PORT" -c 8192 -ngl 999 -fa on --no-mmap --jinja \ - --spec-type draft-mtp --spec-draft-n-max 3 >/tmp/trend-radar-bench.log 2>&1 & - local PID=$! - local OK=0 - for i in $(seq 1 120); do - curl -s --max-time 2 "http://127.0.0.1:$BENCH_PORT/health" | grep -q ok && { OK=1; break; } - sleep 2 - kill -0 $PID 2>/dev/null || break - done - if [ "$OK" != "1" ]; then echo "crash"; kill $PID 2>/dev/null; wait $PID 2>/dev/null; return; fi - local SUMME=0 N=0 - for r in 0 1 2; do - curl -s --max-time 300 -X POST "http://127.0.0.1:$BENCH_PORT/completion" \ - -H "Content-Type: application/json" \ - -d '{"prompt":"Erklaere in drei kurzen Saetzen, was ein Mixture-of-Experts-Modell ist.","n_predict":150,"temperature":0}' \ - > "$TMPD/engine/probe.json" 2>/dev/null - [ "$r" = "0" ] && continue - local TG - TG="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("timings",{}).get("predicted_per_second") or 0)' "$TMPD/engine/probe.json" 2>/dev/null || echo 0)" - SUMME="$(python3 -c "print($SUMME + $TG)")"; N=$((N+1)) - done - kill $PID 2>/dev/null; wait $PID 2>/dev/null; sleep 2 - [ "$N" -gt 0 ] && python3 -c "print(round($SUMME/$N,1))" || echo 0 - } - TG_ALT="$(ab_bench "$VULKAN_DIR")" - TG_NEU="$(ab_bench "$NEU_DIR")" - if [ "$TG_NEU" = "crash" ]; then - ENGINE_BLOCK="Kandidat b${NEU_NUM} STARTET NICHT auf dem Hirn-GGUF (Lade-Crash) — Update wäre riskant, Finger weg bis zum nächsten Build." - elif [ "$TG_ALT" = "crash" ] || [ "${TG_ALT%.*}" = "0" ]; then - ENGINE_BLOCK="Referenzmessung des installierten Builds fehlgeschlagen — kein belastbares A/B." - else - DELTA="$(python3 -c "print(round(100*$TG_NEU/$TG_ALT-100,1))" 2>/dev/null || echo '?')" - ENGINE_BLOCK="b${NEU_NUM} (neu) tg ${TG_NEU} t/s vs. b${INST_NUM} (installiert) ${TG_ALT} t/s → ${DELTA} %. Anwendung übernimmt das So-04:30-Auto-Update (Rollback-Fangnetz) bzw. der Cockpit-Knopf — bei klar NEGATIVEM Delta vorher pinnen erwägen." - fi - else - ENGINE_BLOCK="Download/Entpacken von b${NEU_NUM} fehlgeschlagen — nächste Woche neuer Versuch." - fi -fi -echo "$ENGINE_BLOCK" -echo - -# ===================================================================== -# 3. WATCH-LISTE (mechanische Bedingungen) -# ===================================================================== -echo "### 3. WATCH-LISTE (mechanisch geprüft)" -python3 - "$WATCHLIST" "$STATE" "$TMPD/watch.txt" <<'PY' -import json, re, sys, urllib.request - -def hole(url, timeout=30): - req = urllib.request.Request(url, headers={"User-Agent": "mc2-trend-radar"}) - with urllib.request.urlopen(req, timeout=timeout) as r: - return r.read().decode("utf-8", "replace") - -try: - eintraege = json.load(open(sys.argv[1], encoding="utf-8")).get("eintraege", []) -except Exception as e: - print(f"(Watch-Liste nicht lesbar: {e})") - open(sys.argv[3], "w").write("") - raise SystemExit -try: - state = json.load(open(sys.argv[2])) -except Exception: - state = {} -gesehen = state.get("watch_gesehen") or {} -zeilen = [] -for e in eintraege: - key, typ = e.get("key", "?"), e.get("typ") - try: - if typ == "github_issue": - d = json.loads(hole(f"https://api.github.com/repos/{e['repo']}/issues/{e['nummer']}")) - status = d.get("state", "?") - treffer = " ⚠️ BEDINGUNG ERFÜLLT!" if status == "closed" else "" - zeilen.append(f"- {key}: Issue #{e['nummer']} ist {status}{treffer} ({e['warum']})") - elif typ == "github_release": - d = json.loads(hole(f"https://api.github.com/repos/{e['repo']}/releases?per_page=1")) - tag = (d[0].get("tag_name") if isinstance(d, list) and d else "?") or "?" - neu = " ⚠️ NEU seit letzter Woche!" if tag != gesehen.get(key) else "" - zeilen.append(f"- {key}: neuester Release {tag}{neu} ({e['warum']})") - gesehen[key] = tag - elif typ == "github_release_major": - # PC-Watch (17.07.): nur MAJOR-Sprünge melden — Electron released wöchentlich, - # relevant ist der Chromium-Jahrgang, nicht jeder Patch. - d = json.loads(hole(f"https://api.github.com/repos/{e['repo']}/releases?per_page=1")) - tag = (d[0].get("tag_name") if isinstance(d, list) and d else "?") or "?" - m = re.search(r"(\d+)", tag) - major = m.group(1) if m else "?" - neu = " ⚠️ NEUE MAJOR-VERSION!" if major != gesehen.get(key, major) and major != "?" else "" - zeilen.append(f"- {key}: neuester Release {tag} (Major {major}){neu} ({e['warum']})") - gesehen[key] = major - elif typ == "pypi": - d = json.loads(hole(f"https://pypi.org/pypi/{e['paket']}/json")) - ver = ((d.get("info") or {}).get("version")) or "?" - neu = " ⚠️ NEU seit letzter Woche!" if ver != gesehen.get(key, ver) and ver != "?" else "" - zeilen.append(f"- {key}: PyPI-Version {ver}{neu} ({e['warum']})") - gesehen[key] = ver - elif typ == "url_zeilen": - text = hole(e["url"], timeout=45) - passend = [z.strip() for z in text.splitlines() if e.get("muster", "") in z] - passend = passend[: int(e.get("max_zeilen", 20))] - zeilen.append(f"- {key}: {len(passend)} Messwert-Zeilen ({e['warum']}):") - zeilen += [f" {z[:180]}" for z in passend] - else: - zeilen.append(f"- {key}: unbekannter Typ {typ}") - except Exception as ex: - zeilen.append(f"- {key}: PRÜFUNG AUSGEFALLEN ({type(ex).__name__})") -state["watch_gesehen"] = gesehen -json.dump(state, open(sys.argv[2], "w")) -ausgabe = "\n".join(zeilen) or "(Watch-Liste leer)" -print(ausgabe) -open(sys.argv[3], "w", encoding="utf-8").write(ausgabe) -PY -echo - -# ===================================================================== -# 4. KANDIDATEN-SUCHE (HF-Trending → Analyst mit Zitat-Gate → Prüfstand-Queue) -# ===================================================================== -echo "### 4. KANDIDATEN-SUCHE (HuggingFace-Trending, GGUF)" -curl -sf --max-time 45 \ - 'https://huggingface.co/api/models?filter=gguf&sort=trendingScore&direction=-1&limit=40' \ - -o "$TMPD/hf.json" || echo '[]' > "$TMPD/hf.json" -python3 - "$TMPD/hf.json" "$TMPD/hf.txt" <<'PY' -import json, sys -try: - modelle = json.load(open(sys.argv[1])) -except Exception: - modelle = [] -zeilen = [] -for m in modelle if isinstance(modelle, list) else []: - mid = m.get("modelId") or m.get("id") or "?" - zeilen.append(f"- {mid} · downloads {m.get('downloads', 0)} · likes {m.get('likes', 0)}" - f" · angelegt {(m.get('createdAt') or '')[:10]}") -ausgabe = "\n".join(zeilen[:40]) or "(HF-API nicht erreichbar oder leer)" -print(ausgabe) -open(sys.argv[2], "w", encoding="utf-8").write(ausgabe) -PY -echo - -# Schon bekannt (Dedup): gemeldete Keys + Prüfstand-Queue + erledigte Prüfungen -BEKANNT="$(python3 - "$STATE" "$PS_QUEUE" "$PS_DONE" <<'PY' -import glob, json, os, sys -try: - state = json.load(open(sys.argv[1])) -except Exception: - state = {} -zeilen = [f"- {k}" for k in (state.get("kandidaten_gemeldet") or [])] -for d in (sys.argv[2], sys.argv[3]): - for f in glob.glob(os.path.join(d, "*.json")): - zeilen.append(f"- {os.path.splitext(os.path.basename(f))[0]}") -print("\n".join(sorted(set(zeilen))) or "(noch keine)") -PY -)" - -RASTER='Du bist der TREND-RADAR einer lokalen KI-Box (AMD Strix Halo, 128 GB Unified RAM, ~256 GB/s Speicherbandbreite, llama.cpp/Vulkan). Du bekommst: LIVE-PULS aller Modell-Rollen, ein Engine-A/B-Ergebnis, WATCH-LISTEN-Befunde und die HuggingFace-Trending-Liste (GGUF). ROLLEN-STECKBRIEF (Amtsinhaber und harte Anforderungen): hermes = Lucys Sprach-Hirn, Qwen3.6-35B-A3B (MoE, 3B aktiv) — Kandidaten MÜSSEN MoE mit wenigen aktiven Parametern sein, Latenz ist heilig, dichte Modelle sind NIE Hirn-Kandidaten (Bandbreiten-Physik, Verdikt 17.07.); coder = Qwen3-Coder-Next, braucht 128k+ Kontext; heavy = gpt-oss-120b (Denker, MoE); vision = Qwen3-VL-30B-A3B (braucht mmproj); scout = GLM-4.6V-Flash (klein, Vision+Tools); embed = Qwen3-Embedding-0.6B. Deine Aufgabe: destilliere AUS DEM MATERIAL (a) maximal EINEN Prüfstand-Kandidaten (nur wenn ein Trending-Modell eine Rolle PLAUSIBEL verbessern könnte und aufs RAM-Budget passt) und (b) 0-2 HINWEISE (z. B. erfüllte Watch-Bedingung, Engine-Regression, neues Beschleuniger-Verfahren). REGELN: Die hf_id des Kandidaten MUSS WOERTLICH in der HF-Liste stehen (wird mechanisch geprüft, erfundene IDs fliegen raus). NIE einen Amtsinhaber selbst oder ein Repackaging/eine Quantisierung desselben Modells vorschlagen (gleicher Modellname = KEIN Kandidat; wird mechanisch geblockt). Nichts vorschlagen, was unter SCHON BEKANNT steht. Reine Namens-Hypes ohne erkennbare Rollen-Passung sind KEIN Kandidat. KANDIDAT: 0 ist der Normalfall und völlig ok. Antworte auf DEUTSCH, exakt so: erste Zeile "KANDIDAT: <0|1>". Bei 1 folgen vier Zeilen: "HF_ID: " / "ROLLE: " / "BELEG: " / "WARUM: ". Danach optional: "HINWEISE:" gefolgt von maximal 2 Spiegelstrichen mit je einem Satz + wörtlichem Beleg-Zitat aus dem Material.' - -EVID="$(cat </dev/null || echo '(leer)') - -HF-TRENDING (GGUF, Top 40): -$(cat "$TMPD/hf.txt" 2>/dev/null || echo '(leer)') - -SCHON BEKANNT (nicht erneut vorschlagen): -$BEKANNT -EOF -)" - -judge() { # $1=Modell $2=Timeout $3=max_tokens - local req - req="$(jq -n --arg m "$1" --arg sys "$RASTER" --arg usr "$EVID" --argjson mt "$3" \ - '{model:$m, messages:[{role:"system",content:$sys},{role:"user",content:$usr}], - max_tokens:$mt, temperature:0.2}')" - curl -s -m "$2" "$ENDPOINT/chat/completions" -H 'Content-Type: application/json' \ - --data-binary "$req" | python3 -c ' -import json, sys -try: - d = json.load(sys.stdin) - msg = d["choices"][0]["message"] - print((msg.get("content") or msg.get("reasoning_content") or "").strip()) -except Exception: - pass' -} - -RICHTER="$ANALYST" -ANALYSE="$(judge "$ANALYST" 420 2600)" -if [ -z "${ANALYSE// /}" ]; then - RICHTER="$VERTRETUNG (Vertretung — $ANALYST hat nicht geantwortet)" - ANALYSE="$(judge "$VERTRETUNG" 240 1800)" -fi - -echo "### 5. ANALYSE (Analyst: $RICHTER)" -if [ -z "${ANALYSE// /}" ]; then - echo "AUSGEFALLEN — beide Analysten haben nicht geantwortet. Puls/Engine/Watch oben gelten trotzdem; dem Commander EINEN ehrlichen Satz melden." - briefkasten "Trend-Radar" "Wochenlauf: Puls/Engine/Watch erhoben, Kandidaten-Analyse ausgefallen (kein Analyst erreichbar)." - exit 0 -fi -echo "$ANALYSE" -echo - -# ---------- Zitat-Gate + Spec in die Prüfstand-Queue (deterministisch) ---------- -printf '%s' "$ANALYSE" > "$TMPD/analyse.txt" -printf '%s' "$EVID" > "$TMPD/material.txt" -ERGEBNIS="$(python3 - "$TMPD/analyse.txt" "$TMPD/material.txt" "$STATE" "$PS_QUEUE" <<'PY' -import json, os, re, sys, time, unicodedata - -ana = open(sys.argv[1], encoding="utf-8", errors="replace").read() -evid = open(sys.argv[2], encoding="utf-8", errors="replace").read() -state_pfad, queue = sys.argv[3], sys.argv[4] - -def norm(s): - s = unicodedata.normalize("NFKC", s or "") - s = "".join(ch for ch in s if ch.isalnum() or ch.isspace()) - return " ".join(s.lower().split()) - -def feld(name): - m = re.search(rf"^{name}\s*:\s*(.+)$", ana, re.MULTILINE) - return m.group(1).strip() if m else "" - -anzahl = feld("KANDIDAT") -if not anzahl.startswith("1"): - print("KEIN_KANDIDAT") - raise SystemExit -hf_id = feld("HF_ID").strip("`").strip() -rolle = feld("ROLLE").lower().strip() -beleg = feld("BELEG").strip() -warum = feld("WARUM").strip() -if rolle not in ("hermes", "coder", "heavy", "vision", "scout", "embed"): - print(f"VERWORFEN: unbekannte Rolle {rolle!r}") - raise SystemExit -# Amtsinhaber-Sperre (Testlauf-Befund 17.07.: Radar schlug das eigene Hirn-Repo vor): -# gleicher Modellname = Repackaging, kein Kandidat. -AMTSINHABER = ("qwen3.6-35b-a3b", "qwen3-vl-30b", "gpt-oss-120b", - "qwen3-coder-next", "glm-4.6v-flash", "qwen3-embedding") -if any(t in hf_id.lower() for t in AMTSINHABER): - print(f"VERWORFEN: {hf_id} ist ein Amtsinhaber-Repackaging (mechanische Sperre)") - raise SystemExit -if hf_id not in evid: - print(f"VERWORFEN: HF_ID {hf_id!r} steht nicht wörtlich im Material (Zitat-Gate)") - raise SystemExit -if beleg and norm(beleg) not in norm(evid): - print("VERWORFEN: BELEG nicht wörtlich im Material (Zitat-Gate)") - raise SystemExit -key = re.sub(r"[^a-z0-9-]+", "-", hf_id.lower())[:60].strip("-") -try: - state = json.load(open(state_pfad)) -except Exception: - state = {} -gemeldet = state.get("kandidaten_gemeldet") or [] -if key in gemeldet: - print(f"VERWORFEN: {key} schon früher gemeldet") - raise SystemExit -spec = {"key": key, "rolle": rolle, "hf_id": hf_id, "warum": warum, - "beleg": beleg, "erstellt": time.strftime("%Y-%m-%d %H:%M"), - "quelle": "trend-radar"} -with open(os.path.join(queue, key + ".json"), "w", encoding="utf-8") as f: - json.dump(spec, f, ensure_ascii=False, indent=1) -state["kandidaten_gemeldet"] = gemeldet + [key] -json.dump(state, open(state_pfad, "w")) -print(f"EINGEREIHT: {hf_id} → Rolle {rolle} (Prüfstand prüft in der Nacht So 01:00)") -PY -)" -echo "### 6. PRÜFSTAND-QUEUE" -echo "$ERGEBNIS" - -# ---------- Puls in den State (Vorwoche) + an die Langzeit-Historie anhängen ---------- -python3 - "$STATE" "$TMPD/puls.json" "$HIST" "${INST_NUM:-}" <<'PY' -import json, sys, time -try: - state = json.load(open(sys.argv[1])) -except Exception: - state = {} -try: - puls = json.load(open(sys.argv[2])) -except Exception: - puls = None -if puls: - state["puls"] = puls - with open(sys.argv[3], "a", encoding="utf-8") as f: - f.write(json.dumps({"ts": int(time.time()), - "datum": time.strftime("%Y-%m-%d"), - "engine": sys.argv[4], "puls": puls}, - ensure_ascii=False) + "\n") -json.dump(state, open(sys.argv[1], "w")) -PY - -briefkasten "Trend-Radar" "Wochenlauf fertig. Engine: ${ENGINE_BLOCK} -Queue: ${ERGEBNIS}" diff --git a/deploy/trend-radar-prompt.md b/deploy/trend-radar-prompt.md deleted file mode 100644 index fd9ecf3..0000000 --- a/deploy/trend-radar-prompt.md +++ /dev/null @@ -1,31 +0,0 @@ -# Trend-Radar — Auftrag für den Boten-Agenten - -Du bist der Bote des wöchentlichen Trend-Radars. Unten steht ein automatisch -erhobener BEFUND in sechs Abschnitten: Live-Puls aller Modell-Rollen, Engine-A/B, -Watch-Liste, HuggingFace-Trending, Analysten-Analyse und Prüfstand-Queue. Das -Skript hat alles Nötige BEREITS getan (gemessen, geprüft, ggf. einen Kandidaten -für den nächtlichen Prüfstand eingereiht). - -Deine Aufgabe — NUR berichten, in Lucys Stimme (Anrede „Commander", -Alltagssprache, Fazit zuerst), in höchstens 6 Sätzen: - -1. Puls: nur Auffälligkeiten nennen (⚠️-Zeilen: Regression oder ausgefallene - Messung); wenn alles im Rahmen ist, reicht „Tempo aller Rollen stabil". -2. Engine-A/B: Ergebnis in einem Satz (Prozent-Delta oder warum kein Vergleich - lief). Das ist die FRÜHWARNUNG vor dem So-04:30-Auto-Update: bei Lade-Crash - oder klar negativem Delta dem Commander empfehlen, die Engine vorher zu - pinnen (Wartungs-Drawer / mc2-pins.json) — sonst reicht der Messwert. -3. Watch-Liste: nur Zeilen mit „⚠️" erwähnen — eine erfüllte Bedingung ist die - wichtigste Nachricht des Berichts. -4. Kandidat: wenn einer eingereiht wurde, Modell + Rolle nennen und sagen, dass - der Prüfstand ihn nachts mit dem vollen Programm prüft und das Ergebnis als - Karte kommt; bei „KEIN_KANDIDAT" GENAU EIN kurzer Satz dazu. - -Harte Regeln: -- NICHTS selbst umsetzen: keine Updates, keine Rollen-Wechsel, keine Downloads, - keine Kanban-Aktionen — alles Entscheidende liegt beim Commander bzw. hat das - Skript schon erledigt. -- Keine Zahlen erfinden oder runden, die nicht im Befund stehen; im Zitat-Gate - VERWORFENE Kandidaten nicht als Erfolg verkaufen. -- Die stille Briefkasten-Karte hat das Skript bereits geschrieben — du lieferst - nur die kurze Telegram-Meldung. diff --git a/deploy/voice-service.service b/deploy/voice-service.service deleted file mode 100644 index 180883c..0000000 --- a/deploy/voice-service.service +++ /dev/null @@ -1,23 +0,0 @@ -[Unit] -Description=MC2 Voice Sidecar — lokales STT (faster-whisper) + gestuftes TTS (Piper/Chatterbox) -After=network.target - -[Service] -# Eigenes Python-3.12-venv (~/.voice/venv) — torch/chatterbox/faster-whisper passen nicht ins -# 3.14-Backend-venv (analog mem0-service). Bind 127.0.0.1: nur lokal; MC2 proxyt nach außen. -Type=simple -WorkingDirectory=%h/mission-control-v2/voice_service -Environment=VOICE_PORT=8650 -Environment=VOICE_STT_MODEL=medium -Environment=VOICE_STT_LANG=de -Environment=VOICE_PIPER_DIR=%h/.voice/voices -Environment=VOICE_PIPER_DEFAULT=de_DE-thorsten-medium -Environment=VOICE_CHATTERBOX_DEVICE=cpu -Environment=VOICE_CHATTERBOX_LANG=de -Environment=TOKENIZERS_PARALLELISM=false -ExecStart=%h/.voice/venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8650 -Restart=always -RestartSec=3 - -[Install] -WantedBy=default.target diff --git a/frontend/dist/assets/AgentView-BsfE1obV.js b/frontend/dist/assets/AgentView-ChtY_-hS.js similarity index 89% rename from frontend/dist/assets/AgentView-BsfE1obV.js rename to frontend/dist/assets/AgentView-ChtY_-hS.js index ba9f489..e82cc4f 100644 --- a/frontend/dist/assets/AgentView-BsfE1obV.js +++ b/frontend/dist/assets/AgentView-ChtY_-hS.js @@ -1,6 +1,11 @@ -import{c as A,Y as P,l as B,b as M,u as D,r as z,j as e,Z as T,e as a,$ as g,a0 as b,a1 as W,x as f,a2 as j,W as G,X as I,C as N,g as y,q as i}from"./index-BChEIiQl.js";/** +import{c as v,W as P,l as M,b as B,u as z,r as D,j as e,Y as T,e as a,Z as g,$ as b,x as f,a0 as j,V as W,X as G,C as N,g as y,q as i}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const w=A("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),q=["chat","coding","fast","heavy"];function $(){const{data:r,error:c}=P(),{data:d}=B(),{showAlert:n,dialogElement:v}=M(),o=D(),x=c?String(c):"",[k,l]=z.useState(!1),_=(d==null?void 0:d.models)??[],m=s=>{var t;return((t=s==null?void 0:s.match(/:(\d+)/))==null?void 0:t[1])??""},p=m(r==null?void 0:r.gateway_url)||"8642",u=(r==null?void 0:r.pc_executor_url)??"",S=u.replace(/^https?:\/\//,""),C=m(u)||"7777";async function H(s){try{await y("/api/agent/brain",{method:"POST",body:JSON.stringify({model:s})}),n("Erledigt",`Hermes-Hirn zeigt jetzt auf das Alias '${s}'. Der Gateway-Dienst wurde neu gestartet.`),o.invalidateQueries({queryKey:i.agentStatus}),l(!1)}catch(t){n("Fehler",`Wechsel fehlgeschlagen: ${t.message||t}`)}}async function E(s){try{await y("/api/agent/brain/set",{method:"POST",body:JSON.stringify({model_id:s})}),n("Erledigt","Agent-Hirn gewechselt (warm gehalten). Gateway wurde neugestartet."),o.invalidateQueries({queryKey:i.agentStatus}),o.invalidateQueries({queryKey:i.models}),l(!1)}catch(t){n("Fehler",`Wechsel fehlgeschlagen: ${t.message||t}`)}}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Hermes Agenten-Cockpit"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Hermes ist ein autonomer Agent, der im Hintergrund der Box läuft (Port ",e.jsxs("code",{children:[":",p]}),") und seine eigene UI besitzt."]})]}),(r==null?void 0:r.hermes_ui_url)&&e.jsxs("a",{href:g(r.hermes_ui_url),target:"_blank",rel:"noopener",className:a("flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg transition-all cursor-pointer shadow-md shrink-0 self-start",r.hermes_ui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-primary/10":"border border-border/60 text-muted-foreground bg-background/20"),children:[e.jsx(T,{className:"h-4 w-4"}),e.jsx("span",{children:"Hermes-GUI öffnen"})]})]}),x&&e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["Status nicht lesbar (",x,")."]}),r&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"mc-card p-5",children:[e.jsxs("div",{className:"mb-4 flex items-center gap-2",children:[e.jsx(b,{className:"h-4.5 w-4.5 text-primary"}),e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Agent-Fluss"})]}),e.jsxs("div",{className:"flex flex-col lg:flex-row lg:items-stretch gap-3",children:[e.jsxs("button",{onClick:()=>r.hermes_ui_reachable&&window.open(g(r.hermes_ui_url),"_blank"),title:r.hermes_ui_reachable?"Hermes-GUI öffnen":"Desktop-Gateway offline",className:"lg:w-40 shrink-0 rounded-xl border border-border/60 bg-background/30 p-3 text-left hover:border-primary/40 transition-all cursor-pointer flex flex-col justify-center",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(W,{className:a("h-3.5 w-3.5",r.hermes_ui_reachable?"text-emerald-400":"text-amber-500")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:"Desktop & GUI"}),e.jsx("span",{className:a("ml-auto h-1.5 w-1.5 rounded-full animate-pulse",r.hermes_ui_reachable?"bg-emerald-500":"bg-amber-500")})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground font-mono mt-0.5",children:"Hermes Desktop · Clients"})]}),e.jsx("div",{className:"hidden lg:flex items-center text-muted-foreground text-lg select-none",children:"→"}),e.jsxs("div",{className:"flex-1 flex flex-col gap-2.5",children:[e.jsxs("div",{className:"rounded-xl border border-primary/40 bg-primary/5 px-3.5 py-2.5 flex items-center gap-2",children:[e.jsx(b,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-xs font-semibold text-primary",children:"Agent Gateway"}),e.jsxs("span",{className:"text-[11px] font-mono text-muted-foreground",children:[":",p]}),e.jsxs("span",{className:a("ml-auto inline-flex items-center gap-1.5 text-[10px] font-bold uppercase font-mono px-2 py-0.5 rounded-full border",r.gateway_reachable?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-red-500/10 text-red-400 border-red-500/20"),children:[e.jsx("span",{className:a("h-1.5 w-1.5 rounded-full",r.gateway_reachable?"bg-emerald-500 animate-pulse":"bg-red-500")}),r.gateway_reachable?"online":"offline"]})]}),e.jsxs("div",{className:"grid gap-2.5 sm:grid-cols-3",children:[e.jsxs("button",{onClick:()=>l(!0),className:"rounded-xl border border-border/60 bg-background/30 p-3 text-left hover:border-primary/45 transition-all cursor-pointer",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(f,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Hirn"}),e.jsx("span",{className:"ml-auto text-[9px] text-primary/70 font-bold uppercase",children:"wechseln →"})]}),e.jsx("div",{className:"text-[11px] font-mono font-medium text-foreground truncate mt-1",title:r.brain_model,children:r.brain_model||"chat"})]}),e.jsxs("div",{className:"rounded-xl border border-border/60 bg-background/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(j,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Verdrahtung"})]}),e.jsxs("div",{className:"text-[10px] font-mono mt-1 flex flex-wrap gap-x-2 text-muted-foreground",children:[e.jsxs("span",{children:["Config: ",r.has_config?"✓":"—"]}),e.jsxs("span",{children:["Skills: ",r.has_skills?"✓":"—"]}),e.jsxs("span",{children:["Memory: ",r.has_memories?"✓":"—"]})]})]}),e.jsxs("div",{className:"rounded-xl border border-border/60 bg-background/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"PC"}),e.jsx("span",{className:a("ml-auto h-1.5 w-1.5 rounded-full",r.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")})]}),e.jsxs("div",{className:a("text-[11px] font-mono mt-1",r.pc_executor_reachable?"text-emerald-400":"text-muted-foreground"),children:[":",C," ",r.pc_executor_reachable?"verbunden":"offline"]})]})]})]})]})]}),e.jsxs("div",{className:"mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(w,{className:"h-5 w-5 text-primary"}),e.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"PC Verbindung"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:a("h-2 w-2 rounded-full",r.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:r.pc_executor_reachable?"Erreichbar":"Nicht verbunden"})]})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2 text-xs text-muted-foreground leading-relaxed text-left",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{children:["Der ",e.jsx("strong",{className:"text-foreground",children:"Hermes PC Executor"})," läuft auf ",e.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:S||"deinem Windows-PC"})," und ermöglicht Hermes den direkten Zugriff auf deinen Windows-PC — Shell-Befehle, Screenshots, Tastatureingaben."]}),e.jsxs("p",{children:["Hermes erreicht den PC über den MCP-Server ",e.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"hermes-pc-control"}),", der automatisch beim Gateway-Start verbunden wird."]})]}),e.jsx("div",{className:"space-y-3",children:r.pc_executor_reachable?e.jsxs("div",{className:"p-3.5 bg-emerald-500/5 border border-emerald-500/20 rounded-xl space-y-1",children:[e.jsxs("div",{className:"text-emerald-400 font-semibold text-xs flex items-center gap-1.5",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"PC Executor verbunden"]}),e.jsxs("p",{className:"text-[10px]",children:["Hermes kann jetzt per Telegram oder Terminal Befehle auf TobisNicerPC ausführen. Nutze ",e.jsx("code",{className:"text-foreground",children:"pc_shell"}),", ",e.jsx("code",{className:"text-foreground",children:"pc_screenshot"})," oder ",e.jsx("code",{className:"text-foreground",children:"pc_open"}),"."]})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"text-xs font-bold text-foreground",children:"PC Executor starten"}),e.jsxs("p",{children:["Starte ",e.jsx("code",{className:"text-foreground font-mono",children:"start.bat"})," im Ordner ",e.jsx("code",{className:"text-foreground font-mono",children:"client\\hermes-pc\\"})," auf dem Windows-PC und lasse das Fenster offen."]}),e.jsx("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[9px] text-cyan-300",children:"client\\hermes-pc\\start.bat"})]})})]})]}),!r.gateway_reachable&&e.jsxs("div",{className:"mc-card p-6 space-y-4 text-left",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(G,{className:"h-5 w-5 text-amber-500"}),e.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"Hermes-Agent Diagnostics"})]}),e.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-relaxed",children:[e.jsx("p",{children:"Der Hermes-Dienst ist auf der Box derzeit offline oder kann sich nicht mit dem lokalen llama-swap verbinden."}),e.jsxs("p",{children:["Am schnellsten: In der System-Schublade unter ",e.jsx("strong",{children:"Dienste"})," den Eintrag"," ",e.jsx("strong",{children:"Hermes-Gateway"})," mit einem Klick neu starten (dort gibt es auch die Logs dazu)."]}),e.jsxs("button",{onClick:()=>window.dispatchEvent(new CustomEvent("open-system-drawer",{detail:{tab:"maintenance"}})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-[11px] font-bold uppercase tracking-wide text-primary transition-all hover:bg-primary/20 cursor-pointer",children:[e.jsx(j,{className:"h-3.5 w-3.5"})," Dienste-Übersicht öffnen"]}),e.jsxs("p",{children:["Weitere Einrichtungsdetails (Brain-Konfiguration, MCP-Kopplungen, SSH-Tunneling und Such-Engines) findest du in der Dokumentationsdatei:",e.jsx("code",{className:"ml-1 px-1.5 py-0.5 rounded bg-muted/40 text-foreground border border-border/30",children:"docs/HERMES_SETUP.md"}),"."]})]})]})]}),r&&k&&e.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":"Hermes-Hirn konfigurieren",children:e.jsxs("div",{className:"w-full max-w-md rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[e.jsx(f,{className:"h-4 w-4"}),e.jsx("span",{children:"Hermes-Hirn konfigurieren"})]}),e.jsx("button",{onClick:()=>l(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:e.jsx(I,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Lane / Gateway-Alias"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:q.map(s=>{const t=r.brain_model===s;return e.jsxs("button",{onClick:()=>H(s),className:a("px-3 py-1.5 rounded-lg text-xs font-mono font-semibold border transition-all cursor-pointer flex items-center gap-1.5",t?"border-primary/40 bg-primary/10 text-primary":"border-border/30 bg-background/20 text-foreground hover:bg-accent"),children:[s,t&&e.jsx(N,{className:"h-3.5 w-3.5"})]},s)})}),e.jsxs("p",{className:"text-[10px] text-muted-foreground/70",children:["Schlank & flexibel: das Hirn folgt dem Lane-Routing (z.B. ",e.jsx("code",{className:"text-primary",children:"chat"})," = fast↔heavy)."]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Installiertes Modell (warm gehalten)"}),e.jsx("div",{className:"space-y-1.5 max-h-56 overflow-y-auto pr-1",children:_.map(s=>{var h;const t=s.role==="hermes";return e.jsxs("button",{onClick:()=>!t&&E(s.name),disabled:t||s.incomplete,className:a("w-full text-left px-3 py-2.5 rounded-lg text-xs flex items-center justify-between font-mono border transition-all",t?"border-indigo-500/40 bg-indigo-500/10 text-indigo-300":s.incomplete?"border-border/20 bg-background/10 text-muted-foreground/50 cursor-not-allowed":"border-border/30 bg-background/20 text-foreground hover:bg-accent cursor-pointer"),children:[e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:(h=s.name.split("/").pop())==null?void 0:h.replace(/\.gguf$/i,"")}),e.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[s.capabilities.params_b?`${s.capabilities.params_b}B`:"?"," · ",s.capabilities.tools!=="no"?"Tools ✓":"ohne Tools",s.role&&` · Rolle: ${s.role}`]})]}),t?e.jsxs("span",{className:"text-[9px] font-bold uppercase text-indigo-300 shrink-0 flex items-center gap-1",children:[e.jsx(N,{className:"h-3.5 w-3.5"})," Aktiv"]}):e.jsx("span",{className:"text-[9px] font-bold uppercase text-primary/70 shrink-0",children:"Warm setzen →"})]},s.name)})})]}),e.jsxs("div",{className:"text-[10px] text-amber-400/80 flex items-start gap-1.5 border-t border-border/20 pt-2.5",children:[e.jsx("span",{children:"💡"}),e.jsxs("span",{children:["Für einen ",e.jsx("strong",{children:"Agenten"}),' sind Hermes-Modelle (natives Tool-Calling) meist die robustere Wahl. Neues Modell? Erst über „Modell-Manager → Modelle finden" laden.']})]})]})}),v]})}export{$ as AgentView}; + */const I=v("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const w=v("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]),q=["chat","coding","fast","heavy"];function U(){const{data:r,error:c}=P(),{data:d}=M(),{showAlert:n,dialogElement:k}=B(),o=z(),x=c?String(c):"",[_,l]=D.useState(!1),S=(d==null?void 0:d.models)??[],m=s=>{var t;return((t=s==null?void 0:s.match(/:(\d+)/))==null?void 0:t[1])??""},p=m(r==null?void 0:r.gateway_url)||"8642",u=(r==null?void 0:r.pc_executor_url)??"",C=u.replace(/^https?:\/\//,""),H=m(u)||"7777";async function E(s){try{await y("/api/agent/brain",{method:"POST",body:JSON.stringify({model:s})}),n("Erledigt",`Hermes-Hirn zeigt jetzt auf das Alias '${s}'. Der Gateway-Dienst wurde neu gestartet.`),o.invalidateQueries({queryKey:i.agentStatus}),l(!1)}catch(t){n("Fehler",`Wechsel fehlgeschlagen: ${t.message||t}`)}}async function A(s){try{await y("/api/agent/brain/set",{method:"POST",body:JSON.stringify({model_id:s})}),n("Erledigt","Agent-Hirn gewechselt (warm gehalten). Gateway wurde neugestartet."),o.invalidateQueries({queryKey:i.agentStatus}),o.invalidateQueries({queryKey:i.models}),l(!1)}catch(t){n("Fehler",`Wechsel fehlgeschlagen: ${t.message||t}`)}}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Hermes Agenten-Cockpit"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Hermes ist ein autonomer Agent, der im Hintergrund der Box läuft (Port ",e.jsxs("code",{children:[":",p]}),") und seine eigene UI besitzt."]})]}),(r==null?void 0:r.hermes_ui_url)&&e.jsxs("a",{href:g(r.hermes_ui_url),target:"_blank",rel:"noopener",className:a("flex h-9 px-4 items-center gap-1.5 text-xs font-semibold rounded-lg transition-all cursor-pointer shadow-md shrink-0 self-start",r.hermes_ui_reachable?"bg-primary text-primary-foreground hover:opacity-90 shadow-primary/10":"border border-border/60 text-muted-foreground bg-background/20"),children:[e.jsx(T,{className:"h-4 w-4"}),e.jsx("span",{children:"Hermes-GUI öffnen"})]})]}),x&&e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400 font-mono",children:["Status nicht lesbar (",x,")."]}),r&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"mc-card p-5",children:[e.jsxs("div",{className:"mb-4 flex items-center gap-2",children:[e.jsx(b,{className:"h-4.5 w-4.5 text-primary"}),e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Agent-Fluss"})]}),e.jsxs("div",{className:"flex flex-col lg:flex-row lg:items-stretch gap-3",children:[e.jsxs("button",{onClick:()=>r.hermes_ui_reachable&&window.open(g(r.hermes_ui_url),"_blank"),title:r.hermes_ui_reachable?"Hermes-GUI öffnen":"Desktop-Gateway offline",className:"lg:w-40 shrink-0 rounded-xl border border-border/60 bg-background/30 p-3 text-left hover:border-primary/40 transition-all cursor-pointer flex flex-col justify-center",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(I,{className:a("h-3.5 w-3.5",r.hermes_ui_reachable?"text-emerald-400":"text-amber-500")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:"Desktop & GUI"}),e.jsx("span",{className:a("ml-auto h-1.5 w-1.5 rounded-full animate-pulse",r.hermes_ui_reachable?"bg-emerald-500":"bg-amber-500")})]}),e.jsx("span",{className:"text-[10px] text-muted-foreground font-mono mt-0.5",children:"Hermes Desktop · Clients"})]}),e.jsx("div",{className:"hidden lg:flex items-center text-muted-foreground text-lg select-none",children:"→"}),e.jsxs("div",{className:"flex-1 flex flex-col gap-2.5",children:[e.jsxs("div",{className:"rounded-xl border border-primary/40 bg-primary/5 px-3.5 py-2.5 flex items-center gap-2",children:[e.jsx(b,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-xs font-semibold text-primary",children:"Agent Gateway"}),e.jsxs("span",{className:"text-[11px] font-mono text-muted-foreground",children:[":",p]}),e.jsxs("span",{className:a("ml-auto inline-flex items-center gap-1.5 text-[10px] font-bold uppercase font-mono px-2 py-0.5 rounded-full border",r.gateway_reachable?"bg-emerald-500/10 text-emerald-400 border-emerald-500/20":"bg-red-500/10 text-red-400 border-red-500/20"),children:[e.jsx("span",{className:a("h-1.5 w-1.5 rounded-full",r.gateway_reachable?"bg-emerald-500 animate-pulse":"bg-red-500")}),r.gateway_reachable?"online":"offline"]})]}),e.jsxs("div",{className:"grid gap-2.5 sm:grid-cols-3",children:[e.jsxs("button",{onClick:()=>l(!0),className:"rounded-xl border border-border/60 bg-background/30 p-3 text-left hover:border-primary/45 transition-all cursor-pointer",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(f,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Hirn"}),e.jsx("span",{className:"ml-auto text-[9px] text-primary/70 font-bold uppercase",children:"wechseln →"})]}),e.jsx("div",{className:"text-[11px] font-mono font-medium text-foreground truncate mt-1",title:r.brain_model,children:r.brain_model||"chat"})]}),e.jsxs("div",{className:"rounded-xl border border-border/60 bg-background/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(j,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"Verdrahtung"})]}),e.jsxs("div",{className:"text-[10px] font-mono mt-1 flex flex-wrap gap-x-2 text-muted-foreground",children:[e.jsxs("span",{children:["Config: ",r.has_config?"✓":"—"]}),e.jsxs("span",{children:["Skills: ",r.has_skills?"✓":"—"]}),e.jsxs("span",{children:["Memory: ",r.has_memories?"✓":"—"]})]})]}),e.jsxs("div",{className:"rounded-xl border border-border/60 bg-background/30 p-3",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-muted-foreground",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-primary"}),e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider",children:"PC"}),e.jsx("span",{className:a("ml-auto h-1.5 w-1.5 rounded-full",r.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")})]}),e.jsxs("div",{className:a("text-[11px] font-mono mt-1",r.pc_executor_reachable?"text-emerald-400":"text-muted-foreground"),children:[":",H," ",r.pc_executor_reachable?"verbunden":"offline"]})]})]})]})]})]}),e.jsxs("div",{className:"mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(w,{className:"h-5 w-5 text-primary"}),e.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"PC Verbindung"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:a("h-2 w-2 rounded-full",r.pc_executor_reachable?"bg-emerald-500 animate-pulse":"bg-amber-500")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:r.pc_executor_reachable?"Erreichbar":"Nicht verbunden"})]})]}),e.jsxs("div",{className:"grid gap-6 md:grid-cols-2 text-xs text-muted-foreground leading-relaxed text-left",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("p",{children:["Der ",e.jsx("strong",{className:"text-foreground",children:"Hermes PC Executor"})," läuft auf ",e.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:C||"deinem Windows-PC"})," und ermöglicht Hermes den direkten Zugriff auf deinen Windows-PC — Shell-Befehle, Screenshots, Tastatureingaben."]}),e.jsxs("p",{children:["Hermes erreicht den PC über den MCP-Server ",e.jsx("code",{className:"text-foreground font-mono px-1 py-0.5 rounded bg-muted/40 border border-border/30",children:"hermes-pc-control"}),", der automatisch beim Gateway-Start verbunden wird."]})]}),e.jsx("div",{className:"space-y-3",children:r.pc_executor_reachable?e.jsxs("div",{className:"p-3.5 bg-emerald-500/5 border border-emerald-500/20 rounded-xl space-y-1",children:[e.jsxs("div",{className:"text-emerald-400 font-semibold text-xs flex items-center gap-1.5",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"PC Executor verbunden"]}),e.jsxs("p",{className:"text-[10px]",children:["Hermes kann jetzt per Telegram oder Terminal Befehle auf TobisNicerPC ausführen. Nutze ",e.jsx("code",{className:"text-foreground",children:"pc_shell"}),", ",e.jsx("code",{className:"text-foreground",children:"pc_screenshot"})," oder ",e.jsx("code",{className:"text-foreground",children:"pc_open"}),"."]})]}):e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"text-xs font-bold text-foreground",children:"PC Executor starten"}),e.jsxs("p",{children:["Starte ",e.jsx("code",{className:"text-foreground font-mono",children:"start.bat"})," im Ordner ",e.jsx("code",{className:"text-foreground font-mono",children:"client\\hermes-pc\\"})," auf dem Windows-PC und lasse das Fenster offen."]}),e.jsx("div",{className:"p-3 bg-background/25 rounded-xl border border-border/30 font-mono text-[9px] text-cyan-300",children:"client\\hermes-pc\\start.bat"})]})})]})]}),!r.gateway_reachable&&e.jsxs("div",{className:"mc-card p-6 space-y-4 text-left",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(W,{className:"h-5 w-5 text-amber-500"}),e.jsx("h3",{className:"text-sm font-bold uppercase tracking-wider text-foreground",children:"Hermes-Agent Diagnostics"})]}),e.jsxs("div",{className:"text-xs text-muted-foreground space-y-3 leading-relaxed",children:[e.jsx("p",{children:"Der Hermes-Dienst ist auf der Box derzeit offline oder kann sich nicht mit dem lokalen llama-swap verbinden."}),e.jsxs("p",{children:["Am schnellsten: In der System-Schublade unter ",e.jsx("strong",{children:"Dienste"})," den Eintrag"," ",e.jsx("strong",{children:"Hermes-Gateway"})," mit einem Klick neu starten (dort gibt es auch die Logs dazu)."]}),e.jsxs("button",{onClick:()=>window.dispatchEvent(new CustomEvent("open-system-drawer",{detail:{tab:"maintenance"}})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-[11px] font-bold uppercase tracking-wide text-primary transition-all hover:bg-primary/20 cursor-pointer",children:[e.jsx(j,{className:"h-3.5 w-3.5"})," Dienste-Übersicht öffnen"]}),e.jsxs("p",{children:["Weitere Einrichtungsdetails (Brain-Konfiguration, MCP-Kopplungen, SSH-Tunneling und Such-Engines) findest du in der Dokumentationsdatei:",e.jsx("code",{className:"ml-1 px-1.5 py-0.5 rounded bg-muted/40 text-foreground border border-border/30",children:"docs/HERMES_SETUP.md"}),"."]})]})]})]}),r&&_&&e.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":"Hermes-Hirn konfigurieren",children:e.jsxs("div",{className:"w-full max-w-md rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-1.5",children:[e.jsx(f,{className:"h-4 w-4"}),e.jsx("span",{children:"Hermes-Hirn konfigurieren"})]}),e.jsx("button",{onClick:()=>l(!1),className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:e.jsx(G,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Lane / Gateway-Alias"}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:q.map(s=>{const t=r.brain_model===s;return e.jsxs("button",{onClick:()=>E(s),className:a("px-3 py-1.5 rounded-lg text-xs font-mono font-semibold border transition-all cursor-pointer flex items-center gap-1.5",t?"border-primary/40 bg-primary/10 text-primary":"border-border/30 bg-background/20 text-foreground hover:bg-accent"),children:[s,t&&e.jsx(N,{className:"h-3.5 w-3.5"})]},s)})}),e.jsxs("p",{className:"text-[10px] text-muted-foreground/70",children:["Schlank & flexibel: das Hirn folgt dem Lane-Routing (z.B. ",e.jsx("code",{className:"text-primary",children:"chat"})," = fast↔heavy)."]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Installiertes Modell (warm gehalten)"}),e.jsx("div",{className:"space-y-1.5 max-h-56 overflow-y-auto pr-1",children:S.map(s=>{var h;const t=s.role==="hermes";return e.jsxs("button",{onClick:()=>!t&&A(s.name),disabled:t||s.incomplete,className:a("w-full text-left px-3 py-2.5 rounded-lg text-xs flex items-center justify-between font-mono border transition-all",t?"border-indigo-500/40 bg-indigo-500/10 text-indigo-300":s.incomplete?"border-border/20 bg-background/10 text-muted-foreground/50 cursor-not-allowed":"border-border/30 bg-background/20 text-foreground hover:bg-accent cursor-pointer"),children:[e.jsxs("div",{className:"flex flex-col min-w-0",children:[e.jsx("span",{className:"font-semibold truncate max-w-[280px]",children:(h=s.name.split("/").pop())==null?void 0:h.replace(/\.gguf$/i,"")}),e.jsxs("span",{className:"text-[9px] text-muted-foreground mt-0.5",children:[s.capabilities.params_b?`${s.capabilities.params_b}B`:"?"," · ",s.capabilities.tools!=="no"?"Tools ✓":"ohne Tools",s.role&&` · Rolle: ${s.role}`]})]}),t?e.jsxs("span",{className:"text-[9px] font-bold uppercase text-indigo-300 shrink-0 flex items-center gap-1",children:[e.jsx(N,{className:"h-3.5 w-3.5"})," Aktiv"]}):e.jsx("span",{className:"text-[9px] font-bold uppercase text-primary/70 shrink-0",children:"Warm setzen →"})]},s.name)})})]}),e.jsxs("div",{className:"text-[10px] text-amber-400/80 flex items-start gap-1.5 border-t border-border/20 pt-2.5",children:[e.jsx("span",{children:"💡"}),e.jsxs("span",{children:["Für einen ",e.jsx("strong",{children:"Agenten"}),' sind Hermes-Modelle (natives Tool-Calling) meist die robustere Wahl. Neues Modell? Erst über „Modell-Manager → Modelle finden" laden.']})]})]})}),k]})}export{U as AgentView}; diff --git a/frontend/dist/assets/AuftragsbuchView-DPitmBxF.js b/frontend/dist/assets/AuftragsbuchView-D_PNalAe.js similarity index 91% rename from frontend/dist/assets/AuftragsbuchView-DPitmBxF.js rename to frontend/dist/assets/AuftragsbuchView-D_PNalAe.js index 0e52f05..ca58b1f 100644 --- a/frontend/dist/assets/AuftragsbuchView-DPitmBxF.js +++ b/frontend/dist/assets/AuftragsbuchView-D_PNalAe.js @@ -1,15 +1,15 @@ -import{c as W,ab as H,ac as T,u as F,b as G,r as b,j as e,a3 as O,e as y,L as p,C as z,a9 as P,K as q,U as I,V,ad as K,X as E,T as C,D as M,M as R,g as $,ae as _,q as U}from"./index-BChEIiQl.js";import{S,H as Q}from"./SectionLabel-gNRlDlbe.js";/** +import{c as W,a9 as H,aa as T,u as F,b as G,r as b,j as e,a1 as O,e as y,L as g,C as z,a7 as P,J as q,R as I,U as K,ab as R,X as E,T as C,K as V,g as $,ac as _,q as U}from"./index-Cejiqiju.js";import{S,H as Q}from"./SectionLabel-PIsOl-2s.js";import{C as M}from"./chevron-down-DNDogRoC.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Z=W("FileDiff",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]]);/** + */const J=W("FileDiff",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M9 10h6",key:"9gxzsh"}],["path",{d:"M12 13V7",key:"h0r20n"}],["path",{d:"M9 17h6",key:"r8uit2"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const J=W("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),X={wartung:"Werkstatt",orchestrator:"Orchestrator",doku:"Doku",feature:"Feature"},Y={laeuft:{label:"wird eingespielt …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},rollback:{label:"Rollback läuft …",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10",spin:!0},eingespielt:{label:"eingespielt ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"},fehlgeschlagen:{label:"fehlgeschlagen",cls:"text-red-300 border-red-500/40 bg-red-500/10"},zurueckgerollt:{label:"zurückgerollt",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},kritisch:{label:"KRITISCH — Box prüfen",cls:"text-red-200 border-red-500/60 bg-red-500/20"},abgelehnt:{label:"abgelehnt",cls:"text-muted-foreground border-border/60 bg-background/30"}};function ne(){const{data:t,isLoading:r,refetch:n,isFetching:m}=H(),{data:l}=T(),f=F(),{showAlert:h,showConfirm:j,dialogElement:D}=G(),[N,A]=b.useState({}),w=()=>f.invalidateQueries({queryKey:U.auftragsbuch});async function k(a,i,B,v){A(d=>({...d,[a]:!0}));try{await $(i,{method:"POST",body:JSON.stringify(B)}),v&&h("Erledigt",v),w()}catch(d){h("Das hat nicht geklappt",String((d==null?void 0:d.message)||d))}finally{A(d=>({...d,[a]:!1}))}}const g=(t==null?void 0:t.items)??[],o=(t==null?void 0:t.skill_kandidaten)??[],x=l!=null&&l.available?l.items.filter(a=>a.status==="blocked").length:0,u=g.length===0&&o.length===0;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Auftragsbuch"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was die Box gebaut oder sich ausgedacht hat — du entscheidest. Annehmen spielt es mit Fangnetz ein (Health-Check, automatischer Rollback)."})]}),e.jsxs("button",{onClick:()=>n(),className:"flex h-9 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-3 text-xs font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer",children:[e.jsx(O,{className:y("h-3.5 w-3.5",m&&"animate-spin")})," Aktualisieren"]})]}),t&&!t.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Das Auftragsbuch lebt auf der Box (liest die Gitea-Branches dort). Im lokalen Dev-Modus ist hier nichts zu sehen."}),r&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(p,{className:"h-4 w-4 animate-spin"})," Vorschläge werden geladen …"]}),(t==null?void 0:t.available)&&u&&e.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-5",children:[e.jsx(z,{className:"h-5 w-5 shrink-0 text-emerald-400"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu entscheiden"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Keine offenen Vorschläge. Werkstatt, Orchestrator und Traum melden sich hier, sobald es etwas gibt."})]})]}),x>0&&e.jsxs("button",{onClick:()=>window.dispatchEvent(new CustomEvent("mc-navigate",{detail:{view:"ideen"}})),className:"flex w-full items-center gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:border-red-500/50 cursor-pointer",children:[e.jsx(P,{className:"h-5 w-5 shrink-0 text-red-300"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:x===1?"Eine Idee hängt und braucht dich":`${x} Ideen hängen und brauchen dich`}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Hier ist nichts zu tun — aber drüben in den Ideen wartet eine Frage auf deine Antwort."})]}),e.jsx(q,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),g.length>0&&e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:J,children:["Patch-Vorschläge (",g.length,")"]}),g.map(a=>e.jsx(te,{item:a,busy:N,onAct:k,showConfirm:j},`${a.repo??"mc2"}:${a.branch}`))]}),o.length>0&&e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:I,children:["Skill-Kandidaten aus dem Traum (",o.length,")"]}),o.map(a=>e.jsx(se,{k:a,busy:N,onAct:k,showConfirm:j},a.file))]}),D]})}function ee({item:t}){const r=t.status;if(!r)return null;const n=Y[r.state];return n?e.jsxs("span",{className:y("flex items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",n.cls),title:r.detail,children:[n.spin&&e.jsx(p,{className:"h-3 w-3 animate-spin"}),n.label]}):null}function te({item:t,busy:r,onAct:n,showConfirm:m}){var v,d,L;const[l,f]=b.useState(!1),[h,j]=b.useState(null),[D,N]=b.useState(!1),[A,w]=b.useState(!1),[k,g]=b.useState(""),o=((v=t.status)==null?void 0:v.state)==="laeuft"||((d=t.status)==null?void 0:d.state)==="rollback",x=((L=t.status)==null?void 0:L.state)==="eingespielt",u=t.repo??"mc2",a=u==="lucy",i=`${u}:${t.branch}`;async function B(){const s=!l;if(f(s),s&&h===null){N(!0);try{const c=await $(`/api/auftragsbuch/diff?branch=${encodeURIComponent(t.branch)}&repo=${u}`);j(c.diff+(c.truncated?` -… (gekürzt)`:""))}catch(c){j(`(Diff nicht ladbar: ${(c==null?void 0:c.message)||c})`)}finally{N(!1)}}}return e.jsxs("div",{className:"mc-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"rounded-md border border-primary/30 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-primary",children:X[t.kind]??t.kind}),a&&e.jsx("span",{className:"rounded-md border border-pink-500/40 bg-pink-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-pink-300",title:"Vorschlag fürs Lucy-Repo — Annehmen baut die App am PC neu und startet sie neu, wenn sie läuft.",children:"Lucy"}),e.jsx("span",{className:"font-mono text-[11px] text-muted-foreground truncate",title:t.branch,children:t.branch}),e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(V,{className:"h-3 w-3"}),K(t.ts)]}),e.jsx(ee,{item:t})]}),e.jsx("p",{className:"mt-1.5 text-sm font-semibold text-foreground",children:t.subject||"(ohne Titel)"}),t.body&&e.jsx("p",{className:"mt-1 whitespace-pre-wrap text-xs leading-relaxed text-muted-foreground line-clamp-6",children:t.body}),t.empfehlung&&e.jsxs("p",{className:y("mt-1.5 flex items-start gap-1.5 rounded-lg border px-2 py-1 text-[11px]",t.empfehlung.empfehlung==="ANNEHMEN"&&"border-emerald-500/30 bg-emerald-500/5 text-emerald-300",t.empfehlung.empfehlung==="ABLEHNEN"&&"border-red-500/30 bg-red-500/5 text-red-300",t.empfehlung.empfehlung==="UNKLAR"&&"border-amber-500/30 bg-amber-500/5 text-amber-300"),title:`Nächtliches Kurz-Gutachten (${t.empfehlung.richter}) — eine Meinung, kein Muss. Die Entscheidung bleibt bei dir.`,children:[e.jsx(I,{className:"mt-0.5 h-3 w-3 shrink-0"}),e.jsxs("span",{children:[e.jsxs("b",{children:["Empfehlung: ",t.empfehlung.empfehlung==="ANNEHMEN"?"Annehmen":t.empfehlung.empfehlung==="ABLEHNEN"?"Ablehnen":"Unklar","."]})," ",t.empfehlung.satz]})]})]}),!o&&!x&&e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[!t.verwaist&&e.jsxs("button",{disabled:!!r[i],onClick:()=>m("Vorschlag annehmen?",a?`'${t.branch}' wird im Lucy-Repo auf main gemergt, dann baut dein PC die App neu (dist) und startet Lucy neu, falls sie gerade läuft. Der PC muss dafür an sein. Schlägt Build oder Start fehl, dreht die Box den Merge automatisch zurück — die laufende Lucy bleibt die alte.`:`'${t.branch}' wird auf main gemergt und live eingespielt. Die Zentrale startet dabei kurz neu. Geht der Health-Check danach rot, rollt die Box automatisch zurück.${t.frontend_ohne_build?` + */const Z=W("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]),X={wartung:"Werkstatt",orchestrator:"Orchestrator",doku:"Doku",feature:"Feature"},Y={laeuft:{label:"wird eingespielt …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},rollback:{label:"Rollback läuft …",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10",spin:!0},eingespielt:{label:"eingespielt ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"},fehlgeschlagen:{label:"fehlgeschlagen",cls:"text-red-300 border-red-500/40 bg-red-500/10"},zurueckgerollt:{label:"zurückgerollt",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},kritisch:{label:"KRITISCH — Box prüfen",cls:"text-red-200 border-red-500/60 bg-red-500/20"},abgelehnt:{label:"abgelehnt",cls:"text-muted-foreground border-border/60 bg-background/30"}};function le(){const{data:t,isLoading:r,refetch:n,isFetching:m}=H(),{data:l}=T(),f=F(),{showAlert:h,showConfirm:j,dialogElement:D}=G(),[N,A]=b.useState({}),w=()=>f.invalidateQueries({queryKey:U.auftragsbuch});async function k(a,i,B,v){A(d=>({...d,[a]:!0}));try{await $(i,{method:"POST",body:JSON.stringify(B)}),v&&h("Erledigt",v),w()}catch(d){h("Das hat nicht geklappt",String((d==null?void 0:d.message)||d))}finally{A(d=>({...d,[a]:!1}))}}const p=(t==null?void 0:t.items)??[],o=(t==null?void 0:t.skill_kandidaten)??[],x=l!=null&&l.available?l.items.filter(a=>a.status==="blocked").length:0,u=p.length===0&&o.length===0;return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Auftragsbuch"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was die Box gebaut oder sich ausgedacht hat — du entscheidest. Annehmen spielt es mit Fangnetz ein (Health-Check, automatischer Rollback)."})]}),e.jsxs("button",{onClick:()=>n(),className:"flex h-9 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-3 text-xs font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer",children:[e.jsx(O,{className:y("h-3.5 w-3.5",m&&"animate-spin")})," Aktualisieren"]})]}),t&&!t.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Das Auftragsbuch lebt auf der Box (liest die Gitea-Branches dort). Im lokalen Dev-Modus ist hier nichts zu sehen."}),r&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(g,{className:"h-4 w-4 animate-spin"})," Vorschläge werden geladen …"]}),(t==null?void 0:t.available)&&u&&e.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-5",children:[e.jsx(z,{className:"h-5 w-5 shrink-0 text-emerald-400"}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu entscheiden"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Keine offenen Vorschläge. Werkstatt, Orchestrator und Traum melden sich hier, sobald es etwas gibt."})]})]}),x>0&&e.jsxs("button",{onClick:()=>window.dispatchEvent(new CustomEvent("mc-navigate",{detail:{view:"ideen"}})),className:"flex w-full items-center gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:border-red-500/50 cursor-pointer",children:[e.jsx(P,{className:"h-5 w-5 shrink-0 text-red-300"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"text-sm font-semibold text-foreground",children:x===1?"Eine Idee hängt und braucht dich":`${x} Ideen hängen und brauchen dich`}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Hier ist nichts zu tun — aber drüben in den Ideen wartet eine Frage auf deine Antwort."})]}),e.jsx(q,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),p.length>0&&e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:Z,children:["Patch-Vorschläge (",p.length,")"]}),p.map(a=>e.jsx(te,{item:a,busy:N,onAct:k,showConfirm:j},`${a.repo??"mc2"}:${a.branch}`))]}),o.length>0&&e.jsxs("section",{className:"space-y-3",children:[e.jsxs(S,{icon:I,children:["Skill-Kandidaten aus dem Traum (",o.length,")"]}),o.map(a=>e.jsx(se,{k:a,busy:N,onAct:k,showConfirm:j},a.file))]}),D]})}function ee({item:t}){const r=t.status;if(!r)return null;const n=Y[r.state];return n?e.jsxs("span",{className:y("flex items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",n.cls),title:r.detail,children:[n.spin&&e.jsx(g,{className:"h-3 w-3 animate-spin"}),n.label]}):null}function te({item:t,busy:r,onAct:n,showConfirm:m}){var v,d,L;const[l,f]=b.useState(!1),[h,j]=b.useState(null),[D,N]=b.useState(!1),[A,w]=b.useState(!1),[k,p]=b.useState(""),o=((v=t.status)==null?void 0:v.state)==="laeuft"||((d=t.status)==null?void 0:d.state)==="rollback",x=((L=t.status)==null?void 0:L.state)==="eingespielt",u=t.repo??"mc2",a=u==="lucy",i=`${u}:${t.branch}`;async function B(){const s=!l;if(f(s),s&&h===null){N(!0);try{const c=await $(`/api/auftragsbuch/diff?branch=${encodeURIComponent(t.branch)}&repo=${u}`);j(c.diff+(c.truncated?` +… (gekürzt)`:""))}catch(c){j(`(Diff nicht ladbar: ${(c==null?void 0:c.message)||c})`)}finally{N(!1)}}}return e.jsxs("div",{className:"mc-card p-4 space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"rounded-md border border-primary/30 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-primary",children:X[t.kind]??t.kind}),a&&e.jsx("span",{className:"rounded-md border border-pink-500/40 bg-pink-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-pink-300",title:"Vorschlag fürs Lucy-Repo — Annehmen baut die App am PC neu und startet sie neu, wenn sie läuft.",children:"Lucy"}),e.jsx("span",{className:"font-mono text-[11px] text-muted-foreground truncate",title:t.branch,children:t.branch}),e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(K,{className:"h-3 w-3"}),R(t.ts)]}),e.jsx(ee,{item:t})]}),e.jsx("p",{className:"mt-1.5 text-sm font-semibold text-foreground",children:t.subject||"(ohne Titel)"}),t.body&&e.jsx("p",{className:"mt-1 whitespace-pre-wrap text-xs leading-relaxed text-muted-foreground line-clamp-6",children:t.body}),t.empfehlung&&e.jsxs("p",{className:y("mt-1.5 flex items-start gap-1.5 rounded-lg border px-2 py-1 text-[11px]",t.empfehlung.empfehlung==="ANNEHMEN"&&"border-emerald-500/30 bg-emerald-500/5 text-emerald-300",t.empfehlung.empfehlung==="ABLEHNEN"&&"border-red-500/30 bg-red-500/5 text-red-300",t.empfehlung.empfehlung==="UNKLAR"&&"border-amber-500/30 bg-amber-500/5 text-amber-300"),title:`Nächtliches Kurz-Gutachten (${t.empfehlung.richter}) — eine Meinung, kein Muss. Die Entscheidung bleibt bei dir.`,children:[e.jsx(I,{className:"mt-0.5 h-3 w-3 shrink-0"}),e.jsxs("span",{children:[e.jsxs("b",{children:["Empfehlung: ",t.empfehlung.empfehlung==="ANNEHMEN"?"Annehmen":t.empfehlung.empfehlung==="ABLEHNEN"?"Ablehnen":"Unklar","."]})," ",t.empfehlung.satz]})]})]}),!o&&!x&&e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[!t.verwaist&&e.jsxs("button",{disabled:!!r[i],onClick:()=>m("Vorschlag annehmen?",a?`'${t.branch}' wird im Lucy-Repo auf main gemergt, dann baut dein PC die App neu (dist) und startet Lucy neu, falls sie gerade läuft. Der PC muss dafür an sein. Schlägt Build oder Start fehl, dreht die Box den Merge automatisch zurück — die laufende Lucy bleibt die alte.`:`'${t.branch}' wird auf main gemergt und live eingespielt. Die Zentrale startet dabei kurz neu. Geht der Health-Check danach rot, rollt die Box automatisch zurück.${t.frontend_ohne_build?` -Achtung: Enthält Frontend-Quelltext ohne gebautes Bundle — die Oberfläche bleibt alt, bis am PC gebaut wird.`:""}`,()=>n(i,"/api/auftragsbuch/annehmen",{branch:t.branch,repo:u})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[r[i]?e.jsx(p,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(z,{className:"h-3.5 w-3.5"})," Annehmen"]}),e.jsxs("button",{disabled:!!r["ab:"+i],onClick:()=>w(s=>!s),className:"flex h-9 items-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300/90 transition-all hover:bg-red-500/15 cursor-pointer disabled:opacity-50",children:[r["ab:"+i]?e.jsx(p,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(E,{className:"h-3.5 w-3.5"})," Ablehnen"]})]})]}),A&&!o&&!x&&e.jsxs("div",{className:"space-y-2 rounded-xl border border-red-500/25 bg-red-500/5 p-3",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Der Branch '",t.branch,"' wird auf Gitea gelöscht (die Arbeit bleibt in der Historie). Sag der Box kurz ",e.jsx("b",{children:"warum"})," — dann schlägt sie dir so etwas nicht wieder vor."]}),e.jsx("input",{value:k,onChange:s=>g(s.target.value),placeholder:"Grund (optional) — z. B. „gibt es schon“ oder „will ich nicht“",maxLength:400,className:"w-full rounded-lg border border-border/60 bg-background/60 px-2.5 py-1.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{disabled:!!r["ab:"+i],onClick:()=>{w(!1),n("ab:"+i,"/api/auftragsbuch/ablehnen",{branch:t.branch,repo:u,grund:k.trim()})},className:"flex h-8 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(E,{className:"h-3.5 w-3.5"})," Wirklich ablehnen"]}),e.jsx("button",{onClick:()=>w(!1),className:"flex h-8 items-center rounded-lg border border-border/60 bg-background/40 px-3 text-[11px] font-semibold text-muted-foreground transition-all hover:text-foreground cursor-pointer",children:"Abbrechen"})]})]}),t.status&&(o||!x)&&t.status.detail&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t.status.detail}),t.verwaist&&e.jsxs("p",{className:"rounded-lg border border-red-500/30 bg-red-500/5 px-2 py-1.5 text-[11px] text-red-300/90",children:[e.jsx("b",{children:"Kaputt aufgesetzt:"})," Dieser Branch hat keinen gemeinsamen Ursprung mit main (der Werkstatt-Worker hat nicht richtig geklont) — Annehmen ist technisch unmöglich, deshalb fehlt der Knopf. Am besten ",e.jsx("b",{children:"ablehnen mit Grund"}),"; die Idee kann danach frisch in die Queue."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono",children:[t.ahead," Commit",t.ahead===1?"":"s"]}),t.shortstat&&e.jsx("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono",children:t.shortstat.trim()}),t.verwaist&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-300",title:"Kein gemeinsamer Vorfahre mit main — git kann diesen Branch niemals mergen.",children:[e.jsx(C,{className:"h-3 w-3"})," kein gemeinsamer Ursprung"]}),t.leer&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"Der Diff gegen main ist leer — der Branch würde nichts verändern (Inhalt schon in main oder am Repo vorbei gearbeitet).",children:[e.jsx(C,{className:"h-3 w-3"})," Diff leer — bringt nichts"]}),t.behind>0&&!t.verwaist&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"main ist seit diesem Vorschlag weitergelaufen — bei Konflikten versucht die Annahme automatisch einen Rebase.",children:[e.jsx(C,{className:"h-3 w-3"})," ",t.behind," hinter main"]}),t.frontend_ohne_build&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"Die Box kann kein Frontend bauen (kein Node) — nach dem Annehmen bleibt die Oberfläche alt, bis am PC gebaut wird.",children:[e.jsx(C,{className:"h-3 w-3"})," Frontend ohne Build"]})]}),e.jsxs("div",{children:[e.jsxs("button",{onClick:B,className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[l?e.jsx(M,{className:"h-3.5 w-3.5"}):e.jsx(R,{className:"h-3.5 w-3.5"}),e.jsx(Z,{className:"h-3.5 w-3.5"})," ",t.files.length," Datei",t.files.length===1?"":"en"," — Änderungen ansehen"]}),l&&e.jsxs("div",{className:"mt-2 space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[t.files.map(s=>e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:[e.jsx("b",{className:y(s.status.startsWith("A")&&"text-emerald-400",s.status.startsWith("D")&&"text-red-400",s.status.startsWith("M")&&"text-sky-400"),children:s.status})," ",s.path]},s.path)),t.files_truncated&&e.jsx("span",{className:"text-[10px] text-muted-foreground/60",children:"…"})]}),e.jsx("div",{className:"max-h-96 overflow-auto rounded-xl border border-border/50 bg-background/50 p-3",children:D?e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Diff wird geladen …"}):e.jsx("pre",{className:"text-[10px] leading-relaxed text-foreground/80 whitespace-pre",children:(h??"").split(` -`).map((s,c)=>e.jsx("span",{className:y("block",s.startsWith("+")&&!s.startsWith("+++")&&"text-emerald-300/90 bg-emerald-500/5",s.startsWith("-")&&!s.startsWith("---")&&"text-red-300/90 bg-red-500/5",(s.startsWith("@@")||s.startsWith("diff "))&&"text-sky-300/90"),children:s||" "},c))})})]})]})]})}function se({k:t,busy:r,onAct:n,showConfirm:m}){const[l,f]=b.useState(!1);return e.jsxs("div",{className:"rounded-2xl border border-violet-500/25 bg-violet-500/[0.04] p-4 shadow-lg shadow-black/15 backdrop-blur-md space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"rounded-md border border-violet-500/30 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-violet-300",children:"Traum-Idee"}),e.jsx("span",{className:"font-mono text-[11px] text-muted-foreground truncate",children:t.file}),e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(V,{className:"h-3 w-3"}),K(t.mtime)]})]}),e.jsx("p",{className:"mt-1.5 text-sm font-semibold text-foreground",children:t.title})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsxs("button",{disabled:!!r["sk:"+t.file],onClick:()=>m("Werkstatt beauftragen?",`Der Kandidat '${t.title}' geht als Auftrag an die Werkstatt (Orchestrator, propose-only). Das Ergebnis erscheint später als neuer Patch-Vorschlag hier im Auftragsbuch — nichts geht ungefragt live.`,()=>n("sk:"+t.file,"/api/auftragsbuch/skill/annehmen",{file:t.file},"Die Werkstatt arbeitet. Das Ergebnis taucht als neuer Vorschlag im Auftragsbuch auf (das kann einige Minuten dauern).")),className:"flex h-9 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[r["sk:"+t.file]?e.jsx(p,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"})," Beauftragen"]}),e.jsxs("button",{disabled:!!r["skab:"+t.file],onClick:()=>m("Kandidat verwerfen?",`'${t.title}' wandert ins Archiv des Wissens-Vaults (verworfen/). Der Traum schlägt ihn nicht erneut vor.`,()=>n("skab:"+t.file,"/api/auftragsbuch/skill/ablehnen",{file:t.file})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300/90 transition-all hover:bg-red-500/15 cursor-pointer disabled:opacity-50",children:[r["skab:"+t.file]?e.jsx(p,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(E,{className:"h-3.5 w-3.5"})," Verwerfen"]})]})]}),e.jsxs("button",{onClick:()=>f(h=>!h),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[l?e.jsx(M,{className:"h-3.5 w-3.5"}):e.jsx(R,{className:"h-3.5 w-3.5"}),e.jsx(_,{className:"h-3.5 w-3.5"})," Vorschlag lesen"]}),l&&e.jsx("pre",{className:"max-h-72 overflow-auto rounded-xl border border-border/50 bg-background/50 p-3 text-[11px] leading-relaxed text-foreground/85 whitespace-pre-wrap",children:t.preview})]})}export{ne as AuftragsbuchView}; +Achtung: Enthält Frontend-Quelltext ohne gebautes Bundle — die Oberfläche bleibt alt, bis am PC gebaut wird.`:""}`,()=>n(i,"/api/auftragsbuch/annehmen",{branch:t.branch,repo:u})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[r[i]?e.jsx(g,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(z,{className:"h-3.5 w-3.5"})," Annehmen"]}),e.jsxs("button",{disabled:!!r["ab:"+i],onClick:()=>w(s=>!s),className:"flex h-9 items-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300/90 transition-all hover:bg-red-500/15 cursor-pointer disabled:opacity-50",children:[r["ab:"+i]?e.jsx(g,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(E,{className:"h-3.5 w-3.5"})," Ablehnen"]})]})]}),A&&!o&&!x&&e.jsxs("div",{className:"space-y-2 rounded-xl border border-red-500/25 bg-red-500/5 p-3",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:["Der Branch '",t.branch,"' wird auf Gitea gelöscht (die Arbeit bleibt in der Historie). Sag der Box kurz ",e.jsx("b",{children:"warum"})," — dann schlägt sie dir so etwas nicht wieder vor."]}),e.jsx("input",{value:k,onChange:s=>p(s.target.value),placeholder:"Grund (optional) — z. B. „gibt es schon“ oder „will ich nicht“",maxLength:400,className:"w-full rounded-lg border border-border/60 bg-background/60 px-2.5 py-1.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{disabled:!!r["ab:"+i],onClick:()=>{w(!1),n("ab:"+i,"/api/auftragsbuch/ablehnen",{branch:t.branch,repo:u,grund:k.trim()})},className:"flex h-8 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(E,{className:"h-3.5 w-3.5"})," Wirklich ablehnen"]}),e.jsx("button",{onClick:()=>w(!1),className:"flex h-8 items-center rounded-lg border border-border/60 bg-background/40 px-3 text-[11px] font-semibold text-muted-foreground transition-all hover:text-foreground cursor-pointer",children:"Abbrechen"})]})]}),t.status&&(o||!x)&&t.status.detail&&e.jsx("p",{className:"text-[11px] text-muted-foreground",children:t.status.detail}),t.verwaist&&e.jsxs("p",{className:"rounded-lg border border-red-500/30 bg-red-500/5 px-2 py-1.5 text-[11px] text-red-300/90",children:[e.jsx("b",{children:"Kaputt aufgesetzt:"})," Dieser Branch hat keinen gemeinsamen Ursprung mit main (der Werkstatt-Worker hat nicht richtig geklont) — Annehmen ist technisch unmöglich, deshalb fehlt der Knopf. Am besten ",e.jsx("b",{children:"ablehnen mit Grund"}),"; die Idee kann danach frisch in die Queue."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-[11px] text-muted-foreground",children:[e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono",children:[t.ahead," Commit",t.ahead===1?"":"s"]}),t.shortstat&&e.jsx("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono",children:t.shortstat.trim()}),t.verwaist&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-red-500/10 px-1.5 py-0.5 text-red-300",title:"Kein gemeinsamer Vorfahre mit main — git kann diesen Branch niemals mergen.",children:[e.jsx(C,{className:"h-3 w-3"})," kein gemeinsamer Ursprung"]}),t.leer&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"Der Diff gegen main ist leer — der Branch würde nichts verändern (Inhalt schon in main oder am Repo vorbei gearbeitet).",children:[e.jsx(C,{className:"h-3 w-3"})," Diff leer — bringt nichts"]}),t.behind>0&&!t.verwaist&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"main ist seit diesem Vorschlag weitergelaufen — bei Konflikten versucht die Annahme automatisch einen Rebase.",children:[e.jsx(C,{className:"h-3 w-3"})," ",t.behind," hinter main"]}),t.frontend_ohne_build&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-amber-500/10 px-1.5 py-0.5 text-amber-300",title:"Die Box kann kein Frontend bauen (kein Node) — nach dem Annehmen bleibt die Oberfläche alt, bis am PC gebaut wird.",children:[e.jsx(C,{className:"h-3 w-3"})," Frontend ohne Build"]})]}),e.jsxs("div",{children:[e.jsxs("button",{onClick:B,className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[l?e.jsx(M,{className:"h-3.5 w-3.5"}):e.jsx(V,{className:"h-3.5 w-3.5"}),e.jsx(J,{className:"h-3.5 w-3.5"})," ",t.files.length," Datei",t.files.length===1?"":"en"," — Änderungen ansehen"]}),l&&e.jsxs("div",{className:"mt-2 space-y-2",children:[e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[t.files.map(s=>e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",children:[e.jsx("b",{className:y(s.status.startsWith("A")&&"text-emerald-400",s.status.startsWith("D")&&"text-red-400",s.status.startsWith("M")&&"text-sky-400"),children:s.status})," ",s.path]},s.path)),t.files_truncated&&e.jsx("span",{className:"text-[10px] text-muted-foreground/60",children:"…"})]}),e.jsx("div",{className:"max-h-96 overflow-auto rounded-xl border border-border/50 bg-background/50 p-3",children:D?e.jsx("span",{className:"text-[11px] text-muted-foreground",children:"Diff wird geladen …"}):e.jsx("pre",{className:"text-[10px] leading-relaxed text-foreground/80 whitespace-pre",children:(h??"").split(` +`).map((s,c)=>e.jsx("span",{className:y("block",s.startsWith("+")&&!s.startsWith("+++")&&"text-emerald-300/90 bg-emerald-500/5",s.startsWith("-")&&!s.startsWith("---")&&"text-red-300/90 bg-red-500/5",(s.startsWith("@@")||s.startsWith("diff "))&&"text-sky-300/90"),children:s||" "},c))})})]})]})]})}function se({k:t,busy:r,onAct:n,showConfirm:m}){const[l,f]=b.useState(!1);return e.jsxs("div",{className:"rounded-2xl border border-violet-500/25 bg-violet-500/[0.04] p-4 shadow-lg shadow-black/15 backdrop-blur-md space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"rounded-md border border-violet-500/30 bg-violet-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase tracking-wider text-violet-300",children:"Traum-Idee"}),e.jsx("span",{className:"font-mono text-[11px] text-muted-foreground truncate",children:t.file}),e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(K,{className:"h-3 w-3"}),R(t.mtime)]})]}),e.jsx("p",{className:"mt-1.5 text-sm font-semibold text-foreground",children:t.title})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[e.jsxs("button",{disabled:!!r["sk:"+t.file],onClick:()=>m("Werkstatt beauftragen?",`Der Kandidat '${t.title}' geht als Auftrag an die Werkstatt (Orchestrator, propose-only). Das Ergebnis erscheint später als neuer Patch-Vorschlag hier im Auftragsbuch — nichts geht ungefragt live.`,()=>n("sk:"+t.file,"/api/auftragsbuch/skill/annehmen",{file:t.file},"Die Werkstatt arbeitet. Das Ergebnis taucht als neuer Vorschlag im Auftragsbuch auf (das kann einige Minuten dauern).")),className:"flex h-9 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[r["sk:"+t.file]?e.jsx(g,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"})," Beauftragen"]}),e.jsxs("button",{disabled:!!r["skab:"+t.file],onClick:()=>m("Kandidat verwerfen?",`'${t.title}' wandert ins Archiv des Wissens-Vaults (verworfen/). Der Traum schlägt ihn nicht erneut vor.`,()=>n("skab:"+t.file,"/api/auftragsbuch/skill/ablehnen",{file:t.file})),className:"flex h-9 items-center gap-1.5 rounded-lg border border-red-500/30 bg-red-500/5 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300/90 transition-all hover:bg-red-500/15 cursor-pointer disabled:opacity-50",children:[r["skab:"+t.file]?e.jsx(g,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(E,{className:"h-3.5 w-3.5"})," Verwerfen"]})]})]}),e.jsxs("button",{onClick:()=>f(h=>!h),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[l?e.jsx(M,{className:"h-3.5 w-3.5"}):e.jsx(V,{className:"h-3.5 w-3.5"}),e.jsx(_,{className:"h-3.5 w-3.5"})," Vorschlag lesen"]}),l&&e.jsx("pre",{className:"max-h-72 overflow-auto rounded-xl border border-border/50 bg-background/50 p-3 text-[11px] leading-relaxed text-foreground/85 whitespace-pre-wrap",children:t.preview})]})}export{le as AuftragsbuchView}; diff --git a/frontend/dist/assets/ChronikView-DKRwHk9a.js b/frontend/dist/assets/ChronikView-gK7ROOGU.js similarity index 82% rename from frontend/dist/assets/ChronikView-DKRwHk9a.js rename to frontend/dist/assets/ChronikView-gK7ROOGU.js index b6bb4ca..d24c5f9 100644 --- a/frontend/dist/assets/ChronikView-DKRwHk9a.js +++ b/frontend/dist/assets/ChronikView-gK7ROOGU.js @@ -1,21 +1,26 @@ -import{c as m,ai as S,r as c,j as e,aj as z,L as g,U as M,ak as C,ae as D,al as A,am as B,an as Z,e as E,ao as L,u as R,b as q,g as k,q as T}from"./index-BChEIiQl.js";import{R as j}from"./rotate-ccw-CPYnjQ6M.js";/** +import{c as u,ag as S,r as c,j as e,ah as z,L as g,R as M,ai as C,ac as D,aj as A,ak as B,e as Z,al as E,u as L,b as R,g as k,q}from"./index-Cejiqiju.js";import{R as j}from"./rotate-ccw-C_-gXN7Y.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const y=m("Archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);/** + */const y=u("Archive",[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const U=m("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** + */const T=u("Bell",[["path",{d:"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9",key:"1qo2s2"}],["path",{d:"M10.3 21a1.94 1.94 0 0 0 3.4 0",key:"qgo35s"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $=m("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** + */const $=u("MessageCircle",[["path",{d:"M7.9 20A9 9 0 1 0 4 16.1L2 22Z",key:"vv11sd"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const H=m("Radar",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]),O={sentry:{icon:Z,label:"Health-Wächter",cls:"text-red-300 bg-red-500/10 border-red-500/25"},alarm:{icon:B,label:"Alarm",cls:"text-red-200 bg-red-500/15 border-red-500/40"},notify:{icon:U,label:"Meldung",cls:"text-sky-300 bg-sky-500/10 border-sky-500/25"},"chef-gutachter":{icon:A,label:"Morgenlage",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"},radar:{icon:H,label:"Radar",cls:"text-teal-300 bg-teal-500/10 border-teal-500/25"},auftragsbuch:{icon:D,label:"Auftragsbuch",cls:"text-primary bg-primary/10 border-primary/25"},zeitmaschine:{icon:j,label:"Zeitmaschine",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},reminder:{icon:C,label:"Erinnerung",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},traum:{icon:M,label:"Traum",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"}},P={icon:$,label:"Box",cls:"text-muted-foreground bg-background/40 border-border/50"};function W(r){return new Date(r*1e3).toLocaleDateString("de-DE",{weekday:"long",day:"2-digit",month:"long"})}function G(){const{data:r=[],isLoading:u}=S(),[i,x]=c.useState(!0),b=c.useMemo(()=>{const o=[];for(const n of r){const a=W(n.ts),l=o[o.length-1];l&&l.day===a?l.items.push(n):o.push({day:a,items:[n]})}return o},[r]);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Chronik"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was deine Box von allein getan und gemeldet hat — und die Zeitmaschine, falls du zu einem früheren Stand zurück willst."})]}),e.jsx(J,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(z,{className:"h-3.5 w-3.5"})," Verlauf"]}),u&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(g,{className:"h-4 w-4 animate-spin"})," Chronik wird geladen …"]}),!u&&r.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-8 text-center text-xs text-muted-foreground",children:"Noch keine Einträge. Sobald die Box etwas von allein tut oder meldet (Updates, Wächter, Träume), steht es hier."}),b.map(({day:o,items:n})=>e.jsxs("div",{children:[e.jsx("p",{className:"mb-2 text-xs font-bold text-foreground/70",children:o}),e.jsxs("div",{className:"space-y-2 border-l-2 border-border/40 pl-4",children:[(i?n.slice(0,8):n).map(a=>{const l=O[a.source]??P,h=l.icon;return e.jsxs("div",{className:"relative rounded-xl border border-border/50 bg-card/40 p-3 backdrop-blur-sm",children:[e.jsx("span",{className:"absolute -left-[23px] top-4 h-2.5 w-2.5 rounded-full bg-border ring-4 ring-background/60"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:E("flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-bold",l.cls),children:[e.jsx(h,{className:"h-3 w-3"})," ",l.label]}),a.subject&&e.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground",children:a.subject}),e.jsx("span",{className:"ml-auto font-mono text-[10px] text-muted-foreground/60",children:new Date(a.ts*1e3).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})})]}),e.jsx("p",{className:"mt-1.5 whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:a.text})]},a.id)}),i&&n.length>8&&e.jsxs("button",{onClick:()=>x(!1),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:[n.length-8," weitere anzeigen"]})]})]},o))]})]})}function J(){const{data:r}=L(),u=R(),{showAlert:i,showConfirm:x,dialogElement:b}=q(),[o,n]=c.useState(null),[a,l]=c.useState(!1),[h,v]=c.useState(!1),d=(r==null?void 0:r.backups)??[],p=h?d:d.slice(0,4);function f(t){const s=t.snapshot.match(/^(\d{4})-?(\d{2})-?(\d{2})[T_-](\d{2})[-:]?(\d{2})/);return s?`${s[3]}.${s[2]}.${s[1]}, ${s[4]}:${s[5]} Uhr`:t.snapshot}async function w(t){n(t.file);try{await k("/api/zeitmaschine/restore",{method:"POST",body:JSON.stringify({file:t.file})}),i("Zeitmaschine läuft","Die Wiederherstellung wurde gestartet. Die Dienste starten gleich neu — die Zentrale ist kurz weg und meldet sich von selbst zurück. Vorher wurde automatisch ein Sicherheits-Backup des jetzigen Zustands gemacht.")}catch(s){i("Start fehlgeschlagen",String((s==null?void 0:s.message)||s))}finally{n(null)}}async function N(){l(!0);try{const t=await k("/api/system/backup",{method:"POST"});t.ok?i("Gesichert",`Snapshot ${t.snapshot} wurde angelegt.`):i("Backup fehlgeschlagen",t.error||"Unbekannter Fehler"),u.invalidateQueries({queryKey:T.zeitmaschine})}catch(t){i("Backup fehlgeschlagen",String((t==null?void 0:t.message)||t))}finally{l(!1)}}return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(y,{className:"h-3.5 w-3.5"})," Zeitmaschine — gesicherte Stände"]}),e.jsxs("button",{onClick:N,disabled:a||!(r!=null&&r.available),className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-2.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer disabled:opacity-50",children:[a?e.jsx(g,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(y,{className:"h-3.5 w-3.5"})," Jetzt sichern"]})]}),r&&!r.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Die Snapshots liegen auf der Box — im lokalen Dev-Modus nicht verfügbar."}),(r==null?void 0:r.available)&&d.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-5 text-center text-xs text-muted-foreground",children:'Noch keine Snapshots. Das nächtliche Backup (03:30) legt sie automatisch an — oder „Jetzt sichern".'}),p.length>0&&e.jsx("div",{className:"grid gap-2 sm:grid-cols-2",children:p.map((t,s)=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border/50 bg-card/40 p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("p",{className:"text-xs font-semibold text-foreground",children:[f(t)," ",s===0&&e.jsx("span",{className:"ml-1 rounded bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-300",children:"neuester"})]}),e.jsxs("p",{className:"font-mono text-[10px] text-muted-foreground/70 truncate",title:t.file,children:[t.size_mb.toLocaleString("de-DE")," MB · ",t.file]})]}),e.jsxs("button",{disabled:o!==null,onClick:()=>x("Wirklich zu diesem Stand zurück?",`Die Box wird auf den Snapshot vom ${f(t)} zurückgesetzt (Gedächtnis, Hermes-Config, Modell-Router). Der JETZIGE Zustand wird vorher automatisch gesichert — der Schritt ist also umkehrbar. Die Dienste starten neu, die Zentrale ist kurz weg.`,()=>w(t)),className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2.5 text-[10px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[o===t.file?e.jsx(g,{className:"h-3 w-3 animate-spin"}):e.jsx(j,{className:"h-3 w-3"})," Zurück"]})]},t.file))}),d.length>4&&!h&&e.jsxs("button",{onClick:()=>v(!0),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:["Alle ",d.length," Snapshots anzeigen"]}),b]})}export{G as ChronikView}; + */const U=u("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const H=u("Radar",[["path",{d:"M19.07 4.93A10 10 0 0 0 6.99 3.34",key:"z3du51"}],["path",{d:"M4 6h.01",key:"oypzma"}],["path",{d:"M2.29 9.62A10 10 0 1 0 21.31 8.35",key:"qzzz0"}],["path",{d:"M16.24 7.76A6 6 0 1 0 8.23 16.67",key:"1yjesh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M17.99 11.66A6 6 0 0 1 15.77 16.67",key:"1u2y91"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}],["path",{d:"m13.41 10.59 5.66-5.66",key:"mhq4k0"}]]),O={sentry:{icon:B,label:"Health-Wächter",cls:"text-red-300 bg-red-500/10 border-red-500/25"},alarm:{icon:A,label:"Alarm",cls:"text-red-200 bg-red-500/15 border-red-500/40"},notify:{icon:T,label:"Meldung",cls:"text-sky-300 bg-sky-500/10 border-sky-500/25"},"chef-gutachter":{icon:U,label:"Morgenlage",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"},radar:{icon:H,label:"Radar",cls:"text-teal-300 bg-teal-500/10 border-teal-500/25"},auftragsbuch:{icon:D,label:"Auftragsbuch",cls:"text-primary bg-primary/10 border-primary/25"},zeitmaschine:{icon:j,label:"Zeitmaschine",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},reminder:{icon:C,label:"Erinnerung",cls:"text-amber-300 bg-amber-500/10 border-amber-500/25"},traum:{icon:M,label:"Traum",cls:"text-violet-300 bg-violet-500/10 border-violet-500/25"}},P={icon:$,label:"Box",cls:"text-muted-foreground bg-background/40 border-border/50"};function W(r){return new Date(r*1e3).toLocaleDateString("de-DE",{weekday:"long",day:"2-digit",month:"long"})}function G(){const{data:r=[],isLoading:h}=S(),[i,x]=c.useState(!0),b=c.useMemo(()=>{const o=[];for(const n of r){const a=W(n.ts),l=o[o.length-1];l&&l.day===a?l.items.push(n):o.push({day:a,items:[n]})}return o},[r]);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Chronik"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was deine Box von allein getan und gemeldet hat — und die Zeitmaschine, falls du zu einem früheren Stand zurück willst."})]}),e.jsx(J,{}),e.jsxs("section",{className:"space-y-4",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(z,{className:"h-3.5 w-3.5"})," Verlauf"]}),h&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(g,{className:"h-4 w-4 animate-spin"})," Chronik wird geladen …"]}),!h&&r.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-8 text-center text-xs text-muted-foreground",children:"Noch keine Einträge. Sobald die Box etwas von allein tut oder meldet (Updates, Wächter, Träume), steht es hier."}),b.map(({day:o,items:n})=>e.jsxs("div",{children:[e.jsx("p",{className:"mb-2 text-xs font-bold text-foreground/70",children:o}),e.jsxs("div",{className:"space-y-2 border-l-2 border-border/40 pl-4",children:[(i?n.slice(0,8):n).map(a=>{const l=O[a.source]??P,m=l.icon;return e.jsxs("div",{className:"relative rounded-xl border border-border/50 bg-card/40 p-3 backdrop-blur-sm",children:[e.jsx("span",{className:"absolute -left-[23px] top-4 h-2.5 w-2.5 rounded-full bg-border ring-4 ring-background/60"}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{className:Z("flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-bold",l.cls),children:[e.jsx(m,{className:"h-3 w-3"})," ",l.label]}),a.subject&&e.jsx("span",{className:"text-[10px] font-semibold text-muted-foreground",children:a.subject}),e.jsx("span",{className:"ml-auto font-mono text-[10px] text-muted-foreground/60",children:new Date(a.ts*1e3).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})})]}),e.jsx("p",{className:"mt-1.5 whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:a.text})]},a.id)}),i&&n.length>8&&e.jsxs("button",{onClick:()=>x(!1),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:[n.length-8," weitere anzeigen"]})]})]},o))]})]})}function J(){const{data:r}=E(),h=L(),{showAlert:i,showConfirm:x,dialogElement:b}=R(),[o,n]=c.useState(null),[a,l]=c.useState(!1),[m,v]=c.useState(!1),d=(r==null?void 0:r.backups)??[],p=m?d:d.slice(0,4);function f(t){const s=t.snapshot.match(/^(\d{4})-?(\d{2})-?(\d{2})[T_-](\d{2})[-:]?(\d{2})/);return s?`${s[3]}.${s[2]}.${s[1]}, ${s[4]}:${s[5]} Uhr`:t.snapshot}async function w(t){n(t.file);try{await k("/api/zeitmaschine/restore",{method:"POST",body:JSON.stringify({file:t.file})}),i("Zeitmaschine läuft","Die Wiederherstellung wurde gestartet. Die Dienste starten gleich neu — die Zentrale ist kurz weg und meldet sich von selbst zurück. Vorher wurde automatisch ein Sicherheits-Backup des jetzigen Zustands gemacht.")}catch(s){i("Start fehlgeschlagen",String((s==null?void 0:s.message)||s))}finally{n(null)}}async function N(){l(!0);try{const t=await k("/api/system/backup",{method:"POST"});t.ok?i("Gesichert",`Snapshot ${t.snapshot} wurde angelegt.`):i("Backup fehlgeschlagen",t.error||"Unbekannter Fehler"),h.invalidateQueries({queryKey:q.zeitmaschine})}catch(t){i("Backup fehlgeschlagen",String((t==null?void 0:t.message)||t))}finally{l(!1)}}return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(y,{className:"h-3.5 w-3.5"})," Zeitmaschine — gesicherte Stände"]}),e.jsxs("button",{onClick:N,disabled:a||!(r!=null&&r.available),className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-card/45 px-2.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer disabled:opacity-50",children:[a?e.jsx(g,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(y,{className:"h-3.5 w-3.5"})," Jetzt sichern"]})]}),r&&!r.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Die Snapshots liegen auf der Box — im lokalen Dev-Modus nicht verfügbar."}),(r==null?void 0:r.available)&&d.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-5 text-center text-xs text-muted-foreground",children:'Noch keine Snapshots. Das nächtliche Backup (03:30) legt sie automatisch an — oder „Jetzt sichern".'}),p.length>0&&e.jsx("div",{className:"grid gap-2 sm:grid-cols-2",children:p.map((t,s)=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-xl border border-border/50 bg-card/40 p-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("p",{className:"text-xs font-semibold text-foreground",children:[f(t)," ",s===0&&e.jsx("span",{className:"ml-1 rounded bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-300",children:"neuester"})]}),e.jsxs("p",{className:"font-mono text-[10px] text-muted-foreground/70 truncate",title:t.file,children:[t.size_mb.toLocaleString("de-DE")," MB · ",t.file]})]}),e.jsxs("button",{disabled:o!==null,onClick:()=>x("Wirklich zu diesem Stand zurück?",`Die Box wird auf den Snapshot vom ${f(t)} zurückgesetzt (Gedächtnis, Hermes-Config, Modell-Router). Der JETZIGE Zustand wird vorher automatisch gesichert — der Schritt ist also umkehrbar. Die Dienste starten neu, die Zentrale ist kurz weg.`,()=>w(t)),className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2.5 text-[10px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[o===t.file?e.jsx(g,{className:"h-3 w-3 animate-spin"}):e.jsx(j,{className:"h-3 w-3"})," Zurück"]})]},t.file))}),d.length>4&&!m&&e.jsxs("button",{onClick:()=>v(!0),className:"text-[11px] text-muted-foreground underline hover:text-foreground",children:["Alle ",d.length," Snapshots anzeigen"]}),b]})}export{G as ChronikView}; diff --git a/frontend/dist/assets/ConnectView-DegkAqmm.js b/frontend/dist/assets/ConnectView-DTJvmfv6.js similarity index 89% rename from frontend/dist/assets/ConnectView-DegkAqmm.js rename to frontend/dist/assets/ConnectView-DTJvmfv6.js index f7a490c..d6cd2fb 100644 --- a/frontend/dist/assets/ConnectView-DegkAqmm.js +++ b/frontend/dist/assets/ConnectView-DTJvmfv6.js @@ -1,4 +1,4 @@ -import{c as v,r as c,I,J as A,j as e,K as h,x as B,B as H,D as E,M as z,e as M,L as T,N as F,C as K}from"./index-BChEIiQl.js";import{F as O}from"./folder-open-CtWva2VF.js";import{C as R}from"./circle-x-D8NCr-a2.js";import{C as W}from"./copy-CRj5M_pY.js";/** +import{c as v,r as c,G as A,I as D,j as e,J as h,x as B,B as H,K as E,e as M,L as z,M as T,C as F}from"./index-Cejiqiju.js";import{C as K}from"./chevron-down-DNDogRoC.js";import{F as O}from"./folder-open-B5JYx4j5.js";import{C as R}from"./circle-x-BxATYeTa.js";import{C as W}from"./copy-g04tL7QX.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. @@ -13,4 +13,4 @@ import{c as v,r as c,I,J as A,j as e,K as h,x as B,B as H,D as E,M as z,e as M,L * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const b=v("Laptop",[["path",{d:"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16",key:"tarvll"}]]),L={hermes_desktop:"Hermes Desktop: Browser-Login",kilo:"Kilo: Einstellungen → API Provider",claude_code:"env / Übersetzer"};function j({line:t,loading:n}){return n||!t?e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold text-muted-foreground",children:[e.jsx(T,{className:"h-3 w-3 animate-spin"})," prüfe…"]}):t.ok?e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold text-emerald-400",children:[e.jsx(F,{className:"h-3 w-3"})," ",t.detail]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold text-red-400",children:[e.jsx(R,{className:"h-3 w-3"})," ",t.detail]})}function N({tool:t,fileName:n,accent:o,copied:x,onCopy:d}){return e.jsxs("div",{className:"flex flex-col border border-border/60 bg-black/60 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex h-11 items-center justify-between px-4 border-b border-border/40 bg-black/40 shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-3 w-3 rounded-full bg-red-500/80"}),e.jsx("span",{className:"h-3 w-3 rounded-full bg-amber-500/80"}),e.jsx("span",{className:"h-3 w-3 rounded-full bg-emerald-500/80"})]}),e.jsx("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground/75 bg-background/30 px-3 py-1 rounded-md border border-border/20",children:e.jsx("span",{children:n})}),e.jsxs("button",{onClick:d,className:"flex h-7 px-2.5 items-center gap-1.5 rounded-lg border border-border/40 bg-background/30 text-[10px] font-semibold text-muted-foreground hover:text-foreground hover:bg-background/60 transition-all cursor-pointer",children:[x?e.jsx(K,{className:"h-3.5 w-3.5 text-emerald-400"}):e.jsx(W,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:x?"Kopiert":"Kopieren"})]})]}),e.jsx("pre",{className:M("p-5 overflow-x-auto text-xs font-mono whitespace-pre leading-relaxed scrollbar-thin select-text bg-black/10",o==="teal"?"text-cyan-200/90":"text-violet-200/90"),children:e.jsx("code",{children:t.snippet})})]})}function J(){const t=window.location.hostname;return t&&t!=="localhost"&&t!=="127.0.0.1"?t:"192.168.178.151"}function Q(){const[t,n]=c.useState(localStorage.getItem("mc_host")||J()),[o,x]=c.useState(localStorage.getItem("mc_mcp_path")||""),[d,P]=c.useState("kilo"),[y,_]=c.useState(!1),[p,w]=c.useState(null),k=new URLSearchParams({host:t});o&&k.set("mcp_path",o);const{data:r,error:C}=I(k.toString()),{data:a,isLoading:u}=A(),S=C?String(C):"";function D(s){n(s),s&&localStorage.setItem("mc_host",s)}function G(s){x(s),localStorage.setItem("mc_mcp_path",s)}const l=r==null?void 0:r.tools.hermes_desktop,i=r==null?void 0:r.tools[d];async function g(s,m){m&&(await navigator.clipboard.writeText(m),w(s),setTimeout(()=>w(null),1500))}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Verbindung & Integration"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.jsx("span",{className:"text-foreground",children:"Hermes Desktop"})," ist die Tür zur Box — einmal verbinden, fertig. Für Spezialfälle gibt es darunter die rohen Leitungen (Gateway /v1 + Gedächtnis-MCP) für sonstige Tools."]})]}),e.jsxs("div",{className:"p-5 mc-card",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-[170px_1fr] items-center",children:[e.jsxs("div",{className:"rounded-2xl border border-border/60 bg-background/40 p-4 text-center",children:[e.jsx(b,{className:"h-7 w-7 mx-auto text-muted-foreground"}),e.jsx("div",{className:"mt-2 text-sm font-semibold text-foreground",children:"Dein lokaler Agent"}),e.jsx("div",{className:"text-[11px] text-muted-foreground",children:"Hermes Desktop · Kilo Code · Claude Code …"})]}),e.jsxs("div",{className:"flex flex-col gap-2.5",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(h,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsxs("div",{className:"flex-1 rounded-xl border border-primary/25 bg-primary/5 px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-primary",children:[e.jsx(B,{className:"h-3.5 w-3.5"})," Leitung 1 — Modell"]}),e.jsx(j,{line:a==null?void 0:a.gateway,loading:u})]}),e.jsx("div",{className:"mt-1 text-[11px] font-mono text-primary/80",children:"Gateway · :9001/v1 · Modelle coder / heavy / vision"})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(h,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsxs("div",{className:"flex-1 rounded-xl border border-violet-500/25 bg-violet-500/5 px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-violet-300",children:[e.jsx(H,{className:"h-3.5 w-3.5"})," Leitung 2 — Gedächtnis"]}),e.jsx(j,{line:a==null?void 0:a.memory,loading:u})]}),e.jsx("div",{className:"mt-1 text-[11px] font-mono text-violet-300/80",children:"MCP · mcp_memory.py · separat"})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(h,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsxs("div",{className:"flex-1 rounded-xl border border-emerald-500/25 bg-emerald-500/5 px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-emerald-300",children:[e.jsx(b,{className:"h-3.5 w-3.5"})," Leitung 3 — Desktop-Gateway"]}),e.jsx(j,{line:a==null?void 0:a.desktop_gateway,loading:u})]}),e.jsx("div",{className:"mt-1 text-[11px] font-mono text-emerald-300/80",children:"Desktop-Gateway · :9119 · API-Status"})]})]})]})]}),e.jsxs("p",{className:"mt-3.5 text-[11px] text-muted-foreground leading-relaxed",children:["Der Gateway liefert ",e.jsx("span",{className:"text-foreground",children:"nur das LLM"}),". Das geteilte Gedächtnis läuft über einen",e.jsx("span",{className:"text-foreground",children:" eigenen MCP-Server"})," und das Desktop-Gateway bietet die Agenten-Schnittstelle — alle drei Leitungen werden unabhängig eingerichtet. IDEs wählen die ",e.jsx("span",{className:"text-foreground",children:"echten Modelle"})," ","(coder · heavy · vision); daneben gibt es die virtuellen Lanes ",e.jsx("span",{className:"text-foreground",children:"chat"})," und"," ",e.jsx("span",{className:"text-foreground",children:"coding"}),", die je Anfrage selbst das passende Modell wählen (Alltags-Chat, simple Tools)."]})]}),e.jsx("div",{className:"p-5 mc-card",children:e.jsxs("div",{className:"space-y-1.5 max-w-md",children:[e.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(V,{className:"h-3.5 w-3.5 text-primary"})," Box LAN IP-Adresse",e.jsx("span",{className:"normal-case font-semibold tracking-normal text-muted-foreground/60",children:"— vorbefüllt aus der Adresse dieser Seite"})]}),e.jsx("input",{value:t,onChange:s=>D(s.target.value),"aria-label":"Box LAN IP-Adresse",spellCheck:!1,placeholder:"z.B. 192.168.178.151",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),e.jsx("p",{className:"text-[10px] text-muted-foreground/70",children:"Wird in alle Snippets eingebacken. Ändern musst du sie nur, wenn die Box eine neue IP bekommt."})]})}),S&&e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Fehler beim Generieren der Snippets: ",S]}),r&&e.jsxs("div",{className:"space-y-5",children:[l&&e.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 border-t-2 border-t-emerald-500/70 bg-card/30 p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-space font-bold text-foreground",children:[e.jsx(b,{className:"h-4 w-4 text-emerald-400"}),"Hermes Desktop anbinden",e.jsx("span",{className:"text-[10px] font-medium text-emerald-400/90 normal-case",children:"der Hauptweg"})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:"Die Desktop-App dockt remote an die Box an — volle Agent-Oberfläche, Projekte, Review, Gedächtnis inklusive."})]}),l.note&&e.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-emerald-500/5 border border-emerald-500/20 text-[11px] text-muted-foreground leading-relaxed",children:[e.jsx(f,{className:"h-4 w-4 text-emerald-400 shrink-0 mt-0.5"}),e.jsx("span",{children:l.note})]}),e.jsx(N,{tool:l,fileName:L.hermes_desktop,accent:"teal",copied:p==="desktop",onCopy:()=>g("desktop",l.snippet)})]}),e.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/30",children:[e.jsxs("button",{onClick:()=>_(s=>!s),className:"flex w-full items-center gap-2 p-4 text-sm font-space font-bold text-foreground cursor-pointer hover:text-primary transition-colors",children:[y?e.jsx(E,{className:"h-4 w-4"}):e.jsx(z,{className:"h-4 w-4"}),"Sonstige Tools (roher /v1-Zugang + Gedächtnis-MCP)",e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground normal-case",children:"Kilo Code · Claude Code · Eigenbau"})]}),y&&e.jsxs("div",{className:"grid gap-5 lg:grid-cols-2 p-4 pt-0",children:[e.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 border-t-2 border-t-primary/70 bg-card/30 p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-space font-bold text-foreground",children:[e.jsx("span",{className:"flex h-5 w-5 items-center justify-center rounded-md bg-primary/15 text-primary text-[11px]",children:"1"}),"Modell anbinden"]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:"Wähle dein Tool — das Snippet zeigt auf den Gateway."})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:Object.entries(r.tools).filter(([s])=>s!=="hermes_desktop").map(([s,m])=>e.jsx("button",{onClick:()=>P(s),className:M("rounded-lg px-3 py-1.5 text-[11px] font-semibold tracking-wide transition-all cursor-pointer",d===s?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"border border-border/50 text-muted-foreground hover:text-foreground"),children:m.label},s))}),i&&e.jsxs(e.Fragment,{children:[i.note&&e.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-primary/5 border border-primary/20 text-[11px] text-muted-foreground leading-relaxed",children:[e.jsx(f,{className:"h-4 w-4 text-primary shrink-0 mt-0.5"}),e.jsx("span",{children:i.note})]}),e.jsx(N,{tool:i,fileName:L[d]||"config.json",accent:"teal",copied:p==="model",onCopy:()=>g("model",i.snippet)})]})]}),e.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 border-t-2 border-t-violet-500/70 bg-card/30 p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-space font-bold text-foreground",children:[e.jsx("span",{className:"flex h-5 w-5 items-center justify-center rounded-md bg-violet-500/15 text-violet-300 text-[11px]",children:"2"}),"Gedächtnis anbinden",e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground normal-case",children:"optional"})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:["Ein MCP-Block — gilt zusätzlich für ",e.jsx("em",{children:"jedes"})," Tool aus Schritt 1."]})]}),e.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-violet-500/5 border border-violet-500/20 text-[11px] text-muted-foreground leading-relaxed",children:[e.jsx(f,{className:"h-4 w-4 text-violet-400 shrink-0 mt-0.5"}),e.jsx("span",{children:r.memory.note})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(O,{className:"h-3.5 w-3.5 text-violet-400"})," Wo liegt mcp_memory.py auf DIESEM PC?"]}),e.jsx("input",{value:o,onChange:s=>G(s.target.value),"aria-label":"Lokaler MCP-Scriptpfad",spellCheck:!1,placeholder:"z.B. F:\\Coding Stuff\\mission-control-2\\mcp\\mcp_memory.py",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-violet-500/50 text-foreground"}),e.jsx("p",{className:"text-[10px] text-muted-foreground/70",children:"Nur nötig, wenn du das Gedächtnis in einem PC-Tool anschließt — das Script läuft lokal und spricht mit der Box. Der Pfad landet direkt im Snippet unten."})]}),e.jsx(N,{tool:r.memory,fileName:"mcp.json",accent:"violet",copied:p==="memory",onCopy:()=>g("memory",r.memory.snippet)})]})]})]})]})]})}export{Q as ConnectView}; + */const b=v("Laptop",[["path",{d:"M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16",key:"tarvll"}]]),L={hermes_desktop:"Hermes Desktop: Browser-Login",kilo:"Kilo: Einstellungen → API Provider",claude_code:"env / Übersetzer"};function j({line:t,loading:o}){return o||!t?e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold text-muted-foreground",children:[e.jsx(z,{className:"h-3 w-3 animate-spin"})," prüfe…"]}):t.ok?e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold text-emerald-400",children:[e.jsx(T,{className:"h-3 w-3"})," ",t.detail]}):e.jsxs("span",{className:"inline-flex items-center gap-1 text-[10px] font-semibold text-red-400",children:[e.jsx(R,{className:"h-3 w-3"})," ",t.detail]})}function N({tool:t,fileName:o,accent:n,copied:x,onCopy:d}){return e.jsxs("div",{className:"flex flex-col border border-border/60 bg-black/60 rounded-2xl overflow-hidden shadow-2xl",children:[e.jsxs("div",{className:"flex h-11 items-center justify-between px-4 border-b border-border/40 bg-black/40 shrink-0",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:"h-3 w-3 rounded-full bg-red-500/80"}),e.jsx("span",{className:"h-3 w-3 rounded-full bg-amber-500/80"}),e.jsx("span",{className:"h-3 w-3 rounded-full bg-emerald-500/80"})]}),e.jsx("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground/75 bg-background/30 px-3 py-1 rounded-md border border-border/20",children:e.jsx("span",{children:o})}),e.jsxs("button",{onClick:d,className:"flex h-7 px-2.5 items-center gap-1.5 rounded-lg border border-border/40 bg-background/30 text-[10px] font-semibold text-muted-foreground hover:text-foreground hover:bg-background/60 transition-all cursor-pointer",children:[x?e.jsx(F,{className:"h-3.5 w-3.5 text-emerald-400"}):e.jsx(W,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:x?"Kopiert":"Kopieren"})]})]}),e.jsx("pre",{className:M("p-5 overflow-x-auto text-xs font-mono whitespace-pre leading-relaxed scrollbar-thin select-text bg-black/10",n==="teal"?"text-cyan-200/90":"text-violet-200/90"),children:e.jsx("code",{children:t.snippet})})]})}function J(){const t=window.location.hostname;return t&&t!=="localhost"&&t!=="127.0.0.1"?t:"192.168.178.151"}function Y(){const[t,o]=c.useState(localStorage.getItem("mc_host")||J()),[n,x]=c.useState(localStorage.getItem("mc_mcp_path")||""),[d,P]=c.useState("kilo"),[y,G]=c.useState(!1),[p,w]=c.useState(null),k=new URLSearchParams({host:t});n&&k.set("mcp_path",n);const{data:r,error:C}=A(k.toString()),{data:a,isLoading:u}=D(),S=C?String(C):"";function _(s){o(s),s&&localStorage.setItem("mc_host",s)}function I(s){x(s),localStorage.setItem("mc_mcp_path",s)}const l=r==null?void 0:r.tools.hermes_desktop,i=r==null?void 0:r.tools[d];async function g(s,m){m&&(await navigator.clipboard.writeText(m),w(s),setTimeout(()=>w(null),1500))}return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Verbindung & Integration"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[e.jsx("span",{className:"text-foreground",children:"Hermes Desktop"})," ist die Tür zur Box — einmal verbinden, fertig. Für Spezialfälle gibt es darunter die rohen Leitungen (Gateway /v1 + Gedächtnis-MCP) für sonstige Tools."]})]}),e.jsxs("div",{className:"p-5 mc-card",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-[170px_1fr] items-center",children:[e.jsxs("div",{className:"rounded-2xl border border-border/60 bg-background/40 p-4 text-center",children:[e.jsx(b,{className:"h-7 w-7 mx-auto text-muted-foreground"}),e.jsx("div",{className:"mt-2 text-sm font-semibold text-foreground",children:"Dein lokaler Agent"}),e.jsx("div",{className:"text-[11px] text-muted-foreground",children:"Hermes Desktop · Kilo Code · Claude Code …"})]}),e.jsxs("div",{className:"flex flex-col gap-2.5",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(h,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsxs("div",{className:"flex-1 rounded-xl border border-primary/25 bg-primary/5 px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-primary",children:[e.jsx(B,{className:"h-3.5 w-3.5"})," Leitung 1 — Modell"]}),e.jsx(j,{line:a==null?void 0:a.gateway,loading:u})]}),e.jsx("div",{className:"mt-1 text-[11px] font-mono text-primary/80",children:"Gateway · :9001/v1 · Modelle coder / heavy / vision"})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(h,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsxs("div",{className:"flex-1 rounded-xl border border-violet-500/25 bg-violet-500/5 px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-violet-300",children:[e.jsx(H,{className:"h-3.5 w-3.5"})," Leitung 2 — Gedächtnis"]}),e.jsx(j,{line:a==null?void 0:a.memory,loading:u})]}),e.jsx("div",{className:"mt-1 text-[11px] font-mono text-violet-300/80",children:"MCP · mcp_memory.py · separat"})]})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(h,{className:"h-4 w-4 text-muted-foreground shrink-0"}),e.jsxs("div",{className:"flex-1 rounded-xl border border-emerald-500/25 bg-emerald-500/5 px-3.5 py-2.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2 text-xs font-semibold text-emerald-300",children:[e.jsx(b,{className:"h-3.5 w-3.5"})," Leitung 3 — Desktop-Gateway"]}),e.jsx(j,{line:a==null?void 0:a.desktop_gateway,loading:u})]}),e.jsx("div",{className:"mt-1 text-[11px] font-mono text-emerald-300/80",children:"Desktop-Gateway · :9119 · API-Status"})]})]})]})]}),e.jsxs("p",{className:"mt-3.5 text-[11px] text-muted-foreground leading-relaxed",children:["Der Gateway liefert ",e.jsx("span",{className:"text-foreground",children:"nur das LLM"}),". Das geteilte Gedächtnis läuft über einen",e.jsx("span",{className:"text-foreground",children:" eigenen MCP-Server"})," und das Desktop-Gateway bietet die Agenten-Schnittstelle — alle drei Leitungen werden unabhängig eingerichtet. IDEs wählen die ",e.jsx("span",{className:"text-foreground",children:"echten Modelle"})," ","(coder · heavy · vision); daneben gibt es die virtuellen Lanes ",e.jsx("span",{className:"text-foreground",children:"chat"})," und"," ",e.jsx("span",{className:"text-foreground",children:"coding"}),", die je Anfrage selbst das passende Modell wählen (Alltags-Chat, simple Tools)."]})]}),e.jsx("div",{className:"p-5 mc-card",children:e.jsxs("div",{className:"space-y-1.5 max-w-md",children:[e.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(V,{className:"h-3.5 w-3.5 text-primary"})," Box LAN IP-Adresse",e.jsx("span",{className:"normal-case font-semibold tracking-normal text-muted-foreground/60",children:"— vorbefüllt aus der Adresse dieser Seite"})]}),e.jsx("input",{value:t,onChange:s=>_(s.target.value),"aria-label":"Box LAN IP-Adresse",spellCheck:!1,placeholder:"z.B. 192.168.178.151",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"}),e.jsx("p",{className:"text-[10px] text-muted-foreground/70",children:"Wird in alle Snippets eingebacken. Ändern musst du sie nur, wenn die Box eine neue IP bekommt."})]})}),S&&e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Fehler beim Generieren der Snippets: ",S]}),r&&e.jsxs("div",{className:"space-y-5",children:[l&&e.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 border-t-2 border-t-emerald-500/70 bg-card/30 p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-space font-bold text-foreground",children:[e.jsx(b,{className:"h-4 w-4 text-emerald-400"}),"Hermes Desktop anbinden",e.jsx("span",{className:"text-[10px] font-medium text-emerald-400/90 normal-case",children:"der Hauptweg"})]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:"Die Desktop-App dockt remote an die Box an — volle Agent-Oberfläche, Projekte, Review, Gedächtnis inklusive."})]}),l.note&&e.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-emerald-500/5 border border-emerald-500/20 text-[11px] text-muted-foreground leading-relaxed",children:[e.jsx(f,{className:"h-4 w-4 text-emerald-400 shrink-0 mt-0.5"}),e.jsx("span",{children:l.note})]}),e.jsx(N,{tool:l,fileName:L.hermes_desktop,accent:"teal",copied:p==="desktop",onCopy:()=>g("desktop",l.snippet)})]}),e.jsxs("div",{className:"rounded-2xl border border-border/60 bg-card/30",children:[e.jsxs("button",{onClick:()=>G(s=>!s),className:"flex w-full items-center gap-2 p-4 text-sm font-space font-bold text-foreground cursor-pointer hover:text-primary transition-colors",children:[y?e.jsx(K,{className:"h-4 w-4"}):e.jsx(E,{className:"h-4 w-4"}),"Sonstige Tools (roher /v1-Zugang + Gedächtnis-MCP)",e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground normal-case",children:"Kilo Code · Claude Code · Eigenbau"})]}),y&&e.jsxs("div",{className:"grid gap-5 lg:grid-cols-2 p-4 pt-0",children:[e.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 border-t-2 border-t-primary/70 bg-card/30 p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-space font-bold text-foreground",children:[e.jsx("span",{className:"flex h-5 w-5 items-center justify-center rounded-md bg-primary/15 text-primary text-[11px]",children:"1"}),"Modell anbinden"]}),e.jsx("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:"Wähle dein Tool — das Snippet zeigt auf den Gateway."})]}),e.jsx("div",{className:"flex flex-wrap gap-1.5",children:Object.entries(r.tools).filter(([s])=>s!=="hermes_desktop").map(([s,m])=>e.jsx("button",{onClick:()=>P(s),className:M("rounded-lg px-3 py-1.5 text-[11px] font-semibold tracking-wide transition-all cursor-pointer",d===s?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"border border-border/50 text-muted-foreground hover:text-foreground"),children:m.label},s))}),i&&e.jsxs(e.Fragment,{children:[i.note&&e.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-primary/5 border border-primary/20 text-[11px] text-muted-foreground leading-relaxed",children:[e.jsx(f,{className:"h-4 w-4 text-primary shrink-0 mt-0.5"}),e.jsx("span",{children:i.note})]}),e.jsx(N,{tool:i,fileName:L[d]||"config.json",accent:"teal",copied:p==="model",onCopy:()=>g("model",i.snippet)})]})]}),e.jsxs("div",{className:"space-y-3 rounded-2xl border border-border/60 border-t-2 border-t-violet-500/70 bg-card/30 p-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-space font-bold text-foreground",children:[e.jsx("span",{className:"flex h-5 w-5 items-center justify-center rounded-md bg-violet-500/15 text-violet-300 text-[11px]",children:"2"}),"Gedächtnis anbinden",e.jsx("span",{className:"text-[10px] font-medium text-muted-foreground normal-case",children:"optional"})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:["Ein MCP-Block — gilt zusätzlich für ",e.jsx("em",{children:"jedes"})," Tool aus Schritt 1."]})]}),e.jsxs("div",{className:"flex items-start gap-2.5 p-3 rounded-xl bg-violet-500/5 border border-violet-500/20 text-[11px] text-muted-foreground leading-relaxed",children:[e.jsx(f,{className:"h-4 w-4 text-violet-400 shrink-0 mt-0.5"}),e.jsx("span",{children:r.memory.note})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5",children:[e.jsx(O,{className:"h-3.5 w-3.5 text-violet-400"})," Wo liegt mcp_memory.py auf DIESEM PC?"]}),e.jsx("input",{value:n,onChange:s=>I(s.target.value),"aria-label":"Lokaler MCP-Scriptpfad",spellCheck:!1,placeholder:"z.B. F:\\Coding Stuff\\mission-control-2\\mcp\\mcp_memory.py",className:"w-full h-9 rounded-lg border border-border/60 bg-background/40 px-3 font-mono text-xs outline-none focus:ring-1 focus:ring-violet-500/50 text-foreground"}),e.jsx("p",{className:"text-[10px] text-muted-foreground/70",children:"Nur nötig, wenn du das Gedächtnis in einem PC-Tool anschließt — das Script läuft lokal und spricht mit der Box. Der Pfad landet direkt im Snippet unten."})]}),e.jsx(N,{tool:r.memory,fileName:"mcp.json",accent:"violet",copied:p==="memory",onCopy:()=>g("memory",r.memory.snippet)})]})]})]})]})]})}export{Y as ConnectView}; diff --git a/frontend/dist/assets/EigenlebenView-nhdxSyQi.js b/frontend/dist/assets/EigenlebenView-BSzH0Ym2.js similarity index 94% rename from frontend/dist/assets/EigenlebenView-nhdxSyQi.js rename to frontend/dist/assets/EigenlebenView-BSzH0Ym2.js index 0a2cb72..02387cf 100644 --- a/frontend/dist/assets/EigenlebenView-nhdxSyQi.js +++ b/frontend/dist/assets/EigenlebenView-BSzH0Ym2.js @@ -1,6 +1,6 @@ -import{c as h,ap as b,r as i,j as e,L as g,aq as f,a2 as j,U as k,e as o,D as N,M as v,N as w,g as y}from"./index-BChEIiQl.js";import{B as S}from"./book-open-2v7qByfb.js";import{C as z}from"./circle-x-D8NCr-a2.js";/** +import{c as h,am as b,r as i,j as e,L as g,an as f,a0 as j,R as k,e as o,K as N,M as v,g as w}from"./index-Cejiqiju.js";import{C as y}from"./chevron-down-DNDogRoC.js";import{B as S}from"./book-open-CWgPuOOr.js";import{C as z}from"./circle-x-BxATYeTa.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const u=h("CircleDot",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]]),D={selbst:{icon:k,cls:"text-emerald-300 bg-emerald-500/10 border-emerald-500/30",erklaerung:"Diese Skills hat sich die Box selbst geschrieben — niemand hat sie ihr installiert."},repo:{icon:j,cls:"text-primary bg-primary/10 border-primary/25",erklaerung:"Von uns gebaut und über das Repo installiert (deploy/skills)."},bundled:{icon:f,cls:"text-muted-foreground bg-background/40 border-border/50",erklaerung:"Kamen mit Hermes mit — Standard-Ausstattung."}},C={disabled:"abgeschaltet",deprecated:"veraltet",broken:"defekt",error:"Fehler"};function B(t){if(!t)return"—";const n=new Date(t);return isNaN(n.getTime())?"—":n.toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"2-digit"})}function T(){const{data:t,isLoading:n}=b(),d=i.useMemo(()=>{const s=[];for(const r of(t==null?void 0:t.skills)??[]){const a=s[s.length-1];a&&a.herkunft===r.herkunft?a.skills.push(r):s.push({herkunft:r.herkunft,label:r.herkunft_label,skills:[r]})}return s},[t]);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Skills"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Die Fähigkeiten deiner Box — mit Herkunft, Nutzung und ob der Agent sie gerade laden kann (aktiv/inaktiv). Das ist derselbe Skill-Satz, mit dem Lucy spricht und die Nacht-Worker arbeiten. Darunter: was aus den Vorschlägen der Box wurde."})]}),n&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(g,{className:"h-4 w-4 animate-spin"})," Wird geladen …"]}),t&&!t.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Die Skills liegen auf der Box (~/.hermes/skills) — im lokalen Dev-Modus nicht verfügbar."}),(t==null?void 0:t.available)&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[e.jsx(c,{label:"Skills gesamt",wert:t.skills.length}),e.jsx(c,{label:"davon selbst erstellt",wert:t.selbst_erstellt,betone:!0}),e.jsx(c,{label:"Vorschläge angenommen",wert:t.bilanz.angenommen}),e.jsx(c,{label:"Vorschläge abgelehnt",wert:t.bilanz.abgelehnt})]}),d.map(s=>{const r=D[s.herkunft],a=r.icon;return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsxs("p",{className:o("inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-[11px] font-bold",r.cls),children:[e.jsx(a,{className:"h-3.5 w-3.5"})," ",s.label," · ",s.skills.length]}),e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground/70",children:r.erklaerung})]}),e.jsx("div",{className:"grid gap-2 md:grid-cols-2",children:s.skills.map(l=>e.jsx(L,{skill:l},l.id))})]},s.herkunft)}),e.jsx(A,{eintraege:t.bilanz.eintraege})]})]})}function c({label:t,wert:n,betone:d}){return e.jsxs("div",{className:o("rounded-xl border p-3",d?"border-emerald-500/30 bg-emerald-500/5":"border-border/50 bg-card/40"),children:[e.jsx("p",{className:o("font-space text-xl font-bold",d?"text-emerald-300":"text-foreground"),children:n}),e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70",children:t})]})}function L({skill:t}){const[n,d]=i.useState(!1),[s,r]=i.useState(null),[a,l]=i.useState(!1);async function x(){const m=!n;if(d(m),m&&s===null&&!a){l(!0);try{const p=await y(`/api/eigenleben/skill/${encodeURIComponent(t.id)}`);r(p.text)}catch{r("(Konnte den Skill-Text nicht laden.)")}finally{l(!1)}}}return e.jsxs("div",{className:"rounded-xl border border-border/50 bg-card/40 p-3 backdrop-blur-sm",children:[e.jsxs("button",{onClick:x,className:"flex w-full items-start gap-2 text-left cursor-pointer",children:[n?e.jsx(N,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground"}):e.jsx(v,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:t.name}),t.aktiv===!0&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-300",title:"Der Agent kann diesen Skill laden und nutzen.",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400"})," aktiv"]}),t.aktiv===!1&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-zinc-500/10 px-1.5 py-0.5 text-[9px] font-bold text-zinc-400",title:"Der Agent kann diesen Skill gerade NICHT laden — Plattform passt nicht (z. B. Apple-Skills auf Linux), Voraussetzungen fehlen oder per Config abgeschaltet.",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-zinc-500"})," inaktiv"]}),t.kategorie&&e.jsx("span",{className:"rounded bg-background/60 px-1.5 py-0.5 text-[9px] font-semibold text-muted-foreground/80",children:t.kategorie}),t.genutzt>0&&e.jsxs("span",{className:"rounded bg-primary/10 px-1.5 py-0.5 text-[9px] font-bold text-primary",title:`zuletzt: ${B(t.zuletzt_genutzt)}`,children:[t.genutzt,"× genutzt"]}),t.status!=="active"&&e.jsx("span",{className:"rounded bg-amber-500/10 px-1.5 py-0.5 text-[9px] font-bold text-amber-300",children:C[t.status]??t.status})]}),e.jsx("p",{className:o("mt-1 text-xs leading-relaxed text-foreground/75",!n&&"line-clamp-2"),children:t.beschreibung||"(keine Beschreibung im Skill hinterlegt)"})]})]}),n&&e.jsxs("div",{className:"mt-2 border-t border-border/40 pt-2",children:[e.jsxs("p",{className:"mb-1.5 flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/60",children:[e.jsx(S,{className:"h-3 w-3"})," So funktioniert er (SKILL.md)",t.autor?` · Autor: ${t.autor}`:""]}),a?e.jsx(g,{className:"h-4 w-4 animate-spin text-muted-foreground"}):e.jsx("pre",{className:"max-h-80 overflow-y-auto whitespace-pre-wrap rounded-lg bg-background/50 p-2.5 font-mono text-[10.5px] leading-relaxed text-foreground/80 scrollbar-thin",children:s??""})]})]})}function A({eintraege:t}){const[n,d]=i.useState(!1),s=n?t:t.slice(0,12);return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(u,{className:"h-3.5 w-3.5"})," Vorschlags-Bilanz — was die Box vorschlug und was daraus wurde"]}),t.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-6 text-center text-xs text-muted-foreground",children:"Noch keine Vorschläge verbucht. Sobald die Box etwas vorschlägt und du klickst, steht die Entscheidung hier."}),e.jsx("div",{className:"space-y-2",children:s.map((r,a)=>{const l=r.art==="angenommen",x=l?w:r.art==="abgelehnt"?z:u;return e.jsxs("div",{className:"flex items-start gap-2.5 rounded-xl border border-border/50 bg-card/40 p-3",children:[e.jsx(x,{className:o("mt-0.5 h-4 w-4 shrink-0",l?"text-emerald-400":r.art==="abgelehnt"?"text-red-400":"text-amber-300")}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs font-semibold text-foreground",children:r.titel}),e.jsx("span",{className:o("rounded px-1.5 py-0.5 text-[9px] font-bold uppercase",l?"bg-emerald-500/10 text-emerald-300":r.art==="abgelehnt"?"bg-red-500/10 text-red-300":"bg-amber-500/10 text-amber-300"),children:r.art}),e.jsx("span",{className:"ml-auto font-mono text-[10px] text-muted-foreground/60",children:r.ts?new Date(r.ts*1e3).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit"}):""})]}),r.detail&&e.jsx("p",{className:"mt-1 text-xs leading-relaxed text-foreground/70",children:r.detail})]})]},`${r.titel}-${r.ts}-${a}`)})}),!n&&t.length>12&&e.jsxs("button",{onClick:()=>d(!0),className:"text-[11px] text-muted-foreground underline hover:text-foreground cursor-pointer",children:["Alle ",t.length," Einträge anzeigen"]})]})}export{T as EigenlebenView}; + */const u=h("CircleDot",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}]]),D={selbst:{icon:k,cls:"text-emerald-300 bg-emerald-500/10 border-emerald-500/30",erklaerung:"Diese Skills hat sich die Box selbst geschrieben — niemand hat sie ihr installiert."},repo:{icon:j,cls:"text-primary bg-primary/10 border-primary/25",erklaerung:"Von uns gebaut und über das Repo installiert (deploy/skills)."},bundled:{icon:f,cls:"text-muted-foreground bg-background/40 border-border/50",erklaerung:"Kamen mit Hermes mit — Standard-Ausstattung."}},C={disabled:"abgeschaltet",deprecated:"veraltet",broken:"defekt",error:"Fehler"};function B(t){if(!t)return"—";const n=new Date(t);return isNaN(n.getTime())?"—":n.toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit",year:"2-digit"})}function T(){const{data:t,isLoading:n}=b(),d=i.useMemo(()=>{const s=[];for(const r of(t==null?void 0:t.skills)??[]){const a=s[s.length-1];a&&a.herkunft===r.herkunft?a.skills.push(r):s.push({herkunft:r.herkunft,label:r.herkunft_label,skills:[r]})}return s},[t]);return e.jsxs("div",{className:"space-y-7",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Skills"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Die Fähigkeiten deiner Box — mit Herkunft, Nutzung und ob der Agent sie gerade laden kann (aktiv/inaktiv). Das ist derselbe Skill-Satz, mit dem Lucy spricht und die Nacht-Worker arbeiten. Darunter: was aus den Vorschlägen der Box wurde."})]}),n&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(g,{className:"h-4 w-4 animate-spin"})," Wird geladen …"]}),t&&!t.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Die Skills liegen auf der Box (~/.hermes/skills) — im lokalen Dev-Modus nicht verfügbar."}),(t==null?void 0:t.available)&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-2 sm:grid-cols-4",children:[e.jsx(c,{label:"Skills gesamt",wert:t.skills.length}),e.jsx(c,{label:"davon selbst erstellt",wert:t.selbst_erstellt,betone:!0}),e.jsx(c,{label:"Vorschläge angenommen",wert:t.bilanz.angenommen}),e.jsx(c,{label:"Vorschläge abgelehnt",wert:t.bilanz.abgelehnt})]}),d.map(s=>{const r=D[s.herkunft],a=r.icon;return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsxs("p",{className:o("inline-flex items-center gap-1.5 rounded-md border px-2 py-1 text-[11px] font-bold",r.cls),children:[e.jsx(a,{className:"h-3.5 w-3.5"})," ",s.label," · ",s.skills.length]}),e.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground/70",children:r.erklaerung})]}),e.jsx("div",{className:"grid gap-2 md:grid-cols-2",children:s.skills.map(l=>e.jsx(L,{skill:l},l.id))})]},s.herkunft)}),e.jsx(A,{eintraege:t.bilanz.eintraege})]})]})}function c({label:t,wert:n,betone:d}){return e.jsxs("div",{className:o("rounded-xl border p-3",d?"border-emerald-500/30 bg-emerald-500/5":"border-border/50 bg-card/40"),children:[e.jsx("p",{className:o("font-space text-xl font-bold",d?"text-emerald-300":"text-foreground"),children:n}),e.jsx("p",{className:"text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/70",children:t})]})}function L({skill:t}){const[n,d]=i.useState(!1),[s,r]=i.useState(null),[a,l]=i.useState(!1);async function x(){const m=!n;if(d(m),m&&s===null&&!a){l(!0);try{const p=await w(`/api/eigenleben/skill/${encodeURIComponent(t.id)}`);r(p.text)}catch{r("(Konnte den Skill-Text nicht laden.)")}finally{l(!1)}}}return e.jsxs("div",{className:"rounded-xl border border-border/50 bg-card/40 p-3 backdrop-blur-sm",children:[e.jsxs("button",{onClick:x,className:"flex w-full items-start gap-2 text-left cursor-pointer",children:[n?e.jsx(y,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground"}):e.jsx(N,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"text-sm font-semibold text-foreground",children:t.name}),t.aktiv===!0&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-emerald-500/10 px-1.5 py-0.5 text-[9px] font-bold text-emerald-300",title:"Der Agent kann diesen Skill laden und nutzen.",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-400"})," aktiv"]}),t.aktiv===!1&&e.jsxs("span",{className:"flex items-center gap-1 rounded bg-zinc-500/10 px-1.5 py-0.5 text-[9px] font-bold text-zinc-400",title:"Der Agent kann diesen Skill gerade NICHT laden — Plattform passt nicht (z. B. Apple-Skills auf Linux), Voraussetzungen fehlen oder per Config abgeschaltet.",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-zinc-500"})," inaktiv"]}),t.kategorie&&e.jsx("span",{className:"rounded bg-background/60 px-1.5 py-0.5 text-[9px] font-semibold text-muted-foreground/80",children:t.kategorie}),t.genutzt>0&&e.jsxs("span",{className:"rounded bg-primary/10 px-1.5 py-0.5 text-[9px] font-bold text-primary",title:`zuletzt: ${B(t.zuletzt_genutzt)}`,children:[t.genutzt,"× genutzt"]}),t.status!=="active"&&e.jsx("span",{className:"rounded bg-amber-500/10 px-1.5 py-0.5 text-[9px] font-bold text-amber-300",children:C[t.status]??t.status})]}),e.jsx("p",{className:o("mt-1 text-xs leading-relaxed text-foreground/75",!n&&"line-clamp-2"),children:t.beschreibung||"(keine Beschreibung im Skill hinterlegt)"})]})]}),n&&e.jsxs("div",{className:"mt-2 border-t border-border/40 pt-2",children:[e.jsxs("p",{className:"mb-1.5 flex items-center gap-1 text-[10px] font-semibold uppercase tracking-wide text-muted-foreground/60",children:[e.jsx(S,{className:"h-3 w-3"})," So funktioniert er (SKILL.md)",t.autor?` · Autor: ${t.autor}`:""]}),a?e.jsx(g,{className:"h-4 w-4 animate-spin text-muted-foreground"}):e.jsx("pre",{className:"max-h-80 overflow-y-auto whitespace-pre-wrap rounded-lg bg-background/50 p-2.5 font-mono text-[10.5px] leading-relaxed text-foreground/80 scrollbar-thin",children:s??""})]})]})}function A({eintraege:t}){const[n,d]=i.useState(!1),s=n?t:t.slice(0,12);return e.jsxs("section",{className:"space-y-3",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(u,{className:"h-3.5 w-3.5"})," Vorschlags-Bilanz — was die Box vorschlug und was daraus wurde"]}),t.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-6 text-center text-xs text-muted-foreground",children:"Noch keine Vorschläge verbucht. Sobald die Box etwas vorschlägt und du klickst, steht die Entscheidung hier."}),e.jsx("div",{className:"space-y-2",children:s.map((r,a)=>{const l=r.art==="angenommen",x=l?v:r.art==="abgelehnt"?z:u;return e.jsxs("div",{className:"flex items-start gap-2.5 rounded-xl border border-border/50 bg-card/40 p-3",children:[e.jsx(x,{className:o("mt-0.5 h-4 w-4 shrink-0",l?"text-emerald-400":r.art==="abgelehnt"?"text-red-400":"text-amber-300")}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"font-mono text-xs font-semibold text-foreground",children:r.titel}),e.jsx("span",{className:o("rounded px-1.5 py-0.5 text-[9px] font-bold uppercase",l?"bg-emerald-500/10 text-emerald-300":r.art==="abgelehnt"?"bg-red-500/10 text-red-300":"bg-amber-500/10 text-amber-300"),children:r.art}),e.jsx("span",{className:"ml-auto font-mono text-[10px] text-muted-foreground/60",children:r.ts?new Date(r.ts*1e3).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit"}):""})]}),r.detail&&e.jsx("p",{className:"mt-1 text-xs leading-relaxed text-foreground/70",children:r.detail})]})]},`${r.titel}-${r.ts}-${a}`)})}),!n&&t.length>12&&e.jsxs("button",{onClick:()=>d(!0),className:"text-[11px] text-muted-foreground underline hover:text-foreground cursor-pointer",children:["Alle ",t.length," Einträge anzeigen"]})]})}export{T as EigenlebenView}; diff --git a/frontend/dist/assets/GraphView-B3HC-zB_.js b/frontend/dist/assets/GraphView-DZMQCEHP.js similarity index 99% rename from frontend/dist/assets/GraphView-B3HC-zB_.js rename to frontend/dist/assets/GraphView-DZMQCEHP.js index 9704a82..2c68b44 100644 --- a/frontend/dist/assets/GraphView-B3HC-zB_.js +++ b/frontend/dist/assets/GraphView-DZMQCEHP.js @@ -1,4 +1,4 @@ -import{at as Lt,r as V,au as Zi,av as Gn,aw as Vn,ax as Ki,ay as Qi,az as Wn,aA as Bn,aB as Ji,j as lt,a3 as to}from"./index-BChEIiQl.js";function eo(e,n){let r=0;for(let i of e)(i=+i)&&(r+=i);return r}var Xn=180/Math.PI,un={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function Vr(e,n,r,i,o,a){var s,u,f;return(s=Math.sqrt(e*e+n*n))&&(e/=s,n/=s),(f=e*r+n*i)&&(r-=e*f,i-=n*f),(u=Math.sqrt(r*r+i*i))&&(r/=u,i/=u,f/=u),e*i180?c+=360:c-l>180&&(l+=360),d.push({i:h.push(o(h)+"rotate(",null,i)-2,x:Lt(l,c)})):c&&h.push(o(h)+"rotate("+c+i)}function u(l,c,h,d){l!==c?d.push({i:h.push(o(h)+"skewX(",null,i)-2,x:Lt(l,c)}):c&&h.push(o(h)+"skewX("+c+i)}function f(l,c,h,d,p,y){if(l!==h||c!==d){var v=p.push(o(p)+"scale(",null,",",null,")");y.push({i:v-4,x:Lt(l,h)},{i:v-2,x:Lt(c,d)})}else(h!==1||d!==1)&&p.push(o(p)+"scale("+h+","+d+")")}return function(l,c){var h=[],d=[];return l=e(l),c=e(c),a(l.translateX,l.translateY,c.translateX,c.translateY,h,d),s(l.rotate,c.rotate,h,d),u(l.skewX,c.skewX,h,d),f(l.scaleX,l.scaleY,c.scaleX,c.scaleY,h,d),l=c=null,function(p){for(var y=-1,v=d.length,_;++ye.length)&&(n=e.length);for(var r=0,i=new Array(n);r180?c+=360:c-l>180&&(l+=360),d.push({i:h.push(o(h)+"rotate(",null,i)-2,x:Lt(l,c)})):c&&h.push(o(h)+"rotate("+c+i)}function u(l,c,h,d){l!==c?d.push({i:h.push(o(h)+"skewX(",null,i)-2,x:Lt(l,c)}):c&&h.push(o(h)+"skewX("+c+i)}function f(l,c,h,d,p,y){if(l!==h||c!==d){var v=p.push(o(p)+"scale(",null,",",null,")");y.push({i:v-4,x:Lt(l,h)},{i:v-2,x:Lt(c,d)})}else(h!==1||d!==1)&&p.push(o(p)+"scale("+h+","+d+")")}return function(l,c){var h=[],d=[];return l=e(l),c=e(c),a(l.translateX,l.translateY,c.translateX,c.translateY,h,d),s(l.rotate,c.rotate,h,d),u(l.skewX,c.skewX,h,d),f(l.scaleX,l.scaleY,c.scaleX,c.scaleY,h,d),l=c=null,function(p){for(var y=-1,v=d.length,_;++ye.length)&&(n=e.length);for(var r=0,i=new Array(n);ra,methodNames:i=[],initPropNames:o=[]}={}){return V.forwardRef((a,s)=>{const u=V.useRef(),f=V.useMemo(()=>{const h=Object.fromEntries(o.filter(d=>a.hasOwnProperty(d)).map(d=>[d,a[d]]));return e(h)},[]);Kn(()=>{f(r(u.current))},V.useLayoutEffect),Kn(()=>f._destructor instanceof Function?f._destructor:void 0);const l=V.useCallback((h,...d)=>f[h]instanceof Function?f[h](...d):void 0,[f]),c=V.useRef({});return Object.keys(xo(a,[...i,...o])).filter(h=>c.current[h]!==a[h]).forEach(h=>l(h,a[h])),c.current=a,V.useImperativeHandle(s,()=>Object.fromEntries(i.map(h=>[h,(...d)=>l(h,...d)])),[l]),Zi.createElement(n,{ref:u})})}function Kn(e,n=V.useEffect){const r=V.useRef(),i=V.useRef(!1),o=V.useRef(!1),[a,s]=V.useState(0);i.current&&(o.current=!0),n(()=>(i.current||(r.current=e(),i.current=!0),s(u=>u+1),()=>{o.current&&(r.current&&r.current(),r.current=void 0,i.current=!1,o.current=!1)}),[])}var fn="http://www.w3.org/1999/xhtml";const Qn={svg:"http://www.w3.org/2000/svg",xhtml:fn,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function qe(e){var n=e+="",r=n.indexOf(":");return r>=0&&(n=e.slice(0,r))!=="xmlns"&&(e=e.slice(r+1)),Qn.hasOwnProperty(n)?{space:Qn[n],local:e}:e}function ko(e){return function(){var n=this.ownerDocument,r=this.namespaceURI;return r===fn&&n.documentElement.namespaceURI===fn?n.createElement(e):n.createElementNS(r,e)}}function Co(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function Xr(e){var n=qe(e);return(n.local?Co:ko)(n)}function Ao(){}function An(e){return e==null?Ao:function(){return this.querySelector(e)}}function So(e){typeof e!="function"&&(e=An(e));for(var n=this._groups,r=n.length,i=new Array(r),o=0;o=T&&(T=w+1);!(b=_[T])&&++T=0;)(s=i[o])&&(a&&s.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(s,a),a=s);return this}function Ko(e){e||(e=Qo);function n(h,d){return h&&d?e(h.__data__,d.__data__):!h-!d}for(var r=this._groups,i=r.length,o=new Array(i),a=0;an?1:e>=n?0:NaN}function Jo(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function ta(){return Array.from(this)}function ea(){for(var e=this._groups,n=0,r=e.length;n1?this.each((n==null?ha:typeof n=="function"?pa:da)(e,n,r??"")):Bt(this.node(),e)}function Bt(e,n){return e.style.getPropertyValue(n)||Jr(e).getComputedStyle(e,null).getPropertyValue(n)}function ya(e){return function(){delete this[e]}}function _a(e,n){return function(){this[e]=n}}function va(e,n){return function(){var r=n.apply(this,arguments);r==null?delete this[e]:this[e]=r}}function ma(e,n){return arguments.length>1?this.each((n==null?ya:typeof n=="function"?va:_a)(e,n)):this.node()[e]}function ti(e){return e.trim().split(/^|\s+/)}function Sn(e){return e.classList||new ei(e)}function ei(e){this._node=e,this._names=ti(e.getAttribute("class")||"")}ei.prototype={add:function(e){var n=this._names.indexOf(e);n<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var n=this._names.indexOf(e);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function ni(e,n){for(var r=Sn(e),i=-1,o=n.length;++i=0&&(r=n.slice(i+1),n=n.slice(0,i)),{type:n,name:r}})}function Ba(e){return function(){var n=this.__on;if(n){for(var r=0,i=-1,o=n.length,a;r{}};function ve(){for(var e=0,n=arguments.length,r={},i;e=0&&(i=r.slice(o+1),r=r.slice(0,o)),r&&!n.hasOwnProperty(r))throw new Error("unknown type: "+r);return{type:r,name:i}})}Ae.prototype=ve.prototype={constructor:Ae,on:function(e,n){var r=this._,i=rs(e+"",r),o,a=-1,s=i.length;if(arguments.length<2){for(;++a0)for(var r=new Array(o),i=0,o,a;i()=>e;function cn(e,{sourceEvent:n,subject:r,target:i,identifier:o,active:a,x:s,y:u,dx:f,dy:l,dispatch:c}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},subject:{value:r,enumerable:!0,configurable:!0},target:{value:i,enumerable:!0,configurable:!0},identifier:{value:o,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:s,enumerable:!0,configurable:!0},y:{value:u,enumerable:!0,configurable:!0},dx:{value:f,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:c}})}cn.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function as(e){return!e.ctrlKey&&!e.button}function ss(){return this.parentNode}function us(e,n){return n??{x:e.x,y:e.y}}function ls(){return navigator.maxTouchPoints||"ontouchstart"in this}function fs(){var e=as,n=ss,r=us,i=ls,o={},a=ve("start","drag","end"),s=0,u,f,l,c,h=0;function d(x){x.on("mousedown.drag",p).filter(i).on("touchstart.drag",_).on("touchmove.drag",g,os).on("touchend.drag touchcancel.drag",w).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(x,b){if(!(c||!e.call(this,x,b))){var C=T(this,n.call(this,x,b),x,b,"mouse");C&&(pt(x.view).on("mousemove.drag",y,pe).on("mouseup.drag",v,pe),ai(x.view),Ze(x),l=!1,u=x.clientX,f=x.clientY,C("start",x))}}function y(x){if(Wt(x),!l){var b=x.clientX-u,C=x.clientY-f;l=b*b+C*C>h}o.mouse("drag",x)}function v(x){pt(x.view).on("mousemove.drag mouseup.drag",null),si(x.view,l),Wt(x),o.mouse("end",x)}function _(x,b){if(e.call(this,x,b)){var C=x.changedTouches,S=n.call(this,x,b),M=C.length,N,P;for(N=0;N=0&&e._call.call(void 0,n),e=e._next;--Xt}function tr(){Ht=(Re=ge.now())+Ge,Xt=ae=0;try{hs()}finally{Xt=0,ps(),Ht=0}}function ds(){var e=ge.now(),n=e-Re;n>ui&&(Ge-=n,Re=e)}function ps(){for(var e,n=ze,r,i=1/0;n;)n._call?(i>n._time&&(i=n._time),e=n,n=n._next):(r=n._next,n._next=null,n=e?e._next=r:ze=r);se=e,hn(i)}function hn(e){if(!Xt){ae&&(ae=clearTimeout(ae));var n=e-Ht;n>24?(e<1/0&&(ae=setTimeout(tr,e-ge.now()-Ge)),Qt&&(Qt=clearInterval(Qt))):(Qt||(Re=ge.now(),Qt=setInterval(ds,ui)),Xt=1,li(tr))}}function er(e,n,r){var i=new Ne;return n=n==null?0:+n,i.restart(o=>{i.stop(),e(o+n)},n,r),i}var gs=ve("start","end","cancel","interrupt"),ys=[],fi=0,nr=1,dn=2,Se=3,rr=4,pn=5,Te=6;function Ve(e,n,r,i,o,a){var s=e.__transition;if(!s)e.__transition={};else if(r in s)return;_s(e,r,{name:n,index:i,group:o,on:gs,tween:ys,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:fi})}function Pn(e,n){var r=vt(e,n);if(r.state>fi)throw new Error("too late; already scheduled");return r}function Ct(e,n){var r=vt(e,n);if(r.state>Se)throw new Error("too late; already running");return r}function vt(e,n){var r=e.__transition;if(!r||!(r=r[n]))throw new Error("transition not found");return r}function _s(e,n,r){var i=e.__transition,o;i[n]=r,r.timer=Mn(a,0,r.time);function a(l){r.state=nr,r.timer.restart(s,r.delay,r.time),r.delay<=l&&s(l-r.delay)}function s(l){var c,h,d,p;if(r.state!==nr)return f();for(c in i)if(p=i[c],p.name===r.name){if(p.state===Se)return er(s);p.state===rr?(p.state=Te,p.timer.stop(),p.on.call("interrupt",e,e.__data__,p.index,p.group),delete i[c]):+cdn&&i.state=0&&(n=n.slice(0,r)),!n||n==="start"})}function Bs(e,n,r){var i,o,a=Ws(n)?Pn:Ct;return function(){var s=a(this,e),u=s.on;u!==i&&(o=(i=u).copy()).on(n,r),s.on=o}}function Xs(e,n){var r=this._id;return arguments.length<2?vt(this.node(),r).on.on(e):this.each(Bs(r,e,n))}function Ys(e){return function(){var n=this.parentNode;for(var r in this.__transition)if(+r!==e)return;n&&n.removeChild(this)}}function Zs(){return this.on("end.remove",Ys(this._id))}function Ks(e){var n=this._name,r=this._id;typeof e!="function"&&(e=An(e));for(var i=this._groups,o=i.length,a=new Array(o),s=0;s()=>e;function wu(e,{sourceEvent:n,target:r,transform:i,dispatch:o}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:o}})}function Et(e,n,r){this.k=e,this.x=n,this.y=r}Et.prototype={constructor:Et,scale:function(e){return e===1?this:new Et(this.k*e,this.x,this.y)},translate:function(e,n){return e===0&n===0?this:new Et(this.k,this.x+this.k*e,this.y+this.k*n)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var En=new Et(1,0,0);mt.prototype=Et.prototype;function mt(e){for(;!e.__zoom;)if(!(e=e.parentNode))return En;return e.__zoom}function Ke(e){e.stopImmediatePropagation()}function Jt(e){e.preventDefault(),e.stopImmediatePropagation()}function ku(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function Cu(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function ir(){return this.__zoom||En}function Au(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Su(){return navigator.maxTouchPoints||"ontouchstart"in this}function Tu(e,n,r){var i=e.invertX(n[0][0])-r[0][0],o=e.invertX(n[1][0])-r[1][0],a=e.invertY(n[0][1])-r[0][1],s=e.invertY(n[1][1])-r[1][1];return e.translate(o>i?(i+o)/2:Math.min(0,i)||Math.max(0,o),s>a?(a+s)/2:Math.min(0,a)||Math.max(0,s))}function Mu(){var e=ku,n=Cu,r=Tu,i=Au,o=Su,a=[0,1/0],s=[[-1/0,-1/0],[1/0,1/0]],u=250,f=lo,l=ve("start","zoom","end"),c,h,d,p=500,y=150,v=0,_=10;function g(A){A.property("__zoom",ir).on("wheel.zoom",M,{passive:!1}).on("mousedown.zoom",N).on("dblclick.zoom",P).filter(o).on("touchstart.zoom",R).on("touchmove.zoom",D).on("touchend.zoom touchcancel.zoom",L).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}g.transform=function(A,I,E,k){var O=A.selection?A.selection():A;O.property("__zoom",ir),A!==O?b(A,I,E,k):O.interrupt().each(function(){C(this,arguments).event(k).start().zoom(null,typeof I=="function"?I.apply(this,arguments):I).end()})},g.scaleBy=function(A,I,E,k){g.scaleTo(A,function(){var O=this.__zoom.k,j=typeof I=="function"?I.apply(this,arguments):I;return O*j},E,k)},g.scaleTo=function(A,I,E,k){g.transform(A,function(){var O=n.apply(this,arguments),j=this.__zoom,$=E==null?x(O):typeof E=="function"?E.apply(this,arguments):E,U=j.invert($),F=typeof I=="function"?I.apply(this,arguments):I;return r(T(w(j,F),$,U),O,s)},E,k)},g.translateBy=function(A,I,E,k){g.transform(A,function(){return r(this.__zoom.translate(typeof I=="function"?I.apply(this,arguments):I,typeof E=="function"?E.apply(this,arguments):E),n.apply(this,arguments),s)},null,k)},g.translateTo=function(A,I,E,k,O){g.transform(A,function(){var j=n.apply(this,arguments),$=this.__zoom,U=k==null?x(j):typeof k=="function"?k.apply(this,arguments):k;return r(En.translate(U[0],U[1]).scale($.k).translate(typeof I=="function"?-I.apply(this,arguments):-I,typeof E=="function"?-E.apply(this,arguments):-E),j,s)},k,O)};function w(A,I){return I=Math.max(a[0],Math.min(a[1],I)),I===A.k?A:new Et(I,A.x,A.y)}function T(A,I,E){var k=I[0]-E[0]*A.k,O=I[1]-E[1]*A.k;return k===A.x&&O===A.y?A:new Et(A.k,k,O)}function x(A){return[(+A[0][0]+ +A[1][0])/2,(+A[0][1]+ +A[1][1])/2]}function b(A,I,E,k){A.on("start.zoom",function(){C(this,arguments).event(k).start()}).on("interrupt.zoom end.zoom",function(){C(this,arguments).event(k).end()}).tween("zoom",function(){var O=this,j=arguments,$=C(O,j).event(k),U=n.apply(O,j),F=E==null?x(U):typeof E=="function"?E.apply(O,j):E,q=Math.max(U[1][0]-U[0][0],U[1][1]-U[0][1]),G=O.__zoom,B=typeof I=="function"?I.apply(O,j):I,J=f(G.invert(F).concat(q/G.k),B.invert(F).concat(q/B.k));return function(Y){if(Y===1)Y=B;else{var at=J(Y),tt=q/at[2];Y=new Et(tt,F[0]-at[0]*tt,F[1]-at[1]*tt)}$.zoom(null,Y)}})}function C(A,I,E){return!E&&A.__zooming||new S(A,I)}function S(A,I){this.that=A,this.args=I,this.active=0,this.sourceEvent=null,this.extent=n.apply(A,I),this.taps=0}S.prototype={event:function(A){return A&&(this.sourceEvent=A),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(A,I){return this.mouse&&A!=="mouse"&&(this.mouse[1]=I.invert(this.mouse[0])),this.touch0&&A!=="touch"&&(this.touch0[1]=I.invert(this.touch0[0])),this.touch1&&A!=="touch"&&(this.touch1[1]=I.invert(this.touch1[0])),this.that.__zoom=I,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(A){var I=pt(this.that).datum();l.call(A,this.that,new wu(A,{sourceEvent:this.sourceEvent,target:g,transform:this.that.__zoom,dispatch:l}),I)}};function M(A,...I){if(!e.apply(this,arguments))return;var E=C(this,I).event(A),k=this.__zoom,O=Math.max(a[0],Math.min(a[1],k.k*Math.pow(2,i.apply(this,arguments)))),j=bt(A);if(E.wheel)(E.mouse[0][0]!==j[0]||E.mouse[0][1]!==j[1])&&(E.mouse[1]=k.invert(E.mouse[0]=j)),clearTimeout(E.wheel);else{if(k.k===O)return;E.mouse=[j,k.invert(j)],Me(this),E.start()}Jt(A),E.wheel=setTimeout($,y),E.zoom("mouse",r(T(w(k,O),E.mouse[0],E.mouse[1]),E.extent,s));function $(){E.wheel=null,E.end()}}function N(A,...I){if(d||!e.apply(this,arguments))return;var E=A.currentTarget,k=C(this,I,!0).event(A),O=pt(A.view).on("mousemove.zoom",F,!0).on("mouseup.zoom",q,!0),j=bt(A,E),$=A.clientX,U=A.clientY;ai(A.view),Ke(A),k.mouse=[j,this.__zoom.invert(j)],Me(this),k.start();function F(G){if(Jt(G),!k.moved){var B=G.clientX-$,J=G.clientY-U;k.moved=B*B+J*J>v}k.event(G).zoom("mouse",r(T(k.that.__zoom,k.mouse[0]=bt(G,E),k.mouse[1]),k.extent,s))}function q(G){O.on("mousemove.zoom mouseup.zoom",null),si(G.view,k.moved),Jt(G),k.event(G).end()}}function P(A,...I){if(e.apply(this,arguments)){var E=this.__zoom,k=bt(A.changedTouches?A.changedTouches[0]:A,this),O=E.invert(k),j=E.k*(A.shiftKey?.5:2),$=r(T(w(E,j),k,O),n.apply(this,I),s);Jt(A),u>0?pt(this).transition().duration(u).call(b,$,k,A):pt(this).call(g.transform,$,k,A)}}function R(A,...I){if(e.apply(this,arguments)){var E=A.touches,k=E.length,O=C(this,I,A.changedTouches.length===k).event(A),j,$,U,F;for(Ke(A),$=0;$=n||S<0||h&&M>=a}function g(){var C=Qe();if(_(C))return w(C);u=setTimeout(g,v(C))}function w(C){return u=void 0,d&&i?p(C):(i=o=void 0,s)}function T(){u!==void 0&&clearTimeout(u),l=0,i=f=o=u=void 0}function x(){return u===void 0?s:w(Qe())}function b(){var C=Qe(),S=_(C);if(i=arguments,o=this,f=C,S){if(u===void 0)return y(f);if(h)return clearTimeout(u),u=setTimeout(g,n),p(f)}return u===void 0&&(u=setTimeout(g,n)),s}return b.cancel=T,b.flush=x,b}var tl="Expected a function";function el(e,n,r){var i=!0,o=!0;if(typeof e!="function")throw new TypeError(tl);return De(r)&&(i="leading"in r?!!r.leading:i,o="trailing"in r?!!r.trailing:o),yi(e,n,{leading:i,maxWait:n,trailing:o})}var Ut=Object.freeze({Linear:Object.freeze({None:function(e){return e},In:function(e){return e},Out:function(e){return e},InOut:function(e){return e}}),Quadratic:Object.freeze({In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}}),Cubic:Object.freeze({In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}}),Quartic:Object.freeze({In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}}),Quintic:Object.freeze({In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}}),Sinusoidal:Object.freeze({In:function(e){return 1-Math.sin((1-e)*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return .5*(1-Math.sin(Math.PI*(.5-e)))}}),Exponential:Object.freeze({In:function(e){return e===0?0:Math.pow(1024,e-1)},Out:function(e){return e===1?1:1-Math.pow(2,-10*e)},InOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)}}),Circular:Object.freeze({In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}}),Elastic:Object.freeze({In:function(e){return e===0?0:e===1?1:-Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI)},Out:function(e){return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1},InOut:function(e){return e===0?0:e===1?1:(e*=2,e<1?-.5*Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI):.5*Math.pow(2,-10*(e-1))*Math.sin((e-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(e){var n=1.70158;return e===1?1:e*e*((n+1)*e-n)},Out:function(e){var n=1.70158;return e===0?0:--e*e*((n+1)*e+n)+1},InOut:function(e){var n=2.5949095;return(e*=2)<1?.5*(e*e*((n+1)*e-n)):.5*((e-=2)*e*((n+1)*e+n)+2)}}),Bounce:Object.freeze({In:function(e){return 1-Ut.Bounce.Out(1-e)},Out:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},InOut:function(e){return e<.5?Ut.Bounce.In(e*2)*.5:Ut.Bounce.Out(e*2-1)*.5+.5}}),generatePow:function(e){return e===void 0&&(e=4),e=e1e4?1e4:e,{In:function(n){return Math.pow(n,e)},Out:function(n){return 1-Math.pow(1-n,e)},InOut:function(n){return n<.5?Math.pow(n*2,e)/2:(1-Math.pow(2-n*2,e))/2+.5}}}}),ue=function(){return performance.now()},_i=(function(){function e(){this._tweens={},this._tweensAddedDuringUpdate={}}return e.prototype.getAll=function(){var n=this;return Object.keys(this._tweens).map(function(r){return n._tweens[r]})},e.prototype.removeAll=function(){this._tweens={}},e.prototype.add=function(n){this._tweens[n.getId()]=n,this._tweensAddedDuringUpdate[n.getId()]=n},e.prototype.remove=function(n){delete this._tweens[n.getId()],delete this._tweensAddedDuringUpdate[n.getId()]},e.prototype.update=function(n,r){n===void 0&&(n=ue()),r===void 0&&(r=!1);var i=Object.keys(this._tweens);if(i.length===0)return!1;for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var o=0;o1?a(e[r],e[r-1],r-i):a(e[o],e[o+1>r?r:o+1],i-o)},Utils:{Linear:function(e,n,r){return(n-e)*r+e}}},vi=(function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e})(),yn=new _i,ur=(function(){function e(n,r){r===void 0&&(r=yn),this._object=n,this._group=r,this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=Ut.Linear.None,this._interpolationFunction=gn.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=vi.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1}return e.prototype.getId=function(){return this._id},e.prototype.isPlaying=function(){return this._isPlaying},e.prototype.isPaused=function(){return this._isPaused},e.prototype.getDuration=function(){return this._duration},e.prototype.to=function(n,r){if(r===void 0&&(r=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=n,this._propertiesAreSetUp=!1,this._duration=r<0?0:r,this},e.prototype.duration=function(n){return n===void 0&&(n=1e3),this._duration=n<0?0:n,this},e.prototype.dynamic=function(n){return n===void 0&&(n=!1),this._isDynamic=n,this},e.prototype.start=function(n,r){if(n===void 0&&(n=ue()),r===void 0&&(r=!1),this._isPlaying)return this;if(this._group&&this._group.add(this),this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=n,this._startTime+=this._delayTime,!this._propertiesAreSetUp||r){if(this._propertiesAreSetUp=!0,!this._isDynamic){var o={};for(var a in this._valuesEnd)o[a]=this._valuesEnd[a];this._valuesEnd=o}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,r)}return this},e.prototype.startFromCurrentValues=function(n){return this.start(n,!0)},e.prototype._setupProperties=function(n,r,i,o,a){for(var s in i){var u=n[s],f=Array.isArray(u),l=f?"array":typeof u,c=!f&&Array.isArray(i[s]);if(!(l==="undefined"||l==="function")){if(c){var h=i[s];if(h.length===0)continue;for(var d=[u],p=0,y=h.length;p"u"||a)&&(r[s]=u),f||(r[s]*=1),c?o[s]=i[s].slice().reverse():o[s]=r[s]||0}}},e.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._group&&this._group.remove(this),this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},e.prototype.end=function(){return this._goToEnd=!0,this.update(1/0),this},e.prototype.pause=function(n){return n===void 0&&(n=ue()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=n,this._group&&this._group.remove(this),this)},e.prototype.resume=function(n){return n===void 0&&(n=ue()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=n-this._pauseStart,this._pauseStart=0,this._group&&this._group.add(this),this)},e.prototype.stopChainedTweens=function(){for(var n=0,r=this._chainedTweens.length;ns)return!1;r&&this.start(n,!0)}if(this._goToEnd=!1,nl)return 1;var _=Math.trunc(u/f),g=u-_*f,w=Math.min(g/i._duration,1);return w===0&&u===i._duration?1:w},h=c(),d=this._easingFunction(h);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,d),this._onUpdateCallback&&this._onUpdateCallback(this._object,h),this._duration===0||u>=this._duration)if(this._repeat>0){var p=Math.min(Math.trunc((u-this._duration)/f)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=p);for(a in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[a]=="string"&&(this._valuesStartRepeat[a]=this._valuesStartRepeat[a]+parseFloat(this._valuesEnd[a])),this._yoyo&&this._swapEndStartRepeatValues(a),this._valuesStart[a]=this._valuesStartRepeat[a];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=f*p,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var y=0,v=this._chainedTweens.length;ye.length)&&(n=e.length);for(var r=0,i=Array(n);r=0,a=!r&&o&&(n==="hex"||n==="hex6"||n==="hex3"||n==="hex4"||n==="hex8"||n==="name");return a?n==="name"&&this._a===0?this.toName():this.toRgbString():(n==="rgb"&&(i=this.toRgbString()),n==="prgb"&&(i=this.toPercentageRgbString()),(n==="hex"||n==="hex6")&&(i=this.toHexString()),n==="hex3"&&(i=this.toHexString(!0)),n==="hex4"&&(i=this.toHex8String(!0)),n==="hex8"&&(i=this.toHex8String()),n==="name"&&(i=this.toName()),n==="hsl"&&(i=this.toHslString()),n==="hsv"&&(i=this.toHsvString()),i||this.toHexString())},clone:function(){return H(this.toString())},_applyModification:function(n,r){var i=n.apply(null,[this].concat([].slice.call(r)));return this._r=i._r,this._g=i._g,this._b=i._b,this.setAlpha(i._a),this},lighten:function(){return this._applyModification(bl,arguments)},brighten:function(){return this._applyModification(xl,arguments)},darken:function(){return this._applyModification(wl,arguments)},desaturate:function(){return this._applyModification(_l,arguments)},saturate:function(){return this._applyModification(vl,arguments)},greyscale:function(){return this._applyModification(ml,arguments)},spin:function(){return this._applyModification(kl,arguments)},_applyCombination:function(n,r){return n.apply(null,[this].concat([].slice.call(r)))},analogous:function(){return this._applyCombination(Sl,arguments)},complement:function(){return this._applyCombination(Cl,arguments)},monochromatic:function(){return this._applyCombination(Tl,arguments)},splitcomplement:function(){return this._applyCombination(Al,arguments)},triad:function(){return this._applyCombination(pr,[3])},tetrad:function(){return this._applyCombination(pr,[4])}};H.fromRatio=function(e,n){if(je(e)=="object"){var r={};for(var i in e)e.hasOwnProperty(i)&&(i==="a"?r[i]=e[i]:r[i]=le(e[i]));e=r}return H(e,n)};function hl(e){var n={r:0,g:0,b:0},r=1,i=null,o=null,a=null,s=!1,u=!1;return typeof e=="string"&&(e=zl(e)),je(e)=="object"&&(Tt(e.r)&&Tt(e.g)&&Tt(e.b)?(n=dl(e.r,e.g,e.b),s=!0,u=String(e.r).substr(-1)==="%"?"prgb":"rgb"):Tt(e.h)&&Tt(e.s)&&Tt(e.v)?(i=le(e.s),o=le(e.v),n=gl(e.h,i,o),s=!0,u="hsv"):Tt(e.h)&&Tt(e.s)&&Tt(e.l)&&(i=le(e.s),a=le(e.l),n=pl(e.h,i,a),s=!0,u="hsl"),e.hasOwnProperty("a")&&(r=e.a)),r=mi(r),{ok:s,format:e.format||u,r:Math.min(255,Math.max(n.r,0)),g:Math.min(255,Math.max(n.g,0)),b:Math.min(255,Math.max(n.b,0)),a:r}}function dl(e,n,r){return{r:K(e,255)*255,g:K(n,255)*255,b:K(r,255)*255}}function fr(e,n,r){e=K(e,255),n=K(n,255),r=K(r,255);var i=Math.max(e,n,r),o=Math.min(e,n,r),a,s,u=(i+o)/2;if(i==o)a=s=0;else{var f=i-o;switch(s=u>.5?f/(2-i-o):f/(i+o),i){case e:a=(n-r)/f+(n1&&(h-=1),h<1/6?l+(c-l)*6*h:h<1/2?c:h<2/3?l+(c-l)*(2/3-h)*6:l}if(n===0)i=o=a=r;else{var u=r<.5?r*(1+n):r+n-r*n,f=2*r-u;i=s(f,u,e+1/3),o=s(f,u,e),a=s(f,u,e-1/3)}return{r:i*255,g:o*255,b:a*255}}function cr(e,n,r){e=K(e,255),n=K(n,255),r=K(r,255);var i=Math.max(e,n,r),o=Math.min(e,n,r),a,s,u=i,f=i-o;if(s=i===0?0:f/i,i==o)a=0;else{switch(i){case e:a=(n-r)/f+(n>1)+720)%360;--n;)i.h=(i.h+o)%360,a.push(H(i));return a}function Tl(e,n){n=n||6;for(var r=H(e).toHsv(),i=r.h,o=r.s,a=r.v,s=[],u=1/n;n--;)s.push(H({h:i,s:o,v:a})),a=(a+u)%1;return s}H.mix=function(e,n,r){r=r===0?0:r||50;var i=H(e).toRgb(),o=H(n).toRgb(),a=r/100,s={r:(o.r-i.r)*a+i.r,g:(o.g-i.g)*a+i.g,b:(o.b-i.b)*a+i.b,a:(o.a-i.a)*a+i.a};return H(s)};H.readability=function(e,n){var r=H(e),i=H(n);return(Math.max(r.getLuminance(),i.getLuminance())+.05)/(Math.min(r.getLuminance(),i.getLuminance())+.05)};H.isReadable=function(e,n,r){var i=H.readability(e,n),o,a;switch(a=!1,o=Rl(r),o.level+o.size){case"AAsmall":case"AAAlarge":a=i>=4.5;break;case"AAlarge":a=i>=3;break;case"AAAsmall":a=i>=7;break}return a};H.mostReadable=function(e,n,r){var i=null,o=0,a,s,u,f;r=r||{},s=r.includeFallbackColors,u=r.level,f=r.size;for(var l=0;lo&&(o=a,i=H(n[l]));return H.isReadable(e,i,{level:u,size:f})||!s?i:(r.includeFallbackColors=!1,H.mostReadable(e,["#fff","#000"],r))};var _n=H.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Ml=H.hexNames=Pl(_n);function Pl(e){var n={};for(var r in e)e.hasOwnProperty(r)&&(n[e[r]]=r);return n}function mi(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function K(e,n){Ol(e)&&(e="100%");var r=El(e);return e=Math.min(n,Math.max(0,parseFloat(e))),r&&(e=parseInt(e*n,10)/100),Math.abs(e-n)<1e-6?1:e%n/parseFloat(n)}function We(e){return Math.min(1,Math.max(0,e))}function ft(e){return parseInt(e,16)}function Ol(e){return typeof e=="string"&&e.indexOf(".")!=-1&&parseFloat(e)===1}function El(e){return typeof e=="string"&&e.indexOf("%")!=-1}function _t(e){return e.length==1?"0"+e:""+e}function le(e){return e<=1&&(e=e*100+"%"),e}function bi(e){return Math.round(parseFloat(e)*255).toString(16)}function gr(e){return ft(e)/255}var yt=(function(){var e="[-\\+]?\\d+%?",n="[-\\+]?\\d*\\.\\d+%?",r="(?:"+n+")|(?:"+e+")",i="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",o="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{CSS_UNIT:new RegExp(r),rgb:new RegExp("rgb"+i),rgba:new RegExp("rgba"+o),hsl:new RegExp("hsl"+i),hsla:new RegExp("hsla"+o),hsv:new RegExp("hsv"+i),hsva:new RegExp("hsva"+o),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}})();function Tt(e){return!!yt.CSS_UNIT.exec(e)}function zl(e){e=e.replace(fl,"").replace(cl,"").toLowerCase();var n=!1;if(_n[e])e=_n[e],n=!0;else if(e=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=yt.rgb.exec(e))?{r:r[1],g:r[2],b:r[3]}:(r=yt.rgba.exec(e))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=yt.hsl.exec(e))?{h:r[1],s:r[2],l:r[3]}:(r=yt.hsla.exec(e))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=yt.hsv.exec(e))?{h:r[1],s:r[2],v:r[3]}:(r=yt.hsva.exec(e))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=yt.hex8.exec(e))?{r:ft(r[1]),g:ft(r[2]),b:ft(r[3]),a:gr(r[4]),format:n?"name":"hex8"}:(r=yt.hex6.exec(e))?{r:ft(r[1]),g:ft(r[2]),b:ft(r[3]),format:n?"name":"hex"}:(r=yt.hex4.exec(e))?{r:ft(r[1]+""+r[1]),g:ft(r[2]+""+r[2]),b:ft(r[3]+""+r[3]),a:gr(r[4]+""+r[4]),format:n?"name":"hex8"}:(r=yt.hex3.exec(e))?{r:ft(r[1]+""+r[1]),g:ft(r[2]+""+r[2]),b:ft(r[3]+""+r[3]),format:n?"name":"hex"}:!1}function Rl(e){var n,r;return e=e||{level:"AA",size:"small"},n=(e.level||"AA").toUpperCase(),r=(e.size||"small").toLowerCase(),n!=="AA"&&n!=="AAA"&&(n="AA"),r!=="small"&&r!=="large"&&(r="small"),{level:n,size:r}}function vn(e,n){(n==null||n>e.length)&&(n=e.length);for(var r=0,i=Array(n);re.jsxs("div",{className:"space-y-1 p-3 bg-background/10 rounded-xl border border-border/30",children:[e.jsxs("div",{className:"flex items-center gap-1.5 font-bold text-foreground text-[11px]",children:[e.jsx(R,{className:"h-3 w-3 text-amber-400"})," ",t]}),e.jsx("p",{className:"text-[11px]",children:c})]},t))})}),e.jsx(a,{id:"wartung",icon:G,color:"text-emerald-400",title:"12. Sicherheit & Wartung",kicker:"Damit's auch morgen noch läuft",wide:!0,children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(T,{className:"h-3.5 w-3.5 text-emerald-400"})," Goldene Regeln"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Ein ungetesteter Restore ist kein Backup."})," Wiederherstellung mindestens einmal echt durchspielen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates können Dinge still zerschießen"})," — gerade bei AI-Stacks (Embeddings, Provider-Interna). Versionen pinnen, Smoke-Test, Post-Check."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Least Privilege"})," für Agenten, MCP-Server und PC-Zugriff. Kritisches hinter Freigabe."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 text-emerald-400"})," Bei dir im SystemDrawer"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Backup:"})," PBS-Backup-Zentrum (Sicherung auf den Proxmox-Server) + tägliche Tarball-Sicherung; Restore echt durchgespielt (",e.jsx(s,{children:"restore.sh"}),", Doku in ",e.jsx(s,{children:"docs/BACKUP.md"}),")."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates:"})," git-basierter Update-Check; ",e.jsx("strong",{children:"Update-Buttons"})," mit anschließendem ",e.jsx("strong",{children:"Gehirn-Check"})," (rot, falls ein Update das Gedächtnis zerschießt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Annahme-Sicherheit:"})," jede Auftragsbuch-Annahme läuft mit Health-Check — wird's rot, baut die Box automatisch zurück (Auto-Revert)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Dienste & Gefahrenzone:"})," Restart/Logs pro Dienst, kritische Eingriffe getrennt."]})]}),e.jsx("p",{className:"text-[10px] italic",children:'Erreichbar über das System-Icon → Tab „Wartung".'})]})]})}),e.jsxs("section",{id:"ressourcen",className:"scroll-mt-20 md:col-span-2 mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(N,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"13. Kuratierte Ressourcen & Links"}),e.jsx("span",{className:"text-[9px] font-mono text-primary",children:"Sauber geordnet — die guten Quellen"})]})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5 text-xs",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(k,{className:"h-3.5 w-3.5 text-sky-400"})," Modelle & Engines"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://huggingface.co/models",name:"Hugging Face",note:"das Repository für offene Modelle (GGUF, Embeddings, Datasets)."}),e.jsx(l,{href:"https://github.com/ggml-org/llama.cpp",name:"llama.cpp",note:"die Referenz-Engine für lokale Inferenz."}),e.jsx(l,{href:"https://github.com/mostlygeek/llama-swap",name:"llama-swap",note:"mehrere Modelle hinter einem Port, Auto-Swap."}),e.jsx(l,{href:"https://ollama.com",name:"Ollama",note:"einfachster Einstieg, One-Command-Modelle."}),e.jsx(l,{href:"https://lmstudio.ai",name:"LM Studio",note:"lokale GUI zum Stöbern, Laden & Chatten."}),e.jsx(l,{href:"https://github.com/vllm-project/vllm",name:"vLLM",note:"Hochdurchsatz-Serving auf dicken GPUs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(y,{className:"h-3.5 w-3.5 text-violet-400"})," MCP & Skills"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://modelcontextprotocol.io",name:"MCP — offizielle Doku",note:"Spezifikation & Einstieg."}),e.jsx(l,{href:"https://github.com/modelcontextprotocol/servers",name:"Offizielle MCP-Server",note:"filesystem, git, postgres, fetch & mehr."}),e.jsx(l,{href:"https://smithery.ai",name:"Smithery",note:"Registry zum Suchen & Auto-Installieren von MCP-Servern."}),e.jsx(l,{href:"https://glama.ai/mcp/servers",name:"Glama MCP Registry",note:"kuratierte Community-Datenbank."}),e.jsx(l,{href:"https://skills.sh",name:"skills.sh",note:"Registry & CLI für Agent-Skills."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-3.5 text-rose-400"})," Agenten & Frameworks"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://github.com/NousResearch/hermes-agent",name:"Hermes Agent (Nous)",note:"der Agent, der auf deiner Box läuft."}),e.jsx(l,{href:"https://docs.claude.com",name:"Anthropic / Claude Docs",note:"API, Tool-Use, Agent SDK, MCP."}),e.jsx(l,{href:"https://github.com/cline/cline",name:"Cline",note:"autonomer Coding-Agent für VS Code."}),e.jsx(l,{href:"https://aider.chat",name:"aider",note:"AI-Pair-Programming im Terminal, git-nativ."}),e.jsx(l,{href:"https://continue.dev",name:"Continue",note:"Open-Source-Autopilot für IDEs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-amber-400"})," Lernen & Community"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview",name:"Prompt-Engineering (Anthropic)",note:"die beste praktische Anleitung."}),e.jsx(l,{href:"https://github.com/anthropics/anthropic-cookbook",name:"Anthropic Cookbook",note:"lauffähige Rezepte für Tools, RAG, Agenten."}),e.jsx(l,{href:"https://www.promptingguide.ai",name:"Prompt Engineering Guide",note:"herstellerneutrales Nachschlagewerk."}),e.jsx(l,{href:"https://github.com/mem0ai/mem0",name:"Mem0",note:"die auto-lernende Memory-Schicht hinter deinem Gedächtnis."}),e.jsx(l,{href:"https://www.reddit.com/r/LocalLLaMA/",name:"r/LocalLLaMA",note:"der Puls der lokalen-LLM-Szene."})]})]})]})]}),e.jsx(a,{id:"troubleshooting",icon:V,color:"text-rose-400",title:"14. Troubleshooting",kicker:"Wenn's hakt",wide:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-4",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Keine Verbindung?"})," Selbes LAN wie die Box? IP/Port stimmen (",e.jsx(s,{children:":9001"}),")? Backend-Status im ",e.jsx("strong",{children:"Cockpit"})," prüfen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Modell antwortet nicht / langsam?"})," Im ",e.jsx("strong",{children:"Cockpit → Dienste"})," schauen, ob ",e.jsx(s,{children:"llama-swap"})," grün ist; sonst Restart. Erstes Token nach Swap dauert (Modell lädt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Agent dreht durch / halluziniert?"})," Frische Session starten (Hermes Desktop oder ",e.jsx("strong",{children:"Konsole"}),") — meist ist es vollgemüllter Kontext."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Gedächtnis findet nichts?"})," Embedding-Dienst online? Semantisch suchen (Sinn statt exaktem Wort)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Angenommene Karte hat etwas zerschossen?"})," Meist fängt es der Auto-Revert; sonst ",e.jsx("strong",{children:"Chronik → Zeitmaschine"})," (Stand von gestern) oder Backup & ",e.jsx(s,{children:"restore.sh"}),"."]})]})})]}),e.jsx("p",{className:"text-center text-[10px] text-muted-foreground/50 pt-2",children:"Mission Control 2 · AI-Bibel · Stand Juli 2026 — lebendes Dokument, wächst mit dem Stack."})]})}export{J as GuideView}; +...`}),e.jsxs("p",{children:["Suchen & installieren über die ",e.jsx("strong",{children:"skills.sh"}),"-Registry: ",e.jsx(s,{children:"npx skills find"})," /",e.jsx(s,{children:"npx skills add owner/repo"}),". Skills liegen projektweit (vom Agent beim Start gelesen) oder global."]})]}),e.jsxs(a,{id:"memory",icon:V,color:"text-indigo-400",title:"8. Gedächtnis & RAG",kicker:"Modelle vergessen — du nicht",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:["LLMs sind ",e.jsx("strong",{children:"zustandslos"}),": ohne Hilfe weiß das Modell beim nächsten Turn nichts mehr. Gedächtnis lebt extern."]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Embeddings"})," wandeln Text in Vektoren; ein ",e.jsx("strong",{children:"Vektor-Store"})," (Chroma, …) findet semantisch Ähnliches."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"RAG"})," = relevante Fakten vor dem Turn heraussuchen und einblenden statt alles im Prompt zu halten."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Long-Context vs. RAG:"}),' riesige Fenster sind bequem, aber teuer & „lost in the middle" — gezieltes Abrufen skaliert besser.']})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Auto-lernendes Gedächtnis"})," ist die nächste Stufe:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:["extrahiert Fakten ",e.jsx("em",{children:"selbst"})," aus Gesprächen, statt nur abzuspeichern"]}),e.jsx("li",{children:"dedupliziert semantisch (kein 10× derselbe Fakt)"}),e.jsxs("li",{children:[e.jsx("strong",{children:"Graph-Sicht"})," = Fakten ",e.jsx("em",{children:"plus"})," ihre Beziehungen, nicht nur eine flache Liste"]})]})]})]}),e.jsxs(m,{children:["Dein Gedächtnis (Tab ",e.jsx("strong",{children:"Gedächtnis"}),") ist ",e.jsx("strong",{children:"Mem0"}),"-basiert: auto-lernend & semantisch, ",e.jsx("strong",{children:"graph-first"})," dargestellt, mit 4-Typen-Taxonomie (",e.jsx(s,{children:"Identität"})," · ",e.jsx(s,{children:"Wissen"})," · ",e.jsx(s,{children:"Regeln"})," · ",e.jsx(s,{children:"Ereignisse"}),"). Der Agent lernt im Hintergrund nach jedem Turn — egal ob du per Desktop, Konsole, Telegram oder Lucy mit ihm sprichst.",e.jsx("br",{}),e.jsx("strong",{children:"Gotcha:"})," ein gelöschter Fakt kann wieder auftauchen, solange die Original-Nachricht noch im Verlauf steht (additive Extraktion)."]})]}),e.jsxs(a,{id:"agents",icon:v,color:"text-rose-400",title:"9. Autonome Agenten betreiben",kicker:"LLM in der Schleife",wide:!0,children:[e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:["Ein ",e.jsx("strong",{children:"Agent"})," ist ein LLM in einer Schleife mit Tools:",e.jsx("em",{children:" denken → Tool aufrufen → Ergebnis beobachten → weiter"}),", bis das Ziel erreicht ist."]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Guardrails"})," (Hard-Stop, Tool-Limits) verhindern Endlos-Loops, wenn ein Tool fehlt oder hängt."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kontext-Hygiene"})," ist die wichtigste Disziplin: frische Sessions starten — vollgemüllte Historien werden langsam, driften und halluzinieren."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Kanäle:"})," CLI/Terminal, Chat-UI, Messaging (z.B. Telegram), reine API."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{children:[e.jsx("strong",{children:"Least Privilege:"})," gib einem Agenten nur die Tools, die er wirklich braucht. Kritische Aktionen (Shell auf dem Host, Löschen, Geld/Deploys) hinter menschliche Freigabe."]}),e.jsxs("p",{children:[e.jsx("strong",{children:"Was sich vollautomatisch lohnt:"})," Modell-Routing, Hintergrund-Gedächtnis, Recherche. ",e.jsx("strong",{children:"Was Freigabe braucht:"})," Systembefehle, Updates/Reboots, permanentes Löschen."]})]})]}),e.jsxs(m,{children:[e.jsx("strong",{children:"Hermes"})," ist dein Box-Agent mit eigenem Agent-Hirn (Rolle ",e.jsx(s,{children:"Hirn"}),", dauerwarm). Reden tust du mit ihm über ",e.jsx("strong",{children:"Hermes Desktop"})," (am PC, remote via ",e.jsx(s,{children:"/hermes-ui"}),"), die ",e.jsx("strong",{children:"Konsole"})," (Box-Shell im Browser), ",e.jsx("strong",{children:"Telegram"})," — oder per Stimme über",e.jsx("strong",{children:" Lucy"}),". Er hat MCP-Server für Gedächtnis, Stack-Steuerung, Web-Fetch und",e.jsx("strong",{children:" PC-Steuerung"})," (Executor auf deinem Windows-PC). Nachts betreibt er Werkstatt & Radar-Crons — alles Gebaute landet als Karte im ",e.jsx("strong",{children:"Auftragsbuch"}),". Status & Verdrahtung im ",e.jsx("strong",{children:"Hermes"}),"-Tab."]})]}),e.jsxs(a,{id:"ide",icon:E,color:"text-cyan-400",title:"10. IDE / Editor anbinden",kicker:"Vibe-Coding lokal",children:[e.jsxs("p",{children:["Jede ",e.jsx("strong",{children:"OpenAI-kompatible"})," IDE oder Extension lässt sich auf einen lokalen Server umbiegen — Base-URL + Model eintragen, fertig:"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Cline"})," & ",e.jsx("strong",{children:"Roo Code"})," (VS-Code-Extensions, voller Agent + MCP)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Cursor"})," (VS-Code-Fork mit Top-Autocomplete)"]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Continue"}),", ",e.jsx("strong",{children:"aider"})," (CLI), ",e.jsx("strong",{children:"OpenCode"})," (Desktop)"]})]}),e.jsxs(m,{children:["Deine Haupt-IDE ist inzwischen ",e.jsx("strong",{children:"Hermes Desktop"})," — sie ist ab Werk mit Box, Gedächtnis und Skills verdrahtet, da ist nichts zu konfigurieren. Für alles andere gilt: Tipp den Kram nicht ab — der",e.jsx("strong",{children:" Verbinden"}),"-Tab generiert die fertige Config (inkl. MCP-Gedächtnis) pro Tool zum Kopieren. Essenz: Base ",e.jsx(s,{children:"…:9001/v1"}),", Model ",e.jsx(s,{children:"coder"})," (bauen) / ",e.jsx(s,{children:"heavy"})," (denken) /"," ",e.jsx(s,{children:"vision"})," (Bilder); für simple Chat-Tools tut es die Lane ",e.jsx(s,{children:"chat"}),". Key beliebig."]})]}),e.jsx(a,{id:"tricks",icon:L,color:"text-amber-400",title:"11. Tricks & Kniffe",kicker:"Was im Alltag wirklich spart",wide:!0,children:e.jsx("div",{className:"grid md:grid-cols-3 gap-3",children:[["Kontext sauber halten","Neue Session statt Mega-Historie. Drift, Tempo und Halluzination hängen direkt am Kontext-Müll."],["Plan-then-Act","Erst Plan/Vorgehen bestätigen lassen, dann ausführen. Spart teure Holzwege."],["Gezielte Edits","Nie ganze Dateien überschreiben für eine Zeile — Such-/Ersetz-Tools nutzen. Weniger Tokens, weniger Fehler."],["Non-interaktive Befehle","Keine interaktiven Prompts im Agent-Terminal; lange Tasks als Background-Job. Sonst hängt der Loop."],["DevTools koppeln","Browser-/Konsolen-Zugriff geben — der Agent liest echte Fehler statt blind zu raten."],["Richtige Modellwahl","Schnelles Hirn für Alltag, großes für harte Logik, Coder fürs Coden. Nicht alles mit der Kanone."],["Akzeptanzkriterien","Sag konkret, woran „fertig“ erkennbar ist. Vage Prompts → vage Ergebnisse."],["Verifizieren statt vertrauen","Tests/Live-Check fordern. „Sollte funktionieren“ ist kein Beweis."],["Regeln ins Gedächtnis","Wiederkehrende Vorlieben/Konventionen einmal ablegen — der Agent zieht sie selbst."]].map(([t,c])=>e.jsxs("div",{className:"space-y-1 p-3 bg-background/10 rounded-xl border border-border/30",children:[e.jsxs("div",{className:"flex items-center gap-1.5 font-bold text-foreground text-[11px]",children:[e.jsx(R,{className:"h-3 w-3 text-amber-400"})," ",t]}),e.jsx("p",{className:"text-[11px]",children:c})]},t))})}),e.jsx(a,{id:"wartung",icon:G,color:"text-emerald-400",title:"12. Sicherheit & Wartung",kicker:"Damit's auch morgen noch läuft",wide:!0,children:e.jsxs("div",{className:"grid md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(T,{className:"h-3.5 w-3.5 text-emerald-400"})," Goldene Regeln"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Ein ungetesteter Restore ist kein Backup."})," Wiederherstellung mindestens einmal echt durchspielen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates können Dinge still zerschießen"})," — gerade bei AI-Stacks (Embeddings, Provider-Interna). Versionen pinnen, Smoke-Test, Post-Check."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Least Privilege"})," für Agenten, MCP-Server und PC-Zugriff. Kritisches hinter Freigabe."]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 font-bold text-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 text-emerald-400"})," Bei dir im SystemDrawer"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Backup:"})," PBS-Backup-Zentrum (Sicherung auf den Proxmox-Server) + tägliche Tarball-Sicherung; Restore echt durchgespielt (",e.jsx(s,{children:"restore.sh"}),", Doku in ",e.jsx(s,{children:"docs/BACKUP.md"}),")."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Updates:"})," git-basierter Update-Check; ",e.jsx("strong",{children:"Update-Buttons"})," mit anschließendem ",e.jsx("strong",{children:"Gehirn-Check"})," (rot, falls ein Update das Gedächtnis zerschießt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Annahme-Sicherheit:"})," jede Auftragsbuch-Annahme läuft mit Health-Check — wird's rot, baut die Box automatisch zurück (Auto-Revert)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Dienste & Gefahrenzone:"})," Restart/Logs pro Dienst, kritische Eingriffe getrennt."]})]}),e.jsx("p",{className:"text-[10px] italic",children:'Erreichbar über das System-Icon → Tab „Wartung".'})]})]})}),e.jsxs("section",{id:"ressourcen",className:"scroll-mt-20 md:col-span-2 mc-card p-6 space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/20 pb-3",children:[e.jsx(N,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"13. Kuratierte Ressourcen & Links"}),e.jsx("span",{className:"text-[9px] font-mono text-primary",children:"Sauber geordnet — die guten Quellen"})]})]}),e.jsxs("div",{className:"grid md:grid-cols-2 gap-5 text-xs",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(k,{className:"h-3.5 w-3.5 text-sky-400"})," Modelle & Engines"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://huggingface.co/models",name:"Hugging Face",note:"das Repository für offene Modelle (GGUF, Embeddings, Datasets)."}),e.jsx(l,{href:"https://github.com/ggml-org/llama.cpp",name:"llama.cpp",note:"die Referenz-Engine für lokale Inferenz."}),e.jsx(l,{href:"https://github.com/mostlygeek/llama-swap",name:"llama-swap",note:"mehrere Modelle hinter einem Port, Auto-Swap."}),e.jsx(l,{href:"https://ollama.com",name:"Ollama",note:"einfachster Einstieg, One-Command-Modelle."}),e.jsx(l,{href:"https://lmstudio.ai",name:"LM Studio",note:"lokale GUI zum Stöbern, Laden & Chatten."}),e.jsx(l,{href:"https://github.com/vllm-project/vllm",name:"vLLM",note:"Hochdurchsatz-Serving auf dicken GPUs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(y,{className:"h-3.5 w-3.5 text-violet-400"})," MCP & Skills"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://modelcontextprotocol.io",name:"MCP — offizielle Doku",note:"Spezifikation & Einstieg."}),e.jsx(l,{href:"https://github.com/modelcontextprotocol/servers",name:"Offizielle MCP-Server",note:"filesystem, git, postgres, fetch & mehr."}),e.jsx(l,{href:"https://smithery.ai",name:"Smithery",note:"Registry zum Suchen & Auto-Installieren von MCP-Servern."}),e.jsx(l,{href:"https://glama.ai/mcp/servers",name:"Glama MCP Registry",note:"kuratierte Community-Datenbank."}),e.jsx(l,{href:"https://skills.sh",name:"skills.sh",note:"Registry & CLI für Agent-Skills."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(v,{className:"h-3.5 w-3.5 text-rose-400"})," Agenten & Frameworks"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://github.com/NousResearch/hermes-agent",name:"Hermes Agent (Nous)",note:"der Agent, der auf deiner Box läuft."}),e.jsx(l,{href:"https://docs.claude.com",name:"Anthropic / Claude Docs",note:"API, Tool-Use, Agent SDK, MCP."}),e.jsx(l,{href:"https://github.com/cline/cline",name:"Cline",note:"autonomer Coding-Agent für VS Code."}),e.jsx(l,{href:"https://aider.chat",name:"aider",note:"AI-Pair-Programming im Terminal, git-nativ."}),e.jsx(l,{href:"https://continue.dev",name:"Continue",note:"Open-Source-Autopilot für IDEs."})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"font-bold text-foreground flex items-center gap-1.5",children:[e.jsx(w,{className:"h-3.5 w-3.5 text-amber-400"})," Lernen & Community"]}),e.jsxs("ul",{className:"list-disc pl-4 space-y-1.5",children:[e.jsx(l,{href:"https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview",name:"Prompt-Engineering (Anthropic)",note:"die beste praktische Anleitung."}),e.jsx(l,{href:"https://github.com/anthropics/anthropic-cookbook",name:"Anthropic Cookbook",note:"lauffähige Rezepte für Tools, RAG, Agenten."}),e.jsx(l,{href:"https://www.promptingguide.ai",name:"Prompt Engineering Guide",note:"herstellerneutrales Nachschlagewerk."}),e.jsx(l,{href:"https://github.com/mem0ai/mem0",name:"Mem0",note:"die auto-lernende Memory-Schicht hinter deinem Gedächtnis."}),e.jsx(l,{href:"https://www.reddit.com/r/LocalLLaMA/",name:"r/LocalLLaMA",note:"der Puls der lokalen-LLM-Szene."})]})]})]})]}),e.jsx(a,{id:"troubleshooting",icon:W,color:"text-rose-400",title:"14. Troubleshooting",kicker:"Wenn's hakt",wide:!0,children:e.jsxs("ul",{className:"space-y-2 list-disc pl-4",children:[e.jsxs("li",{children:[e.jsx("strong",{children:"Keine Verbindung?"})," Selbes LAN wie die Box? IP/Port stimmen (",e.jsx(s,{children:":9001"}),")? Backend-Status im ",e.jsx("strong",{children:"Cockpit"})," prüfen."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Modell antwortet nicht / langsam?"})," Im ",e.jsx("strong",{children:"Cockpit → Dienste"})," schauen, ob ",e.jsx(s,{children:"llama-swap"})," grün ist; sonst Restart. Erstes Token nach Swap dauert (Modell lädt)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Agent dreht durch / halluziniert?"})," Frische Session starten (Hermes Desktop oder ",e.jsx("strong",{children:"Konsole"}),") — meist ist es vollgemüllter Kontext."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Gedächtnis findet nichts?"})," Embedding-Dienst online? Semantisch suchen (Sinn statt exaktem Wort)."]}),e.jsxs("li",{children:[e.jsx("strong",{children:"Angenommene Karte hat etwas zerschossen?"})," Meist fängt es der Auto-Revert; sonst ",e.jsx("strong",{children:"Chronik → Zeitmaschine"})," (Stand von gestern) oder Backup & ",e.jsx(s,{children:"restore.sh"}),"."]})]})})]}),e.jsx("p",{className:"text-center text-[10px] text-muted-foreground/50 pt-2",children:"Mission Control 2 · AI-Bibel · Stand Juli 2026 — lebendes Dokument, wächst mit dem Stack."})]})}export{J as GuideView}; diff --git a/frontend/dist/assets/IdeenView-lXJC70fR.js b/frontend/dist/assets/IdeenView-6hSlKBsS.js similarity index 91% rename from frontend/dist/assets/IdeenView-lXJC70fR.js rename to frontend/dist/assets/IdeenView-6hSlKBsS.js index 037cb35..b4c9373 100644 --- a/frontend/dist/assets/IdeenView-lXJC70fR.js +++ b/frontend/dist/assets/IdeenView-6hSlKBsS.js @@ -1,4 +1,4 @@ -import{c as I,j as e,e as S,ac as ve,u as Se,b as De,r as d,g as z,af as Ke,a9 as O,L as D,X as Q,ag as xe,M as T,V as he,C as Ce,D as X,T as ze,ad as Ee,ah as pe,q as Le,a3 as fe}from"./index-BChEIiQl.js";import{S as Ae,H as U}from"./SectionLabel-gNRlDlbe.js";import{S as me}from"./send-CS1kRsDf.js";import{C as ee}from"./code-xml-owp4HQPY.js";import{L as Pe}from"./layers-C62c1z5s.js";import{R as We}from"./rotate-ccw-CPYnjQ6M.js";/** +import{c as I,j as e,e as S,aa as ve,u as Se,b as De,r as d,g as z,ad as Ke,a7 as O,L as D,X as Q,ae as xe,K as T,U as he,C as Ce,T as ze,ab as Ee,af as ge,q as Le,a1 as fe}from"./index-Cejiqiju.js";import{S as Ae,H as U}from"./SectionLabel-PIsOl-2s.js";import{S as me}from"./send-pU4Gy5vX.js";import{C as ee}from"./code-xml-BJe9mLlE.js";import{L as Pe}from"./layers-DxeU1JZb.js";import{C as X}from"./chevron-down-DNDogRoC.js";import{R as We}from"./rotate-ccw-C_-gXN7Y.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. @@ -24,7 +24,7 @@ import{c as I,j as e,e as S,ac as ve,u as Se,b as De,r as d,g as z,af as Ke,a9 a * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */const Oe=I("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);function Te({text:r,className:c}){const k=(r||"").split(` -`),s=[];let m=[],g=null;const h=p=>{m.length&&(s.push(e.jsx("ul",{className:"mb-3 ml-4 list-disc space-y-1",children:m},p)),m=[])};return k.forEach((p,o)=>{const i=`l${o}`;if(g!==null){p.trimEnd()==="```"?(s.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px] leading-relaxed text-foreground/85",children:g.join(` -`)},i)),g=null):g.push(p);return}if(p.trimStart().startsWith("```")){h(i),g=[];return}const j=p.trimEnd();if(!j.trim()){h(i);return}const w=j.match(/^(#{1,4})\s+(.*)$/);if(w){h(i);const N=w[1].length,u=N===1?"text-base font-bold mt-1 mb-2":N===2?"text-sm font-bold mt-4 mb-1.5":"text-xs font-bold mt-3 mb-1 uppercase tracking-wide text-muted-foreground";s.push(e.jsx("p",{className:S(u,"font-space text-foreground"),children:_(w[2],i)},i));return}const y=j.match(/^\s*[-*•]\s+(.*)$/);if(y){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:_(y[1],i)},i));return}const l=j.match(/^\s*\d+\.\s+(.*)$/);if(l){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:_(l[1],i)},i));return}h(i),s.push(e.jsx("p",{className:"mb-2 text-xs leading-relaxed text-foreground/85",children:_(j,i)},i))}),h("end"),g!==null&&s.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px]",children:g.join(` -`)},"code-end")),e.jsx("div",{className:S("max-w-3xl",c),children:s})}function _(r,c){return r.split(/(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g).map((s,m)=>{const g=`${c}-${m}`;return/^\*\*[^*]+\*\*$/.test(s)?e.jsx("b",{className:"font-semibold text-foreground",children:s.slice(2,-2)},g):/^\*[^*]+\*$/.test(s)?e.jsx("i",{children:s.slice(1,-1)},g):/^`[^`]+`$/.test(s)?e.jsx("code",{className:"rounded bg-background/50 px-1 font-mono text-[11px] text-foreground/90",children:s.slice(1,-1)},g):e.jsx("span",{children:s},g)})}const Ie={triage:{label:"wird ausgearbeitet …",cls:"text-violet-300 border-violet-500/40 bg-violet-500/10",spin:!0},todo:{label:"wartet",cls:"text-muted-foreground border-border/60 bg-background/30"},scheduled:{label:"geplant",cls:"text-muted-foreground border-border/60 bg-background/30"},ready:{label:"gleich dran",cls:"text-sky-300/80 border-sky-500/30 bg-sky-500/5"},running:{label:"in Arbeit …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},review:{label:"im Review",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},blocked:{label:"hängt — braucht dich",cls:"text-red-300 border-red-500/40 bg-red-500/10"},done:{label:"fertig ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"}},Ve={box:{label:"BOX",icon:U,cls:"border-border/60 bg-background/40 text-muted-foreground",title:"Box-Welt: die Werkstatt baut das selbst. Das Ergebnis kommt als Patch-Vorschlag zurück — nichts geht ohne deinen Klick live."},idee:{label:"IDEE",icon:O,cls:"border-sky-500/40 bg-sky-500/10 text-sky-300",title:"Nur durchdacht: die Box hat die Produkt-Idee mit voller Denk-Kaskade zu einem Konzept ausgearbeitet. Kein Gerüst, kein Bau — du liest es und entscheidest, ob ein Projekt draus wird."},projekt:{label:"IDE",icon:ee,cls:"border-violet-500/40 bg-violet-500/10 text-violet-300",title:"IDE-Welt: die Box bereitet nur vor (Konzept + Repo + Doku, kein Code). Gebaut wird von dir in Zed."}},Ze={needs_input:"Die Box hat eine Frage:",capability:"Die Box kam hier nicht weiter:",transient:"Die Aufgabe hakt:"},be="mc_ideen_quote";function ke(){try{const r=JSON.parse(localStorage.getItem(be)||"{}");return{gesendet:Number(r.gesendet)||0,geaendert:Number(r.geaendert)||0}}catch{return{gesendet:0,geaendert:0}}}function ge(r){try{const c=ke();c[r]+=1,localStorage.setItem(be,JSON.stringify(c))}catch{}}function qe(){var ie,le;const{data:r,isLoading:c}=ve(),k=Se(),{showAlert:s,showConfirm:m,dialogElement:g}=De(),[h,p]=d.useState(""),[o,i]=d.useState("denken"),[j,w]=d.useState("schlank"),[y,l]=d.useState(!1),[N,u]=d.useState(!1),A=o!=="box",V=o==="repo",[K,je]=d.useState("lxc"),[G,te]=d.useState(!1),[v,E]=d.useState({}),[R,Ne]=d.useState(null),[H,we]=d.useState(null),[J,re]=d.useState({}),P=(r==null?void 0:r.items)??[],W=()=>k.invalidateQueries({queryKey:Le.ideen});d.useEffect(()=>{const t=h.trim();if(t.length<12){u(!1);return}let n=!1;const x=setTimeout(async()=>{try{const f=await z("/api/ideen/einordnen",{method:"POST",body:JSON.stringify({text:t})});if(n||!(f!=null&&f.ok))return;i(f.nur_denken?"denken":f.wer==="zed"?"repo":"box"),f.tiefe&&w(f.tiefe),u(!0)}catch{}},700);return()=>{n=!0,clearTimeout(x)}},[h]);const se=R!==null&&(((ie=r==null?void 0:r.items.find(t=>t.id===R))==null?void 0:ie.status)==="triage"||((le=r==null?void 0:r.items.find(t=>t.id===R))==null?void 0:le.status)==="running"),B=Ke(R??"",se);async function ne(){const t=h.trim();if(!(t.length<3||G)){te(!0);try{const n=t.length>160?t.slice(0,157)+"…":t;await z("/api/ideen",{method:"POST",body:JSON.stringify({titel:n,notiz:t.length>160?t:"",welt:A?"ide":"box",tiefe:V?j==="gruendlich"?"gruendlich":"simpel":"",ziel:V?K:"",art:o==="denken"?"idee":"projekt"})}),ge("gesendet"),p(""),u(!1),l(!1),W()}catch(n){s("Das hat nicht geklappt",String((n==null?void 0:n.message)||n))}finally{te(!1)}}}function ae(t,n,x){m(`${n} fertige Karte${n===1?"":"n"} wegräumen?`,`${x} verschwindet aus der Liste. Gelöscht wird nichts — die Karten wandern ins Archiv der Queue und bleiben dort lesbar. Laufende, hängende und wartende Karten bleiben unberührt.`,async()=>{var b;const f="arch:"+(t||"*");E(a=>({...a,[f]:!0}));try{const a=await z("/api/ideen/archivieren-alle",{method:"POST",body:JSON.stringify({projekt:t})});(b=a.fehlgeschlagen)!=null&&b.length&&s("Teilweise erledigt",`${a.archiviert} weggeräumt, ${a.fehlgeschlagen.length} nicht: `+a.fehlgeschlagen.map(L=>L.titel).join(", ")),W()}catch(a){s("Das hat nicht geklappt",String((a==null?void 0:a.message)||a))}finally{E(a=>({...a,[f]:!1}))}})}async function ye(t){E(n=>({...n,[t]:!0}));try{await z("/api/ideen/archivieren",{method:"POST",body:JSON.stringify({id:t})}),W()}catch(n){s("Das hat nicht geklappt",String((n==null?void 0:n.message)||n))}finally{E(n=>({...n,[t]:!1}))}}async function Z(t,n,x,f){E(b=>({...b,[t+n]:!0}));try{await z(x,{method:"POST",body:JSON.stringify(f)}),W()}catch(b){s("Das hat nicht geklappt",String((b==null?void 0:b.message)||b))}finally{E(b=>({...b,[t+n]:!1}))}}async function oe(t){const n=(J[t]||"").trim();if(!(n.length<1||v["ans:"+t])){E(x=>({...x,["ans:"+t]:!0}));try{await z("/api/ideen/antwort",{method:"POST",body:JSON.stringify({id:t,antwort:n})}),re(x=>({...x,[t]:""})),W()}catch(x){s("Das hat nicht geklappt",String((x==null?void 0:x.message)||x))}finally{E(x=>({...x,["ans:"+t]:!1}))}}}const q=t=>{var ce,ue;const n=Ie[t.status]??{label:t.status,cls:"text-muted-foreground border-border/60 bg-background/30"},x=R===t.id,f=t.status==="triage"||t.status==="running"||t.status==="done",b=t.status==="blocked",a=!!v["ans:"+t.id],L=t.status==="running"&&(t.puls_alter??0)>600,de=t.status==="todo"||t.status==="ready"||t.status==="scheduled";return e.jsxs("li",{className:S("flex flex-col gap-2 rounded-xl border bg-background/30 px-3 py-2",b?"border-red-500/30":L?"border-amber-500/40":"border-border/40"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:S("flex shrink-0 items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",n.cls),children:[n.spin&&e.jsx(D,{className:"h-3 w-3 animate-spin"}),n.label]}),L&&e.jsxs("span",{className:"flex shrink-0 items-center gap-1 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[10px] font-bold text-amber-300",title:"Der Worker lebt, gibt aber kein Lebenszeichen mehr — vermutlich wartet er auf etwas, das nie kommt. „Neuer Versuch“ startet die Karte frisch.",children:[e.jsx(ze,{className:"h-3 w-3"})," ",Math.round((t.puls_alter??0)/60)," min ohne Regung"]}),(t.prio??0)!==0&&e.jsxs("span",{className:"shrink-0 rounded bg-background/50 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",title:"Priorität — höher kommt zuerst dran (bei gleicher Prio: Erstellzeit)",children:["P",t.prio]}),(()=>{const C=Ve[t.art||(t.welt==="ide"?"projekt":"box")];if(!C)return null;const M=C.icon;return e.jsxs("span",{className:S("flex shrink-0 items-center gap-1 rounded-lg border px-2 py-0.5 text-[10px] font-bold",C.cls),title:C.title,children:[e.jsx(M,{className:"h-3 w-3"})," ",C.label]})})(),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-foreground",title:t.titel,children:t.titel}),e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(he,{className:"h-3 w-3"}),Ee(t.erstellt)]}),de&&e.jsxs("span",{className:"flex shrink-0 items-center",children:[e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>Z("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"hoch"}),title:"Vorziehen (Prio +1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx(Re,{className:"h-3.5 w-3.5"})}),e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>Z("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"runter"}),title:"Zurückstellen (Prio −1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx($e,{className:"h-3.5 w-3.5"})})]}),(t.status==="running"||b)&&e.jsx("button",{disabled:!!v["rt:"+t.id],onClick:()=>m("Neuer Versuch?",t.status==="running"?`Der laufende Worker von '${t.titel.slice(0,60)}' wird beendet (samt gestarteter Test-Prozesse) und die Karte frisch gestartet. Bisheriger Zwischenstand im Workspace bleibt liegen.`:`Die Karte '${t.titel.slice(0,60)}' wird entsperrt und läuft weiter, sobald ein Platz frei ist.`,()=>Z("rt:",t.id,"/api/ideen/retry",{id:t.id})),title:"Neuer Versuch — Karte frisch starten",className:S("shrink-0 rounded-md p-1 transition-colors cursor-pointer disabled:opacity-50",L?"text-amber-300 hover:text-amber-200":"text-muted-foreground/60 hover:text-foreground"),children:v["rt:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(We,{className:"h-3.5 w-3.5"})}),(t.status==="running"||de||t.status==="triage")&&e.jsx("button",{disabled:!!v["st:"+t.id],onClick:()=>m("Karte stoppen?",`'${t.titel.slice(0,60)}' wird angehalten${t.status==="running"?" und der laufende Worker beendet":""}. Sie bleibt als gestoppt im Board und kann jederzeit per „Neuer Versuch“ weiterlaufen.`,()=>Z("st:",t.id,"/api/ideen/stopp",{id:t.id})),title:"Stoppen — Karte anhalten",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-red-300 cursor-pointer disabled:opacity-50",children:v["st:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Oe,{className:"h-3.5 w-3.5"})}),(t.status==="done"||b)&&e.jsx("button",{disabled:!!v[t.id],onClick:()=>ye(t.id),title:b?"Aufgeben und aus der Liste räumen (wandert ins Kanban-Archiv)":"Aus der Liste räumen (wandert ins Kanban-Archiv)",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:v[t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"})}),t.welt==="ide"&&(t.status==="running"||t.status==="done")&&e.jsxs("button",{onClick:()=>we(H===t.id?null:t.id),title:"Konzept ansehen (das ausgearbeitete KONZEPT.md)",className:S("flex shrink-0 items-center gap-1 rounded-md px-1.5 py-1 text-[10px] font-bold transition-colors cursor-pointer",H===t.id?"text-violet-300":"text-violet-300/70 hover:text-violet-200"),children:[e.jsx(pe,{className:"h-3.5 w-3.5"})," Konzept"]}),f&&e.jsx("button",{onClick:()=>Ne(x?null:t.id),title:t.status==="done"?"Ergebnis anzeigen":"Worker-Log anzeigen",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer",children:x?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"})})]}),H===t.id&&e.jsx(Fe,{id:t.id,istIdee:t.art==="idee"&&t.status==="done",onWeiter:W}),t.status==="running"&&t.notiz&&e.jsxs("p",{className:"-mt-1 ml-1 text-[11px] italic leading-relaxed text-sky-200/80",title:"Jüngste Zwischenmeldung des Workers (Heartbeat)",children:["„",t.notiz,"“"]}),(t.status==="todo"||t.status==="scheduled"||t.status==="ready")&&(((ce=t.wartet_auf)==null?void 0:ce.length)??0)>0&&e.jsxs("p",{className:"-mt-1 ml-1 text-[10px] text-muted-foreground/70",children:["→ wartet auf: ",t.wartet_auf.join(" · ")]}),b&&e.jsxs("div",{className:"space-y-2 border-t border-red-500/20 pt-2",children:[e.jsxs("p",{className:"flex items-start gap-1.5 text-[11px] leading-relaxed text-red-200/90",children:[e.jsx(xe,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-red-300"}),e.jsxs("span",{children:[e.jsx("b",{children:Ze[t.frage_kind||""]??"Die Aufgabe hängt und wartet auf dich:"})," ",t.frage?e.jsx("span",{className:"text-foreground/90",children:t.frage}):e.jsx("span",{className:"text-muted-foreground italic",children:"kein genauer Grund hinterlegt — antworte einfach mit einer Entscheidung, dann läuft sie weiter."})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:J[t.id]||"",onChange:C=>re(M=>({...M,[t.id]:C.target.value})),onKeyDown:C=>{C.key==="Enter"&&oe(t.id)},placeholder:"Deine Antwort — die Box macht damit weiter",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>oe(t.id),disabled:a||(J[t.id]||"").trim().length<1,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[a?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(me,{className:"h-3.5 w-3.5"})," Antworten & weiter"]})]})]}),x&&f&&t.status!=="done"&&e.jsx("div",{className:"ml-2 -mt-1",children:e.jsx("div",{className:"rounded-lg border border-border/50 bg-background/50 p-2",children:se&&B.isLoading?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Log wird geladen …"}):B.error?e.jsx("p",{className:"text-[10px] text-red-400",children:"Log nicht ladbar"}):(ue=B.data)!=null&&ue.available&&B.data.lines.length>0?e.jsx("pre",{className:"max-h-64 overflow-auto font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap",children:B.data.lines.join(` -`)}):e.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Kein Log verfügbar"})})}),x&&t.status==="done"&&e.jsx(He,{id:t.id})]},t.id)};return r&&!r.available?null:e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Ae,{icon:O,children:(()=>{if(!r)return"Ideen-Queue";const t=x=>P.filter(f=>x.includes(f.status)).length,n=[t(["blocked"])>0?`${t(["blocked"])} braucht dich`:"",t(["running","triage","review"])>0?`${t(["running","triage","review"])} in Arbeit`:"",t(["todo","scheduled","ready"])>0?`${t(["todo","scheduled","ready"])} wartet`:"",t(["done"])>0?`${t(["done"])} fertig`:""].filter(Boolean);return n.length?n.join(" · "):"noch nichts in der Queue"})()}),(()=>{const t=P.filter(n=>n.status==="done").length;return t===0?null:e.jsxs("button",{disabled:!!v["arch:*"],onClick:()=>ae("",t,`Alle ${t} fertigen Karten`),title:"Räumt ALLE fertigen Karten weg — auch die in abgeschlossenen Projekt-Ketten. Laufende, hängende und wartende bleiben unberührt.",className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-border/60 px-2.5 py-1 text-[11px] font-semibold text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground disabled:opacity-50 cursor-pointer",children:[v["arch:*"]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"}),t," fertige wegräumen"]})})()]}),e.jsxs("div",{className:"mc-card p-4 space-y-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:h,onChange:t=>{p(t.target.value),u(!1)},onKeyDown:t=>{t.key==="Enter"&&ne()},placeholder:"Was soll entstehen?",className:"h-10 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/50 px-3 text-sm text-foreground placeholder:text-muted-foreground/50 focus:border-primary/50 focus:outline-none"}),e.jsxs("button",{onClick:ne,disabled:G||h.trim().length<3,className:"flex h-10 shrink-0 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-xs font-semibold text-primary transition-all hover:bg-primary/20 disabled:opacity-40 cursor-pointer",children:[G?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(me,{className:"h-4 w-4"}),"Los"]})]}),y?e.jsxs("div",{className:"space-y-3 rounded-xl border border-border/40 bg-background/20 p-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Wer baut das?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(F,{aktiv:o!=="box",onWahl:()=>i(o==="box"?"denken":o),k:{id:"zed",icon:ee,titel:"Ich, in Zed",text:"Du bekommst Konzept und Repo — den Code schreibst du selbst."}}),e.jsx(F,{aktiv:o==="box",onWahl:()=>i("box"),k:{id:"box",icon:U,titel:"Die Box, allein",text:"Für dein Heimlabor. Das Ergebnis kommt als Patch-Vorschlag ins Auftragsbuch."}})]})]}),o!=="box"&&e.jsxs("div",{className:"border-l-2 border-primary/40 pl-3",children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Und wie startest du?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(F,{aktiv:o==="denken",onWahl:()=>i("denken"),k:{id:"denken",icon:O,titel:"Erst durchdenken",text:"Konzept zuerst — auf dein Ja wird ein Repo daraus."}}),e.jsx(F,{aktiv:o==="repo",onWahl:()=>i("repo"),k:{id:"repo",icon:Y,titel:"Direkt ein Repo",text:"Konzept und Gitea-Repo in einem Zug."}})]}),o==="repo"?e.jsxs("div",{className:"mt-2.5 flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Wie gründlich?"}),e.jsx("div",{className:"flex rounded-lg border border-border/60 p-0.5",children:[["schlank","schlank"],["gruendlich","gründlich"]].map(([t,n])=>e.jsx("button",{onClick:()=>w(t),className:S("rounded px-2.5 py-1 text-[10px] font-bold uppercase tracking-wide transition-all cursor-pointer",j===t?"bg-primary/15 text-primary":"text-muted-foreground/60 hover:text-foreground"),children:n},t))}),e.jsxs("span",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Läuft als"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:[["lxc","LXC"],["docker","Docker"]].map(([t,n])=>e.jsx("button",{onClick:()=>je(t),title:t==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker). Wird vom Backup-Server mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",K===t?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:n},t))})]})]}):e.jsxs("p",{className:"mt-2 flex items-start gap-1.5 text-[10px] leading-relaxed text-muted-foreground/60",children:[e.jsx(xe,{className:"mt-px h-3 w-3 shrink-0"}),'Wie gründlich und wo es läuft, fragt die Box erst beim „gefällt mir" — dann weißt du mehr.']})]}),(()=>{const t=ke();return t.gesendet<3?null:e.jsxs("p",{className:"border-t border-border/30 pt-2 text-[10px] text-muted-foreground/50",children:["Du hast ",t.geaendert," von ",t.gesendet," Vorschlägen geändert. Wird das die Regel, bauen wir hier einen richtigen Schritt-für-Schritt-Assistenten."]})})()]}):e.jsxs("div",{className:"flex flex-wrap items-center gap-2 rounded-xl border border-border/40 bg-background/20 px-3 py-2.5 text-xs",children:[o==="box"?e.jsx(U,{className:"h-4 w-4 shrink-0 text-primary"}):o==="repo"?e.jsx(Y,{className:"h-4 w-4 shrink-0 text-primary"}):e.jsx(O,{className:"h-4 w-4 shrink-0 text-primary"}),!N&&e.jsx("span",{className:"shrink-0 text-[10px] uppercase tracking-wider text-muted-foreground/50",children:"Voreingestellt"}),e.jsx("span",{className:"text-muted-foreground",children:o==="box"?"Ich baue das selbst und lege dir das Ergebnis als Vorschlag hin.":o==="repo"?"Du baust selbst — ich lege dir Konzept und Repo an.":"Du baust selbst — ich arbeite erst ein Konzept aus."}),N&&e.jsx("span",{className:"shrink-0 rounded border border-primary/40 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold text-primary",children:"gelesen"}),e.jsx("button",{onClick:()=>{l(!0),ge("geaendert")},className:"ml-auto shrink-0 text-[11px] text-muted-foreground/60 underline underline-offset-2 transition-colors hover:text-foreground cursor-pointer",children:"anders"})]}),c&&e.jsxs("p",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"})," Queue wird geladen …"]}),(r==null?void 0:r.fehler)&&e.jsx("p",{className:"text-xs text-amber-300",children:"Queue gerade nicht lesbar — neuer Versuch läuft."}),P.length>0&&e.jsxs("div",{className:"space-y-3",children:[((r==null?void 0:r.projekte)??[]).map(t=>e.jsx(_e,{projekt:t,karten:P.filter(n=>n.projekt===t.key),zeile:q,onArchivAlle:ae,raeumt:!!v["arch:"+t.key]},t.key)),(()=>{const t=new Set(((r==null?void 0:r.projekte)??[]).map(a=>a.key)),n=P.filter(a=>!a.projekt||!t.has(a.projekt));if(n.length===0)return null;const x=n.filter(a=>$[a.status]!==void 0).sort((a,L)=>$[a.status]-$[L.status]||(a.erstellt??0)-(L.erstellt??0)),f=n.filter(a=>["todo","scheduled"].includes(a.status)),b=n.filter(a=>a.status==="done");return e.jsxs("div",{className:"space-y-2",children:[x.length>0&&e.jsx("ul",{className:"space-y-1.5",children:x.map(a=>q(a))}),f.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(he,{className:"h-3 w-3"})," Wartet (",f.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:f.map(a=>q(a))})]}),b.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(Ce,{className:"h-3 w-3 text-emerald-400/70"})," Fertig (",b.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:b.map(a=>q(a))})]})]})})()]}),(r==null?void 0:r.available)&&!c&&P.length===0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground/70",children:"Noch nichts hier. Zum Beispiel:"}),["Ein kleines Werkzeug, das meine Fotos nach Aufnahmedatum in Ordner sortiert","Rippy soll die Untertitel-Spur automatisch auswählen statt zu fragen","Lohnt sich ein Dashboard für die Stromzähler, oder reicht Home Assistant?"].map(t=>e.jsxs("button",{onClick:()=>p(t),className:"flex w-full items-center gap-2 rounded-lg border border-border/40 bg-background/20 px-3 py-2 text-left text-xs text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground cursor-pointer",children:[e.jsx(O,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground/50"}),t]},t))]})]}),g]})}function F({k:r,aktiv:c,onWahl:k}){return e.jsxs("button",{onClick:k,className:S("rounded-xl border p-3 text-left transition-all cursor-pointer",c?"border-primary/60 bg-primary/5":"border-border/50 hover:border-border"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r.icon,{className:S("h-4 w-4 shrink-0",c?"text-primary":"text-muted-foreground")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:r.titel})]}),e.jsx("p",{className:"mt-1 text-[11px] leading-relaxed text-muted-foreground",children:r.text})]})}const $={blocked:0,running:1,review:2,ready:3,triage:4};function _e({projekt:r,karten:c,zeile:k,onArchivAlle:s,raeumt:m}){const[g,h]=d.useState(!1),[p,o]=d.useState(!1),i=c.filter(l=>$[l.status]!==void 0).sort((l,N)=>$[l.status]-$[N.status]||(l.erstellt??0)-(N.erstellt??0)),j=c.filter(l=>l.status==="todo"||l.status==="scheduled").sort((l,N)=>{var u,A;return((u=l.wartet_auf)!=null&&u.length?1:0)-((A=N.wartet_auf)!=null&&A.length?1:0)||(l.erstellt??0)-(N.erstellt??0)}),w=c.filter(l=>l.status==="done").sort((l,N)=>(N.fertig??0)-(l.fertig??0)),y=r.gesamt>0?Math.round(r.fertig/r.gesamt*100):0;return e.jsxs("div",{className:"space-y-2 rounded-xl border border-border/50 bg-background/20 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Pe,{className:"h-4 w-4 shrink-0 text-primary/70"}),e.jsx("p",{className:"min-w-0 flex-1 truncate text-xs font-semibold text-foreground",title:r.titel,children:r.titel}),e.jsxs("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:[r.fertig," von ",r.gesamt," fertig"]})]}),e.jsx("div",{className:"h-1 overflow-hidden rounded-full bg-background/60",title:`${y}%`,children:e.jsx("div",{className:"h-1 rounded-full bg-primary/70 transition-all",style:{width:`${y}%`}})}),i.length>0&&e.jsx("ul",{className:"space-y-1.5",children:i.map(l=>k(l))}),j.length>0&&e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>h(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[g?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),j.length," Karte",j.length===1?"":"n"," in der Kette — laufen automatisch der Reihe nach"]}),g&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:j.map(l=>k(l))})]}),w.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>o(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-emerald-300/70 hover:text-emerald-300 transition-colors cursor-pointer",children:[p?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),w.length," fertig"]}),s&&e.jsxs("button",{disabled:m,onClick:()=>s(r.key,w.length,`„${r.titel}"`),title:"Räumt die fertigen Karten dieser Kette weg (Archiv, nichts wird gelöscht).",className:"flex items-center gap-1 text-[11px] text-muted-foreground/60 transition-colors hover:text-foreground disabled:opacity-50 cursor-pointer",children:[m?e.jsx(D,{className:"h-3 w-3 animate-spin"}):e.jsx(Q,{className:"h-3 w-3"}),"wegräumen"]})]}),p&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:w.map(l=>k(l))})]})]})}function Fe({id:r,istIdee:c,onWeiter:k}){const[s,m]=d.useState(null),[g,h]=d.useState(!1),[p,o]=d.useState(0);return d.useEffect(()=>{let i=!1;return m(null),h(!1),z(`/api/ideen/${r}/konzept`).then(j=>{i||m(j)}).catch(()=>{i||h(!0)}),()=>{i=!0}},[r,p]),e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-violet-500/25 bg-violet-500/[0.04] p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-violet-300",children:[e.jsx(pe,{className:"h-3 w-3"})," Konzept"]}),(s==null?void 0:s.repo)&&e.jsxs("a",{href:`https://git.tobisniceshomelab.ddnsfree.com/${s.repo}`,className:"flex items-center gap-1 text-[10px] text-violet-300/70 hover:text-violet-200",children:[e.jsx(Y,{className:"h-3 w-3"})," ",s.repo]}),!(s!=null&&s.repo)&&(s==null?void 0:s.quelle)==="datei"&&e.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/70",title:"Der Worker hat kein Repo angelegt — das Konzept liegt als Datei auf der Box.",children:s.pfad}),e.jsx("button",{onClick:()=>o(i=>i+1),title:"Neu laden",className:"ml-auto rounded p-0.5 text-muted-foreground/50 hover:text-foreground cursor-pointer",children:e.jsx(fe,{className:"h-3 w-3"})})]}),g?e.jsx("p",{className:"text-[11px] text-red-400",children:"Konzept nicht ladbar — später nochmal versuchen."}):s===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Konzept wird geladen …"}):s.konzept?e.jsx("div",{className:"max-h-[28rem] overflow-y-auto pr-1",children:e.jsx(Te,{text:s.konzept})}):e.jsx("p",{className:"text-[11px] text-muted-foreground italic",children:s.error||"Noch kein Konzept — das Projekt wird gerade vorbereitet."}),c&&(s==null?void 0:s.konzept)&&e.jsx(Ge,{id:r,onFertig:k})]})})}function Ge({id:r,onFertig:c}){const[k,s]=d.useState("lxc"),[m,g]=d.useState("simpel"),[h,p]=d.useState(!1),[o,i]=d.useState(null),[j,w]=d.useState(""),[y,l]=d.useState(""),N=async(u,A,V)=>{p(!0),w("");try{const K=await z(u,{method:"POST",body:JSON.stringify(A)});i({id:K.id,art:V}),c==null||c()}catch(K){w(String((K==null?void 0:K.message)||K))}finally{p(!1)}};return o?e.jsx("p",{className:"mt-3 border-t border-violet-500/20 pt-2 text-[11px] text-emerald-300",children:o.art==="projekt"?e.jsxs(e.Fragment,{children:["Projekt-Karte ",e.jsx("span",{className:"font-mono",children:o.id})," ist angelegt — die Box bereitet das Repo vor (Konzept übernimmt sie, sie denkt es nicht neu). Danach öffnest du es in Zed."]}):e.jsxs(e.Fragment,{children:["Überarbeitung ",e.jsx("span",{className:"font-mono",children:o.id}),' läuft — die Box arbeitet deine Rückmeldung ein und schreibt die neue Fassung an dieselbe Stelle. Danach hier wieder „Konzept" öffnen.']})}):e.jsxs("div",{className:"mt-3 space-y-3 border-t border-violet-500/20 pt-2.5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-sky-300/90",children:"Passt etwas nicht?"})," Schreib hin, was anders werden soll — die Box arbeitet es ein und lässt den Rest stehen. Beliebig oft wiederholbar."]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:y,onChange:u=>l(u.target.value),onKeyDown:u=>{u.key==="Enter"&&y.trim().length>=3&&!h&&N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde")},placeholder:"z. B. „Punkt 3: kein WebSocket, das ist mir zu fragil — nimm Polling“",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-sky-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde"),disabled:h||y.trim().length<3,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-sky-500/40 bg-sky-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-sky-300 transition-all hover:bg-sky-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(fe,{className:"h-3.5 w-3.5"}),"Nachschärfen"]})]})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-violet-300/90",children:"Passt es so?"})," Dann macht die Box daraus ein startklares Repo — Konzept wird übernommen (nicht neu gedacht), dazu Roadmap, AGENTS.md & Co. Gebaut wird danach von dir in Zed."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Ziel"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["lxc","docker"].map(u=>e.jsx("button",{onClick:()=>s(u),title:u==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker) — wird automatisch mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",k===u?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:u==="lxc"?"LXC":"Docker"},u))}),e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Aufwand"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["simpel","gruendlich"].map(u=>e.jsx("button",{onClick:()=>g(u),title:u==="simpel"?"Konzept ist schon gehärtet — nur kurz auf die Bau-Sicht nachschärfen (empfohlen).":"Nochmal volle Kaskade über die Bau-Sicht: mehrere Rollen, Härtetests. Dauert entsprechend.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",m===u?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:u==="simpel"?"schlank":"gründlich"},u))}),e.jsxs("button",{onClick:()=>N("/api/ideen/weiterfuehren",{id:r,ziel:k,tiefe:m},"projekt"),disabled:h,className:"ml-auto flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ee,{className:"h-3.5 w-3.5"}),"Gefällt mir — Projekt daraus machen"]})]}),j&&e.jsx("p",{className:"text-[11px] text-red-400",children:j})]})}function He({id:r}){const[c,k]=d.useState(null),[s,m]=d.useState(!1),[g,h]=d.useState(0);d.useEffect(()=>{let o=!1;return m(!1),k(null),z(`/api/ideen/${r}/ergebnis`).then(i=>{o||k(i)}).catch(()=>{o||m(!0)}),()=>{o=!0}},[r,g]);const p=c?c.summary||c.result:"";return e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-emerald-500/25 bg-emerald-500/5 p-2.5",children:[e.jsxs("p",{className:"mb-1 flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-emerald-300",children:[e.jsx(Be,{className:"h-3 w-3"})," Ergebnis des Workers"]}),s?e.jsx("button",{type:"button",onClick:()=>h(o=>o+1),className:"text-[10px] text-red-400 underline decoration-dotted underline-offset-2 hover:text-red-300",children:"Ergebnis nicht ladbar — nochmal versuchen"}):c===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Wird geladen …"}):p?e.jsx("p",{className:"max-h-64 overflow-y-auto whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:p}):e.jsx("p",{className:"text-[10px] text-muted-foreground italic",children:"Der Worker hat keine Abschluss-Zusammenfassung hinterlassen (ältere Karte oder Protokollverstoß)."})]})})}function et(){return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Ideen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Schreib hin, was entstehen soll. Die Box liest mit und schlägt vor, wie es weitergeht — ändern kannst du das immer."})]}),e.jsx(qe,{})]})}export{et as IdeenView}; +`),s=[];let m=[],p=null;const h=g=>{m.length&&(s.push(e.jsx("ul",{className:"mb-3 ml-4 list-disc space-y-1",children:m},g)),m=[])};return k.forEach((g,o)=>{const i=`l${o}`;if(p!==null){g.trimEnd()==="```"?(s.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px] leading-relaxed text-foreground/85",children:p.join(` +`)},i)),p=null):p.push(g);return}if(g.trimStart().startsWith("```")){h(i),p=[];return}const j=g.trimEnd();if(!j.trim()){h(i);return}const w=j.match(/^(#{1,4})\s+(.*)$/);if(w){h(i);const N=w[1].length,u=N===1?"text-base font-bold mt-1 mb-2":N===2?"text-sm font-bold mt-4 mb-1.5":"text-xs font-bold mt-3 mb-1 uppercase tracking-wide text-muted-foreground";s.push(e.jsx("p",{className:S(u,"font-space text-foreground"),children:_(w[2],i)},i));return}const y=j.match(/^\s*[-*•]\s+(.*)$/);if(y){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:_(y[1],i)},i));return}const l=j.match(/^\s*\d+\.\s+(.*)$/);if(l){m.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:_(l[1],i)},i));return}h(i),s.push(e.jsx("p",{className:"mb-2 text-xs leading-relaxed text-foreground/85",children:_(j,i)},i))}),h("end"),p!==null&&s.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px]",children:p.join(` +`)},"code-end")),e.jsx("div",{className:S("max-w-3xl",c),children:s})}function _(r,c){return r.split(/(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g).map((s,m)=>{const p=`${c}-${m}`;return/^\*\*[^*]+\*\*$/.test(s)?e.jsx("b",{className:"font-semibold text-foreground",children:s.slice(2,-2)},p):/^\*[^*]+\*$/.test(s)?e.jsx("i",{children:s.slice(1,-1)},p):/^`[^`]+`$/.test(s)?e.jsx("code",{className:"rounded bg-background/50 px-1 font-mono text-[11px] text-foreground/90",children:s.slice(1,-1)},p):e.jsx("span",{children:s},p)})}const Ie={triage:{label:"wird ausgearbeitet …",cls:"text-violet-300 border-violet-500/40 bg-violet-500/10",spin:!0},todo:{label:"wartet",cls:"text-muted-foreground border-border/60 bg-background/30"},scheduled:{label:"geplant",cls:"text-muted-foreground border-border/60 bg-background/30"},ready:{label:"gleich dran",cls:"text-sky-300/80 border-sky-500/30 bg-sky-500/5"},running:{label:"in Arbeit …",cls:"text-sky-300 border-sky-500/40 bg-sky-500/10",spin:!0},review:{label:"im Review",cls:"text-amber-300 border-amber-500/40 bg-amber-500/10"},blocked:{label:"hängt — braucht dich",cls:"text-red-300 border-red-500/40 bg-red-500/10"},done:{label:"fertig ✓",cls:"text-emerald-300 border-emerald-500/40 bg-emerald-500/10"}},Ve={box:{label:"BOX",icon:U,cls:"border-border/60 bg-background/40 text-muted-foreground",title:"Box-Welt: die Werkstatt baut das selbst. Das Ergebnis kommt als Patch-Vorschlag zurück — nichts geht ohne deinen Klick live."},idee:{label:"IDEE",icon:O,cls:"border-sky-500/40 bg-sky-500/10 text-sky-300",title:"Nur durchdacht: die Box hat die Produkt-Idee mit voller Denk-Kaskade zu einem Konzept ausgearbeitet. Kein Gerüst, kein Bau — du liest es und entscheidest, ob ein Projekt draus wird."},projekt:{label:"IDE",icon:ee,cls:"border-violet-500/40 bg-violet-500/10 text-violet-300",title:"IDE-Welt: die Box bereitet nur vor (Konzept + Repo + Doku, kein Code). Gebaut wird von dir in Zed."}},Ze={needs_input:"Die Box hat eine Frage:",capability:"Die Box kam hier nicht weiter:",transient:"Die Aufgabe hakt:"},be="mc_ideen_quote";function ke(){try{const r=JSON.parse(localStorage.getItem(be)||"{}");return{gesendet:Number(r.gesendet)||0,geaendert:Number(r.geaendert)||0}}catch{return{gesendet:0,geaendert:0}}}function pe(r){try{const c=ke();c[r]+=1,localStorage.setItem(be,JSON.stringify(c))}catch{}}function qe(){var ie,le;const{data:r,isLoading:c}=ve(),k=Se(),{showAlert:s,showConfirm:m,dialogElement:p}=De(),[h,g]=d.useState(""),[o,i]=d.useState("denken"),[j,w]=d.useState("schlank"),[y,l]=d.useState(!1),[N,u]=d.useState(!1),A=o!=="box",V=o==="repo",[K,je]=d.useState("lxc"),[G,te]=d.useState(!1),[v,E]=d.useState({}),[R,Ne]=d.useState(null),[H,we]=d.useState(null),[J,re]=d.useState({}),P=(r==null?void 0:r.items)??[],W=()=>k.invalidateQueries({queryKey:Le.ideen});d.useEffect(()=>{const t=h.trim();if(t.length<12){u(!1);return}let n=!1;const x=setTimeout(async()=>{try{const f=await z("/api/ideen/einordnen",{method:"POST",body:JSON.stringify({text:t})});if(n||!(f!=null&&f.ok))return;i(f.nur_denken?"denken":f.wer==="zed"?"repo":"box"),f.tiefe&&w(f.tiefe),u(!0)}catch{}},700);return()=>{n=!0,clearTimeout(x)}},[h]);const se=R!==null&&(((ie=r==null?void 0:r.items.find(t=>t.id===R))==null?void 0:ie.status)==="triage"||((le=r==null?void 0:r.items.find(t=>t.id===R))==null?void 0:le.status)==="running"),B=Ke(R??"",se);async function ne(){const t=h.trim();if(!(t.length<3||G)){te(!0);try{const n=t.length>160?t.slice(0,157)+"…":t;await z("/api/ideen",{method:"POST",body:JSON.stringify({titel:n,notiz:t.length>160?t:"",welt:A?"ide":"box",tiefe:V?j==="gruendlich"?"gruendlich":"simpel":"",ziel:V?K:"",art:o==="denken"?"idee":"projekt"})}),pe("gesendet"),g(""),u(!1),l(!1),W()}catch(n){s("Das hat nicht geklappt",String((n==null?void 0:n.message)||n))}finally{te(!1)}}}function ae(t,n,x){m(`${n} fertige Karte${n===1?"":"n"} wegräumen?`,`${x} verschwindet aus der Liste. Gelöscht wird nichts — die Karten wandern ins Archiv der Queue und bleiben dort lesbar. Laufende, hängende und wartende Karten bleiben unberührt.`,async()=>{var b;const f="arch:"+(t||"*");E(a=>({...a,[f]:!0}));try{const a=await z("/api/ideen/archivieren-alle",{method:"POST",body:JSON.stringify({projekt:t})});(b=a.fehlgeschlagen)!=null&&b.length&&s("Teilweise erledigt",`${a.archiviert} weggeräumt, ${a.fehlgeschlagen.length} nicht: `+a.fehlgeschlagen.map(L=>L.titel).join(", ")),W()}catch(a){s("Das hat nicht geklappt",String((a==null?void 0:a.message)||a))}finally{E(a=>({...a,[f]:!1}))}})}async function ye(t){E(n=>({...n,[t]:!0}));try{await z("/api/ideen/archivieren",{method:"POST",body:JSON.stringify({id:t})}),W()}catch(n){s("Das hat nicht geklappt",String((n==null?void 0:n.message)||n))}finally{E(n=>({...n,[t]:!1}))}}async function Z(t,n,x,f){E(b=>({...b,[t+n]:!0}));try{await z(x,{method:"POST",body:JSON.stringify(f)}),W()}catch(b){s("Das hat nicht geklappt",String((b==null?void 0:b.message)||b))}finally{E(b=>({...b,[t+n]:!1}))}}async function oe(t){const n=(J[t]||"").trim();if(!(n.length<1||v["ans:"+t])){E(x=>({...x,["ans:"+t]:!0}));try{await z("/api/ideen/antwort",{method:"POST",body:JSON.stringify({id:t,antwort:n})}),re(x=>({...x,[t]:""})),W()}catch(x){s("Das hat nicht geklappt",String((x==null?void 0:x.message)||x))}finally{E(x=>({...x,["ans:"+t]:!1}))}}}const q=t=>{var ce,ue;const n=Ie[t.status]??{label:t.status,cls:"text-muted-foreground border-border/60 bg-background/30"},x=R===t.id,f=t.status==="triage"||t.status==="running"||t.status==="done",b=t.status==="blocked",a=!!v["ans:"+t.id],L=t.status==="running"&&(t.puls_alter??0)>600,de=t.status==="todo"||t.status==="ready"||t.status==="scheduled";return e.jsxs("li",{className:S("flex flex-col gap-2 rounded-xl border bg-background/30 px-3 py-2",b?"border-red-500/30":L?"border-amber-500/40":"border-border/40"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("span",{className:S("flex shrink-0 items-center gap-1.5 rounded-lg border px-2 py-0.5 text-[10px] font-bold",n.cls),children:[n.spin&&e.jsx(D,{className:"h-3 w-3 animate-spin"}),n.label]}),L&&e.jsxs("span",{className:"flex shrink-0 items-center gap-1 rounded-lg border border-amber-500/40 bg-amber-500/10 px-2 py-0.5 text-[10px] font-bold text-amber-300",title:"Der Worker lebt, gibt aber kein Lebenszeichen mehr — vermutlich wartet er auf etwas, das nie kommt. „Neuer Versuch“ startet die Karte frisch.",children:[e.jsx(ze,{className:"h-3 w-3"})," ",Math.round((t.puls_alter??0)/60)," min ohne Regung"]}),(t.prio??0)!==0&&e.jsxs("span",{className:"shrink-0 rounded bg-background/50 px-1.5 py-0.5 font-mono text-[10px] text-muted-foreground",title:"Priorität — höher kommt zuerst dran (bei gleicher Prio: Erstellzeit)",children:["P",t.prio]}),(()=>{const C=Ve[t.art||(t.welt==="ide"?"projekt":"box")];if(!C)return null;const M=C.icon;return e.jsxs("span",{className:S("flex shrink-0 items-center gap-1 rounded-lg border px-2 py-0.5 text-[10px] font-bold",C.cls),title:C.title,children:[e.jsx(M,{className:"h-3 w-3"})," ",C.label]})})(),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-foreground",title:t.titel,children:t.titel}),e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[10px] text-muted-foreground/70",children:[e.jsx(he,{className:"h-3 w-3"}),Ee(t.erstellt)]}),de&&e.jsxs("span",{className:"flex shrink-0 items-center",children:[e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>Z("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"hoch"}),title:"Vorziehen (Prio +1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx(Re,{className:"h-3.5 w-3.5"})}),e.jsx("button",{disabled:!!v["pr:"+t.id],onClick:()=>Z("pr:",t.id,"/api/ideen/prio",{id:t.id,richtung:"runter"}),title:"Zurückstellen (Prio −1)",className:"rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:e.jsx($e,{className:"h-3.5 w-3.5"})})]}),(t.status==="running"||b)&&e.jsx("button",{disabled:!!v["rt:"+t.id],onClick:()=>m("Neuer Versuch?",t.status==="running"?`Der laufende Worker von '${t.titel.slice(0,60)}' wird beendet (samt gestarteter Test-Prozesse) und die Karte frisch gestartet. Bisheriger Zwischenstand im Workspace bleibt liegen.`:`Die Karte '${t.titel.slice(0,60)}' wird entsperrt und läuft weiter, sobald ein Platz frei ist.`,()=>Z("rt:",t.id,"/api/ideen/retry",{id:t.id})),title:"Neuer Versuch — Karte frisch starten",className:S("shrink-0 rounded-md p-1 transition-colors cursor-pointer disabled:opacity-50",L?"text-amber-300 hover:text-amber-200":"text-muted-foreground/60 hover:text-foreground"),children:v["rt:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(We,{className:"h-3.5 w-3.5"})}),(t.status==="running"||de||t.status==="triage")&&e.jsx("button",{disabled:!!v["st:"+t.id],onClick:()=>m("Karte stoppen?",`'${t.titel.slice(0,60)}' wird angehalten${t.status==="running"?" und der laufende Worker beendet":""}. Sie bleibt als gestoppt im Board und kann jederzeit per „Neuer Versuch“ weiterlaufen.`,()=>Z("st:",t.id,"/api/ideen/stopp",{id:t.id})),title:"Stoppen — Karte anhalten",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-red-300 cursor-pointer disabled:opacity-50",children:v["st:"+t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Oe,{className:"h-3.5 w-3.5"})}),(t.status==="done"||b)&&e.jsx("button",{disabled:!!v[t.id],onClick:()=>ye(t.id),title:b?"Aufgeben und aus der Liste räumen (wandert ins Kanban-Archiv)":"Aus der Liste räumen (wandert ins Kanban-Archiv)",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer disabled:opacity-50",children:v[t.id]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"})}),t.welt==="ide"&&(t.status==="running"||t.status==="done")&&e.jsxs("button",{onClick:()=>we(H===t.id?null:t.id),title:"Konzept ansehen (das ausgearbeitete KONZEPT.md)",className:S("flex shrink-0 items-center gap-1 rounded-md px-1.5 py-1 text-[10px] font-bold transition-colors cursor-pointer",H===t.id?"text-violet-300":"text-violet-300/70 hover:text-violet-200"),children:[e.jsx(ge,{className:"h-3.5 w-3.5"})," Konzept"]}),f&&e.jsx("button",{onClick:()=>Ne(x?null:t.id),title:t.status==="done"?"Ergebnis anzeigen":"Worker-Log anzeigen",className:"shrink-0 rounded-md p-1 text-muted-foreground/60 transition-colors hover:text-foreground cursor-pointer",children:x?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"})})]}),H===t.id&&e.jsx(Fe,{id:t.id,istIdee:t.art==="idee"&&t.status==="done",onWeiter:W}),t.status==="running"&&t.notiz&&e.jsxs("p",{className:"-mt-1 ml-1 text-[11px] italic leading-relaxed text-sky-200/80",title:"Jüngste Zwischenmeldung des Workers (Heartbeat)",children:["„",t.notiz,"“"]}),(t.status==="todo"||t.status==="scheduled"||t.status==="ready")&&(((ce=t.wartet_auf)==null?void 0:ce.length)??0)>0&&e.jsxs("p",{className:"-mt-1 ml-1 text-[10px] text-muted-foreground/70",children:["→ wartet auf: ",t.wartet_auf.join(" · ")]}),b&&e.jsxs("div",{className:"space-y-2 border-t border-red-500/20 pt-2",children:[e.jsxs("p",{className:"flex items-start gap-1.5 text-[11px] leading-relaxed text-red-200/90",children:[e.jsx(xe,{className:"mt-0.5 h-3.5 w-3.5 shrink-0 text-red-300"}),e.jsxs("span",{children:[e.jsx("b",{children:Ze[t.frage_kind||""]??"Die Aufgabe hängt und wartet auf dich:"})," ",t.frage?e.jsx("span",{className:"text-foreground/90",children:t.frage}):e.jsx("span",{className:"text-muted-foreground italic",children:"kein genauer Grund hinterlegt — antworte einfach mit einer Entscheidung, dann läuft sie weiter."})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:J[t.id]||"",onChange:C=>re(M=>({...M,[t.id]:C.target.value})),onKeyDown:C=>{C.key==="Enter"&&oe(t.id)},placeholder:"Deine Antwort — die Box macht damit weiter",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-red-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>oe(t.id),disabled:a||(J[t.id]||"").trim().length<1,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-emerald-500/40 bg-emerald-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-emerald-300 transition-all hover:bg-emerald-500/20 cursor-pointer disabled:opacity-50",children:[a?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(me,{className:"h-3.5 w-3.5"})," Antworten & weiter"]})]})]}),x&&f&&t.status!=="done"&&e.jsx("div",{className:"ml-2 -mt-1",children:e.jsx("div",{className:"rounded-lg border border-border/50 bg-background/50 p-2",children:se&&B.isLoading?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Log wird geladen …"}):B.error?e.jsx("p",{className:"text-[10px] text-red-400",children:"Log nicht ladbar"}):(ue=B.data)!=null&&ue.available&&B.data.lines.length>0?e.jsx("pre",{className:"max-h-64 overflow-auto font-mono text-[10px] leading-relaxed text-foreground/80 whitespace-pre-wrap",children:B.data.lines.join(` +`)}):e.jsx("p",{className:"text-[10px] text-muted-foreground",children:"Kein Log verfügbar"})})}),x&&t.status==="done"&&e.jsx(He,{id:t.id})]},t.id)};return r&&!r.available?null:e.jsxs("section",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx(Ae,{icon:O,children:(()=>{if(!r)return"Ideen-Queue";const t=x=>P.filter(f=>x.includes(f.status)).length,n=[t(["blocked"])>0?`${t(["blocked"])} braucht dich`:"",t(["running","triage","review"])>0?`${t(["running","triage","review"])} in Arbeit`:"",t(["todo","scheduled","ready"])>0?`${t(["todo","scheduled","ready"])} wartet`:"",t(["done"])>0?`${t(["done"])} fertig`:""].filter(Boolean);return n.length?n.join(" · "):"noch nichts in der Queue"})()}),(()=>{const t=P.filter(n=>n.status==="done").length;return t===0?null:e.jsxs("button",{disabled:!!v["arch:*"],onClick:()=>ae("",t,`Alle ${t} fertigen Karten`),title:"Räumt ALLE fertigen Karten weg — auch die in abgeschlossenen Projekt-Ketten. Laufende, hängende und wartende bleiben unberührt.",className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-border/60 px-2.5 py-1 text-[11px] font-semibold text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground disabled:opacity-50 cursor-pointer",children:[v["arch:*"]?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(Q,{className:"h-3.5 w-3.5"}),t," fertige wegräumen"]})})()]}),e.jsxs("div",{className:"mc-card p-4 space-y-4",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:h,onChange:t=>{g(t.target.value),u(!1)},onKeyDown:t=>{t.key==="Enter"&&ne()},placeholder:"Was soll entstehen?",className:"h-10 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/50 px-3 text-sm text-foreground placeholder:text-muted-foreground/50 focus:border-primary/50 focus:outline-none"}),e.jsxs("button",{onClick:ne,disabled:G||h.trim().length<3,className:"flex h-10 shrink-0 items-center gap-1.5 rounded-lg border border-primary/40 bg-primary/10 px-4 text-xs font-semibold text-primary transition-all hover:bg-primary/20 disabled:opacity-40 cursor-pointer",children:[G?e.jsx(D,{className:"h-4 w-4 animate-spin"}):e.jsx(me,{className:"h-4 w-4"}),"Los"]})]}),y?e.jsxs("div",{className:"space-y-3 rounded-xl border border-border/40 bg-background/20 p-3",children:[e.jsxs("div",{children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Wer baut das?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(F,{aktiv:o!=="box",onWahl:()=>i(o==="box"?"denken":o),k:{id:"zed",icon:ee,titel:"Ich, in Zed",text:"Du bekommst Konzept und Repo — den Code schreibst du selbst."}}),e.jsx(F,{aktiv:o==="box",onWahl:()=>i("box"),k:{id:"box",icon:U,titel:"Die Box, allein",text:"Für dein Heimlabor. Das Ergebnis kommt als Patch-Vorschlag ins Auftragsbuch."}})]})]}),o!=="box"&&e.jsxs("div",{className:"border-l-2 border-primary/40 pl-3",children:[e.jsx("p",{className:"mb-1.5 text-[11px] text-muted-foreground/70",children:"Und wie startest du?"}),e.jsxs("div",{className:"grid gap-2 sm:grid-cols-2",children:[e.jsx(F,{aktiv:o==="denken",onWahl:()=>i("denken"),k:{id:"denken",icon:O,titel:"Erst durchdenken",text:"Konzept zuerst — auf dein Ja wird ein Repo daraus."}}),e.jsx(F,{aktiv:o==="repo",onWahl:()=>i("repo"),k:{id:"repo",icon:Y,titel:"Direkt ein Repo",text:"Konzept und Gitea-Repo in einem Zug."}})]}),o==="repo"?e.jsxs("div",{className:"mt-2.5 flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Wie gründlich?"}),e.jsx("div",{className:"flex rounded-lg border border-border/60 p-0.5",children:[["schlank","schlank"],["gruendlich","gründlich"]].map(([t,n])=>e.jsx("button",{onClick:()=>w(t),className:S("rounded px-2.5 py-1 text-[10px] font-bold uppercase tracking-wide transition-all cursor-pointer",j===t?"bg-primary/15 text-primary":"text-muted-foreground/60 hover:text-foreground"),children:n},t))}),e.jsxs("span",{className:"ml-auto flex items-center gap-1.5",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Läuft als"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:[["lxc","LXC"],["docker","Docker"]].map(([t,n])=>e.jsx("button",{onClick:()=>je(t),title:t==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker). Wird vom Backup-Server mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",K===t?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:n},t))})]})]}):e.jsxs("p",{className:"mt-2 flex items-start gap-1.5 text-[10px] leading-relaxed text-muted-foreground/60",children:[e.jsx(xe,{className:"mt-px h-3 w-3 shrink-0"}),'Wie gründlich und wo es läuft, fragt die Box erst beim „gefällt mir" — dann weißt du mehr.']})]}),(()=>{const t=ke();return t.gesendet<3?null:e.jsxs("p",{className:"border-t border-border/30 pt-2 text-[10px] text-muted-foreground/50",children:["Du hast ",t.geaendert," von ",t.gesendet," Vorschlägen geändert. Wird das die Regel, bauen wir hier einen richtigen Schritt-für-Schritt-Assistenten."]})})()]}):e.jsxs("div",{className:"flex flex-wrap items-center gap-2 rounded-xl border border-border/40 bg-background/20 px-3 py-2.5 text-xs",children:[o==="box"?e.jsx(U,{className:"h-4 w-4 shrink-0 text-primary"}):o==="repo"?e.jsx(Y,{className:"h-4 w-4 shrink-0 text-primary"}):e.jsx(O,{className:"h-4 w-4 shrink-0 text-primary"}),!N&&e.jsx("span",{className:"shrink-0 text-[10px] uppercase tracking-wider text-muted-foreground/50",children:"Voreingestellt"}),e.jsx("span",{className:"text-muted-foreground",children:o==="box"?"Ich baue das selbst und lege dir das Ergebnis als Vorschlag hin.":o==="repo"?"Du baust selbst — ich lege dir Konzept und Repo an.":"Du baust selbst — ich arbeite erst ein Konzept aus."}),N&&e.jsx("span",{className:"shrink-0 rounded border border-primary/40 bg-primary/10 px-1.5 py-0.5 text-[10px] font-bold text-primary",children:"gelesen"}),e.jsx("button",{onClick:()=>{l(!0),pe("geaendert")},className:"ml-auto shrink-0 text-[11px] text-muted-foreground/60 underline underline-offset-2 transition-colors hover:text-foreground cursor-pointer",children:"anders"})]}),c&&e.jsxs("p",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"})," Queue wird geladen …"]}),(r==null?void 0:r.fehler)&&e.jsx("p",{className:"text-xs text-amber-300",children:"Queue gerade nicht lesbar — neuer Versuch läuft."}),P.length>0&&e.jsxs("div",{className:"space-y-3",children:[((r==null?void 0:r.projekte)??[]).map(t=>e.jsx(_e,{projekt:t,karten:P.filter(n=>n.projekt===t.key),zeile:q,onArchivAlle:ae,raeumt:!!v["arch:"+t.key]},t.key)),(()=>{const t=new Set(((r==null?void 0:r.projekte)??[]).map(a=>a.key)),n=P.filter(a=>!a.projekt||!t.has(a.projekt));if(n.length===0)return null;const x=n.filter(a=>$[a.status]!==void 0).sort((a,L)=>$[a.status]-$[L.status]||(a.erstellt??0)-(L.erstellt??0)),f=n.filter(a=>["todo","scheduled"].includes(a.status)),b=n.filter(a=>a.status==="done");return e.jsxs("div",{className:"space-y-2",children:[x.length>0&&e.jsx("ul",{className:"space-y-1.5",children:x.map(a=>q(a))}),f.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(he,{className:"h-3 w-3"})," Wartet (",f.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:f.map(a=>q(a))})]}),b.length>0&&e.jsxs("details",{className:"group",children:[e.jsxs("summary",{className:"flex cursor-pointer list-none items-center gap-1.5 py-1 text-[11px] text-muted-foreground/70 hover:text-foreground",children:[e.jsx(T,{className:"h-3 w-3 transition-transform group-open:rotate-90"}),e.jsx(Ce,{className:"h-3 w-3 text-emerald-400/70"})," Fertig (",b.length,")"]}),e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:b.map(a=>q(a))})]})]})})()]}),(r==null?void 0:r.available)&&!c&&P.length===0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-[11px] text-muted-foreground/70",children:"Noch nichts hier. Zum Beispiel:"}),["Ein kleines Werkzeug, das meine Fotos nach Aufnahmedatum in Ordner sortiert","Rippy soll die Untertitel-Spur automatisch auswählen statt zu fragen","Lohnt sich ein Dashboard für die Stromzähler, oder reicht Home Assistant?"].map(t=>e.jsxs("button",{onClick:()=>g(t),className:"flex w-full items-center gap-2 rounded-lg border border-border/40 bg-background/20 px-3 py-2 text-left text-xs text-muted-foreground transition-all hover:border-primary/40 hover:text-foreground cursor-pointer",children:[e.jsx(O,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground/50"}),t]},t))]})]}),p]})}function F({k:r,aktiv:c,onWahl:k}){return e.jsxs("button",{onClick:k,className:S("rounded-xl border p-3 text-left transition-all cursor-pointer",c?"border-primary/60 bg-primary/5":"border-border/50 hover:border-border"),children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(r.icon,{className:S("h-4 w-4 shrink-0",c?"text-primary":"text-muted-foreground")}),e.jsx("span",{className:"text-xs font-semibold text-foreground",children:r.titel})]}),e.jsx("p",{className:"mt-1 text-[11px] leading-relaxed text-muted-foreground",children:r.text})]})}const $={blocked:0,running:1,review:2,ready:3,triage:4};function _e({projekt:r,karten:c,zeile:k,onArchivAlle:s,raeumt:m}){const[p,h]=d.useState(!1),[g,o]=d.useState(!1),i=c.filter(l=>$[l.status]!==void 0).sort((l,N)=>$[l.status]-$[N.status]||(l.erstellt??0)-(N.erstellt??0)),j=c.filter(l=>l.status==="todo"||l.status==="scheduled").sort((l,N)=>{var u,A;return((u=l.wartet_auf)!=null&&u.length?1:0)-((A=N.wartet_auf)!=null&&A.length?1:0)||(l.erstellt??0)-(N.erstellt??0)}),w=c.filter(l=>l.status==="done").sort((l,N)=>(N.fertig??0)-(l.fertig??0)),y=r.gesamt>0?Math.round(r.fertig/r.gesamt*100):0;return e.jsxs("div",{className:"space-y-2 rounded-xl border border-border/50 bg-background/20 p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Pe,{className:"h-4 w-4 shrink-0 text-primary/70"}),e.jsx("p",{className:"min-w-0 flex-1 truncate text-xs font-semibold text-foreground",title:r.titel,children:r.titel}),e.jsxs("span",{className:"shrink-0 text-[10px] text-muted-foreground",children:[r.fertig," von ",r.gesamt," fertig"]})]}),e.jsx("div",{className:"h-1 overflow-hidden rounded-full bg-background/60",title:`${y}%`,children:e.jsx("div",{className:"h-1 rounded-full bg-primary/70 transition-all",style:{width:`${y}%`}})}),i.length>0&&e.jsx("ul",{className:"space-y-1.5",children:i.map(l=>k(l))}),j.length>0&&e.jsxs("div",{children:[e.jsxs("button",{onClick:()=>h(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground transition-colors cursor-pointer",children:[p?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),j.length," Karte",j.length===1?"":"n"," in der Kette — laufen automatisch der Reihe nach"]}),p&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:j.map(l=>k(l))})]}),w.length>0&&e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:()=>o(l=>!l),className:"flex items-center gap-1.5 text-[11px] font-semibold text-emerald-300/70 hover:text-emerald-300 transition-colors cursor-pointer",children:[g?e.jsx(X,{className:"h-3.5 w-3.5"}):e.jsx(T,{className:"h-3.5 w-3.5"}),w.length," fertig"]}),s&&e.jsxs("button",{disabled:m,onClick:()=>s(r.key,w.length,`„${r.titel}"`),title:"Räumt die fertigen Karten dieser Kette weg (Archiv, nichts wird gelöscht).",className:"flex items-center gap-1 text-[11px] text-muted-foreground/60 transition-colors hover:text-foreground disabled:opacity-50 cursor-pointer",children:[m?e.jsx(D,{className:"h-3 w-3 animate-spin"}):e.jsx(Q,{className:"h-3 w-3"}),"wegräumen"]})]}),g&&e.jsx("ul",{className:"mt-1.5 space-y-1.5",children:w.map(l=>k(l))})]})]})}function Fe({id:r,istIdee:c,onWeiter:k}){const[s,m]=d.useState(null),[p,h]=d.useState(!1),[g,o]=d.useState(0);return d.useEffect(()=>{let i=!1;return m(null),h(!1),z(`/api/ideen/${r}/konzept`).then(j=>{i||m(j)}).catch(()=>{i||h(!0)}),()=>{i=!0}},[r,g]),e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-violet-500/25 bg-violet-500/[0.04] p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center gap-2",children:[e.jsxs("p",{className:"flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-violet-300",children:[e.jsx(ge,{className:"h-3 w-3"})," Konzept"]}),(s==null?void 0:s.repo)&&e.jsxs("a",{href:`https://git.tobisniceshomelab.ddnsfree.com/${s.repo}`,className:"flex items-center gap-1 text-[10px] text-violet-300/70 hover:text-violet-200",children:[e.jsx(Y,{className:"h-3 w-3"})," ",s.repo]}),!(s!=null&&s.repo)&&(s==null?void 0:s.quelle)==="datei"&&e.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/70",title:"Der Worker hat kein Repo angelegt — das Konzept liegt als Datei auf der Box.",children:s.pfad}),e.jsx("button",{onClick:()=>o(i=>i+1),title:"Neu laden",className:"ml-auto rounded p-0.5 text-muted-foreground/50 hover:text-foreground cursor-pointer",children:e.jsx(fe,{className:"h-3 w-3"})})]}),p?e.jsx("p",{className:"text-[11px] text-red-400",children:"Konzept nicht ladbar — später nochmal versuchen."}):s===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Konzept wird geladen …"}):s.konzept?e.jsx("div",{className:"max-h-[28rem] overflow-y-auto pr-1",children:e.jsx(Te,{text:s.konzept})}):e.jsx("p",{className:"text-[11px] text-muted-foreground italic",children:s.error||"Noch kein Konzept — das Projekt wird gerade vorbereitet."}),c&&(s==null?void 0:s.konzept)&&e.jsx(Ge,{id:r,onFertig:k})]})})}function Ge({id:r,onFertig:c}){const[k,s]=d.useState("lxc"),[m,p]=d.useState("simpel"),[h,g]=d.useState(!1),[o,i]=d.useState(null),[j,w]=d.useState(""),[y,l]=d.useState(""),N=async(u,A,V)=>{g(!0),w("");try{const K=await z(u,{method:"POST",body:JSON.stringify(A)});i({id:K.id,art:V}),c==null||c()}catch(K){w(String((K==null?void 0:K.message)||K))}finally{g(!1)}};return o?e.jsx("p",{className:"mt-3 border-t border-violet-500/20 pt-2 text-[11px] text-emerald-300",children:o.art==="projekt"?e.jsxs(e.Fragment,{children:["Projekt-Karte ",e.jsx("span",{className:"font-mono",children:o.id})," ist angelegt — die Box bereitet das Repo vor (Konzept übernimmt sie, sie denkt es nicht neu). Danach öffnest du es in Zed."]}):e.jsxs(e.Fragment,{children:["Überarbeitung ",e.jsx("span",{className:"font-mono",children:o.id}),' läuft — die Box arbeitet deine Rückmeldung ein und schreibt die neue Fassung an dieselbe Stelle. Danach hier wieder „Konzept" öffnen.']})}):e.jsxs("div",{className:"mt-3 space-y-3 border-t border-violet-500/20 pt-2.5",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-sky-300/90",children:"Passt etwas nicht?"})," Schreib hin, was anders werden soll — die Box arbeitet es ein und lässt den Rest stehen. Beliebig oft wiederholbar."]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:y,onChange:u=>l(u.target.value),onKeyDown:u=>{u.key==="Enter"&&y.trim().length>=3&&!h&&N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde")},placeholder:"z. B. „Punkt 3: kein WebSocket, das ist mir zu fragil — nimm Polling“",maxLength:2e3,className:"h-8 min-w-0 flex-1 rounded-lg border border-border/60 bg-background/60 px-2.5 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-sky-400/50 focus:outline-none"}),e.jsxs("button",{onClick:()=>N("/api/ideen/nachschaerfen",{id:r,hinweis:y},"runde"),disabled:h||y.trim().length<3,className:"flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-sky-500/40 bg-sky-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-sky-300 transition-all hover:bg-sky-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(fe,{className:"h-3.5 w-3.5"}),"Nachschärfen"]})]})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground",children:[e.jsx("b",{className:"text-violet-300/90",children:"Passt es so?"})," Dann macht die Box daraus ein startklares Repo — Konzept wird übernommen (nicht neu gedacht), dazu Roadmap, AGENTS.md & Co. Gebaut wird danach von dir in Zed."]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2",children:[e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Ziel"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["lxc","docker"].map(u=>e.jsx("button",{onClick:()=>s(u),title:u==="lxc"?"Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker) — wird automatisch mitgesichert.":"Natives Docker: Dockerfile + compose, portabel und pipeline-tauglich.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",k===u?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:u==="lxc"?"LXC":"Docker"},u))}),e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"Aufwand"}),e.jsx("div",{className:"flex rounded-lg border border-border/40 p-0.5",children:["simpel","gruendlich"].map(u=>e.jsx("button",{onClick:()=>p(u),title:u==="simpel"?"Konzept ist schon gehärtet — nur kurz auf die Bau-Sicht nachschärfen (empfohlen).":"Nochmal volle Kaskade über die Bau-Sicht: mehrere Rollen, Härtetests. Dauert entsprechend.",className:S("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",m===u?"bg-foreground/10 text-foreground":"text-muted-foreground/50 hover:text-foreground/80"),children:u==="simpel"?"schlank":"gründlich"},u))}),e.jsxs("button",{onClick:()=>N("/api/ideen/weiterfuehren",{id:r,ziel:k,tiefe:m},"projekt"),disabled:h,className:"ml-auto flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-violet-500/40 bg-violet-500/10 px-3 text-[10px] font-bold uppercase tracking-wide text-violet-300 transition-all hover:bg-violet-500/20 cursor-pointer disabled:opacity-50",children:[h?e.jsx(D,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(ee,{className:"h-3.5 w-3.5"}),"Gefällt mir — Projekt daraus machen"]})]}),j&&e.jsx("p",{className:"text-[11px] text-red-400",children:j})]})}function He({id:r}){const[c,k]=d.useState(null),[s,m]=d.useState(!1),[p,h]=d.useState(0);d.useEffect(()=>{let o=!1;return m(!1),k(null),z(`/api/ideen/${r}/ergebnis`).then(i=>{o||k(i)}).catch(()=>{o||m(!0)}),()=>{o=!0}},[r,p]);const g=c?c.summary||c.result:"";return e.jsx("div",{className:"ml-2 -mt-1",children:e.jsxs("div",{className:"rounded-lg border border-emerald-500/25 bg-emerald-500/5 p-2.5",children:[e.jsxs("p",{className:"mb-1 flex items-center gap-1.5 text-[10px] font-bold uppercase tracking-wide text-emerald-300",children:[e.jsx(Be,{className:"h-3 w-3"})," Ergebnis des Workers"]}),s?e.jsx("button",{type:"button",onClick:()=>h(o=>o+1),className:"text-[10px] text-red-400 underline decoration-dotted underline-offset-2 hover:text-red-300",children:"Ergebnis nicht ladbar — nochmal versuchen"}):c===null?e.jsx("p",{className:"text-[10px] text-muted-foreground animate-pulse",children:"Wird geladen …"}):g?e.jsx("p",{className:"max-h-64 overflow-y-auto whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:g}):e.jsx("p",{className:"text-[10px] text-muted-foreground italic",children:"Der Worker hat keine Abschluss-Zusammenfassung hinterlassen (ältere Karte oder Protokollverstoß)."})]})})}function tt(){return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Ideen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Schreib hin, was entstehen soll. Die Box liest mit und schlägt vor, wie es weitergeht — ändern kannst du das immer."})]}),e.jsx(qe,{})]})}export{tt as IdeenView}; diff --git a/frontend/dist/assets/KonsoleView-BbOvz3DQ.js b/frontend/dist/assets/KonsoleView-TyxWGq5c.js similarity index 96% rename from frontend/dist/assets/KonsoleView-BbOvz3DQ.js rename to frontend/dist/assets/KonsoleView-TyxWGq5c.js index 2139f30..757e7eb 100644 --- a/frontend/dist/assets/KonsoleView-BbOvz3DQ.js +++ b/frontend/dist/assets/KonsoleView-TyxWGq5c.js @@ -1 +1 @@ -import{Y as b,u as f,$ as h,r as d,j as e,e as c,Z as g,T as p,a3 as j,a4 as N,g as v,a5 as w,q as x}from"./index-BChEIiQl.js";function y(){const{data:s}=b(),m=f(),r=s!=null&&s.box_console_url?h(s.box_console_url):void 0,a=s==null?void 0:s.box_console_reachable,[l,o]=d.useState(!1),[i,n]=d.useState("");async function u(){o(!0),n("");try{const t=await v("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:"box-console"})});n(t.ok?"Neu gestartet — einen Moment, dann lädt das Terminal.":`Fehlgeschlagen: ${t.err||"Unbekannter Fehler"}`),w(m,x.agentStatus,x.services)}catch(t){n(`Fehlgeschlagen: ${(t==null?void 0:t.message)||t}`)}finally{o(!1)}}return e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Konsole"}),e.jsx("p",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:"Direkte Shell auf der Box — wie ein SSH-Fenster, mitten im Browser."})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground",children:[e.jsx("span",{className:c("h-2 w-2 rounded-full",a?"bg-emerald-500 animate-pulse":"bg-amber-500")}),a?"online":"offline"]}),r&&e.jsxs("a",{href:r,target:"_blank",rel:"noopener",className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-background/20 px-3 text-xs font-semibold text-muted-foreground transition-all hover:border-primary/50 hover:text-foreground",children:[e.jsx(g,{className:"h-3.5 w-3.5"})," In neuem Tab"]})]})]}),r?e.jsxs("div",{className:"relative min-h-[58vh] flex-1 overflow-hidden rounded-2xl border border-border/60 bg-black/50 shadow-lg shadow-black/25",children:[a===!1&&e.jsxs("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-3 bg-black/70 text-center",children:[e.jsx(p,{className:"h-8 w-8 text-amber-400"}),e.jsx("div",{className:"text-sm font-semibold text-amber-300",children:"Konsole nicht erreichbar"}),e.jsxs("p",{className:"max-w-sm text-[11px] leading-normal text-muted-foreground",children:["Der Terminal-Dienst (",e.jsx("code",{className:"font-mono text-primary",children:"box-console"}),") läuft gerade nicht."]}),e.jsxs("button",{onClick:u,disabled:l,className:"flex h-9 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 text-[11px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(j,{className:c("h-3.5 w-3.5",l&&"animate-spin")})," Dienst neu starten"]}),i&&e.jsx("p",{className:"max-w-sm text-[11px] text-muted-foreground",children:i})]}),e.jsx("iframe",{src:r,title:"Box-Konsole",className:"h-full w-full border-0",style:{minHeight:"58vh"}})]}):e.jsxs("div",{className:"flex min-h-[58vh] flex-1 items-center justify-center rounded-2xl border border-border/60 bg-background/20 text-xs text-muted-foreground",children:[e.jsx(N,{className:"mr-2 h-4 w-4"})," Lade Konsole…"]})]})}export{y as KonsoleView}; +import{W as b,u as f,Z as h,r as d,j as e,e as c,Y as g,T as p,a1 as j,a2 as N,g as v,a3 as w,q as x}from"./index-Cejiqiju.js";function y(){const{data:s}=b(),m=f(),r=s!=null&&s.box_console_url?h(s.box_console_url):void 0,a=s==null?void 0:s.box_console_reachable,[l,o]=d.useState(!1),[i,n]=d.useState("");async function u(){o(!0),n("");try{const t=await v("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:"box-console"})});n(t.ok?"Neu gestartet — einen Moment, dann lädt das Terminal.":`Fehlgeschlagen: ${t.err||"Unbekannter Fehler"}`),w(m,x.agentStatus,x.services)}catch(t){n(`Fehlgeschlagen: ${(t==null?void 0:t.message)||t}`)}finally{o(!1)}}return e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap items-end justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Konsole"}),e.jsx("p",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:"Direkte Shell auf der Box — wie ein SSH-Fenster, mitten im Browser."})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground",children:[e.jsx("span",{className:c("h-2 w-2 rounded-full",a?"bg-emerald-500 animate-pulse":"bg-amber-500")}),a?"online":"offline"]}),r&&e.jsxs("a",{href:r,target:"_blank",rel:"noopener",className:"flex h-8 items-center gap-1.5 rounded-lg border border-border/60 bg-background/20 px-3 text-xs font-semibold text-muted-foreground transition-all hover:border-primary/50 hover:text-foreground",children:[e.jsx(g,{className:"h-3.5 w-3.5"})," In neuem Tab"]})]})]}),r?e.jsxs("div",{className:"relative min-h-[58vh] flex-1 overflow-hidden rounded-2xl border border-border/60 bg-black/50 shadow-lg shadow-black/25",children:[a===!1&&e.jsxs("div",{className:"absolute inset-0 z-10 flex flex-col items-center justify-center gap-3 bg-black/70 text-center",children:[e.jsx(p,{className:"h-8 w-8 text-amber-400"}),e.jsx("div",{className:"text-sm font-semibold text-amber-300",children:"Konsole nicht erreichbar"}),e.jsxs("p",{className:"max-w-sm text-[11px] leading-normal text-muted-foreground",children:["Der Terminal-Dienst (",e.jsx("code",{className:"font-mono text-primary",children:"box-console"}),") läuft gerade nicht."]}),e.jsxs("button",{onClick:u,disabled:l,className:"flex h-9 items-center gap-1.5 rounded-lg border border-amber-500/40 bg-amber-500/10 px-4 text-[11px] font-bold uppercase tracking-wide text-amber-300 transition-all hover:bg-amber-500/20 cursor-pointer disabled:opacity-50",children:[e.jsx(j,{className:c("h-3.5 w-3.5",l&&"animate-spin")})," Dienst neu starten"]}),i&&e.jsx("p",{className:"max-w-sm text-[11px] text-muted-foreground",children:i})]}),e.jsx("iframe",{src:r,title:"Box-Konsole",className:"h-full w-full border-0",style:{minHeight:"58vh"}})]}):e.jsxs("div",{className:"flex min-h-[58vh] flex-1 items-center justify-center rounded-2xl border border-border/60 bg-background/20 text-xs text-muted-foreground",children:[e.jsx(N,{className:"mr-2 h-4 w-4"})," Lade Konsole…"]})]})}export{y as KonsoleView}; diff --git a/frontend/dist/assets/MemoryView-DNCBwc-V.js b/frontend/dist/assets/MemoryView-4uLiE0nS.js similarity index 98% rename from frontend/dist/assets/MemoryView-DNCBwc-V.js rename to frontend/dist/assets/MemoryView-4uLiE0nS.js index 8516ef0..803ce8f 100644 --- a/frontend/dist/assets/MemoryView-DNCBwc-V.js +++ b/frontend/dist/assets/MemoryView-4uLiE0nS.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/GraphView-B3HC-zB_.js","assets/index-BChEIiQl.js","assets/index-Bm-JldFM.css"])))=>i.map(i=>d[i]); -var je=Object.defineProperty;var ke=(d,i,c)=>i in d?je(d,i,{enumerable:!0,configurable:!0,writable:!0,value:c}):d[i]=c;var J=(d,i,c)=>ke(d,typeof i!="symbol"?i+"":i,c);import{c as h,r as s,j as e,u as ve,b as Ne,O as W,Q as Se,C as X,R as Ce,S as Ee,P as Me,U as O,e as x,V as ze,W as De,X as Z,A as Y,_ as Oe,g as j}from"./index-BChEIiQl.js";import{C as ee}from"./copy-CRj5M_pY.js";import{S as _e}from"./send-CS1kRsDf.js";import{B as Ge}from"./book-open-2v7qByfb.js";/** +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/GraphView-DZMQCEHP.js","assets/index-Cejiqiju.js","assets/index-BJEqDXwz.css"])))=>i.map(i=>d[i]); +var je=Object.defineProperty;var ke=(d,i,c)=>i in d?je(d,i,{enumerable:!0,configurable:!0,writable:!0,value:c}):d[i]=c;var J=(d,i,c)=>ke(d,typeof i!="symbol"?i+"":i,c);import{c as h,r as s,j as e,u as ve,b as Ne,N as W,O as Se,C as X,Q as Ce,S as Ee,P as Me,R as O,e as x,U as ze,V as De,X as Z,A as Y,_ as Oe,g as j}from"./index-Cejiqiju.js";import{C as ee}from"./copy-g04tL7QX.js";import{S as _e}from"./send-pU4Gy5vX.js";import{B as Ge}from"./book-open-CWgPuOOr.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. @@ -34,7 +34,7 @@ var je=Object.defineProperty;var ke=(d,i,c)=>i in d?je(d,i,{enumerable:!0,config * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Pe=h("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);class te extends s.Component{constructor(){super(...arguments);J(this,"state",{error:null})}static getDerivedStateFromError(c){return{error:c}}render(){return this.state.error?e.jsxs("div",{className:"h-[480px] rounded-2xl border border-red-500/20 bg-red-500/5 p-6 text-xs text-red-400 overflow-auto",children:[e.jsx("div",{className:"font-semibold mb-2",children:"Graph konnte nicht gerendert werden"}),e.jsx("pre",{className:"whitespace-pre-wrap break-words text-[11px] leading-relaxed",children:this.state.error.message})]}):this.props.children}}const se=s.lazy(()=>Oe(()=>import("./GraphView-B3HC-zB_.js"),__vite__mapDeps([0,1,2])).then(d=>({default:d.GraphView}))),k=["identity","knowledge","rules","events"],v=new Set(["auto","agent","hermes"]),N={identity:{label:"Identität",icon:Pe,bg:"bg-cyan-500/10",text:"text-cyan-400"},knowledge:{label:"Wissen",icon:De,bg:"bg-indigo-500/10",text:"text-indigo-400"},rules:{label:"Regeln",icon:Le,bg:"bg-violet-500/10",text:"text-violet-400"},events:{label:"Ereignisse",icon:ze,bg:"bg-amber-500/10",text:"text-amber-400"}},ne={label:"Gedächtnis",icon:Ge,text:"text-muted-foreground"},Re={identity:"border-l-cyan-500/80",knowledge:"border-l-indigo-500/80",rules:"border-l-violet-500/80",events:"border-l-amber-500/80"},_={identity:"#00f5ff",knowledge:"#3b82f6",rules:"#d946ef",events:"#fbbf24"},ae=`Hi Hermes! Lass uns ein kurzes Onboarding machen, damit du dich künftig an mich erinnerst. Stell mir nacheinander ein paar kurze Fragen zu: + */const Pe=h("User",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);class te extends s.Component{constructor(){super(...arguments);J(this,"state",{error:null})}static getDerivedStateFromError(c){return{error:c}}render(){return this.state.error?e.jsxs("div",{className:"h-[480px] rounded-2xl border border-red-500/20 bg-red-500/5 p-6 text-xs text-red-400 overflow-auto",children:[e.jsx("div",{className:"font-semibold mb-2",children:"Graph konnte nicht gerendert werden"}),e.jsx("pre",{className:"whitespace-pre-wrap break-words text-[11px] leading-relaxed",children:this.state.error.message})]}):this.props.children}}const se=s.lazy(()=>Oe(()=>import("./GraphView-DZMQCEHP.js"),__vite__mapDeps([0,1,2])).then(d=>({default:d.GraphView}))),k=["identity","knowledge","rules","events"],v=new Set(["auto","agent","hermes"]),N={identity:{label:"Identität",icon:Pe,bg:"bg-cyan-500/10",text:"text-cyan-400"},knowledge:{label:"Wissen",icon:De,bg:"bg-indigo-500/10",text:"text-indigo-400"},rules:{label:"Regeln",icon:Le,bg:"bg-violet-500/10",text:"text-violet-400"},events:{label:"Ereignisse",icon:ze,bg:"bg-amber-500/10",text:"text-amber-400"}},ne={label:"Gedächtnis",icon:Ge,text:"text-muted-foreground"},Re={identity:"border-l-cyan-500/80",knowledge:"border-l-indigo-500/80",rules:"border-l-violet-500/80",events:"border-l-amber-500/80"},_={identity:"#00f5ff",knowledge:"#3b82f6",rules:"#d946ef",events:"#fbbf24"},ae=`Hi Hermes! Lass uns ein kurzes Onboarding machen, damit du dich künftig an mich erinnerst. Stell mir nacheinander ein paar kurze Fragen zu: 1) wer ich bin und woran ich gerade arbeite, 2) wie ich angesprochen werden möchte, 3) meine bevorzugten Tools, Sprachen und Arbeitsweise, diff --git a/frontend/dist/assets/ModelsView-CoGGXlnQ.js b/frontend/dist/assets/ModelsView-Dqag6LQ7.js similarity index 95% rename from frontend/dist/assets/ModelsView-CoGGXlnQ.js rename to frontend/dist/assets/ModelsView-Dqag6LQ7.js index b1473d0..660182a 100644 --- a/frontend/dist/assets/ModelsView-CoGGXlnQ.js +++ b/frontend/dist/assets/ModelsView-Dqag6LQ7.js @@ -1,4 +1,4 @@ -import{c as q,u as oe,a as Fe,b as ge,j as e,f as ue,d as Re,e as w,g as K,q as P,h as Ie,r as N,C as Y,L as Oe,i as Pe,B as le,k as Te,E as Be,l as de,m as Ge,n as $e,o as He,p as ee,X as pe,P as Qe,H as fe,T as re,s as Ue,t as Ve,v as V,w as We,S as ye,x as Ze,y as Je,z as Xe,A as Ye,D as De,F as et,G as tt}from"./index-BChEIiQl.js";import{C as rt}from"./code-xml-owp4HQPY.js";import{R as st}from"./rotate-ccw-CPYnjQ6M.js";import{C as be,Z as ie,L as nt,a as at}from"./zap-I2SMIyr4.js";import{L as ot}from"./layers-C62c1z5s.js";/** +import{c as q,u as oe,a as Fe,b as ge,j as e,f as ue,d as Re,e as w,g as K,q as P,h as Ie,r as N,C as Y,L as Oe,i as Pe,B as le,k as Te,E as Be,l as de,m as $e,n as Ge,o as He,p as ee,X as pe,P as Qe,H as fe,T as re,s as Ue,t as Ve,v as V,w as We,S as ye,x as Ze,y as Je,z as Xe,A as Ye,D as et,F as tt}from"./index-Cejiqiju.js";import{C as rt}from"./code-xml-BJe9mLlE.js";import{R as st}from"./rotate-ccw-C_-gXN7Y.js";import{C as be,Z as ie,L as nt,a as at}from"./zap-BeUXRjSL.js";import{C as De}from"./chevron-down-DNDogRoC.js";import{L as ot}from"./layers-DxeU1JZb.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. @@ -68,6 +68,6 @@ import{c as q,u as oe,a as Fe,b as ge,j as e,f as ue,d as Re,e as w,g as K,q as * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const gt=q("Telescope",[["path",{d:"m10.065 12.493-6.18 1.318a.934.934 0 0 1-1.108-.702l-.537-2.15a1.07 1.07 0 0 1 .691-1.265l13.504-4.44",key:"k4qptu"}],["path",{d:"m13.56 11.747 4.332-.924",key:"19l80z"}],["path",{d:"m16 21-3.105-6.21",key:"7oh9d"}],["path",{d:"M16.485 5.94a2 2 0 0 1 1.455-2.425l1.09-.272a1 1 0 0 1 1.212.727l1.515 6.06a1 1 0 0 1-.727 1.213l-1.09.272a2 2 0 0 1-2.425-1.455z",key:"m7xp4m"}],["path",{d:"m6.158 8.633 1.114 4.456",key:"74o979"}],["path",{d:"m8 21 3.105-6.21",key:"1fvxut"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}]]);function ft(){const t=oe(),{data:r=[]}=Fe(),{showAlert:h,dialogElement:n}=ge();async function x(d){try{await K(`/api/jobs/${d}/cancel`,{method:"POST"}),t.invalidateQueries({queryKey:P.jobs})}catch(S){h("Fehler",S.message)}}const M=r.filter(d=>d.state==="running"||d.state==="queued"),v=r.filter(d=>d.state!=="running"&&d.state!=="queued").slice(-3);return M.length===0&&v.length===0?null:e.jsxs("div",{className:"space-y-3 mc-card p-4",children:[e.jsx("div",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Aktive Downloads"}),M.map(d=>e.jsxs("div",{className:"space-y-1.5 p-3 rounded-xl bg-background/20 border border-border/40",children:[e.jsxs("div",{className:"flex justify-between items-center text-xs",children:[e.jsx("span",{className:"font-semibold truncate max-w-[250px]",children:d.label}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-muted-foreground font-mono",children:[d.progress??0,"% • ",ue(d.done_bytes),"/",ue(d.total_bytes),d.eta_s?` • ETA ${Re(d.eta_s)}`:""]}),e.jsx("button",{onClick:()=>x(d.id),className:"text-[10px] text-red-400 hover:text-red-300 font-semibold border border-red-500/25 bg-red-500/5 px-2 py-0.5 rounded transition-all cursor-pointer",children:"Abbrechen"})]})]}),e.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:e.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-500",style:{width:`${d.progress??0}%`}})})]},d.id)),v.map(d=>e.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground px-1",children:[e.jsx("span",{className:"truncate",children:d.label}),e.jsx("span",{className:w("font-semibold text-[10px] px-1.5 py-0.5 rounded uppercase font-mono",d.state==="done"?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:d.state})]},d.id)),n]})}const yt=["fast","heavy","heavy_chars"],jt=["coder_lite","coder","coding_escalate_chars"];function vt(){const t=oe(),{data:r,isLoading:h}=Ie(),[n,x]=N.useState(null),[M,v]=N.useState(!1),[d,S]=N.useState(""),[g,z]=N.useState(0);if(N.useEffect(()=>{r!=null&&r.policy&&!n&&x({...r.policy})},[r,n]),h||!r||!n)return e.jsx("div",{className:"mc-card p-5 text-xs text-muted-foreground",children:"Lade Routing-Policy…"});const m=s=>r.fields.find(o=>o.key===s),f=Object.keys(n).some(s=>n[s]!==r.policy[s]),b=(s,o)=>{x(i=>i&&{...i,[s]:o}),S("")},c=s=>b(s,r.defaults[s]);async function L(){if(!n)return;const s={};for(const o of Object.keys(n))n[o]!==r.policy[o]&&(s[o]=n[o]);if(Object.keys(s).length!==0){v(!0),S("");try{const{policy:o}=await Pe(s);x({...o}),t.invalidateQueries({queryKey:P.routingPolicy}),t.invalidateQueries({queryKey:P.routing}),z(Date.now()),setTimeout(()=>z(0),2e3)}catch(o){S(o.message||String(o))}finally{v(!1)}}}function B({k:s}){const o=m(s),i=n[s],G=n[s]===r.defaults[s];return e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("label",{className:"text-[10px] font-semibold text-muted-foreground",children:o.label}),!G&&e.jsxs("button",{onClick:()=>c(s),className:"flex items-center gap-0.5 text-[9px] text-muted-foreground/60 hover:text-foreground transition-colors cursor-pointer",title:`Auf Default zurücksetzen (${String(r.defaults[s])||"leer"})`,children:[e.jsx(st,{className:"h-2.5 w-2.5"})," Default"]})]}),o.type==="bool"?e.jsxs("button",{onClick:()=>b(s,!i),className:w("flex h-8 w-full items-center justify-between rounded-lg border px-3 text-[11px] font-semibold transition-all cursor-pointer",i?"border-emerald-500/40 bg-emerald-500/10 text-emerald-300":"border-border/40 bg-background/40 text-muted-foreground"),children:[e.jsx("span",{children:i?"An":"Aus"}),e.jsx("span",{className:w("h-3.5 w-3.5 rounded-full transition-colors",i?"bg-emerald-400":"bg-muted-foreground/40")})]}):o.type==="int"?e.jsx("input",{type:"number",value:i,min:o.min,max:o.max,"aria-label":o.label,onChange:A=>b(s,Number(A.target.value)),className:"h-8 w-full rounded-lg border border-border/40 bg-background/40 px-3 font-mono text-[11px] text-foreground outline-none focus:border-primary/50"}):e.jsx("input",{type:"text",value:i,"aria-label":o.label,spellCheck:!1,placeholder:s==="coder_lite"?"(leer = aus)":"",onChange:A=>b(s,A.target.value),className:"h-8 w-full rounded-lg border border-border/40 bg-background/40 px-3 font-mono text-[11px] text-foreground outline-none focus:border-primary/50"})]})}return e.jsxs("div",{className:"mc-card p-5 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(bt,{className:"h-4.5 w-4.5 text-primary"}),e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Lane-Routing & Policy"}),e.jsx("span",{className:"text-[9px] font-mono px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-300 border border-emerald-500/20",children:"hot-reload"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[d&&e.jsx("span",{className:"text-[10px] text-red-400 max-w-[280px] truncate",title:d,children:d}),g>0&&e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-emerald-400",children:[e.jsx(Y,{className:"h-3.5 w-3.5"})," gespeichert"]}),e.jsxs("button",{onClick:L,disabled:!f||M,className:w("h-8 px-4 rounded-lg text-[10px] font-bold uppercase tracking-wide transition-all flex items-center gap-1.5",f&&!M?"bg-primary text-primary-foreground hover:opacity-90 cursor-pointer shadow-md shadow-primary/10":"bg-background/40 text-muted-foreground/50 border border-border/40 cursor-not-allowed"),children:[M?e.jsx(Oe,{className:"h-3.5 w-3.5 animate-spin"}):null,"Speichern"]})]})]}),e.jsxs("p",{className:"text-[10px] text-muted-foreground/70 leading-relaxed -mt-1",children:["Welches echte Modell hinter den virtuellen Lanes ",e.jsx("code",{className:"text-cyan-300",children:"chat"})," und"," ",e.jsx("code",{className:"text-cyan-300",children:"coding"})," steckt. Änderungen greifen sofort (kein Neustart). Die Keyword-Heuristiken bleiben im Code."]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-xl border border-border/40 bg-background/25 p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-border/30 pb-2",children:[e.jsx(mt,{className:"h-4 w-4 text-teal-400"}),e.jsx("span",{className:"text-[11px] font-bold uppercase tracking-wider text-foreground",children:"chat"}),e.jsx("span",{className:"text-[9px] text-muted-foreground/60 font-mono",children:"(= auto)"})]}),yt.map(s=>e.jsx(B,{k:s},s))]}),e.jsxs("div",{className:"rounded-xl border border-border/40 bg-background/25 p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-border/30 pb-2",children:[e.jsx(rt,{className:"h-4 w-4 text-indigo-400"}),e.jsx("span",{className:"text-[11px] font-bold uppercase tracking-wider text-foreground",children:"coding"}),e.jsx("span",{className:"text-[9px] text-muted-foreground/60 font-mono",children:"(agentisch → immer Coder)"})]}),jt.map(s=>e.jsx(B,{k:s},s))]})]}),e.jsx("div",{className:"rounded-xl border border-border/40 bg-background/25 p-4",children:e.jsx("div",{className:"max-w-xs",children:e.jsx(B,{k:"fast_no_think"})})})]})}const je=[{role:"hermes",label:"Lucys Hirn",short:"Hirn",icon:le,desc:"Lucys Alltags-Verstand — denkt und redet mit dir. Immer bereit.",tone:"bg-indigo-500/15 text-indigo-400 border-indigo-500/25",protected:!0},{role:"embed",label:"Lucys Gedächtnis",short:"Gedächtnis",icon:Te,desc:"Merkt sich Wichtiges und findet es später wieder.",tone:"bg-emerald-500/15 text-emerald-400 border-emerald-500/25",protected:!0},{role:"reranker",label:"Gedächtnis-Sortierer",short:"Sortierer",icon:xt,desc:"Ordnet gefundene Erinnerungen nach echter Relevanz — die Feinsortierung hinter dem Gedächtnis.",tone:"bg-lime-500/15 text-lime-400 border-lime-500/25"},{role:"vision",label:"Lucys Augen",short:"Augen",icon:Be,desc:"Sieht Bilder und Screenshots und beschreibt, was drauf ist.",tone:"bg-pink-500/15 text-pink-400 border-pink-500/25"},{role:"heavy",label:"Großes Hirn",short:"Groß",icon:dt,desc:"Das schwere Geschütz — wird für besonders knifflige Fragen dazugeholt.",tone:"bg-amber-500/15 text-amber-400 border-amber-500/25"},{role:"coder-lite",label:"Programmierer (schnell)",short:"Code schnell",icon:be,desc:"Schnelles Programmieren im Alltag.",tone:"bg-violet-500/15 text-violet-400 border-violet-500/25"},{role:"coder",label:"Programmierer",short:"Code",icon:be,desc:"Baut und plant. Der Kopf der Coding-Mannschaft — er hält den Faden und verteilt Zuarbeit.",tone:"bg-fuchsia-500/15 text-fuchsia-400 border-fuchsia-500/25",protected:!0},{role:"scout",label:"Späher",short:"Späher",icon:gt,desc:"Schneller erster Blick und grobe Einschätzung.",tone:"bg-teal-500/15 text-teal-400 border-teal-500/25"},{role:"kritiker",label:"Kritiker",short:"Kritiker",icon:qe,desc:"Liest dem Programmierer nach jeder Etappe gegen — bewusst aus einer FREMDEN Modellfamilie (Mistral statt Qwen), damit er andere blinde Flecken hat.",tone:"bg-cyan-500/15 text-cyan-400 border-cyan-500/25"}];je.map(t=>t.role);const Ne=Object.fromEntries(je.map(t=>[t.role,t])),ke=t=>({role:t||"?",label:t||"unbekannt",short:t||"?",icon:le,desc:"Rolle ohne hinterlegten Klartext-Namen.",tone:"bg-slate-500/15 text-slate-300 border-slate-500/25"}),Nt={fast:"hermes",coder_lite:"coder-lite"};function F(t){return t&&(Ne[t]||Ne[Nt[t]])||ke(t)}function he({role:t,dense:r=!1,className:h}){const n=F(t),x=n.icon;return e.jsxs("span",{className:w("inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-semibold border tracking-wide",n.tone,h),title:`${n.desc} (${n.role})`,children:[e.jsx(x,{className:"h-3 w-3 shrink-0","aria-hidden":"true"}),r?n.short:n.label]})}function kt({fit:t}){const r={perfect:"bg-emerald-500/15 text-emerald-400 border border-emerald-500/20",marginal:"bg-amber-500/15 text-amber-400 border border-amber-500/20",too_tight:"bg-red-500/15 text-red-400 border border-red-500/20"}[t.level];return e.jsxs("span",{className:w("rounded px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider font-mono",r),children:[t.text," • ",t.req_gb," GB RAM"]})}function Ke(t){const r=t.toLowerCase();return r.includes("qwen")?{name:"Qwen",color:"bg-purple-500/20 text-purple-300 border-purple-500/30",initial:"Q"}:r.includes("gemma")?{name:"Gemma",color:"bg-blue-500/20 text-blue-300 border-blue-500/30",initial:"G"}:r.includes("llama")?{name:"Llama",color:"bg-red-500/20 text-red-300 border-red-500/30",initial:"🦙"}:r.includes("mistral")||r.includes("mixtral")?{name:"Mistral",color:"bg-orange-500/20 text-orange-300 border-orange-500/30",initial:"M"}:r.includes("deepseek")?{name:"DeepSeek",color:"bg-cyan-500/20 text-cyan-300 border-cyan-500/30",initial:"D"}:r.includes("hermes")||r.includes("nous")?{name:"Hermes",color:"bg-amber-500/20 text-amber-300 border-amber-500/30",initial:"H"}:r.includes("phi")?{name:"Phi",color:"bg-emerald-500/20 text-emerald-300 border-emerald-500/30",initial:"Φ"}:{name:"Other",color:"bg-slate-500/20 text-slate-300 border-slate-500/30",initial:"AI"}}function wt(){var te,H,$;const t=oe(),{data:r}=de(),{data:h}=Ge(),{data:n}=$e(),{data:x}=He(),{showAlert:M,dialogElement:v}=ge(),[d,S]=N.useState(!1),[g,z]=N.useState(!1),m=(r==null?void 0:r.models)??[],f=(r==null?void 0:r.running)??[],b=(te=h==null?void 0:h.groups)==null?void 0:te.brains,c=(b==null?void 0:b.members)??[],L=p=>m.find(_=>_.name===p),B=p=>{var _;return((_=p.split("/").pop())==null?void 0:_.replace(/\.gguf$/i,""))||p},s=c.map(L).filter(Boolean),o=1024**3,i=x==null?void 0:x.budget,G=s.reduce((p,_)=>p+(_.size_bytes||0),0)/o,A=((H=n==null?void 0:n.gpu)==null?void 0:H.gtt_total)||(($=n==null?void 0:n.gpu)==null?void 0:$.vram_total)||0,C=(i==null?void 0:i.gtt_gb)||(A?A/o:0),k=(i==null?void 0:i.warm_projected_gb)??G,R=C>0?Math.min(100,k/C*100):0,E=m.filter(p=>!c.includes(p.name)&&!p.incomplete);async function I(p){z(!0);try{await Ue("brains",p,(b==null?void 0:b.swap)??!1,(b==null?void 0:b.persist)??!0),t.invalidateQueries({queryKey:P.groups}),t.invalidateQueries({queryKey:P.models}),t.invalidateQueries({queryKey:P.hermesBrain})}catch(_){M("Fehler",`Immer-bereit-Set konnte nicht geändert werden: ${(_==null?void 0:_.message)||_}`)}finally{z(!1)}}function T(p){const _=L(p);if(_&&F(_.role).protected){M("Geschützt",`„${F(_.role).label}" ist lebenswichtig und bleibt immer bereit.`);return}I(c.filter(Q=>Q!==p))}function W(p){S(!1),I([...c,p])}return b?e.jsxs("div",{className:"mc-card p-5 space-y-4",children:[e.jsx(we,{}),e.jsxs("div",{className:"space-y-1.5",children:[s.length===0&&e.jsx("div",{className:"text-xs text-muted-foreground",children:"Noch keine Modelle im Set."}),s.map(p=>{const _=f.includes(p.name),Q=F(p.role).protected;return e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-xl border border-border/30 bg-background/20 p-2.5",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[e.jsx("span",{className:w("h-2 w-2 shrink-0 rounded-full ring-2 ring-black/40",_?"bg-emerald-500 animate-pulse":"bg-muted-foreground/40"),title:_?"Gerade warm (bereit)":"Reserviert — lädt bei Bedarf sofort"}),p.role&&e.jsx(he,{role:p.role,dense:!0,className:"shrink-0"}),e.jsx("span",{className:"truncate font-mono text-xs font-semibold text-foreground",title:p.name,children:B(p.name)}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/70",children:ee(p.size_bytes)})]}),Q?e.jsx("span",{className:"shrink-0 text-[10px] font-semibold text-muted-foreground",title:"Lebenswichtig — bleibt immer im Set.",children:"🔒"}):e.jsx("button",{onClick:()=>T(p.name),disabled:g,className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border border-border/40 text-muted-foreground transition-colors hover:bg-red-500/5 hover:text-red-400 cursor-pointer disabled:opacity-50",title:"Aus dem Immer-bereit-Set nehmen (lädt dann nur noch bei Bedarf)",children:e.jsx(pe,{className:"h-3.5 w-3.5"})})]},p.name)})]}),e.jsxs("button",{onClick:()=>S(!0),disabled:g||E.length===0,className:"flex h-8 w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-border/50 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:border-primary/40 hover:text-primary cursor-pointer disabled:opacity-50",children:[e.jsx(Qe,{className:"h-3.5 w-3.5"})," Modell dauerhaft bereithalten"]}),e.jsxs("div",{className:"rounded-xl border border-border/30 bg-background/20 p-3",children:[e.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-[11px]",children:[e.jsxs("span",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-wider text-muted-foreground",title:"Modellgewichte + KV-Cache, berechnet aus den echten Architektur-Daten jedes Modells (Layer × KV-Köpfe × Kontext) und seiner KV-Quantisierung. So viel legt llama.cpp beim Laden wirklich für den eingestellten Kontext an — kein Aufschlag mehr.",children:[e.jsx(fe,{className:"h-3.5 w-3.5"})," Reserviert fürs Set"]}),e.jsxs("span",{className:"font-mono font-bold text-foreground",children:[k.toFixed(1),C>0?` / ${C.toFixed(0)}`:""," GB"]})]}),e.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full border border-border/30 bg-background/50",children:e.jsx("div",{className:w("h-full rounded-full transition-all duration-500",R>=85?"bg-red-500":R>=65?"bg-amber-500":"bg-teal-500"),style:{width:`${R}%`}})}),i&&!i.fits&&e.jsxs("p",{className:"mt-2 flex items-start gap-1.5 text-[11px] text-amber-400",children:[e.jsx(re,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsxs("span",{children:["Zusammen mit dem größten Gelegenheits-Modell (~",i.largest_ondemand_gb," GB) wird der Speicher knapp. Das Set bleibt dabei immer geladen — wird es wirklich eng, schlägt das Laden des großen Modells fehl (es wartet dann, statt das Set zu verdrängen)."]})]}),i&&i.fits&&e.jsxs("p",{className:"mt-2 flex items-center gap-1.5 text-[11px] text-emerald-400",children:[e.jsx(Y,{className:"h-3.5 w-3.5 shrink-0"})," Passt auch neben dem größten Gelegenheits-Modell — nichts wird verdrängt."]})]}),d&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4 backdrop-blur-sm",role:"dialog","aria-modal":"true","aria-label":"Modell zum Immer-bereit-Set hinzufügen",children:e.jsxs("div",{className:"w-full max-w-md space-y-3 rounded-2xl border border-border/80 bg-card p-6 shadow-2xl animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:"Dauerhaft bereithalten"}),e.jsx("button",{onClick:()=>S(!1),className:"rounded p-1 text-muted-foreground hover:bg-accent hover:text-foreground cursor-pointer",children:e.jsx(pe,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Wähle ein Modell, das ohne Ladezeit bereitstehen soll:"}),e.jsx("div",{className:"max-h-60 space-y-1.5 overflow-y-auto pr-1",children:E.map(p=>e.jsxs("button",{onClick:()=>W(p.name),className:"flex w-full items-center justify-between gap-2 rounded-lg border border-border/30 bg-background/20 px-3 py-2.5 text-left transition-colors hover:bg-accent cursor-pointer",children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[p.role&&e.jsx(he,{role:p.role,dense:!0,className:"shrink-0"}),e.jsx("span",{className:"truncate font-mono text-xs font-semibold text-foreground",children:B(p.name)})]}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/70",children:ee(p.size_bytes)})]},p.name))})]})}),v]}):e.jsxs("div",{className:"mc-card p-5",children:[e.jsx(we,{}),e.jsx("p",{className:"mt-3 text-xs text-muted-foreground",children:"Es gibt noch kein Immer-bereit-Set. Es entsteht automatisch, sobald Lucys Hirn zugewiesen ist."}),v]})}function we(){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"h-4.5 w-4.5 text-primary"}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-bold uppercase tracking-wide text-foreground",children:"Immer-bereit-Set"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Diese Modelle hält Lucy immer bereit — sie antworten ohne Ladezeit."})]})]})}function J({children:t,tone:r="muted"}){const h={muted:"bg-muted text-muted-foreground",primary:"bg-primary/15 text-primary",warn:"bg-amber-500/15 text-amber-500"};return e.jsx("span",{className:`rounded px-1.5 py-0.5 text-[11px] font-medium ${h[r]}`,children:t})}function Mt({caps:t}){return t?e.jsxs("span",{className:"inline-flex flex-wrap gap-1",children:[t.coder&&e.jsx(J,{children:"💻 Code"}),t.vision&&e.jsx(J,{children:"👁 Bild"}),t.reasoning&&e.jsx(J,{children:"🧠 Reason"}),t.moe&&e.jsxs(J,{tone:"primary",children:["🧩 MoE",t.active_b?`·${t.active_b}b`:""]}),t.tools==="yes"&&e.jsx(J,{tone:"primary",children:"🛠 Tools"}),t.tools==="likely"&&e.jsx(J,{tone:"warn",children:"🛠 Tools?"}),t.embedding&&e.jsx(J,{children:"🔢 Embed"})]}):null}function St({model:t,onClose:r,onChanged:h}){var L,B;const{data:n,isLoading:x}=Ve(t.gguf_path),[M,v]=N.useState(null),[d,S]=N.useState(""),g=n==null?void 0:n.target_vocab,z=(n==null?void 0:n.drafts)??[],m=z.filter(s=>s.compatible===!0),f=t.spec_draft_model;async function b(s){v(s??"__clear__"),S("");try{await K(`/api/models/${encodeURIComponent(t.name)}/draft`,{method:"POST",body:JSON.stringify({draft_path:s})}),h(),r()}catch(o){S(String((o==null?void 0:o.message)||o)),v(null)}}const c=s=>{var o;return s?`${s.pre??"?"} · ${((o=s.n_vocab)==null?void 0:o.toLocaleString())??"?"} Tokens`:"—"};return e.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:e.jsxs("div",{className:"w-full max-w-lg rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-2",children:[e.jsx(ie,{className:"h-4 w-4"})," Speculative Draft"]}),e.jsx("button",{onClick:r,className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:e.jsx(pe,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"text-xs text-muted-foreground leading-relaxed",children:['Beschleunigt die Token-Generierung mit einem kleinen "Draft"-Modell. Voraussetzung: der Draft muss den ',e.jsx("strong",{className:"text-foreground",children:"exakt gleichen Tokenizer (Vocab)"})," haben wie das Modell — sonst lehnt llama.cpp es ab."]}),e.jsxs("div",{className:"rounded-lg border border-border/40 bg-background/30 px-3 py-2 text-[11px] font-mono flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:(L=t.name.split("/").pop())==null?void 0:L.replace(/\.gguf$/i,"")}),e.jsxs("span",{className:"text-foreground",children:["Vocab: ",c(g)]})]}),t.spec_active&&f&&e.jsxs("div",{className:"rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3 py-2 flex items-center justify-between gap-2",children:[e.jsxs("span",{className:"text-[11px] text-emerald-400 font-mono flex items-center gap-1.5 truncate",children:[e.jsx(Y,{className:"h-3.5 w-3.5 shrink-0"})," Aktiv: ",f]}),e.jsx("button",{onClick:()=>b(null),disabled:M!==null,className:"h-6 px-2.5 rounded border border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10 text-amber-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Deaktivieren"})]}),!(n!=null&&n.target_exists)&&e.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 flex items-center gap-2",children:[e.jsx(re,{className:"h-3.5 w-3.5 shrink-0"}),"Modell-GGUF noch nicht vorhanden — Spec-Draft ist nach dem Download konfigurierbar."]}),e.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto pr-1",children:x?e.jsx("div",{className:"text-xs text-muted-foreground py-6 text-center",children:"Prüfe Vocab-Kompatibilität…"}):z.length===0?e.jsxs("div",{className:"text-[11px] text-muted-foreground border border-dashed border-border/50 rounded-lg p-4 text-center",children:["Keine Draft-Modelle in ",e.jsx("code",{className:"font-mono",children:"/srv/models/drafts"}),". Lade ein kleines same-family-Modell (z.B. Qwen3-0.6B) und lege es dort ab."]}):z.map(s=>{var G,A;const o=s.filename===f,i=s.compatible===!0;return e.jsxs("div",{className:w("rounded-lg border px-3 py-2 flex items-center justify-between gap-2 text-left",i?"border-border/40 bg-background/20":"border-border/20 bg-background/10 opacity-60",o&&"border-primary/40 bg-primary/10"),children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"text-[11px] font-mono font-semibold text-foreground truncate flex items-center gap-1.5",children:[s.filename,s.mtp&&e.jsx("span",{className:"shrink-0 rounded bg-indigo-500/15 px-1.5 py-0.5 text-[8px] font-bold uppercase tracking-wider text-indigo-400 border border-indigo-500/25",title:"MTP-Kopf (Multi-Token-Prediction) — by-construction vocab-identisch, höchste Akzeptanzrate",children:"MTP"})]}),e.jsxs("div",{className:"text-[9px] text-muted-foreground font-mono",children:[ee(s.size_bytes)," · Vocab: ",c(s.vocab)]})]}),i?o?e.jsxs("span",{className:"text-[9px] font-bold uppercase text-primary flex items-center gap-1 shrink-0",children:[e.jsx(Y,{className:"h-3.5 w-3.5"})," Aktiv"]}):e.jsx("button",{onClick:()=>b(s.path),disabled:M!==null,className:"h-7 px-3 rounded-lg border border-emerald-500/30 bg-emerald-500/5 hover:bg-emerald-500/15 text-emerald-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Aktivieren"}):e.jsxs("span",{className:"text-[9px] font-bold uppercase text-amber-400/80 flex items-center gap-1 shrink-0",title:s.compatible===!1?`Inkompatibel: Tokenizer/Vocab weicht ab (Draft ${(G=s.vocab)==null?void 0:G.pre}/${(A=s.vocab)==null?void 0:A.n_vocab} ≠ Modell ${g==null?void 0:g.pre}/${g==null?void 0:g.n_vocab}).`:"Kompatibilität nicht prüfbar (Datei fehlt).",children:[e.jsx(re,{className:"h-3.5 w-3.5"})," ",s.compatible===!1?"Vocab ≠":"n/a"]})]},s.path)})}),!x&&(n==null?void 0:n.target_exists)&&z.length>0&&m.length===0&&e.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 leading-relaxed",children:["Kein vocab-kompatibler Draft verfügbar — Speculative Decoding ist für dieses Modell nicht möglich. Es braucht einen Draft mit identischem Tokenizer (pre=",e.jsx("span",{className:"font-mono",children:g==null?void 0:g.pre}),", n_vocab=",e.jsx("span",{className:"font-mono",children:(B=g==null?void 0:g.n_vocab)==null?void 0:B.toLocaleString()}),")."]}),d&&e.jsx("div",{className:"text-[10px] text-red-400 font-mono",children:d})]})})}const Me={hermes:{bar:"bg-indigo-500",dot:"bg-indigo-500",text:"text-indigo-400"},embed:{bar:"bg-emerald-500",dot:"bg-emerald-500",text:"text-emerald-400"},vision:{bar:"bg-pink-500",dot:"bg-pink-500",text:"text-pink-400"},heavy:{bar:"bg-amber-500",dot:"bg-amber-500",text:"text-amber-400"},"coder-lite":{bar:"bg-violet-500",dot:"bg-violet-500",text:"text-violet-400"},coder:{bar:"bg-fuchsia-500",dot:"bg-fuchsia-500",text:"text-fuchsia-400"},scout:{bar:"bg-teal-500",dot:"bg-teal-500",text:"text-teal-400"},kritiker:{bar:"bg-cyan-500",dot:"bg-cyan-500",text:"text-cyan-400"},reranker:{bar:"bg-lime-500",dot:"bg-lime-500",text:"text-lime-400"}},Ct={fast:"hermes",coder_lite:"coder-lite"},Se={bar:"bg-slate-400",dot:"bg-slate-400",text:"text-slate-300"};function ae(t){return t&&(Me[t]||Me[Ct[t]])||Se}const Ce=1024**3,_e=t=>{var r;return((r=t.split("/").pop())==null?void 0:r.replace(/\.gguf$/i,""))??t};function _t({running:t,capacityBytes:r,realUsedBytes:h,selected:n,onSelect:x}){const M=r>2*Ce?r:124*Ce,v=t.reduce((m,f)=>m+(f.size_bytes||0),0),d=Math.max(0,h-v),S=Math.max(0,M-Math.max(v,h)),g=S/M*100,z=d/M*100;return e.jsxs("div",{className:"mc-card p-5",children:[e.jsxs("div",{className:"mb-3 flex flex-wrap items-end justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(fe,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Modell-Speicher (GPU-Pool)"}),e.jsxs("div",{className:"font-space text-xl font-bold tracking-tight text-foreground",children:[V(M)," GB ",e.jsx("span",{className:"text-sm font-medium text-muted-foreground",children:"gesamt"})]})]})]}),e.jsxs("div",{className:"text-right text-[11px] font-mono text-muted-foreground",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"font-bold text-foreground",children:[V(v)," GB"]})," Modell-Gewichte"]}),d>0&&e.jsxs("div",{children:[V(d)," GB KV-Cache & Betrieb"]}),e.jsxs("div",{className:"text-emerald-400",children:[V(S)," GB frei"]})]})]}),e.jsx("div",{className:"flex h-12 w-full overflow-hidden rounded-xl border border-border/40 bg-background/50 p-1",children:t.length===0?e.jsx("div",{className:"flex w-full items-center justify-center text-[11px] italic text-muted-foreground/60",children:"Kein Modell geladen — Auto-Swap holt bei Anfrage automatisch das passende."}):e.jsxs(e.Fragment,{children:[t.map(m=>{const f=(m.size_bytes||0)/M*100,b=ae(m.role),c=n===m.name;return e.jsxs("button",{onClick:()=>x==null?void 0:x(m.name),style:{width:`${f}%`},title:`${F(m.role).label} · ${_e(m.name)} · ${ee(m.size_bytes)}`,className:w("group flex h-full min-w-[2.5rem] shrink-0 flex-col justify-center gap-0.5 rounded-lg px-2 text-left text-white transition-all",b.bar,c?"ring-2 ring-white/70":"opacity-90 hover:opacity-100"),children:[e.jsx("span",{className:"truncate font-space text-[10px] font-bold leading-tight tracking-wide",children:F(m.role).short}),e.jsx("span",{className:"truncate font-mono text-[9px] leading-tight opacity-85",children:ee(m.size_bytes)})]},m.name)}),z>1.5&&e.jsx("div",{style:{width:`${z}%`},className:"flex h-full min-w-[2rem] items-center justify-center rounded-lg border border-dashed border-border/60 bg-background/40 text-[9px] font-mono text-muted-foreground/70",title:`${V(d)} GB KV-Cache & Betrieb (reale Belegung über den Modell-Gewichten)`,children:"KV"}),g>1.5&&e.jsx("div",{style:{width:`${g}%`},className:"flex h-full min-w-[2rem] items-center justify-center rounded-lg text-[9px] font-mono text-muted-foreground/50",title:`${V(S)} GB frei`,children:"frei"})]})}),t.length>0&&e.jsxs("div",{className:"mt-3 flex flex-wrap gap-x-4 gap-y-1.5",children:[t.map(m=>{const f=ae(m.role);return e.jsxs("button",{onClick:()=>x==null?void 0:x(m.name),className:"flex items-center gap-1.5 text-[11px] text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx("span",{className:w("h-2.5 w-2.5 rounded-sm",f.dot)}),e.jsx("span",{className:w("font-semibold",f.text),children:F(m.role).short}),e.jsx("span",{className:"font-mono text-muted-foreground/70",children:_e(m.name)})]},m.name)}),d>0&&e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/60",title:"Reale Belegung über den Modell-Gewichten (Kontext-Speicher der laufenden Modelle)",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm border border-dashed border-border/60 bg-background/40"})," KV-Cache & Betrieb · ",V(d)," GB"]}),e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/60",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm border border-border/50 bg-background/50"})," frei · ",V(S)," GB"]})]})]})}const Le=1024**3,X=t=>{var r;return((r=t.split("/").pop())==null?void 0:r.replace(/\.gguf$/i,""))??t};function Lt(){var a,y,D,U;const t=oe(),{data:r,isLoading:h,error:n}=de(),{data:x}=$e(),{data:M}=Ge(),{showAlert:v,showConfirm:d,showPrompt:S,dialogElement:g}=ge(),z=We(),m=(r==null?void 0:r.models)??[],f=(r==null?void 0:r.running)??[],b=l=>!!F(l).protected,c=(a=M==null?void 0:M.groups)==null?void 0:a.brains,L=(c==null?void 0:c.members)??[],B=l=>L.includes(l),[s,o]=N.useState(null),[i,G]=N.useState(""),[A,C]=N.useState("all"),[k,R]=N.useState(null),E=()=>{t.invalidateQueries({queryKey:P.models}),t.invalidateQueries({queryKey:P.routing}),t.invalidateQueries({queryKey:P.groups})},I=m.filter(l=>f.includes(l.name)),T=((y=x==null?void 0:x.gpu)==null?void 0:y.gtt_total)||((D=x==null?void 0:x.gpu)==null?void 0:D.vram_total)||0,W=((U=x==null?void 0:x.gpu)==null?void 0:U.gtt_used)||0,te=T>2*Le?T:124*Le,H=N.useMemo(()=>{const l=i.trim().toLowerCase();return m.filter(u=>A==="in_use"?!!u.role||f.includes(u.name):!0).filter(u=>l?u.name.toLowerCase().includes(l):!0).sort((u,j)=>{const O=f.includes(u.name)?0:1,Z=f.includes(j.name)?0:1;return O!==Z?O-Z:X(u.name).localeCompare(X(j.name))})},[m,f,A,i]),$=m.find(l=>l.name===s)??null;async function p(l){try{await K(`/api/models/${encodeURIComponent(l)}/load`,{method:"POST"}),E()}catch(u){v("Fehler",`Laden fehlgeschlagen: ${u.message||u}`)}}async function _(l){const u=L.some(j=>f.includes(j));if(c&&u&&!B(l)){const j=L.filter(O=>f.includes(O)).map(X).join(", ");d("Verdrängt das Hirn?",`„${X(l)}" ist nicht ko-resident. Beim Laden wirft es das warme Hirn (${j}) raus — Lucy verliert Hirn bzw. Augen. + */const gt=q("Telescope",[["path",{d:"m10.065 12.493-6.18 1.318a.934.934 0 0 1-1.108-.702l-.537-2.15a1.07 1.07 0 0 1 .691-1.265l13.504-4.44",key:"k4qptu"}],["path",{d:"m13.56 11.747 4.332-.924",key:"19l80z"}],["path",{d:"m16 21-3.105-6.21",key:"7oh9d"}],["path",{d:"M16.485 5.94a2 2 0 0 1 1.455-2.425l1.09-.272a1 1 0 0 1 1.212.727l1.515 6.06a1 1 0 0 1-.727 1.213l-1.09.272a2 2 0 0 1-2.425-1.455z",key:"m7xp4m"}],["path",{d:"m6.158 8.633 1.114 4.456",key:"74o979"}],["path",{d:"m8 21 3.105-6.21",key:"1fvxut"}],["circle",{cx:"12",cy:"13",r:"2",key:"1c1ljs"}]]);function ft(){const t=oe(),{data:r=[]}=Fe(),{showAlert:h,dialogElement:n}=ge();async function x(d){try{await K(`/api/jobs/${d}/cancel`,{method:"POST"}),t.invalidateQueries({queryKey:P.jobs})}catch(S){h("Fehler",S.message)}}const M=r.filter(d=>d.state==="running"||d.state==="queued"),v=r.filter(d=>d.state!=="running"&&d.state!=="queued").slice(-3);return M.length===0&&v.length===0?null:e.jsxs("div",{className:"space-y-3 mc-card p-4",children:[e.jsx("div",{className:"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider",children:"Aktive Downloads"}),M.map(d=>e.jsxs("div",{className:"space-y-1.5 p-3 rounded-xl bg-background/20 border border-border/40",children:[e.jsxs("div",{className:"flex justify-between items-center text-xs",children:[e.jsx("span",{className:"font-semibold truncate max-w-[250px]",children:d.label}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:"text-muted-foreground font-mono",children:[d.progress??0,"% • ",ue(d.done_bytes),"/",ue(d.total_bytes),d.eta_s?` • ETA ${Re(d.eta_s)}`:""]}),e.jsx("button",{onClick:()=>x(d.id),className:"text-[10px] text-red-400 hover:text-red-300 font-semibold border border-red-500/25 bg-red-500/5 px-2 py-0.5 rounded transition-all cursor-pointer",children:"Abbrechen"})]})]}),e.jsx("div",{className:"h-1.5 overflow-hidden rounded-full bg-muted",children:e.jsx("div",{className:"h-full rounded-full bg-primary transition-all duration-500",style:{width:`${d.progress??0}%`}})})]},d.id)),v.map(d=>e.jsxs("div",{className:"flex justify-between items-center text-xs text-muted-foreground px-1",children:[e.jsx("span",{className:"truncate",children:d.label}),e.jsx("span",{className:w("font-semibold text-[10px] px-1.5 py-0.5 rounded uppercase font-mono",d.state==="done"?"bg-emerald-500/10 text-emerald-400":"bg-amber-500/10 text-amber-400"),children:d.state})]},d.id)),n]})}const yt=["fast","heavy","heavy_chars"],jt=["coder_lite","coder","coding_escalate_chars"];function vt(){const t=oe(),{data:r,isLoading:h}=Ie(),[n,x]=N.useState(null),[M,v]=N.useState(!1),[d,S]=N.useState(""),[g,z]=N.useState(0);if(N.useEffect(()=>{r!=null&&r.policy&&!n&&x({...r.policy})},[r,n]),h||!r||!n)return e.jsx("div",{className:"mc-card p-5 text-xs text-muted-foreground",children:"Lade Routing-Policy…"});const m=s=>r.fields.find(o=>o.key===s),f=Object.keys(n).some(s=>n[s]!==r.policy[s]),b=(s,o)=>{x(i=>i&&{...i,[s]:o}),S("")},c=s=>b(s,r.defaults[s]);async function L(){if(!n)return;const s={};for(const o of Object.keys(n))n[o]!==r.policy[o]&&(s[o]=n[o]);if(Object.keys(s).length!==0){v(!0),S("");try{const{policy:o}=await Pe(s);x({...o}),t.invalidateQueries({queryKey:P.routingPolicy}),t.invalidateQueries({queryKey:P.routing}),z(Date.now()),setTimeout(()=>z(0),2e3)}catch(o){S(o.message||String(o))}finally{v(!1)}}}function B({k:s}){const o=m(s),i=n[s],$=n[s]===r.defaults[s];return e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("label",{className:"text-[10px] font-semibold text-muted-foreground",children:o.label}),!$&&e.jsxs("button",{onClick:()=>c(s),className:"flex items-center gap-0.5 text-[9px] text-muted-foreground/60 hover:text-foreground transition-colors cursor-pointer",title:`Auf Default zurücksetzen (${String(r.defaults[s])||"leer"})`,children:[e.jsx(st,{className:"h-2.5 w-2.5"})," Default"]})]}),o.type==="bool"?e.jsxs("button",{onClick:()=>b(s,!i),className:w("flex h-8 w-full items-center justify-between rounded-lg border px-3 text-[11px] font-semibold transition-all cursor-pointer",i?"border-emerald-500/40 bg-emerald-500/10 text-emerald-300":"border-border/40 bg-background/40 text-muted-foreground"),children:[e.jsx("span",{children:i?"An":"Aus"}),e.jsx("span",{className:w("h-3.5 w-3.5 rounded-full transition-colors",i?"bg-emerald-400":"bg-muted-foreground/40")})]}):o.type==="int"?e.jsx("input",{type:"number",value:i,min:o.min,max:o.max,"aria-label":o.label,onChange:A=>b(s,Number(A.target.value)),className:"h-8 w-full rounded-lg border border-border/40 bg-background/40 px-3 font-mono text-[11px] text-foreground outline-none focus:border-primary/50"}):e.jsx("input",{type:"text",value:i,"aria-label":o.label,spellCheck:!1,placeholder:s==="coder_lite"?"(leer = aus)":"",onChange:A=>b(s,A.target.value),className:"h-8 w-full rounded-lg border border-border/40 bg-background/40 px-3 font-mono text-[11px] text-foreground outline-none focus:border-primary/50"})]})}return e.jsxs("div",{className:"mc-card p-5 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(bt,{className:"h-4.5 w-4.5 text-primary"}),e.jsx("span",{className:"text-xs font-bold uppercase tracking-wider text-foreground",children:"Lane-Routing & Policy"}),e.jsx("span",{className:"text-[9px] font-mono px-1.5 py-0.5 rounded bg-emerald-500/10 text-emerald-300 border border-emerald-500/20",children:"hot-reload"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[d&&e.jsx("span",{className:"text-[10px] text-red-400 max-w-[280px] truncate",title:d,children:d}),g>0&&e.jsxs("span",{className:"flex items-center gap-1 text-[10px] text-emerald-400",children:[e.jsx(Y,{className:"h-3.5 w-3.5"})," gespeichert"]}),e.jsxs("button",{onClick:L,disabled:!f||M,className:w("h-8 px-4 rounded-lg text-[10px] font-bold uppercase tracking-wide transition-all flex items-center gap-1.5",f&&!M?"bg-primary text-primary-foreground hover:opacity-90 cursor-pointer shadow-md shadow-primary/10":"bg-background/40 text-muted-foreground/50 border border-border/40 cursor-not-allowed"),children:[M?e.jsx(Oe,{className:"h-3.5 w-3.5 animate-spin"}):null,"Speichern"]})]})]}),e.jsxs("p",{className:"text-[10px] text-muted-foreground/70 leading-relaxed -mt-1",children:["Welches echte Modell hinter den virtuellen Lanes ",e.jsx("code",{className:"text-cyan-300",children:"chat"})," und"," ",e.jsx("code",{className:"text-cyan-300",children:"coding"})," steckt. Änderungen greifen sofort (kein Neustart). Die Keyword-Heuristiken bleiben im Code."]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:"rounded-xl border border-border/40 bg-background/25 p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-border/30 pb-2",children:[e.jsx(mt,{className:"h-4 w-4 text-teal-400"}),e.jsx("span",{className:"text-[11px] font-bold uppercase tracking-wider text-foreground",children:"chat"}),e.jsx("span",{className:"text-[9px] text-muted-foreground/60 font-mono",children:"(= auto)"})]}),yt.map(s=>e.jsx(B,{k:s},s))]}),e.jsxs("div",{className:"rounded-xl border border-border/40 bg-background/25 p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-2 border-b border-border/30 pb-2",children:[e.jsx(rt,{className:"h-4 w-4 text-indigo-400"}),e.jsx("span",{className:"text-[11px] font-bold uppercase tracking-wider text-foreground",children:"coding"}),e.jsx("span",{className:"text-[9px] text-muted-foreground/60 font-mono",children:"(agentisch → immer Coder)"})]}),jt.map(s=>e.jsx(B,{k:s},s))]})]}),e.jsx("div",{className:"rounded-xl border border-border/40 bg-background/25 p-4",children:e.jsx("div",{className:"max-w-xs",children:e.jsx(B,{k:"fast_no_think"})})})]})}const je=[{role:"hermes",label:"Lucys Hirn",short:"Hirn",icon:le,desc:"Lucys Alltags-Verstand — denkt und redet mit dir. Immer bereit.",tone:"bg-indigo-500/15 text-indigo-400 border-indigo-500/25",protected:!0},{role:"embed",label:"Lucys Gedächtnis",short:"Gedächtnis",icon:Te,desc:"Merkt sich Wichtiges und findet es später wieder.",tone:"bg-emerald-500/15 text-emerald-400 border-emerald-500/25",protected:!0},{role:"reranker",label:"Gedächtnis-Sortierer",short:"Sortierer",icon:xt,desc:"Ordnet gefundene Erinnerungen nach echter Relevanz — die Feinsortierung hinter dem Gedächtnis.",tone:"bg-lime-500/15 text-lime-400 border-lime-500/25"},{role:"vision",label:"Lucys Augen",short:"Augen",icon:Be,desc:"Sieht Bilder und Screenshots und beschreibt, was drauf ist.",tone:"bg-pink-500/15 text-pink-400 border-pink-500/25"},{role:"heavy",label:"Großes Hirn",short:"Groß",icon:dt,desc:"Das schwere Geschütz — wird für besonders knifflige Fragen dazugeholt.",tone:"bg-amber-500/15 text-amber-400 border-amber-500/25"},{role:"coder-lite",label:"Programmierer (schnell)",short:"Code schnell",icon:be,desc:"Schnelles Programmieren im Alltag.",tone:"bg-violet-500/15 text-violet-400 border-violet-500/25"},{role:"coder",label:"Programmierer",short:"Code",icon:be,desc:"Baut und plant. Der Kopf der Coding-Mannschaft — er hält den Faden und verteilt Zuarbeit.",tone:"bg-fuchsia-500/15 text-fuchsia-400 border-fuchsia-500/25",protected:!0},{role:"scout",label:"Späher",short:"Späher",icon:gt,desc:"Schneller erster Blick und grobe Einschätzung.",tone:"bg-teal-500/15 text-teal-400 border-teal-500/25"},{role:"kritiker",label:"Kritiker",short:"Kritiker",icon:qe,desc:"Liest dem Programmierer nach jeder Etappe gegen — bewusst aus einer FREMDEN Modellfamilie (Mistral statt Qwen), damit er andere blinde Flecken hat.",tone:"bg-cyan-500/15 text-cyan-400 border-cyan-500/25"}];je.map(t=>t.role);const Ne=Object.fromEntries(je.map(t=>[t.role,t])),ke=t=>({role:t||"?",label:t||"unbekannt",short:t||"?",icon:le,desc:"Rolle ohne hinterlegten Klartext-Namen.",tone:"bg-slate-500/15 text-slate-300 border-slate-500/25"}),Nt={fast:"hermes",coder_lite:"coder-lite"};function F(t){return t&&(Ne[t]||Ne[Nt[t]])||ke(t)}function he({role:t,dense:r=!1,className:h}){const n=F(t),x=n.icon;return e.jsxs("span",{className:w("inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[10px] font-semibold border tracking-wide",n.tone,h),title:`${n.desc} (${n.role})`,children:[e.jsx(x,{className:"h-3 w-3 shrink-0","aria-hidden":"true"}),r?n.short:n.label]})}function kt({fit:t}){const r={perfect:"bg-emerald-500/15 text-emerald-400 border border-emerald-500/20",marginal:"bg-amber-500/15 text-amber-400 border border-amber-500/20",too_tight:"bg-red-500/15 text-red-400 border border-red-500/20"}[t.level];return e.jsxs("span",{className:w("rounded px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider font-mono",r),children:[t.text," • ",t.req_gb," GB RAM"]})}function Ke(t){const r=t.toLowerCase();return r.includes("qwen")?{name:"Qwen",color:"bg-purple-500/20 text-purple-300 border-purple-500/30",initial:"Q"}:r.includes("gemma")?{name:"Gemma",color:"bg-blue-500/20 text-blue-300 border-blue-500/30",initial:"G"}:r.includes("llama")?{name:"Llama",color:"bg-red-500/20 text-red-300 border-red-500/30",initial:"🦙"}:r.includes("mistral")||r.includes("mixtral")?{name:"Mistral",color:"bg-orange-500/20 text-orange-300 border-orange-500/30",initial:"M"}:r.includes("deepseek")?{name:"DeepSeek",color:"bg-cyan-500/20 text-cyan-300 border-cyan-500/30",initial:"D"}:r.includes("hermes")||r.includes("nous")?{name:"Hermes",color:"bg-amber-500/20 text-amber-300 border-amber-500/30",initial:"H"}:r.includes("phi")?{name:"Phi",color:"bg-emerald-500/20 text-emerald-300 border-emerald-500/30",initial:"Φ"}:{name:"Other",color:"bg-slate-500/20 text-slate-300 border-slate-500/30",initial:"AI"}}function wt(){var te,H,G;const t=oe(),{data:r}=de(),{data:h}=$e(),{data:n}=Ge(),{data:x}=He(),{showAlert:M,dialogElement:v}=ge(),[d,S]=N.useState(!1),[g,z]=N.useState(!1),m=(r==null?void 0:r.models)??[],f=(r==null?void 0:r.running)??[],b=(te=h==null?void 0:h.groups)==null?void 0:te.brains,c=(b==null?void 0:b.members)??[],L=p=>m.find(_=>_.name===p),B=p=>{var _;return((_=p.split("/").pop())==null?void 0:_.replace(/\.gguf$/i,""))||p},s=c.map(L).filter(Boolean),o=1024**3,i=x==null?void 0:x.budget,$=s.reduce((p,_)=>p+(_.size_bytes||0),0)/o,A=((H=n==null?void 0:n.gpu)==null?void 0:H.gtt_total)||((G=n==null?void 0:n.gpu)==null?void 0:G.vram_total)||0,C=(i==null?void 0:i.gtt_gb)||(A?A/o:0),k=(i==null?void 0:i.warm_projected_gb)??$,R=C>0?Math.min(100,k/C*100):0,E=m.filter(p=>!c.includes(p.name)&&!p.incomplete);async function I(p){z(!0);try{await Ue("brains",p,(b==null?void 0:b.swap)??!1,(b==null?void 0:b.persist)??!0),t.invalidateQueries({queryKey:P.groups}),t.invalidateQueries({queryKey:P.models}),t.invalidateQueries({queryKey:P.hermesBrain})}catch(_){M("Fehler",`Immer-bereit-Set konnte nicht geändert werden: ${(_==null?void 0:_.message)||_}`)}finally{z(!1)}}function T(p){const _=L(p);if(_&&F(_.role).protected){M("Geschützt",`„${F(_.role).label}" ist lebenswichtig und bleibt immer bereit.`);return}I(c.filter(Q=>Q!==p))}function W(p){S(!1),I([...c,p])}return b?e.jsxs("div",{className:"mc-card p-5 space-y-4",children:[e.jsx(we,{}),e.jsxs("div",{className:"space-y-1.5",children:[s.length===0&&e.jsx("div",{className:"text-xs text-muted-foreground",children:"Noch keine Modelle im Set."}),s.map(p=>{const _=f.includes(p.name),Q=F(p.role).protected;return e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-xl border border-border/30 bg-background/20 p-2.5",children:[e.jsxs("div",{className:"flex min-w-0 items-center gap-2.5",children:[e.jsx("span",{className:w("h-2 w-2 shrink-0 rounded-full ring-2 ring-black/40",_?"bg-emerald-500 animate-pulse":"bg-muted-foreground/40"),title:_?"Gerade warm (bereit)":"Reserviert — lädt bei Bedarf sofort"}),p.role&&e.jsx(he,{role:p.role,dense:!0,className:"shrink-0"}),e.jsx("span",{className:"truncate font-mono text-xs font-semibold text-foreground",title:p.name,children:B(p.name)}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/70",children:ee(p.size_bytes)})]}),Q?e.jsx("span",{className:"shrink-0 text-[10px] font-semibold text-muted-foreground",title:"Lebenswichtig — bleibt immer im Set.",children:"🔒"}):e.jsx("button",{onClick:()=>T(p.name),disabled:g,className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border border-border/40 text-muted-foreground transition-colors hover:bg-red-500/5 hover:text-red-400 cursor-pointer disabled:opacity-50",title:"Aus dem Immer-bereit-Set nehmen (lädt dann nur noch bei Bedarf)",children:e.jsx(pe,{className:"h-3.5 w-3.5"})})]},p.name)})]}),e.jsxs("button",{onClick:()=>S(!0),disabled:g||E.length===0,className:"flex h-8 w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-border/50 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground transition-colors hover:border-primary/40 hover:text-primary cursor-pointer disabled:opacity-50",children:[e.jsx(Qe,{className:"h-3.5 w-3.5"})," Modell dauerhaft bereithalten"]}),e.jsxs("div",{className:"rounded-xl border border-border/30 bg-background/20 p-3",children:[e.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-[11px]",children:[e.jsxs("span",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-wider text-muted-foreground",title:"Modellgewichte + KV-Cache, berechnet aus den echten Architektur-Daten jedes Modells (Layer × KV-Köpfe × Kontext) und seiner KV-Quantisierung. So viel legt llama.cpp beim Laden wirklich für den eingestellten Kontext an — kein Aufschlag mehr.",children:[e.jsx(fe,{className:"h-3.5 w-3.5"})," Reserviert fürs Set"]}),e.jsxs("span",{className:"font-mono font-bold text-foreground",children:[k.toFixed(1),C>0?` / ${C.toFixed(0)}`:""," GB"]})]}),e.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full border border-border/30 bg-background/50",children:e.jsx("div",{className:w("h-full rounded-full transition-all duration-500",R>=85?"bg-red-500":R>=65?"bg-amber-500":"bg-teal-500"),style:{width:`${R}%`}})}),i&&!i.fits&&e.jsxs("p",{className:"mt-2 flex items-start gap-1.5 text-[11px] text-amber-400",children:[e.jsx(re,{className:"mt-0.5 h-3.5 w-3.5 shrink-0"}),e.jsxs("span",{children:["Zusammen mit dem größten Gelegenheits-Modell (~",i.largest_ondemand_gb," GB) wird der Speicher knapp. Das Set bleibt dabei immer geladen — wird es wirklich eng, schlägt das Laden des großen Modells fehl (es wartet dann, statt das Set zu verdrängen)."]})]}),i&&i.fits&&e.jsxs("p",{className:"mt-2 flex items-center gap-1.5 text-[11px] text-emerald-400",children:[e.jsx(Y,{className:"h-3.5 w-3.5 shrink-0"})," Passt auch neben dem größten Gelegenheits-Modell — nichts wird verdrängt."]})]}),d&&e.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 p-4 backdrop-blur-sm",role:"dialog","aria-modal":"true","aria-label":"Modell zum Immer-bereit-Set hinzufügen",children:e.jsxs("div",{className:"w-full max-w-md space-y-3 rounded-2xl border border-border/80 bg-card p-6 shadow-2xl animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:"Dauerhaft bereithalten"}),e.jsx("button",{onClick:()=>S(!1),className:"rounded p-1 text-muted-foreground hover:bg-accent hover:text-foreground cursor-pointer",children:e.jsx(pe,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Wähle ein Modell, das ohne Ladezeit bereitstehen soll:"}),e.jsx("div",{className:"max-h-60 space-y-1.5 overflow-y-auto pr-1",children:E.map(p=>e.jsxs("button",{onClick:()=>W(p.name),className:"flex w-full items-center justify-between gap-2 rounded-lg border border-border/30 bg-background/20 px-3 py-2.5 text-left transition-colors hover:bg-accent cursor-pointer",children:[e.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[p.role&&e.jsx(he,{role:p.role,dense:!0,className:"shrink-0"}),e.jsx("span",{className:"truncate font-mono text-xs font-semibold text-foreground",children:B(p.name)})]}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] text-muted-foreground/70",children:ee(p.size_bytes)})]},p.name))})]})}),v]}):e.jsxs("div",{className:"mc-card p-5",children:[e.jsx(we,{}),e.jsx("p",{className:"mt-3 text-xs text-muted-foreground",children:"Es gibt noch kein Immer-bereit-Set. Es entsteht automatisch, sobald Lucys Hirn zugewiesen ist."}),v]})}function we(){return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"h-4.5 w-4.5 text-primary"}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-sm font-bold uppercase tracking-wide text-foreground",children:"Immer-bereit-Set"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Diese Modelle hält Lucy immer bereit — sie antworten ohne Ladezeit."})]})]})}function J({children:t,tone:r="muted"}){const h={muted:"bg-muted text-muted-foreground",primary:"bg-primary/15 text-primary",warn:"bg-amber-500/15 text-amber-500"};return e.jsx("span",{className:`rounded px-1.5 py-0.5 text-[11px] font-medium ${h[r]}`,children:t})}function Mt({caps:t}){return t?e.jsxs("span",{className:"inline-flex flex-wrap gap-1",children:[t.coder&&e.jsx(J,{children:"💻 Code"}),t.vision&&e.jsx(J,{children:"👁 Bild"}),t.reasoning&&e.jsx(J,{children:"🧠 Reason"}),t.moe&&e.jsxs(J,{tone:"primary",children:["🧩 MoE",t.active_b?`·${t.active_b}b`:""]}),t.tools==="yes"&&e.jsx(J,{tone:"primary",children:"🛠 Tools"}),t.tools==="likely"&&e.jsx(J,{tone:"warn",children:"🛠 Tools?"}),t.embedding&&e.jsx(J,{children:"🔢 Embed"})]}):null}function St({model:t,onClose:r,onChanged:h}){var L,B;const{data:n,isLoading:x}=Ve(t.gguf_path),[M,v]=N.useState(null),[d,S]=N.useState(""),g=n==null?void 0:n.target_vocab,z=(n==null?void 0:n.drafts)??[],m=z.filter(s=>s.compatible===!0),f=t.spec_draft_model;async function b(s){v(s??"__clear__"),S("");try{await K(`/api/models/${encodeURIComponent(t.name)}/draft`,{method:"POST",body:JSON.stringify({draft_path:s})}),h(),r()}catch(o){S(String((o==null?void 0:o.message)||o)),v(null)}}const c=s=>{var o;return s?`${s.pre??"?"} · ${((o=s.n_vocab)==null?void 0:o.toLocaleString())??"?"} Tokens`:"—"};return e.jsx("div",{className:"fixed inset-0 z-50 bg-black/60 backdrop-blur-sm flex items-center justify-center p-4",children:e.jsxs("div",{className:"w-full max-w-lg rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[e.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[e.jsxs("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary flex items-center gap-2",children:[e.jsx(ie,{className:"h-4 w-4"})," Speculative Draft"]}),e.jsx("button",{onClick:r,className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:e.jsx(pe,{className:"h-4 w-4"})})]}),e.jsxs("div",{className:"text-xs text-muted-foreground leading-relaxed",children:['Beschleunigt die Token-Generierung mit einem kleinen "Draft"-Modell. Voraussetzung: der Draft muss den ',e.jsx("strong",{className:"text-foreground",children:"exakt gleichen Tokenizer (Vocab)"})," haben wie das Modell — sonst lehnt llama.cpp es ab."]}),e.jsxs("div",{className:"rounded-lg border border-border/40 bg-background/30 px-3 py-2 text-[11px] font-mono flex items-center justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:(L=t.name.split("/").pop())==null?void 0:L.replace(/\.gguf$/i,"")}),e.jsxs("span",{className:"text-foreground",children:["Vocab: ",c(g)]})]}),t.spec_active&&f&&e.jsxs("div",{className:"rounded-lg border border-emerald-500/30 bg-emerald-500/5 px-3 py-2 flex items-center justify-between gap-2",children:[e.jsxs("span",{className:"text-[11px] text-emerald-400 font-mono flex items-center gap-1.5 truncate",children:[e.jsx(Y,{className:"h-3.5 w-3.5 shrink-0"})," Aktiv: ",f]}),e.jsx("button",{onClick:()=>b(null),disabled:M!==null,className:"h-6 px-2.5 rounded border border-amber-500/30 bg-amber-500/5 hover:bg-amber-500/10 text-amber-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Deaktivieren"})]}),!(n!=null&&n.target_exists)&&e.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 flex items-center gap-2",children:[e.jsx(re,{className:"h-3.5 w-3.5 shrink-0"}),"Modell-GGUF noch nicht vorhanden — Spec-Draft ist nach dem Download konfigurierbar."]}),e.jsx("div",{className:"space-y-1.5 max-h-64 overflow-y-auto pr-1",children:x?e.jsx("div",{className:"text-xs text-muted-foreground py-6 text-center",children:"Prüfe Vocab-Kompatibilität…"}):z.length===0?e.jsxs("div",{className:"text-[11px] text-muted-foreground border border-dashed border-border/50 rounded-lg p-4 text-center",children:["Keine Draft-Modelle in ",e.jsx("code",{className:"font-mono",children:"/srv/models/drafts"}),". Lade ein kleines same-family-Modell (z.B. Qwen3-0.6B) und lege es dort ab."]}):z.map(s=>{var $,A;const o=s.filename===f,i=s.compatible===!0;return e.jsxs("div",{className:w("rounded-lg border px-3 py-2 flex items-center justify-between gap-2 text-left",i?"border-border/40 bg-background/20":"border-border/20 bg-background/10 opacity-60",o&&"border-primary/40 bg-primary/10"),children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"text-[11px] font-mono font-semibold text-foreground truncate flex items-center gap-1.5",children:[s.filename,s.mtp&&e.jsx("span",{className:"shrink-0 rounded bg-indigo-500/15 px-1.5 py-0.5 text-[8px] font-bold uppercase tracking-wider text-indigo-400 border border-indigo-500/25",title:"MTP-Kopf (Multi-Token-Prediction) — by-construction vocab-identisch, höchste Akzeptanzrate",children:"MTP"})]}),e.jsxs("div",{className:"text-[9px] text-muted-foreground font-mono",children:[ee(s.size_bytes)," · Vocab: ",c(s.vocab)]})]}),i?o?e.jsxs("span",{className:"text-[9px] font-bold uppercase text-primary flex items-center gap-1 shrink-0",children:[e.jsx(Y,{className:"h-3.5 w-3.5"})," Aktiv"]}):e.jsx("button",{onClick:()=>b(s.path),disabled:M!==null,className:"h-7 px-3 rounded-lg border border-emerald-500/30 bg-emerald-500/5 hover:bg-emerald-500/15 text-emerald-400 text-[9px] font-bold uppercase shrink-0 cursor-pointer disabled:opacity-50",children:"Aktivieren"}):e.jsxs("span",{className:"text-[9px] font-bold uppercase text-amber-400/80 flex items-center gap-1 shrink-0",title:s.compatible===!1?`Inkompatibel: Tokenizer/Vocab weicht ab (Draft ${($=s.vocab)==null?void 0:$.pre}/${(A=s.vocab)==null?void 0:A.n_vocab} ≠ Modell ${g==null?void 0:g.pre}/${g==null?void 0:g.n_vocab}).`:"Kompatibilität nicht prüfbar (Datei fehlt).",children:[e.jsx(re,{className:"h-3.5 w-3.5"})," ",s.compatible===!1?"Vocab ≠":"n/a"]})]},s.path)})}),!x&&(n==null?void 0:n.target_exists)&&z.length>0&&m.length===0&&e.jsxs("div",{className:"rounded-lg border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-[11px] text-amber-400 leading-relaxed",children:["Kein vocab-kompatibler Draft verfügbar — Speculative Decoding ist für dieses Modell nicht möglich. Es braucht einen Draft mit identischem Tokenizer (pre=",e.jsx("span",{className:"font-mono",children:g==null?void 0:g.pre}),", n_vocab=",e.jsx("span",{className:"font-mono",children:(B=g==null?void 0:g.n_vocab)==null?void 0:B.toLocaleString()}),")."]}),d&&e.jsx("div",{className:"text-[10px] text-red-400 font-mono",children:d})]})})}const Me={hermes:{bar:"bg-indigo-500",dot:"bg-indigo-500",text:"text-indigo-400"},embed:{bar:"bg-emerald-500",dot:"bg-emerald-500",text:"text-emerald-400"},vision:{bar:"bg-pink-500",dot:"bg-pink-500",text:"text-pink-400"},heavy:{bar:"bg-amber-500",dot:"bg-amber-500",text:"text-amber-400"},"coder-lite":{bar:"bg-violet-500",dot:"bg-violet-500",text:"text-violet-400"},coder:{bar:"bg-fuchsia-500",dot:"bg-fuchsia-500",text:"text-fuchsia-400"},scout:{bar:"bg-teal-500",dot:"bg-teal-500",text:"text-teal-400"},kritiker:{bar:"bg-cyan-500",dot:"bg-cyan-500",text:"text-cyan-400"},reranker:{bar:"bg-lime-500",dot:"bg-lime-500",text:"text-lime-400"}},Ct={fast:"hermes",coder_lite:"coder-lite"},Se={bar:"bg-slate-400",dot:"bg-slate-400",text:"text-slate-300"};function ae(t){return t&&(Me[t]||Me[Ct[t]])||Se}const Ce=1024**3,_e=t=>{var r;return((r=t.split("/").pop())==null?void 0:r.replace(/\.gguf$/i,""))??t};function _t({running:t,capacityBytes:r,realUsedBytes:h,selected:n,onSelect:x}){const M=r>2*Ce?r:124*Ce,v=t.reduce((m,f)=>m+(f.size_bytes||0),0),d=Math.max(0,h-v),S=Math.max(0,M-Math.max(v,h)),g=S/M*100,z=d/M*100;return e.jsxs("div",{className:"mc-card p-5",children:[e.jsxs("div",{className:"mb-3 flex flex-wrap items-end justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(fe,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Modell-Speicher (GPU-Pool)"}),e.jsxs("div",{className:"font-space text-xl font-bold tracking-tight text-foreground",children:[V(M)," GB ",e.jsx("span",{className:"text-sm font-medium text-muted-foreground",children:"gesamt"})]})]})]}),e.jsxs("div",{className:"text-right text-[11px] font-mono text-muted-foreground",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"font-bold text-foreground",children:[V(v)," GB"]})," Modell-Gewichte"]}),d>0&&e.jsxs("div",{children:[V(d)," GB KV-Cache & Betrieb"]}),e.jsxs("div",{className:"text-emerald-400",children:[V(S)," GB frei"]})]})]}),e.jsx("div",{className:"flex h-12 w-full overflow-hidden rounded-xl border border-border/40 bg-background/50 p-1",children:t.length===0?e.jsx("div",{className:"flex w-full items-center justify-center text-[11px] italic text-muted-foreground/60",children:"Kein Modell geladen — Auto-Swap holt bei Anfrage automatisch das passende."}):e.jsxs(e.Fragment,{children:[t.map(m=>{const f=(m.size_bytes||0)/M*100,b=ae(m.role),c=n===m.name;return e.jsxs("button",{onClick:()=>x==null?void 0:x(m.name),style:{width:`${f}%`},title:`${F(m.role).label} · ${_e(m.name)} · ${ee(m.size_bytes)}`,className:w("group flex h-full min-w-[2.5rem] shrink-0 flex-col justify-center gap-0.5 rounded-lg px-2 text-left text-white transition-all",b.bar,c?"ring-2 ring-white/70":"opacity-90 hover:opacity-100"),children:[e.jsx("span",{className:"truncate font-space text-[10px] font-bold leading-tight tracking-wide",children:F(m.role).short}),e.jsx("span",{className:"truncate font-mono text-[9px] leading-tight opacity-85",children:ee(m.size_bytes)})]},m.name)}),z>1.5&&e.jsx("div",{style:{width:`${z}%`},className:"flex h-full min-w-[2rem] items-center justify-center rounded-lg border border-dashed border-border/60 bg-background/40 text-[9px] font-mono text-muted-foreground/70",title:`${V(d)} GB KV-Cache & Betrieb (reale Belegung über den Modell-Gewichten)`,children:"KV"}),g>1.5&&e.jsx("div",{style:{width:`${g}%`},className:"flex h-full min-w-[2rem] items-center justify-center rounded-lg text-[9px] font-mono text-muted-foreground/50",title:`${V(S)} GB frei`,children:"frei"})]})}),t.length>0&&e.jsxs("div",{className:"mt-3 flex flex-wrap gap-x-4 gap-y-1.5",children:[t.map(m=>{const f=ae(m.role);return e.jsxs("button",{onClick:()=>x==null?void 0:x(m.name),className:"flex items-center gap-1.5 text-[11px] text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx("span",{className:w("h-2.5 w-2.5 rounded-sm",f.dot)}),e.jsx("span",{className:w("font-semibold",f.text),children:F(m.role).short}),e.jsx("span",{className:"font-mono text-muted-foreground/70",children:_e(m.name)})]},m.name)}),d>0&&e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/60",title:"Reale Belegung über den Modell-Gewichten (Kontext-Speicher der laufenden Modelle)",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm border border-dashed border-border/60 bg-background/40"})," KV-Cache & Betrieb · ",V(d)," GB"]}),e.jsxs("span",{className:"flex items-center gap-1.5 text-[11px] text-muted-foreground/60",children:[e.jsx("span",{className:"h-2.5 w-2.5 rounded-sm border border-border/50 bg-background/50"})," frei · ",V(S)," GB"]})]})]})}const Le=1024**3,X=t=>{var r;return((r=t.split("/").pop())==null?void 0:r.replace(/\.gguf$/i,""))??t};function Lt(){var a,y,D,U;const t=oe(),{data:r,isLoading:h,error:n}=de(),{data:x}=Ge(),{data:M}=$e(),{showAlert:v,showConfirm:d,showPrompt:S,dialogElement:g}=ge(),z=We(),m=(r==null?void 0:r.models)??[],f=(r==null?void 0:r.running)??[],b=l=>!!F(l).protected,c=(a=M==null?void 0:M.groups)==null?void 0:a.brains,L=(c==null?void 0:c.members)??[],B=l=>L.includes(l),[s,o]=N.useState(null),[i,$]=N.useState(""),[A,C]=N.useState("all"),[k,R]=N.useState(null),E=()=>{t.invalidateQueries({queryKey:P.models}),t.invalidateQueries({queryKey:P.routing}),t.invalidateQueries({queryKey:P.groups})},I=m.filter(l=>f.includes(l.name)),T=((y=x==null?void 0:x.gpu)==null?void 0:y.gtt_total)||((D=x==null?void 0:x.gpu)==null?void 0:D.vram_total)||0,W=((U=x==null?void 0:x.gpu)==null?void 0:U.gtt_used)||0,te=T>2*Le?T:124*Le,H=N.useMemo(()=>{const l=i.trim().toLowerCase();return m.filter(u=>A==="in_use"?!!u.role||f.includes(u.name):!0).filter(u=>l?u.name.toLowerCase().includes(l):!0).sort((u,j)=>{const O=f.includes(u.name)?0:1,Z=f.includes(j.name)?0:1;return O!==Z?O-Z:X(u.name).localeCompare(X(j.name))})},[m,f,A,i]),G=m.find(l=>l.name===s)??null;async function p(l){try{await K(`/api/models/${encodeURIComponent(l)}/load`,{method:"POST"}),E()}catch(u){v("Fehler",`Laden fehlgeschlagen: ${u.message||u}`)}}async function _(l){const u=L.some(j=>f.includes(j));if(c&&u&&!B(l)){const j=L.filter(O=>f.includes(O)).map(X).join(", ");d("Verdrängt das Hirn?",`„${X(l)}" ist nicht ko-resident. Beim Laden wirft es das warme Hirn (${j}) raus — Lucy verliert Hirn bzw. Augen. -Trotzdem exklusiv laden?`,()=>p(l));return}p(l)}async function Q(l){const u=m.find(j=>j.name===l);if(u&&b(u.role)){v("Geschützt",`„${F(u.role).label}" ist lebenswichtig und bleibt geladen.`);return}try{await K(`/api/models/${encodeURIComponent(l)}/unload`,{method:"POST"}),E()}catch(j){v("Fehler",`Entladen fehlgeschlagen: ${j.message||j}`)}}async function ce(l,u){try{const j=await K(`/api/models/${encodeURIComponent(u)}/role`,{method:"POST",body:JSON.stringify({role:l||null})});E(),j!=null&&j.warning&&v("Rolle gesetzt — Hinweis",j.warning)}catch(j){v("Fehler",`Rolle zuweisen fehlgeschlagen: ${j.message||j}`)}}async function xe(l,u){let j=null;try{j=await K(`/api/models/${encodeURIComponent(l)}/ctx/auto`)}catch{}const O=j?`Optimal für dein Setup: ${(j.ctx/1024).toFixed(0)}k (${j.ctx}). »Auto« trägt diesen Wert ein.`:"Gib die gewünschte Kontextlänge in Tokens an:";S("Kontextlänge anpassen",O,String(u||32768),async Z=>{if(Z)try{await K(`/api/models/${encodeURIComponent(l)}/ctx`,{method:"POST",body:JSON.stringify({ctx:parseInt(Z,10)})}),E()}catch(ve){v("Fehler",`Kontext setzen fehlgeschlagen: ${ve.message||ve}`)}},void 0,j?{autoValue:String(j.ctx),autoLabel:`Auto (${(j.ctx/1024).toFixed(0)}k)`}:void 0)}async function me(l){const u=m.find(j=>j.name===l);if(u&&b(u.role)){v("Geschützt",`„${F(u.role).label}" kann nicht gelöscht werden. Weise die Rolle zuerst einem anderen Modell zu.`);return}d("Modell löschen?",`„${X(l)}" und alle GGUF-Dateien unwiderruflich von der Box löschen?`,async()=>{try{await K(`/api/models/${encodeURIComponent(l)}`,{method:"DELETE"}),s===l&&o(null),E()}catch(j){v("Fehler",`Löschen fehlgeschlagen: ${j.message||j}`)}})}return h?e.jsx("div",{className:"py-16 text-center text-xs text-muted-foreground",children:"Werkbank wird geladen …"}):n?e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Gateway oder Engine nicht erreichbar (",String(n),")."]}):e.jsxs("div",{className:"space-y-5",children:[e.jsx(_t,{running:I,capacityBytes:te,realUsedBytes:W,selected:s,onSelect:o}),e.jsxs("div",{className:"grid gap-5 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.3fr)]",children:[e.jsxs("div",{className:"mc-card p-4",children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(ye,{className:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground/60"}),e.jsx("input",{value:i,onChange:l=>G(l.target.value),placeholder:"Modell suchen …",className:"h-8 w-full rounded-lg border border-border/40 bg-background/40 pl-8 pr-2 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-primary/50 focus:outline-none"})]}),e.jsx("div",{className:"flex rounded-lg border border-border/40 bg-background/30 p-0.5",children:["all","in_use"].map(l=>e.jsx("button",{onClick:()=>C(l),className:w("rounded-md px-2 py-1 text-[9px] font-bold uppercase transition-all cursor-pointer",A===l?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:l==="all"?"Alle":"In Benutzung"},l))})]}),e.jsx("div",{className:"max-h-[60vh] space-y-1.5 overflow-y-auto scrollbar-thin pr-1",children:H.length===0?e.jsx("div",{className:"rounded-xl border border-dashed border-border/50 p-8 text-center text-xs text-muted-foreground",children:"Keine Modelle."}):H.map(l=>{const u=f.includes(l.name),j=s===l.name,O=Ke(l.name),Z=ae(l.role);return e.jsxs("button",{onClick:()=>o(l.name),className:w("flex w-full items-center gap-2.5 rounded-xl border p-2.5 text-left transition-all cursor-pointer",j?"border-primary/60 bg-primary/10":"border-border/40 bg-background/20 hover:border-primary/30 hover:bg-background/40"),children:[e.jsx("span",{className:w("flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border text-[10px] font-bold",O.color),children:O.initial}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate font-mono text-xs font-semibold text-foreground",children:X(l.name)}),e.jsxs("div",{className:"mt-0.5 flex items-center gap-1.5",children:[l.role&&e.jsx("span",{className:w("h-2 w-2 rounded-sm",Z.dot)}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:l.role?F(l.role).short:"keine Rolle"}),e.jsxs("span",{className:"text-[10px] text-muted-foreground/50",children:["· ",ee(l.size_bytes)]})]})]}),u?e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[9px] font-bold uppercase text-emerald-400",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"warm"]}):l.incomplete?e.jsx("span",{className:"shrink-0 text-[9px] font-bold uppercase text-amber-400",children:"⚠ fehlt"}):e.jsx("span",{className:"shrink-0 text-[9px] font-semibold uppercase text-muted-foreground/50",children:"bereit"})]},l.name)})})]}),e.jsx("div",{className:"mc-card p-5",children:$?e.jsx(zt,{m:$,warm:f.includes($.name),expert:z,protectedRole:b($.role),coresident:B($.name),onLoad:()=>_($.name),onUnload:()=>Q($.name),onRole:l=>ce(l,$.name),onCtx:()=>xe($.name,$.ctx),onSpec:()=>R($),onDelete:()=>me($.name)}):e.jsxs("div",{className:"flex h-full min-h-[16rem] flex-col items-center justify-center gap-2 text-center text-muted-foreground",children:[e.jsx(Ze,{className:"h-8 w-8 opacity-40"}),e.jsx("p",{className:"text-sm font-semibold",children:"Links ein Modell wählen"}),e.jsx("p",{className:"text-xs",children:"Dann verwaltest du es hier — laden, Rolle, Kontext, löschen."})]})})]}),k&&e.jsx(St,{model:k,onClose:()=>R(null),onChanged:E}),g]})}function zt({m:t,warm:r,expert:h,protectedRole:n,coresident:x,onLoad:M,onUnload:v,onRole:d,onCtx:S,onSpec:g,onDelete:z}){const m=Ke(t.name),f=r&&n;return e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("span",{className:w("flex h-10 w-10 shrink-0 items-center justify-center rounded-xl border text-sm font-bold",m.color),children:m.initial}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h2",{className:"break-all font-mono text-sm font-bold text-foreground",children:X(t.name)}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[t.role?e.jsx(he,{role:t.role}):e.jsx("span",{className:"rounded border border-dashed border-border/50 px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"keine Rolle"}),n&&e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 text-[10px] text-muted-foreground",title:"Lebenswichtig — geschützt",children:[e.jsx(nt,{className:"mr-0.5 inline h-3 w-3"}),"geschützt"]}),x&&e.jsxs("span",{className:"rounded border border-fuchsia-500/30 bg-fuchsia-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase text-fuchsia-300",children:[e.jsx(le,{className:"mr-0.5 inline h-3 w-3"}),"Ko-resident"]}),r&&e.jsxs("span",{className:"flex items-center gap-1 text-[10px] font-bold uppercase text-emerald-400",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"warm"]})]})]})]}),e.jsxs("button",{onClick:r?v:M,disabled:t.incomplete&&!r||f,className:w("flex h-11 w-full items-center justify-center gap-2 rounded-xl border text-sm font-bold transition-all cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",r?"border-amber-500/40 bg-amber-500/10 text-amber-300 hover:bg-amber-500/20":"border-primary/40 bg-primary/10 text-primary hover:bg-primary/20"),title:f?`„${F(t.role).label}" bleibt geladen (geschützt).`:void 0,children:[r?e.jsx(pt,{className:"h-4 w-4"}):e.jsx(Je,{className:"h-4 w-4"}),f?"🔒 bleibt geladen":r?"Entladen":"Ins Warm-Set laden"]}),e.jsxs("div",{className:"rounded-xl border border-border/30 bg-background/20 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx("span",{children:"Rolle"}),n&&e.jsx("span",{className:"normal-case font-medium tracking-normal text-muted-foreground/70",children:"🔒 lebenswichtig — zum Tausch die Rolle woanders zuweisen"})]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsx(ze,{active:!t.role,onClick:()=>d(""),dot:"bg-slate-400",label:"keine",disabled:n}),je.map(b=>e.jsx(ze,{active:t.role===b.role,onClick:()=>d(b.role),dot:ae(b.role).dot,label:b.short,disabled:n&&t.role!==b.role},b.role))]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsx(At,{icon:fe,label:"Größe",value:ee(t.size_bytes)}),e.jsxs("button",{onClick:S,className:"group flex items-center gap-2 rounded-lg border border-border/30 bg-background/20 p-2.5 text-left transition-colors hover:border-primary/40 cursor-pointer",children:[e.jsx(ut,{className:"h-4 w-4 text-primary/80"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:"Kontext · ändern"}),e.jsx("div",{className:"font-semibold text-foreground",children:Xe(t.ctx)})]})]})]}),e.jsxs("div",{className:"rounded-xl border border-border/30 bg-background/20 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Beschleuniger"}),h&&e.jsxs("button",{onClick:g,className:w("flex h-6 items-center gap-1 rounded-lg border px-2 text-[9px] font-bold uppercase transition-colors cursor-pointer",t.spec_active?"border-emerald-500/30 text-emerald-400 hover:bg-emerald-500/10":t.spec_draft_model?"border-amber-500/30 text-amber-400 hover:bg-amber-500/10":"border-border/40 text-muted-foreground hover:bg-accent"),children:[e.jsx(ie,{className:"h-3 w-3"})," Spec"]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[t.spec_active&&e.jsx(se,{tone:"emerald",label:"Spec-Decoding aktiv"}),!t.spec_active&&t.spec_draft_model&&e.jsx(se,{tone:"amber",label:"Spec inaktiv"}),t.prompt_cache&&e.jsx(se,{tone:"cyan",label:"Prompt-Cache"}),t.parallel_slots>1&&e.jsx(se,{tone:"violet",label:`${t.parallel_slots} Slots`}),!t.spec_active&&!t.spec_draft_model&&!t.prompt_cache&&t.parallel_slots<=1&&e.jsx("span",{className:"text-[11px] text-muted-foreground/60",children:"keine aktiv"})]})]}),e.jsx("div",{className:"flex flex-wrap gap-1",children:e.jsx(Mt,{caps:t.capabilities})}),e.jsxs("button",{onClick:z,disabled:n,className:w("mt-auto flex h-9 items-center justify-center gap-1.5 rounded-lg border text-xs font-semibold transition-colors",n?"cursor-not-allowed border-border/30 text-muted-foreground/40":"border-red-500/30 text-red-400 hover:bg-red-500/10 cursor-pointer"),children:[e.jsx(Ye,{className:"h-3.5 w-3.5"})," ",n?"geschützt — nicht löschbar":"Modell löschen"]})]})}function ze({active:t,onClick:r,dot:h,label:n,disabled:x}){return e.jsxs("button",{onClick:r,disabled:x,title:x?"Gesperrt: dieses Modell hält eine lebenswichtige Rolle.":void 0,className:w("flex items-center gap-1.5 rounded-lg border px-2 py-1 text-[10px] font-semibold transition-all",x?"cursor-not-allowed opacity-40 border-border/40 bg-background/20 text-muted-foreground":t?"cursor-pointer border-primary/60 bg-primary/15 text-foreground":"cursor-pointer border-border/40 bg-background/20 text-muted-foreground hover:border-primary/30"),children:[e.jsx("span",{className:w("h-2 w-2 rounded-sm",h)}),n,t&&e.jsx(Y,{className:"h-3 w-3 text-primary"})]})}function At({icon:t,label:r,value:h}){return e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border/30 bg-background/20 p-2.5",children:[e.jsx(t,{className:"h-4 w-4 text-primary/80"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:r}),e.jsx("div",{className:"font-semibold text-foreground",children:h})]})]})}function se({tone:t,label:r}){const h={emerald:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",amber:"bg-amber-500/10 text-amber-400 border-amber-500/20",cyan:"bg-cyan-500/10 text-cyan-400 border-cyan-500/20",violet:"bg-violet-500/10 text-violet-400 border-violet-500/20"}[t];return e.jsx("span",{className:w("rounded border px-1.5 py-0.5 text-[10px] font-semibold",h),children:r})}const Bt=[{key:"popular",label:"Beliebt",q:""},{key:"coder",label:"Coder",q:"coder"},{key:"vision",label:"Vision",q:"vision"},{key:"reasoning",label:"Reasoning",q:"reasoning"},{key:"small",label:"Klein (≤4B)",q:"3B"}],Gt=["fast","heavy","coder","vision","hermes","scout"],$t=new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1});function Ae(t){return $t.format(t)}function Dt(){const{data:t}=de(),r=(t==null?void 0:t.models)??[],[h,n]=N.useState(""),[x,M]=N.useState([]),[v,d]=N.useState(!1),[S,g]=N.useState(""),[z,m]=N.useState("popular"),[f,b]=N.useState(""),[c,L]=N.useState(null),[B,s]=N.useState([]),[o,i]=N.useState("Q4_K_M"),[G,A]=N.useState(""),[C,k]=N.useState(null),[R,E]=N.useState(!1),[I,T]=N.useState({});async function W(a){d(!0),g("");try{const y=await K(`/api/hf/search?q=${encodeURIComponent(a)}`);M(y.results),y.results.length||g("Keine Ergebnisse.")}catch(y){g(`Suche fehlgeschlagen: ${y}`)}finally{d(!1)}}N.useEffect(()=>{W("")},[]);function te(a){m(a.key),n(""),W(a.q)}function H(){m(""),W(h)}async function $(a,y,D){E(!1);try{const U=await K(`/api/fit?params_b=0&quant=${encodeURIComponent(y)}&ctx=8192&name=${encodeURIComponent(a)}&role=${encodeURIComponent(D)}`);k(U)}catch{k(null)}}async function p(a){if(c===a){L(null);return}L(a),s([]),k(null),A(""),E(!1),g("Analysiere Repository…");try{const y=await K(`/api/hf/quants?repo=${encodeURIComponent(a)}`);s(y.quants);const D=y.quants.includes("Q4_K_M")?"Q4_K_M":y.quants[0]||"Q4_K_M";i(D),g(y.quants.length?"":"Keine GGUF-Dateien in diesem Repo gefunden."),y.quants.length&&$(y.repo,D,"")}catch(y){g(`Fehler: ${y}`)}}function _(){const a=f.trim();a&&(M(y=>y.some(D=>D.repo===a)?y:[{repo:a,downloads:0,likes:0},...y]),b(""),p(a))}const Q=G?r.find(a=>(a.role||"").toLowerCase()===G):void 0;async function ce(a){if((C==null?void 0:C.fit.level)==="too_tight"&&!R){E(!0);return}T(y=>({...y,[a]:"Starte…"}));try{await K("/api/models/install",{method:"POST",body:JSON.stringify({repo:a,quant:o,role:G||void 0,jinja:!0})}),T(y=>({...y,[a]:"Download läuft"})),E(!1)}catch{T(D=>({...D,[a]:"Fehler"}))}}const xe=a=>{var D;const y=((D=a.split("/").pop())==null?void 0:D.toLowerCase().replace(/-gguf$/i,""))||"";return y.length>3&&r.some(U=>U.name.toLowerCase().includes(y))},me=a=>a==="perfect"?"text-emerald-400 border-emerald-500/40 bg-emerald-500/10":a==="marginal"?"text-amber-400 border-amber-500/40 bg-amber-500/10":"text-red-400 border-red-500/40 bg-red-500/10";return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(ye,{className:"absolute left-3 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx("input",{value:h,onChange:a=>n(a.target.value),onKeyDown:a=>a.key==="Enter"&&H(),"aria-label":"HuggingFace durchsuchen",type:"search",spellCheck:!1,placeholder:"HuggingFace durchsuchen (z.B. Qwen Coder, Llama-3.1, gemma)…",className:"w-full h-10 pl-9 pr-3 rounded-xl border border-border/60 bg-background/40 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"})]}),e.jsx("button",{onClick:H,className:"h-10 px-5 rounded-xl bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all cursor-pointer",children:"Suchen"})]}),e.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:Bt.map(a=>e.jsxs("button",{onClick:()=>te(a),className:w("flex items-center gap-1.5 rounded-full px-3 py-1.5 text-[11px] font-semibold transition-all cursor-pointer border",z===a.key?"bg-primary/15 text-primary border-primary/30":"border-border/50 text-muted-foreground hover:text-foreground hover:border-border"),children:[a.key==="popular"&&e.jsx(it,{className:"h-3 w-3"}),a.label]},a.key))}),v?e.jsx("div",{className:"text-xs text-muted-foreground py-10 text-center",children:"Lade GGUF-Modelle von HuggingFace…"}):e.jsxs("div",{className:"space-y-2",children:[x.map(a=>{const y=c===a.repo,D=xe(a.repo),U=a.repo.includes("/")?a.repo.split("/")[0]:"—",l=a.repo.split("/").pop();return e.jsxs("div",{className:w("mc-card-sm",y?"border-primary/40 shadow-lg shadow-primary/5":"border-border/50 hover:border-primary/30"),children:[e.jsxs("button",{onClick:()=>p(a.repo),className:"w-full flex items-center gap-3 p-3.5 text-left cursor-pointer",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-bold font-mono text-foreground truncate max-w-[280px]",title:a.repo,children:l}),D&&e.jsxs("span",{className:"flex items-center gap-1 text-[8px] font-bold text-emerald-400 uppercase tracking-wider bg-emerald-500/10 border border-emerald-500/20 px-1.5 py-0.5 rounded",children:[e.jsx(Y,{className:"h-2.5 w-2.5"})," installiert"]})]}),e.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-3 mt-0.5 font-mono",children:[e.jsx("span",{children:U}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ne,{className:"h-3 w-3"})," ",Ae(a.downloads)]}),a.likes>0&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ct,{className:"h-3 w-3"})," ",Ae(a.likes)]})]})]}),y?e.jsx(Ee,{className:"h-4 w-4 text-muted-foreground shrink-0"}):e.jsx(De,{className:"h-4 w-4 text-muted-foreground shrink-0"})]}),y&&e.jsx("div",{className:"border-t border-border/30 p-3.5 space-y-3",children:B.length===0?e.jsx("div",{className:"text-[11px] text-muted-foreground font-mono",children:S||"Lade Quants…"}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Quant"}),e.jsx("select",{value:o,onChange:u=>{i(u.target.value),$(a.repo,u.target.value,G)},"aria-label":"Quantisierung",className:"h-8 rounded-lg border border-border/60 bg-background/40 px-2 text-xs text-foreground font-semibold outline-none",children:B.map(u=>e.jsx("option",{value:u,className:"bg-popover text-foreground",children:u},u))}),e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground ml-1",children:"Rolle"}),e.jsxs("select",{value:G,onChange:u=>{A(u.target.value),$(a.repo,o,u.target.value)},"aria-label":"Rolle",title:"Optional — bestimmt Auto-Konfiguration + setup-bewussten Kontext",className:"h-8 rounded-lg border border-border/60 bg-background/40 px-2 text-xs text-foreground font-semibold outline-none",children:[e.jsx("option",{value:"",className:"bg-popover text-foreground",children:"keine"}),Gt.map(u=>e.jsx("option",{value:u,className:"bg-popover text-foreground",children:u},u))]}),e.jsx("button",{onClick:()=>ce(a.repo),disabled:!!I[a.repo]&&I[a.repo]==="Download läuft",className:w("h-8 px-3.5 ml-auto rounded-lg text-xs font-semibold transition-all cursor-pointer flex items-center gap-1.5",R?"bg-red-500 text-white hover:opacity-90":"bg-primary text-primary-foreground hover:opacity-90"),children:I[a.repo]?I[a.repo]:R?e.jsxs(e.Fragment,{children:[e.jsx(re,{className:"h-3.5 w-3.5"})," OOM — trotzdem laden"]}):e.jsxs(e.Fragment,{children:[e.jsx(ne,{className:"h-3.5 w-3.5"})," Herunterladen"]})})]}),C&&e.jsxs("div",{className:w("flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border px-3 py-2 text-[11px] font-medium",me(C.fit.level)),children:[e.jsx("span",{className:"font-bold uppercase tracking-wide",children:C.fit.text}),e.jsxs("span",{className:"font-mono opacity-90",children:["~",C.params_b,"B · ~",C.fit.req_gb," GB / ",C.sys_ram_gb," GB · ~",C.fit.tps," t/s"]}),C.fit.level!=="too_tight"?e.jsxs("span",{className:"font-mono opacity-80",children:["ctx → ",(C.assigned_ctx/1024).toFixed(0),"k"]}):e.jsx("span",{className:"opacity-90",children:"— passt nicht, würde beim Laden abstürzen (OOM)."})]}),Q&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-[11px] text-amber-400",children:[e.jsx(re,{className:"h-3.5 w-3.5 mt-0.5 shrink-0"}),e.jsxs("span",{children:["Rolle ",e.jsxs("strong",{children:["„",G,'"']})," hält aktuell ",e.jsx("strong",{children:Q.name.split("/").pop()})," — wird beim Download übernommen."]})]})]})})]},a.repo)}),!x.length&&!v&&e.jsx("div",{className:"text-xs text-muted-foreground py-10 text-center",children:S||"Keine Ergebnisse."})]}),e.jsxs("div",{className:"border-t border-border/30 pt-4 flex flex-col sm:flex-row gap-2 items-stretch sm:items-center",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground shrink-0",children:"Direkt:"}),e.jsx("input",{value:f,onChange:a=>b(a.target.value),onKeyDown:a=>a.key==="Enter"&&_(),"aria-label":"Repository oder URL direkt eingeben",spellCheck:!1,placeholder:"org/repo oder HF-URL (z.B. unsloth/Qwen2.5-Coder-7B-Instruct-GGUF)",className:"flex-1 h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground font-mono"}),e.jsx("button",{onClick:_,className:"h-9 px-4 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer whitespace-nowrap",children:"Laden"})]})]})}const Et={fast:{title:"Schnelles Alltags-Hirn",desc:"Schnelle MoE-Antworten für Chat, Zusammenfassungen und alltägliche Aufgaben.",icon:ie},heavy:{title:"Schweres Reasoning",desc:"Große Modelle für komplexe Logik, Mathematik und tiefgründiges Planen.",icon:le},coder:{title:"Coden & Entwicklung",desc:"Autovervollständigung, Refactoring und Codegenerierung direkt in deiner IDE.",icon:be},vision:{title:"Bilder & Vision",desc:"Verarbeitet Bilder, Screenshots und visuelle Diagramme in multimodalen Chats.",icon:Be},hermes:{title:"Lucys Hirn (Agent)",desc:"Lucys dauer-warmes Agent-Hirn mit Tool-Calling — bleibt ko-resident, lädt nie kalt nach.",icon:lt},scout:{title:"Multimodal-Allrounder",desc:"Multimodaler Allrounder für schnelle Antworten, Übersetzungen und Alltag.",icon:at},kritiker:{title:"Kritisches Prüf-Hirn",desc:"Schärfer Blick für Fehler, Schwachstellen und Sicherheitslücken — denkt skeptisch, bevor du deployst.",icon:qe},reranker:{title:"Gedächtnis-Sortierer",desc:"Sortiert und gewichtet gespeicherte Fakten nach Relevanz — damit die richtige Info sofort da ist.",icon:ye}};function qt(){const{data:t,isLoading:r,error:h}=et(),{data:n}=de(),{data:x}=tt(),M=(n==null?void 0:n.models)??[],v=h?String(h):"",[d,S]=N.useState({}),[g,z]=N.useState({}),[m,f]=N.useState("recommended");async function b(c,L,B,s){S(o=>({...o,[c]:"Starte..."}));try{await K("/api/models/install",{method:"POST",body:JSON.stringify({repo:c,role:L,quant:B,jinja:s})}),S(o=>({...o,[c]:"Download läuft"}))}catch{S(i=>({...i,[c]:"Fehler"}))}}return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex mc-card-sm p-1 w-fit",children:[["recommended","Empfohlen"],["browse","Stöbern & Suchen"]].map(([c,L])=>e.jsx("button",{onClick:()=>f(c),className:w("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide transition-all cursor-pointer",m===c?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:L},c))}),m==="browse"?e.jsx(Dt,{}):r?e.jsx("div",{className:"text-xs text-muted-foreground py-12 text-center",children:"Analysiere Hardware und suche passende GGUF-Empfehlungen…"}):v||!t?e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Empfehlungsdienst temporär nicht erreichbar (",v,")."]}):e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground bg-background/25 border border-border/40 p-4 rounded-xl flex flex-col sm:flex-row sm:items-center justify-between gap-3 shadow-sm",children:[e.jsxs("div",{children:["Modell-Registry geladen für ",e.jsxs("span",{className:"text-foreground font-bold",children:[t.sys_ram_gb," GB"]})," System-RAM."]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(ht,{className:"h-3.5 w-3.5 text-primary fill-primary/20"}),e.jsx("span",{children:"Empfehlungen sind automatisch auf deine Box-Hardware optimiert."})]})]}),e.jsx("div",{className:"grid gap-6 md:grid-cols-2",children:t.categories.map(c=>{const L=Et[c.role]||{title:c.title||c.role,desc:"Spezifisches Modell für diese Systemrolle.",icon:ot},B=L.icon,s=M.find(k=>k.role===c.role||(k.aliases||[]).includes(c.role)),o=x==null?void 0:x.model_list.find(k=>k.role===c.role),i=c.models.find(k=>k.repo===c.recommended)||c.models[0];if(!i)return null;const G=d[i.repo],A=c.models.filter(k=>k.repo!==c.recommended),C=!!g[c.role];return e.jsxs("div",{className:w("mc-card p-5 flex flex-col justify-between gap-5",s?"border-border/60":"border-primary/20 shadow-primary/5"),children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center text-primary shadow-sm shrink-0",children:e.jsx(B,{className:"h-5.5 w-5.5"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-bold tracking-tight text-foreground",children:L.title}),e.jsxs("span",{className:"text-[9px] font-mono text-muted-foreground uppercase bg-background/50 px-1.5 py-0.5 rounded border border-border/30 inline-block mt-0.5",children:["Rolle: ",c.role]})]})]}),s?e.jsxs("span",{className:"flex items-center gap-1.5 text-[9px] font-bold text-emerald-400 uppercase tracking-wider bg-emerald-500/10 border border-emerald-500/20 px-2.5 py-1 rounded-lg",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"Aktiviert"]}):e.jsx("span",{className:"text-[9px] font-bold text-primary/70 uppercase tracking-wider bg-primary/10 border border-primary/20 px-2.5 py-1 rounded-lg",children:"Frei"})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:L.desc}),e.jsx("div",{className:"p-3.5 rounded-xl bg-background/35 border border-border/30 space-y-2.5",children:s?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-muted-foreground/60",children:"Aktive GGUF-Belegung"}),e.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:s.name,children:s.name.split("/").pop()}),e.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2",children:[e.jsxs("span",{children:["Größe: ",ue(s.size_bytes||0)]}),e.jsx("span",{children:"•"}),e.jsxs("span",{children:["Quant: ",s.quant||"GGUF"]})]})]}):e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-primary/80",children:"Empfohlenes Modell"}),e.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:i.name,children:i.name}),e.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 flex-wrap",children:[e.jsxs("span",{children:["Ersteller: ",i.author]}),e.jsx("span",{children:"•"}),e.jsxs("span",{children:["Quant: ",i.quant]})]}),e.jsx("div",{className:"flex items-center gap-1.5 pt-0.5",children:e.jsx(kt,{fit:i.fit})})]})}),e.jsx("div",{className:"pt-1",children:s?o?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"text-[9px] font-semibold text-amber-400 flex items-center gap-1.5",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping shrink-0"}),e.jsxs("span",{children:["Bessere Version in der Registry: ",o.repo.split("/").pop()]})]}),e.jsxs("button",{onClick:()=>b(o.repo,c.role,o.repo===i.repo&&i.quant||"Q4_K_M",i.caps.tools!=="no"),disabled:!!d[o.repo],className:"h-8 w-full flex items-center justify-center gap-1.5 rounded-lg bg-amber-500 text-black text-xs font-bold hover:bg-amber-400 disabled:opacity-50 transition-all cursor-pointer shadow-md shadow-amber-500/10",children:[e.jsx(ne,{className:"h-3.5 w-3.5"}),d[o.repo]||"Auf neue Version aktualisieren"]})]}):e.jsxs("div",{className:"h-8 flex items-center justify-center gap-1.5 text-[10px] font-bold text-emerald-400 uppercase tracking-wide bg-emerald-500/5 border border-emerald-500/10 rounded-lg select-none",children:[e.jsx(Y,{className:"h-4 w-4"})," Auf neuestem Stand"]}):e.jsxs("button",{onClick:()=>b(i.repo,c.role,i.quant||"Q4_K_M",i.caps.tools!=="no"),disabled:!!G,className:w("h-8 w-full flex items-center justify-center gap-1.5 rounded-lg text-xs font-bold transition-all cursor-pointer border",G?"border-primary/40 bg-primary/5 text-primary":"bg-primary text-primary-foreground hover:opacity-90 shadow-md shadow-primary/10"),children:[e.jsx(ne,{className:"h-3.5 w-3.5"}),G||"Optimales Modell einsetzen"]})})]}),A.length>0&&e.jsxs("div",{className:"border-t border-border/20 pt-3",children:[e.jsxs("button",{onClick:()=>z(k=>({...k,[c.role]:!C})),className:"flex items-center gap-1.5 text-[10px] text-muted-foreground/80 hover:text-foreground transition-colors cursor-pointer",children:[C?e.jsx(Ee,{className:"h-3 w-3"}):e.jsx(De,{className:"h-3 w-3"}),e.jsxs("span",{children:["Alternative Empfehlungen anzeigen (",A.length,")"]})]}),C&&e.jsx("div",{className:"mt-2.5 space-y-2 max-h-36 overflow-y-auto pr-1 scrollbar-thin",children:A.map(k=>e.jsxs("div",{className:"p-2 rounded-lg bg-background/25 border border-border/20 flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-mono font-bold text-foreground truncate",title:k.name,children:k.name}),e.jsxs("div",{className:"text-[9px] text-muted-foreground flex items-center gap-1.5 mt-0.5",children:[e.jsxs("span",{children:["Quant: ",k.quant]}),e.jsx("span",{children:"•"}),e.jsx("span",{children:k.fit.text})]})]}),e.jsx("button",{onClick:()=>b(k.repo,c.role,k.quant||"Q4_K_M",k.caps.tools!=="no"),disabled:!!d[k.repo],className:"h-6 px-2.5 rounded bg-background/40 hover:bg-background/80 border border-border/40 text-[9px] font-bold text-foreground transition-all cursor-pointer shrink-0 disabled:opacity-50",children:d[k.repo]||"Installieren"})]},k.repo))})]})]},c.role)})})]})]})}const Kt=[{id:"werkbank",label:"Werkbank"},{id:"routing",label:"Routing & Warm-Set"},{id:"discover",label:"Modelle finden"}];function Tt(){const[t,r]=N.useState("werkbank");return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Modell-Manager"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Modelle verwalten, das Lane-Routing einstellen und Neues von HuggingFace holen."})]}),e.jsx("div",{className:"flex mc-card-sm p-1 self-start",children:Kt.map(h=>e.jsx("button",{onClick:()=>r(h.id),className:w("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",t===h.id?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:h.label},h.id))})]}),e.jsx(ft,{}),e.jsxs("div",{className:"transition-all duration-300",children:[t==="werkbank"&&e.jsx(Lt,{}),t==="routing"&&e.jsxs("div",{className:"space-y-5",children:[e.jsx(vt,{}),e.jsx(wt,{})]}),t==="discover"&&e.jsx(qt,{})]})]})}export{Tt as ModelsView}; +Trotzdem exklusiv laden?`,()=>p(l));return}p(l)}async function Q(l){const u=m.find(j=>j.name===l);if(u&&b(u.role)){v("Geschützt",`„${F(u.role).label}" ist lebenswichtig und bleibt geladen.`);return}try{await K(`/api/models/${encodeURIComponent(l)}/unload`,{method:"POST"}),E()}catch(j){v("Fehler",`Entladen fehlgeschlagen: ${j.message||j}`)}}async function ce(l,u){try{const j=await K(`/api/models/${encodeURIComponent(u)}/role`,{method:"POST",body:JSON.stringify({role:l||null})});E(),j!=null&&j.warning&&v("Rolle gesetzt — Hinweis",j.warning)}catch(j){v("Fehler",`Rolle zuweisen fehlgeschlagen: ${j.message||j}`)}}async function xe(l,u){let j=null;try{j=await K(`/api/models/${encodeURIComponent(l)}/ctx/auto`)}catch{}const O=j?`Optimal für dein Setup: ${(j.ctx/1024).toFixed(0)}k (${j.ctx}). »Auto« trägt diesen Wert ein.`:"Gib die gewünschte Kontextlänge in Tokens an:";S("Kontextlänge anpassen",O,String(u||32768),async Z=>{if(Z)try{await K(`/api/models/${encodeURIComponent(l)}/ctx`,{method:"POST",body:JSON.stringify({ctx:parseInt(Z,10)})}),E()}catch(ve){v("Fehler",`Kontext setzen fehlgeschlagen: ${ve.message||ve}`)}},void 0,j?{autoValue:String(j.ctx),autoLabel:`Auto (${(j.ctx/1024).toFixed(0)}k)`}:void 0)}async function me(l){const u=m.find(j=>j.name===l);if(u&&b(u.role)){v("Geschützt",`„${F(u.role).label}" kann nicht gelöscht werden. Weise die Rolle zuerst einem anderen Modell zu.`);return}d("Modell löschen?",`„${X(l)}" und alle GGUF-Dateien unwiderruflich von der Box löschen?`,async()=>{try{await K(`/api/models/${encodeURIComponent(l)}`,{method:"DELETE"}),s===l&&o(null),E()}catch(j){v("Fehler",`Löschen fehlgeschlagen: ${j.message||j}`)}})}return h?e.jsx("div",{className:"py-16 text-center text-xs text-muted-foreground",children:"Werkbank wird geladen …"}):n?e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Gateway oder Engine nicht erreichbar (",String(n),")."]}):e.jsxs("div",{className:"space-y-5",children:[e.jsx(_t,{running:I,capacityBytes:te,realUsedBytes:W,selected:s,onSelect:o}),e.jsxs("div",{className:"grid gap-5 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.3fr)]",children:[e.jsxs("div",{className:"mc-card p-4",children:[e.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(ye,{className:"pointer-events-none absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground/60"}),e.jsx("input",{value:i,onChange:l=>$(l.target.value),placeholder:"Modell suchen …",className:"h-8 w-full rounded-lg border border-border/40 bg-background/40 pl-8 pr-2 text-xs text-foreground placeholder:text-muted-foreground/50 focus:border-primary/50 focus:outline-none"})]}),e.jsx("div",{className:"flex rounded-lg border border-border/40 bg-background/30 p-0.5",children:["all","in_use"].map(l=>e.jsx("button",{onClick:()=>C(l),className:w("rounded-md px-2 py-1 text-[9px] font-bold uppercase transition-all cursor-pointer",A===l?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:l==="all"?"Alle":"In Benutzung"},l))})]}),e.jsx("div",{className:"max-h-[60vh] space-y-1.5 overflow-y-auto scrollbar-thin pr-1",children:H.length===0?e.jsx("div",{className:"rounded-xl border border-dashed border-border/50 p-8 text-center text-xs text-muted-foreground",children:"Keine Modelle."}):H.map(l=>{const u=f.includes(l.name),j=s===l.name,O=Ke(l.name),Z=ae(l.role);return e.jsxs("button",{onClick:()=>o(l.name),className:w("flex w-full items-center gap-2.5 rounded-xl border p-2.5 text-left transition-all cursor-pointer",j?"border-primary/60 bg-primary/10":"border-border/40 bg-background/20 hover:border-primary/30 hover:bg-background/40"),children:[e.jsx("span",{className:w("flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border text-[10px] font-bold",O.color),children:O.initial}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate font-mono text-xs font-semibold text-foreground",children:X(l.name)}),e.jsxs("div",{className:"mt-0.5 flex items-center gap-1.5",children:[l.role&&e.jsx("span",{className:w("h-2 w-2 rounded-sm",Z.dot)}),e.jsx("span",{className:"text-[10px] text-muted-foreground",children:l.role?F(l.role).short:"keine Rolle"}),e.jsxs("span",{className:"text-[10px] text-muted-foreground/50",children:["· ",ee(l.size_bytes)]})]})]}),u?e.jsxs("span",{className:"flex shrink-0 items-center gap-1 text-[9px] font-bold uppercase text-emerald-400",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"warm"]}):l.incomplete?e.jsx("span",{className:"shrink-0 text-[9px] font-bold uppercase text-amber-400",children:"⚠ fehlt"}):e.jsx("span",{className:"shrink-0 text-[9px] font-semibold uppercase text-muted-foreground/50",children:"bereit"})]},l.name)})})]}),e.jsx("div",{className:"mc-card p-5",children:G?e.jsx(zt,{m:G,warm:f.includes(G.name),expert:z,protectedRole:b(G.role),coresident:B(G.name),onLoad:()=>_(G.name),onUnload:()=>Q(G.name),onRole:l=>ce(l,G.name),onCtx:()=>xe(G.name,G.ctx),onSpec:()=>R(G),onDelete:()=>me(G.name)}):e.jsxs("div",{className:"flex h-full min-h-[16rem] flex-col items-center justify-center gap-2 text-center text-muted-foreground",children:[e.jsx(Ze,{className:"h-8 w-8 opacity-40"}),e.jsx("p",{className:"text-sm font-semibold",children:"Links ein Modell wählen"}),e.jsx("p",{className:"text-xs",children:"Dann verwaltest du es hier — laden, Rolle, Kontext, löschen."})]})})]}),k&&e.jsx(St,{model:k,onClose:()=>R(null),onChanged:E}),g]})}function zt({m:t,warm:r,expert:h,protectedRole:n,coresident:x,onLoad:M,onUnload:v,onRole:d,onCtx:S,onSpec:g,onDelete:z}){const m=Ke(t.name),f=r&&n;return e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("span",{className:w("flex h-10 w-10 shrink-0 items-center justify-center rounded-xl border text-sm font-bold",m.color),children:m.initial}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h2",{className:"break-all font-mono text-sm font-bold text-foreground",children:X(t.name)}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[t.role?e.jsx(he,{role:t.role}):e.jsx("span",{className:"rounded border border-dashed border-border/50 px-1.5 py-0.5 text-[10px] text-muted-foreground",children:"keine Rolle"}),n&&e.jsxs("span",{className:"rounded bg-background/40 px-1.5 py-0.5 text-[10px] text-muted-foreground",title:"Lebenswichtig — geschützt",children:[e.jsx(nt,{className:"mr-0.5 inline h-3 w-3"}),"geschützt"]}),x&&e.jsxs("span",{className:"rounded border border-fuchsia-500/30 bg-fuchsia-500/10 px-1.5 py-0.5 text-[10px] font-bold uppercase text-fuchsia-300",children:[e.jsx(le,{className:"mr-0.5 inline h-3 w-3"}),"Ko-resident"]}),r&&e.jsxs("span",{className:"flex items-center gap-1 text-[10px] font-bold uppercase text-emerald-400",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"warm"]})]})]})]}),e.jsxs("button",{onClick:r?v:M,disabled:t.incomplete&&!r||f,className:w("flex h-11 w-full items-center justify-center gap-2 rounded-xl border text-sm font-bold transition-all cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",r?"border-amber-500/40 bg-amber-500/10 text-amber-300 hover:bg-amber-500/20":"border-primary/40 bg-primary/10 text-primary hover:bg-primary/20"),title:f?`„${F(t.role).label}" bleibt geladen (geschützt).`:void 0,children:[r?e.jsx(pt,{className:"h-4 w-4"}):e.jsx(Je,{className:"h-4 w-4"}),f?"🔒 bleibt geladen":r?"Entladen":"Ins Warm-Set laden"]}),e.jsxs("div",{className:"rounded-xl border border-border/30 bg-background/20 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:[e.jsx("span",{children:"Rolle"}),n&&e.jsx("span",{className:"normal-case font-medium tracking-normal text-muted-foreground/70",children:"🔒 lebenswichtig — zum Tausch die Rolle woanders zuweisen"})]}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsx(ze,{active:!t.role,onClick:()=>d(""),dot:"bg-slate-400",label:"keine",disabled:n}),je.map(b=>e.jsx(ze,{active:t.role===b.role,onClick:()=>d(b.role),dot:ae(b.role).dot,label:b.short,disabled:n&&t.role!==b.role},b.role))]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsx(At,{icon:fe,label:"Größe",value:ee(t.size_bytes)}),e.jsxs("button",{onClick:S,className:"group flex items-center gap-2 rounded-lg border border-border/30 bg-background/20 p-2.5 text-left transition-colors hover:border-primary/40 cursor-pointer",children:[e.jsx(ut,{className:"h-4 w-4 text-primary/80"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:"Kontext · ändern"}),e.jsx("div",{className:"font-semibold text-foreground",children:Xe(t.ctx)})]})]})]}),e.jsxs("div",{className:"rounded-xl border border-border/30 bg-background/20 p-3",children:[e.jsxs("div",{className:"mb-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:"Beschleuniger"}),h&&e.jsxs("button",{onClick:g,className:w("flex h-6 items-center gap-1 rounded-lg border px-2 text-[9px] font-bold uppercase transition-colors cursor-pointer",t.spec_active?"border-emerald-500/30 text-emerald-400 hover:bg-emerald-500/10":t.spec_draft_model?"border-amber-500/30 text-amber-400 hover:bg-amber-500/10":"border-border/40 text-muted-foreground hover:bg-accent"),children:[e.jsx(ie,{className:"h-3 w-3"})," Spec"]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[t.spec_active&&e.jsx(se,{tone:"emerald",label:"Spec-Decoding aktiv"}),!t.spec_active&&t.spec_draft_model&&e.jsx(se,{tone:"amber",label:"Spec inaktiv"}),t.prompt_cache&&e.jsx(se,{tone:"cyan",label:"Prompt-Cache"}),t.parallel_slots>1&&e.jsx(se,{tone:"violet",label:`${t.parallel_slots} Slots`}),!t.spec_active&&!t.spec_draft_model&&!t.prompt_cache&&t.parallel_slots<=1&&e.jsx("span",{className:"text-[11px] text-muted-foreground/60",children:"keine aktiv"})]})]}),e.jsx("div",{className:"flex flex-wrap gap-1",children:e.jsx(Mt,{caps:t.capabilities})}),e.jsxs("button",{onClick:z,disabled:n,className:w("mt-auto flex h-9 items-center justify-center gap-1.5 rounded-lg border text-xs font-semibold transition-colors",n?"cursor-not-allowed border-border/30 text-muted-foreground/40":"border-red-500/30 text-red-400 hover:bg-red-500/10 cursor-pointer"),children:[e.jsx(Ye,{className:"h-3.5 w-3.5"})," ",n?"geschützt — nicht löschbar":"Modell löschen"]})]})}function ze({active:t,onClick:r,dot:h,label:n,disabled:x}){return e.jsxs("button",{onClick:r,disabled:x,title:x?"Gesperrt: dieses Modell hält eine lebenswichtige Rolle.":void 0,className:w("flex items-center gap-1.5 rounded-lg border px-2 py-1 text-[10px] font-semibold transition-all",x?"cursor-not-allowed opacity-40 border-border/40 bg-background/20 text-muted-foreground":t?"cursor-pointer border-primary/60 bg-primary/15 text-foreground":"cursor-pointer border-border/40 bg-background/20 text-muted-foreground hover:border-primary/30"),children:[e.jsx("span",{className:w("h-2 w-2 rounded-sm",h)}),n,t&&e.jsx(Y,{className:"h-3 w-3 text-primary"})]})}function At({icon:t,label:r,value:h}){return e.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-border/30 bg-background/20 p-2.5",children:[e.jsx(t,{className:"h-4 w-4 text-primary/80"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[9px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:r}),e.jsx("div",{className:"font-semibold text-foreground",children:h})]})]})}function se({tone:t,label:r}){const h={emerald:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",amber:"bg-amber-500/10 text-amber-400 border-amber-500/20",cyan:"bg-cyan-500/10 text-cyan-400 border-cyan-500/20",violet:"bg-violet-500/10 text-violet-400 border-violet-500/20"}[t];return e.jsx("span",{className:w("rounded border px-1.5 py-0.5 text-[10px] font-semibold",h),children:r})}const Bt=[{key:"popular",label:"Beliebt",q:""},{key:"coder",label:"Coder",q:"coder"},{key:"vision",label:"Vision",q:"vision"},{key:"reasoning",label:"Reasoning",q:"reasoning"},{key:"small",label:"Klein (≤4B)",q:"3B"}],$t=["fast","heavy","coder","vision","hermes","scout"],Gt=new Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1});function Ae(t){return Gt.format(t)}function Dt(){const{data:t}=de(),r=(t==null?void 0:t.models)??[],[h,n]=N.useState(""),[x,M]=N.useState([]),[v,d]=N.useState(!1),[S,g]=N.useState(""),[z,m]=N.useState("popular"),[f,b]=N.useState(""),[c,L]=N.useState(null),[B,s]=N.useState([]),[o,i]=N.useState("Q4_K_M"),[$,A]=N.useState(""),[C,k]=N.useState(null),[R,E]=N.useState(!1),[I,T]=N.useState({});async function W(a){d(!0),g("");try{const y=await K(`/api/hf/search?q=${encodeURIComponent(a)}`);M(y.results),y.results.length||g("Keine Ergebnisse.")}catch(y){g(`Suche fehlgeschlagen: ${y}`)}finally{d(!1)}}N.useEffect(()=>{W("")},[]);function te(a){m(a.key),n(""),W(a.q)}function H(){m(""),W(h)}async function G(a,y,D){E(!1);try{const U=await K(`/api/fit?params_b=0&quant=${encodeURIComponent(y)}&ctx=8192&name=${encodeURIComponent(a)}&role=${encodeURIComponent(D)}`);k(U)}catch{k(null)}}async function p(a){if(c===a){L(null);return}L(a),s([]),k(null),A(""),E(!1),g("Analysiere Repository…");try{const y=await K(`/api/hf/quants?repo=${encodeURIComponent(a)}`);s(y.quants);const D=y.quants.includes("Q4_K_M")?"Q4_K_M":y.quants[0]||"Q4_K_M";i(D),g(y.quants.length?"":"Keine GGUF-Dateien in diesem Repo gefunden."),y.quants.length&&G(y.repo,D,"")}catch(y){g(`Fehler: ${y}`)}}function _(){const a=f.trim();a&&(M(y=>y.some(D=>D.repo===a)?y:[{repo:a,downloads:0,likes:0},...y]),b(""),p(a))}const Q=$?r.find(a=>(a.role||"").toLowerCase()===$):void 0;async function ce(a){if((C==null?void 0:C.fit.level)==="too_tight"&&!R){E(!0);return}T(y=>({...y,[a]:"Starte…"}));try{await K("/api/models/install",{method:"POST",body:JSON.stringify({repo:a,quant:o,role:$||void 0,jinja:!0})}),T(y=>({...y,[a]:"Download läuft"})),E(!1)}catch{T(D=>({...D,[a]:"Fehler"}))}}const xe=a=>{var D;const y=((D=a.split("/").pop())==null?void 0:D.toLowerCase().replace(/-gguf$/i,""))||"";return y.length>3&&r.some(U=>U.name.toLowerCase().includes(y))},me=a=>a==="perfect"?"text-emerald-400 border-emerald-500/40 bg-emerald-500/10":a==="marginal"?"text-amber-400 border-amber-500/40 bg-amber-500/10":"text-red-400 border-red-500/40 bg-red-500/10";return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(ye,{className:"absolute left-3 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx("input",{value:h,onChange:a=>n(a.target.value),onKeyDown:a=>a.key==="Enter"&&H(),"aria-label":"HuggingFace durchsuchen",type:"search",spellCheck:!1,placeholder:"HuggingFace durchsuchen (z.B. Qwen Coder, Llama-3.1, gemma)…",className:"w-full h-10 pl-9 pr-3 rounded-xl border border-border/60 bg-background/40 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground"})]}),e.jsx("button",{onClick:H,className:"h-10 px-5 rounded-xl bg-primary text-primary-foreground text-xs font-semibold hover:opacity-90 transition-all cursor-pointer",children:"Suchen"})]}),e.jsx("div",{className:"flex items-center gap-2 flex-wrap",children:Bt.map(a=>e.jsxs("button",{onClick:()=>te(a),className:w("flex items-center gap-1.5 rounded-full px-3 py-1.5 text-[11px] font-semibold transition-all cursor-pointer border",z===a.key?"bg-primary/15 text-primary border-primary/30":"border-border/50 text-muted-foreground hover:text-foreground hover:border-border"),children:[a.key==="popular"&&e.jsx(it,{className:"h-3 w-3"}),a.label]},a.key))}),v?e.jsx("div",{className:"text-xs text-muted-foreground py-10 text-center",children:"Lade GGUF-Modelle von HuggingFace…"}):e.jsxs("div",{className:"space-y-2",children:[x.map(a=>{const y=c===a.repo,D=xe(a.repo),U=a.repo.includes("/")?a.repo.split("/")[0]:"—",l=a.repo.split("/").pop();return e.jsxs("div",{className:w("mc-card-sm",y?"border-primary/40 shadow-lg shadow-primary/5":"border-border/50 hover:border-primary/30"),children:[e.jsxs("button",{onClick:()=>p(a.repo),className:"w-full flex items-center gap-3 p-3.5 text-left cursor-pointer",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-bold font-mono text-foreground truncate max-w-[280px]",title:a.repo,children:l}),D&&e.jsxs("span",{className:"flex items-center gap-1 text-[8px] font-bold text-emerald-400 uppercase tracking-wider bg-emerald-500/10 border border-emerald-500/20 px-1.5 py-0.5 rounded",children:[e.jsx(Y,{className:"h-2.5 w-2.5"})," installiert"]})]}),e.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-3 mt-0.5 font-mono",children:[e.jsx("span",{children:U}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ne,{className:"h-3 w-3"})," ",Ae(a.downloads)]}),a.likes>0&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(ct,{className:"h-3 w-3"})," ",Ae(a.likes)]})]})]}),y?e.jsx(Ee,{className:"h-4 w-4 text-muted-foreground shrink-0"}):e.jsx(De,{className:"h-4 w-4 text-muted-foreground shrink-0"})]}),y&&e.jsx("div",{className:"border-t border-border/30 p-3.5 space-y-3",children:B.length===0?e.jsx("div",{className:"text-[11px] text-muted-foreground font-mono",children:S||"Lade Quants…"}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground",children:"Quant"}),e.jsx("select",{value:o,onChange:u=>{i(u.target.value),G(a.repo,u.target.value,$)},"aria-label":"Quantisierung",className:"h-8 rounded-lg border border-border/60 bg-background/40 px-2 text-xs text-foreground font-semibold outline-none",children:B.map(u=>e.jsx("option",{value:u,className:"bg-popover text-foreground",children:u},u))}),e.jsx("label",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground ml-1",children:"Rolle"}),e.jsxs("select",{value:$,onChange:u=>{A(u.target.value),G(a.repo,o,u.target.value)},"aria-label":"Rolle",title:"Optional — bestimmt Auto-Konfiguration + setup-bewussten Kontext",className:"h-8 rounded-lg border border-border/60 bg-background/40 px-2 text-xs text-foreground font-semibold outline-none",children:[e.jsx("option",{value:"",className:"bg-popover text-foreground",children:"keine"}),$t.map(u=>e.jsx("option",{value:u,className:"bg-popover text-foreground",children:u},u))]}),e.jsx("button",{onClick:()=>ce(a.repo),disabled:!!I[a.repo]&&I[a.repo]==="Download läuft",className:w("h-8 px-3.5 ml-auto rounded-lg text-xs font-semibold transition-all cursor-pointer flex items-center gap-1.5",R?"bg-red-500 text-white hover:opacity-90":"bg-primary text-primary-foreground hover:opacity-90"),children:I[a.repo]?I[a.repo]:R?e.jsxs(e.Fragment,{children:[e.jsx(re,{className:"h-3.5 w-3.5"})," OOM — trotzdem laden"]}):e.jsxs(e.Fragment,{children:[e.jsx(ne,{className:"h-3.5 w-3.5"})," Herunterladen"]})})]}),C&&e.jsxs("div",{className:w("flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border px-3 py-2 text-[11px] font-medium",me(C.fit.level)),children:[e.jsx("span",{className:"font-bold uppercase tracking-wide",children:C.fit.text}),e.jsxs("span",{className:"font-mono opacity-90",children:["~",C.params_b,"B · ~",C.fit.req_gb," GB / ",C.sys_ram_gb," GB · ~",C.fit.tps," t/s"]}),C.fit.level!=="too_tight"?e.jsxs("span",{className:"font-mono opacity-80",children:["ctx → ",(C.assigned_ctx/1024).toFixed(0),"k"]}):e.jsx("span",{className:"opacity-90",children:"— passt nicht, würde beim Laden abstürzen (OOM)."})]}),Q&&e.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-[11px] text-amber-400",children:[e.jsx(re,{className:"h-3.5 w-3.5 mt-0.5 shrink-0"}),e.jsxs("span",{children:["Rolle ",e.jsxs("strong",{children:["„",$,'"']})," hält aktuell ",e.jsx("strong",{children:Q.name.split("/").pop()})," — wird beim Download übernommen."]})]})]})})]},a.repo)}),!x.length&&!v&&e.jsx("div",{className:"text-xs text-muted-foreground py-10 text-center",children:S||"Keine Ergebnisse."})]}),e.jsxs("div",{className:"border-t border-border/30 pt-4 flex flex-col sm:flex-row gap-2 items-stretch sm:items-center",children:[e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wider text-muted-foreground shrink-0",children:"Direkt:"}),e.jsx("input",{value:f,onChange:a=>b(a.target.value),onKeyDown:a=>a.key==="Enter"&&_(),"aria-label":"Repository oder URL direkt eingeben",spellCheck:!1,placeholder:"org/repo oder HF-URL (z.B. unsloth/Qwen2.5-Coder-7B-Instruct-GGUF)",className:"flex-1 h-9 rounded-lg border border-border/60 bg-background/40 px-3 text-xs outline-none focus:ring-1 focus:ring-primary/50 text-foreground font-mono"}),e.jsx("button",{onClick:_,className:"h-9 px-4 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold hover:border-primary/50 hover:bg-background/40 transition-all cursor-pointer whitespace-nowrap",children:"Laden"})]})]})}const Et={fast:{title:"Schnelles Alltags-Hirn",desc:"Schnelle MoE-Antworten für Chat, Zusammenfassungen und alltägliche Aufgaben.",icon:ie},heavy:{title:"Schweres Reasoning",desc:"Große Modelle für komplexe Logik, Mathematik und tiefgründiges Planen.",icon:le},coder:{title:"Coden & Entwicklung",desc:"Autovervollständigung, Refactoring und Codegenerierung direkt in deiner IDE.",icon:be},vision:{title:"Bilder & Vision",desc:"Verarbeitet Bilder, Screenshots und visuelle Diagramme in multimodalen Chats.",icon:Be},hermes:{title:"Lucys Hirn (Agent)",desc:"Lucys dauer-warmes Agent-Hirn mit Tool-Calling — bleibt ko-resident, lädt nie kalt nach.",icon:lt},scout:{title:"Multimodal-Allrounder",desc:"Multimodaler Allrounder für schnelle Antworten, Übersetzungen und Alltag.",icon:at},kritiker:{title:"Kritisches Prüf-Hirn",desc:"Schärfer Blick für Fehler, Schwachstellen und Sicherheitslücken — denkt skeptisch, bevor du deployst.",icon:qe},reranker:{title:"Gedächtnis-Sortierer",desc:"Sortiert und gewichtet gespeicherte Fakten nach Relevanz — damit die richtige Info sofort da ist.",icon:ye}};function qt(){const{data:t,isLoading:r,error:h}=et(),{data:n}=de(),{data:x}=tt(),M=(n==null?void 0:n.models)??[],v=h?String(h):"",[d,S]=N.useState({}),[g,z]=N.useState({}),[m,f]=N.useState("recommended");async function b(c,L,B,s){S(o=>({...o,[c]:"Starte..."}));try{await K("/api/models/install",{method:"POST",body:JSON.stringify({repo:c,role:L,quant:B,jinja:s})}),S(o=>({...o,[c]:"Download läuft"}))}catch{S(i=>({...i,[c]:"Fehler"}))}}return e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"flex mc-card-sm p-1 w-fit",children:[["recommended","Empfohlen"],["browse","Stöbern & Suchen"]].map(([c,L])=>e.jsx("button",{onClick:()=>f(c),className:w("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide transition-all cursor-pointer",m===c?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:L},c))}),m==="browse"?e.jsx(Dt,{}):r?e.jsx("div",{className:"text-xs text-muted-foreground py-12 text-center",children:"Analysiere Hardware und suche passende GGUF-Empfehlungen…"}):v||!t?e.jsxs("div",{className:"rounded-xl border border-red-500/20 bg-red-500/5 p-4 text-xs text-red-400",children:["Empfehlungsdienst temporär nicht erreichbar (",v,")."]}):e.jsxs("div",{className:"space-y-8",children:[e.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground bg-background/25 border border-border/40 p-4 rounded-xl flex flex-col sm:flex-row sm:items-center justify-between gap-3 shadow-sm",children:[e.jsxs("div",{children:["Modell-Registry geladen für ",e.jsxs("span",{className:"text-foreground font-bold",children:[t.sys_ram_gb," GB"]})," System-RAM."]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(ht,{className:"h-3.5 w-3.5 text-primary fill-primary/20"}),e.jsx("span",{children:"Empfehlungen sind automatisch auf deine Box-Hardware optimiert."})]})]}),e.jsx("div",{className:"grid gap-6 md:grid-cols-2",children:t.categories.map(c=>{const L=Et[c.role]||{title:c.title||c.role,desc:"Spezifisches Modell für diese Systemrolle.",icon:ot},B=L.icon,s=M.find(k=>k.role===c.role||(k.aliases||[]).includes(c.role)),o=x==null?void 0:x.model_list.find(k=>k.role===c.role),i=c.models.find(k=>k.repo===c.recommended)||c.models[0];if(!i)return null;const $=d[i.repo],A=c.models.filter(k=>k.repo!==c.recommended),C=!!g[c.role];return e.jsxs("div",{className:w("mc-card p-5 flex flex-col justify-between gap-5",s?"border-border/60":"border-primary/20 shadow-primary/5"),children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 rounded-xl bg-primary/10 border border-primary/20 flex items-center justify-center text-primary shadow-sm shrink-0",children:e.jsx(B,{className:"h-5.5 w-5.5"})}),e.jsxs("div",{children:[e.jsx("h3",{className:"text-sm font-bold tracking-tight text-foreground",children:L.title}),e.jsxs("span",{className:"text-[9px] font-mono text-muted-foreground uppercase bg-background/50 px-1.5 py-0.5 rounded border border-border/30 inline-block mt-0.5",children:["Rolle: ",c.role]})]})]}),s?e.jsxs("span",{className:"flex items-center gap-1.5 text-[9px] font-bold text-emerald-400 uppercase tracking-wider bg-emerald-500/10 border border-emerald-500/20 px-2.5 py-1 rounded-lg",children:[e.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"}),"Aktiviert"]}):e.jsx("span",{className:"text-[9px] font-bold text-primary/70 uppercase tracking-wider bg-primary/10 border border-primary/20 px-2.5 py-1 rounded-lg",children:"Frei"})]}),e.jsx("p",{className:"text-xs text-muted-foreground leading-relaxed",children:L.desc}),e.jsx("div",{className:"p-3.5 rounded-xl bg-background/35 border border-border/30 space-y-2.5",children:s?e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-muted-foreground/60",children:"Aktive GGUF-Belegung"}),e.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:s.name,children:s.name.split("/").pop()}),e.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2",children:[e.jsxs("span",{children:["Größe: ",ue(s.size_bytes||0)]}),e.jsx("span",{children:"•"}),e.jsxs("span",{children:["Quant: ",s.quant||"GGUF"]})]})]}):e.jsxs("div",{className:"space-y-1.5",children:[e.jsx("div",{className:"text-[9px] font-bold uppercase tracking-wider text-primary/80",children:"Empfohlenes Modell"}),e.jsx("div",{className:"text-xs font-mono font-bold text-foreground truncate",title:i.name,children:i.name}),e.jsxs("div",{className:"text-[10px] text-muted-foreground/80 flex items-center gap-2 flex-wrap",children:[e.jsxs("span",{children:["Ersteller: ",i.author]}),e.jsx("span",{children:"•"}),e.jsxs("span",{children:["Quant: ",i.quant]})]}),e.jsx("div",{className:"flex items-center gap-1.5 pt-0.5",children:e.jsx(kt,{fit:i.fit})})]})}),e.jsx("div",{className:"pt-1",children:s?o?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"text-[9px] font-semibold text-amber-400 flex items-center gap-1.5",children:[e.jsx("span",{className:"w-1.5 h-1.5 rounded-full bg-amber-400 animate-ping shrink-0"}),e.jsxs("span",{children:["Bessere Version in der Registry: ",o.repo.split("/").pop()]})]}),e.jsxs("button",{onClick:()=>b(o.repo,c.role,o.repo===i.repo&&i.quant||"Q4_K_M",i.caps.tools!=="no"),disabled:!!d[o.repo],className:"h-8 w-full flex items-center justify-center gap-1.5 rounded-lg bg-amber-500 text-black text-xs font-bold hover:bg-amber-400 disabled:opacity-50 transition-all cursor-pointer shadow-md shadow-amber-500/10",children:[e.jsx(ne,{className:"h-3.5 w-3.5"}),d[o.repo]||"Auf neue Version aktualisieren"]})]}):e.jsxs("div",{className:"h-8 flex items-center justify-center gap-1.5 text-[10px] font-bold text-emerald-400 uppercase tracking-wide bg-emerald-500/5 border border-emerald-500/10 rounded-lg select-none",children:[e.jsx(Y,{className:"h-4 w-4"})," Auf neuestem Stand"]}):e.jsxs("button",{onClick:()=>b(i.repo,c.role,i.quant||"Q4_K_M",i.caps.tools!=="no"),disabled:!!$,className:w("h-8 w-full flex items-center justify-center gap-1.5 rounded-lg text-xs font-bold transition-all cursor-pointer border",$?"border-primary/40 bg-primary/5 text-primary":"bg-primary text-primary-foreground hover:opacity-90 shadow-md shadow-primary/10"),children:[e.jsx(ne,{className:"h-3.5 w-3.5"}),$||"Optimales Modell einsetzen"]})})]}),A.length>0&&e.jsxs("div",{className:"border-t border-border/20 pt-3",children:[e.jsxs("button",{onClick:()=>z(k=>({...k,[c.role]:!C})),className:"flex items-center gap-1.5 text-[10px] text-muted-foreground/80 hover:text-foreground transition-colors cursor-pointer",children:[C?e.jsx(Ee,{className:"h-3 w-3"}):e.jsx(De,{className:"h-3 w-3"}),e.jsxs("span",{children:["Alternative Empfehlungen anzeigen (",A.length,")"]})]}),C&&e.jsx("div",{className:"mt-2.5 space-y-2 max-h-36 overflow-y-auto pr-1 scrollbar-thin",children:A.map(k=>e.jsxs("div",{className:"p-2 rounded-lg bg-background/25 border border-border/20 flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[10px] font-mono font-bold text-foreground truncate",title:k.name,children:k.name}),e.jsxs("div",{className:"text-[9px] text-muted-foreground flex items-center gap-1.5 mt-0.5",children:[e.jsxs("span",{children:["Quant: ",k.quant]}),e.jsx("span",{children:"•"}),e.jsx("span",{children:k.fit.text})]})]}),e.jsx("button",{onClick:()=>b(k.repo,c.role,k.quant||"Q4_K_M",k.caps.tools!=="no"),disabled:!!d[k.repo],className:"h-6 px-2.5 rounded bg-background/40 hover:bg-background/80 border border-border/40 text-[9px] font-bold text-foreground transition-all cursor-pointer shrink-0 disabled:opacity-50",children:d[k.repo]||"Installieren"})]},k.repo))})]})]},c.role)})})]})]})}const Kt=[{id:"werkbank",label:"Werkbank"},{id:"routing",label:"Routing & Warm-Set"},{id:"discover",label:"Modelle finden"}];function Ht(){const[t,r]=N.useState("werkbank");return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row justify-between sm:items-center gap-4",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-space font-bold tracking-tight bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text text-transparent",children:"Modell-Manager"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Modelle verwalten, das Lane-Routing einstellen und Neues von HuggingFace holen."})]}),e.jsx("div",{className:"flex mc-card-sm p-1 self-start",children:Kt.map(h=>e.jsx("button",{onClick:()=>r(h.id),className:w("rounded-lg px-4 py-1.5 text-xs font-semibold tracking-wide uppercase transition-all cursor-pointer",t===h.id?"bg-primary text-primary-foreground shadow-md shadow-primary/10":"text-muted-foreground hover:text-foreground"),children:h.label},h.id))})]}),e.jsx(ft,{}),e.jsxs("div",{className:"transition-all duration-300",children:[t==="werkbank"&&e.jsx(Lt,{}),t==="routing"&&e.jsxs("div",{className:"space-y-5",children:[e.jsx(vt,{}),e.jsx(wt,{})]}),t==="discover"&&e.jsx(qt,{})]})]})}export{Ht as ModelsView}; diff --git a/frontend/dist/assets/SectionLabel-gNRlDlbe.js b/frontend/dist/assets/SectionLabel-PIsOl-2s.js similarity index 93% rename from frontend/dist/assets/SectionLabel-gNRlDlbe.js rename to frontend/dist/assets/SectionLabel-PIsOl-2s.js index 60b8969..13bdfcf 100644 --- a/frontend/dist/assets/SectionLabel-gNRlDlbe.js +++ b/frontend/dist/assets/SectionLabel-PIsOl-2s.js @@ -1,4 +1,4 @@ -import{c as s,j as e}from"./index-BChEIiQl.js";/** +import{c as s,j as e}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/WissenView-Czc4UCXS.js b/frontend/dist/assets/WissenView-DIk50fMS.js similarity index 96% rename from frontend/dist/assets/WissenView-Czc4UCXS.js rename to frontend/dist/assets/WissenView-DIk50fMS.js index 518bfba..b899fbe 100644 --- a/frontend/dist/assets/WissenView-Czc4UCXS.js +++ b/frontend/dist/assets/WissenView-DIk50fMS.js @@ -1,4 +1,4 @@ -import{ar as y,r as x,g as L,j as e,L as v,S,ah as W,U as C,e as w,as as E}from"./index-BChEIiQl.js";import{F as M}from"./folder-open-CtWva2VF.js";const D={"":"Allgemein",traeume:"Träume",muster:"Muster","skill-kandidaten":"Skill-Kandidaten","skill-kandidaten/beauftragt":"Skill-Kandidaten · beauftragt","skill-kandidaten/verworfen":"Skill-Kandidaten · verworfen"};function T(){const{data:o,isLoading:h}=y(),[l,f]=x.useState(null),[d,r]=x.useState(null),[u,i]=x.useState(!1),[a,p]=x.useState(""),t=x.useMemo(()=>(o==null?void 0:o.files)??[],[o]),m=x.useMemo(()=>{const s=new Map;for(const n of t)s.set(n.name.toLowerCase(),n.path);return s},[t]),g=x.useMemo(()=>{if(!a.trim())return t;const s=a.toLowerCase();return t.filter(n=>n.title.toLowerCase().includes(s)||n.path.toLowerCase().includes(s))},[t,a]),b=x.useMemo(()=>{const s=[];for(const n of g){const c=s.find(k=>k.dir===n.dir);c?c.files.push(n):s.push({dir:n.dir,files:[n]})}return s.sort((n,c)=>n.dir===""?-1:c.dir===""?1:n.dir.localeCompare(c.dir))},[g]);x.useEffect(()=>{if(!l&&t.length){const s=t.find(n=>n.path.toLowerCase()==="index.md");f((s==null?void 0:s.path)??t[0].path)}},[t,l]),x.useEffect(()=>{l&&(i(!0),L(`/api/wissen/datei?pfad=${encodeURIComponent(l)}`).then(r).catch(()=>r({path:l,content:"*(Notiz nicht ladbar)*",mtime:0})).finally(()=>i(!1)))},[l]);const j=s=>{const n=m.get(s.toLowerCase());n&&f(n)};return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Wissen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was sich die Box nachts erschließt — Traum-Notizen, Muster und Skill-Ideen aus dem Wissens-Vault, verlinkt wie ein Wiki."})]}),o&&!o.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Der Wissens-Vault liegt auf der Box (~/wissens-vault) — im lokalen Dev-Modus nicht verfügbar."}),h&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(v,{className:"h-4 w-4 animate-spin"})," Vault wird geladen …"]}),(o==null?void 0:o.available)&&t.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-8 text-center text-xs text-muted-foreground",children:"Noch keine Notizen. Der nächtliche Traum (03:15) legt sie an — morgen früh steht hier die erste."}),t.length>0&&e.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row",children:[e.jsxs("aside",{className:"w-full shrink-0 space-y-3 lg:w-72",children:[e.jsxs("div",{className:"relative",children:[e.jsx("input",{value:a,onChange:s=>p(s.target.value),type:"search",placeholder:"Notizen durchsuchen…","aria-label":"Notizen durchsuchen",className:"h-9 w-full rounded-lg border border-border/60 bg-card/45 pl-8 pr-3 text-xs text-foreground outline-none focus:ring-1 focus:ring-primary/50"}),e.jsx(S,{className:"absolute left-2.5 top-2.5 h-3.5 w-3.5 text-muted-foreground"})]}),e.jsx("div",{className:"max-h-[70vh] space-y-3 overflow-y-auto pr-1 scrollbar-thin",children:b.map(({dir:s,files:n})=>e.jsxs("div",{children:[e.jsxs("p",{className:"mb-1 flex items-center gap-1 text-[10px] font-bold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(M,{className:"h-3 w-3"})," ",D[s]??s]}),e.jsx("div",{className:"space-y-0.5",children:n.map(c=>e.jsxs("button",{onClick:()=>f(c.path),className:w("flex w-full items-center gap-1.5 rounded-lg px-2 py-1.5 text-left text-xs transition-all cursor-pointer",l===c.path?"bg-primary/15 text-primary":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[e.jsx(W,{className:"h-3.5 w-3.5 shrink-0"}),e.jsx("span",{className:"truncate",title:c.title,children:c.name}),c.neu&&e.jsxs("span",{className:"ml-auto flex items-center gap-0.5 rounded bg-violet-500/15 px-1 py-0.5 text-[8px] font-bold uppercase text-violet-300",children:[e.jsx(C,{className:"h-2.5 w-2.5"}),"neu"]})]},c.path))})]},s||"__root"))})]}),e.jsx("div",{className:"min-w-0 flex-1 mc-card p-5",children:u?e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(v,{className:"h-4 w-4 animate-spin"})," Notiz wird geladen …"]}):d?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between border-b border-border/40 pb-2",children:[e.jsxs("span",{className:"flex items-center gap-1.5 font-mono text-[11px] text-muted-foreground",children:[e.jsx(E,{className:"h-3.5 w-3.5"})," ",d.path]}),d.mtime>0&&e.jsxs("span",{className:"text-[10px] text-muted-foreground/60",children:["Stand ",new Date(d.mtime*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"})]})]}),e.jsx(z,{text:d.content,onWikiLink:j,known:m})]}):null})]})]})}function z({text:o,onWikiLink:h,known:l}){const f=o.split(` +import{ao as y,r as x,g as L,j as e,L as v,S,af as W,R as C,e as w,ap as E}from"./index-Cejiqiju.js";import{F as M}from"./folder-open-B5JYx4j5.js";const D={"":"Allgemein",traeume:"Träume",muster:"Muster","skill-kandidaten":"Skill-Kandidaten","skill-kandidaten/beauftragt":"Skill-Kandidaten · beauftragt","skill-kandidaten/verworfen":"Skill-Kandidaten · verworfen"};function R(){const{data:o,isLoading:h}=y(),[l,f]=x.useState(null),[d,r]=x.useState(null),[u,i]=x.useState(!1),[a,p]=x.useState(""),t=x.useMemo(()=>(o==null?void 0:o.files)??[],[o]),m=x.useMemo(()=>{const s=new Map;for(const n of t)s.set(n.name.toLowerCase(),n.path);return s},[t]),g=x.useMemo(()=>{if(!a.trim())return t;const s=a.toLowerCase();return t.filter(n=>n.title.toLowerCase().includes(s)||n.path.toLowerCase().includes(s))},[t,a]),b=x.useMemo(()=>{const s=[];for(const n of g){const c=s.find(k=>k.dir===n.dir);c?c.files.push(n):s.push({dir:n.dir,files:[n]})}return s.sort((n,c)=>n.dir===""?-1:c.dir===""?1:n.dir.localeCompare(c.dir))},[g]);x.useEffect(()=>{if(!l&&t.length){const s=t.find(n=>n.path.toLowerCase()==="index.md");f((s==null?void 0:s.path)??t[0].path)}},[t,l]),x.useEffect(()=>{l&&(i(!0),L(`/api/wissen/datei?pfad=${encodeURIComponent(l)}`).then(r).catch(()=>r({path:l,content:"*(Notiz nicht ladbar)*",mtime:0})).finally(()=>i(!1)))},[l]);const j=s=>{const n=m.get(s.toLowerCase());n&&f(n)};return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Wissen"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Was sich die Box nachts erschließt — Traum-Notizen, Muster und Skill-Ideen aus dem Wissens-Vault, verlinkt wie ein Wiki."})]}),o&&!o.available&&e.jsx("div",{className:"rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-xs text-amber-300",children:"Der Wissens-Vault liegt auf der Box (~/wissens-vault) — im lokalen Dev-Modus nicht verfügbar."}),h&&e.jsxs("div",{className:"flex items-center gap-2 rounded-2xl border border-border/60 bg-card/30 p-6 text-xs text-muted-foreground",children:[e.jsx(v,{className:"h-4 w-4 animate-spin"})," Vault wird geladen …"]}),(o==null?void 0:o.available)&&t.length===0&&e.jsx("div",{className:"rounded-2xl border border-dashed border-border/60 bg-card/20 p-8 text-center text-xs text-muted-foreground",children:"Noch keine Notizen. Der nächtliche Traum (03:15) legt sie an — morgen früh steht hier die erste."}),t.length>0&&e.jsxs("div",{className:"flex flex-col gap-4 lg:flex-row",children:[e.jsxs("aside",{className:"w-full shrink-0 space-y-3 lg:w-72",children:[e.jsxs("div",{className:"relative",children:[e.jsx("input",{value:a,onChange:s=>p(s.target.value),type:"search",placeholder:"Notizen durchsuchen…","aria-label":"Notizen durchsuchen",className:"h-9 w-full rounded-lg border border-border/60 bg-card/45 pl-8 pr-3 text-xs text-foreground outline-none focus:ring-1 focus:ring-primary/50"}),e.jsx(S,{className:"absolute left-2.5 top-2.5 h-3.5 w-3.5 text-muted-foreground"})]}),e.jsx("div",{className:"max-h-[70vh] space-y-3 overflow-y-auto pr-1 scrollbar-thin",children:b.map(({dir:s,files:n})=>e.jsxs("div",{children:[e.jsxs("p",{className:"mb-1 flex items-center gap-1 text-[10px] font-bold uppercase tracking-wider text-muted-foreground/60",children:[e.jsx(M,{className:"h-3 w-3"})," ",D[s]??s]}),e.jsx("div",{className:"space-y-0.5",children:n.map(c=>e.jsxs("button",{onClick:()=>f(c.path),className:w("flex w-full items-center gap-1.5 rounded-lg px-2 py-1.5 text-left text-xs transition-all cursor-pointer",l===c.path?"bg-primary/15 text-primary":"text-muted-foreground hover:bg-accent hover:text-foreground"),children:[e.jsx(W,{className:"h-3.5 w-3.5 shrink-0"}),e.jsx("span",{className:"truncate",title:c.title,children:c.name}),c.neu&&e.jsxs("span",{className:"ml-auto flex items-center gap-0.5 rounded bg-violet-500/15 px-1 py-0.5 text-[8px] font-bold uppercase text-violet-300",children:[e.jsx(C,{className:"h-2.5 w-2.5"}),"neu"]})]},c.path))})]},s||"__root"))})]}),e.jsx("div",{className:"min-w-0 flex-1 mc-card p-5",children:u?e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(v,{className:"h-4 w-4 animate-spin"})," Notiz wird geladen …"]}):d?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 flex items-center justify-between border-b border-border/40 pb-2",children:[e.jsxs("span",{className:"flex items-center gap-1.5 font-mono text-[11px] text-muted-foreground",children:[e.jsx(E,{className:"h-3.5 w-3.5"})," ",d.path]}),d.mtime>0&&e.jsxs("span",{className:"text-[10px] text-muted-foreground/60",children:["Stand ",new Date(d.mtime*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"})]})]}),e.jsx(z,{text:d.content,onWikiLink:j,known:m})]}):null})]})]})}function z({text:o,onWikiLink:h,known:l}){const f=o.split(` `),d=[];let r=[],u=null;const i=a=>{r.length&&(d.push(e.jsx("ul",{className:"mb-3 ml-4 list-disc space-y-1",children:r},a)),r=[])};return f.forEach((a,p)=>{const t=`l${p}`;if(u!==null){a.trimEnd()==="```"?(d.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px] leading-relaxed text-foreground/85",children:u.join(` `)},t)),u=null):u.push(a);return}if(a.trimStart().startsWith("```")){i(t),u=[];return}const m=a.trimEnd();if(!m.trim()){i(t);return}const g=m.match(/^(#{1,4})\s+(.*)$/);if(g){i(t);const j=g[1].length,s=j===1?"text-lg font-bold mt-1 mb-3":j===2?"text-base font-bold mt-4 mb-2":"text-sm font-bold mt-3 mb-1.5";d.push(e.jsx("p",{className:w(s,"font-space text-foreground"),children:N(g[2],h,l,t)},t));return}const b=m.match(/^\s*[-*•]\s+(.*)$/);if(b){r.push(e.jsx("li",{className:"text-xs leading-relaxed text-foreground/85",children:N(b[1],h,l,t)},t));return}i(t),d.push(e.jsx("p",{className:"mb-2 text-xs leading-relaxed text-foreground/85",children:N(m,h,l,t)},t))}),i("end"),u!==null&&d.push(e.jsx("pre",{className:"mb-3 overflow-x-auto rounded-xl border border-border/50 bg-background/50 p-3 font-mono text-[11px]",children:u.join(` -`)},"code-end")),e.jsx("div",{className:"max-w-3xl",children:d})}function N(o,h,l,f){return o.split(/(\[\[[^\]]+\]\]|\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g).map((r,u)=>{const i=`${f}-${u}`,a=r.match(/^\[\[([^\]|]+)(?:\|([^\]]+))?\]\]$/);if(a){const p=a[1].trim(),t=(a[2]??a[1]).trim();return l.has(p.toLowerCase())?e.jsx("button",{onClick:()=>h(p),className:"rounded bg-primary/10 px-1 text-primary underline decoration-primary/40 underline-offset-2 hover:bg-primary/20 cursor-pointer",children:t},i):e.jsx("span",{className:"rounded bg-background/40 px-1 text-muted-foreground",title:"Notiz existiert (noch) nicht",children:t},i)}return r.startsWith("**")&&r.endsWith("**")?e.jsx("b",{className:"font-semibold text-foreground",children:r.slice(2,-2)},i):r.startsWith("*")&&r.endsWith("*")&&r.length>2?e.jsx("i",{children:r.slice(1,-1)},i):r.startsWith("`")&&r.endsWith("`")?e.jsx("code",{className:"rounded bg-background/50 px-1 font-mono text-[11px] text-teal-300",children:r.slice(1,-1)},i):e.jsx("span",{children:r},i)})}export{T as WissenView}; +`)},"code-end")),e.jsx("div",{className:"max-w-3xl",children:d})}function N(o,h,l,f){return o.split(/(\[\[[^\]]+\]\]|\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`)/g).map((r,u)=>{const i=`${f}-${u}`,a=r.match(/^\[\[([^\]|]+)(?:\|([^\]]+))?\]\]$/);if(a){const p=a[1].trim(),t=(a[2]??a[1]).trim();return l.has(p.toLowerCase())?e.jsx("button",{onClick:()=>h(p),className:"rounded bg-primary/10 px-1 text-primary underline decoration-primary/40 underline-offset-2 hover:bg-primary/20 cursor-pointer",children:t},i):e.jsx("span",{className:"rounded bg-background/40 px-1 text-muted-foreground",title:"Notiz existiert (noch) nicht",children:t},i)}return r.startsWith("**")&&r.endsWith("**")?e.jsx("b",{className:"font-semibold text-foreground",children:r.slice(2,-2)},i):r.startsWith("*")&&r.endsWith("*")&&r.length>2?e.jsx("i",{children:r.slice(1,-1)},i):r.startsWith("`")&&r.endsWith("`")?e.jsx("code",{className:"rounded bg-background/50 px-1 font-mono text-[11px] text-teal-300",children:r.slice(1,-1)},i):e.jsx("span",{children:r},i)})}export{R as WissenView}; diff --git a/frontend/dist/assets/book-open-2v7qByfb.js b/frontend/dist/assets/book-open-CWgPuOOr.js similarity index 90% rename from frontend/dist/assets/book-open-2v7qByfb.js rename to frontend/dist/assets/book-open-CWgPuOOr.js index b33b144..5ed2109 100644 --- a/frontend/dist/assets/book-open-2v7qByfb.js +++ b/frontend/dist/assets/book-open-CWgPuOOr.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-BChEIiQl.js";/** +import{c as a}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/chevron-down-DNDogRoC.js b/frontend/dist/assets/chevron-down-DNDogRoC.js new file mode 100644 index 0000000..bbcacdb --- /dev/null +++ b/frontend/dist/assets/chevron-down-DNDogRoC.js @@ -0,0 +1,6 @@ +import{c as o}from"./index-Cejiqiju.js";/** + * @license lucide-react v0.460.0 - ISC + * + * This source code is licensed under the ISC license. + * See the LICENSE file in the root directory of this source tree. + */const n=o("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);export{n as C}; diff --git a/frontend/dist/assets/circle-x-D8NCr-a2.js b/frontend/dist/assets/circle-x-BxATYeTa.js similarity index 89% rename from frontend/dist/assets/circle-x-D8NCr-a2.js rename to frontend/dist/assets/circle-x-BxATYeTa.js index 5acb876..5957f77 100644 --- a/frontend/dist/assets/circle-x-D8NCr-a2.js +++ b/frontend/dist/assets/circle-x-BxATYeTa.js @@ -1,4 +1,4 @@ -import{c}from"./index-BChEIiQl.js";/** +import{c}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/code-xml-owp4HQPY.js b/frontend/dist/assets/code-xml-BJe9mLlE.js similarity index 88% rename from frontend/dist/assets/code-xml-owp4HQPY.js rename to frontend/dist/assets/code-xml-BJe9mLlE.js index 5b62690..745ef29 100644 --- a/frontend/dist/assets/code-xml-owp4HQPY.js +++ b/frontend/dist/assets/code-xml-BJe9mLlE.js @@ -1,4 +1,4 @@ -import{c as e}from"./index-BChEIiQl.js";/** +import{c as e}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/copy-CRj5M_pY.js b/frontend/dist/assets/copy-g04tL7QX.js similarity index 90% rename from frontend/dist/assets/copy-CRj5M_pY.js rename to frontend/dist/assets/copy-g04tL7QX.js index c5b9289..ff99bdb 100644 --- a/frontend/dist/assets/copy-CRj5M_pY.js +++ b/frontend/dist/assets/copy-g04tL7QX.js @@ -1,4 +1,4 @@ -import{c}from"./index-BChEIiQl.js";/** +import{c}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/folder-open-CtWva2VF.js b/frontend/dist/assets/folder-open-B5JYx4j5.js similarity index 90% rename from frontend/dist/assets/folder-open-CtWva2VF.js rename to frontend/dist/assets/folder-open-B5JYx4j5.js index a572ede..3bd9705 100644 --- a/frontend/dist/assets/folder-open-CtWva2VF.js +++ b/frontend/dist/assets/folder-open-B5JYx4j5.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-BChEIiQl.js";/** +import{c as a}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/index-BJEqDXwz.css b/frontend/dist/assets/index-BJEqDXwz.css new file mode 100644 index 0000000..6dc89dd --- /dev/null +++ b/frontend/dist/assets/index-BJEqDXwz.css @@ -0,0 +1 @@ +/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-cyrillic-ext-300-normal-CgCALhwJ.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-300-normal-RId2JxDB.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-cyrillic-300-normal-BnqRxXuy.woff2)format("woff2"),url(/assets/inter-cyrillic-300-normal-LR1W_oT8.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-greek-ext-300-normal-l2DDyC6M.woff2)format("woff2"),url(/assets/inter-greek-ext-300-normal-DLbbeei1.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-greek-300-normal-DmGD3g_f.woff2)format("woff2"),url(/assets/inter-greek-300-normal-BrhSP0vQ.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-vietnamese-300-normal-Bdr24Bqb.woff2)format("woff2"),url(/assets/inter-vietnamese-300-normal-DDGmYYdT.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-latin-ext-300-normal-CPgO9Ksf.woff2)format("woff2"),url(/assets/inter-latin-ext-300-normal-Dp1L8vcn.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-latin-300-normal-BVlfKGgI.woff2)format("woff2"),url(/assets/inter-latin-300-normal-i8F0SvXL.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-cyrillic-400-normal-obahsSVq.woff2)format("woff2"),url(/assets/inter-cyrillic-400-normal-HOLc17fK.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2)format("woff2"),url(/assets/inter-greek-ext-400-normal-KugGGMne.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-greek-400-normal-B4URO6DV.woff2)format("woff2"),url(/assets/inter-greek-400-normal-q2sYcFCs.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-vietnamese-400-normal-DMkecbls.woff2)format("woff2"),url(/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-ext-400-normal-C1nco2VV.woff2)format("woff2"),url(/assets/inter-latin-ext-400-normal-77YHD8bZ.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-400-normal-C38fXH4l.woff2)format("woff2"),url(/assets/inter-latin-400-normal-CyCys3Eg.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-cyrillic-500-normal-BasfLYem.woff2)format("woff2"),url(/assets/inter-cyrillic-500-normal-CxZf_p3X.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-greek-ext-500-normal-C4iEst2y.woff2)format("woff2"),url(/assets/inter-greek-ext-500-normal-2j5mBUwD.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-greek-500-normal-BIZE56-Y.woff2)format("woff2"),url(/assets/inter-greek-500-normal-Xzm54t5V.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-vietnamese-500-normal-DOriooB6.woff2)format("woff2"),url(/assets/inter-vietnamese-500-normal-mJboJaSs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2)format("woff2"),url(/assets/inter-latin-ext-500-normal-BxGbmqWO.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-500-normal-Cerq10X2.woff2)format("woff2"),url(/assets/inter-latin-500-normal-BL9OpVg8.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-cyrillic-600-normal-CWCymEST.woff2)format("woff2"),url(/assets/inter-cyrillic-600-normal-4D_pXhcN.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2)format("woff2"),url(/assets/inter-greek-ext-600-normal-B8X0CLgF.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-greek-600-normal-plRanbMR.woff2)format("woff2"),url(/assets/inter-greek-600-normal-BZpKdvQh.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2)format("woff2"),url(/assets/inter-vietnamese-600-normal-BuLX-rYi.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2)format("woff2"),url(/assets/inter-latin-ext-600-normal-CIVaiw4L.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-600-normal-LgqL8muc.woff2)format("woff2"),url(/assets/inter-latin-600-normal-CiBQ2DWP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-cyrillic-700-normal-CjBOestx.woff2)format("woff2"),url(/assets/inter-cyrillic-700-normal-DrXBdSj3.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2)format("woff2"),url(/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-greek-700-normal-C3JjAnD8.woff2)format("woff2"),url(/assets/inter-greek-700-normal-BUv2fZ6O.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2)format("woff2"),url(/assets/inter-vietnamese-700-normal-BZaoP0fm.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2)format("woff2"),url(/assets/inter-latin-ext-700-normal-TidjK2hL.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-700-normal-Yt3aPRUw.woff2)format("woff2"),url(/assets/inter-latin-700-normal-BLAVimhd.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-vietnamese-400-normal-B7xT_GF5.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-400-normal-BIWiOVfw.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-ext-400-normal-CfP_5XZW.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-400-normal-DRPE3kg4.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2)format("woff2"),url(/assets/space-grotesk-latin-400-normal-BnQMeOim.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-vietnamese-500-normal-BmEvtly_.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-500-normal-BTqKIpxg.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-ext-500-normal-DUe3BAxM.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-500-normal-3dgZTiw9.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2)format("woff2"),url(/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-vietnamese-600-normal-DUi7WF5p.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-600-normal-D6zpsUhD.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-ext-600-normal-DxxdqCpr.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-600-normal-VcznFIpX.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2)format("woff2"),url(/assets/space-grotesk-latin-600-normal-BflQw4A9.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-vietnamese-700-normal-DMty7AZE.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-700-normal-Duxec5Rn.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-ext-700-normal-BQnZhY3m.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-700-normal-HVCqSBdx.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2)format("woff2"),url(/assets/space-grotesk-latin-700-normal-CwsQ-cCU.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbUAA8AAAAACOgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgFwRca1NUQVQAAAIMAAAARgAAAF7mY9MfY21hcAAAAlQAAABRAAAAdAyHCodnYXNwAAACqAAAAAgAAAAIAAAAEGdseWYAAAKwAAAB6QAAAl7g5OpvaGVhZAAABJwAAAA2AAAANhSQ8UNoaGVhAAAE1AAAAB8AAAAkAcoBImhtdHgAAAT0AAAAHgAAADofBAM2bG9jYQAABRQAAAAgAAAAIATcBZ9tYXhwAAAFNAAAABwAAAAgAIcCb25hbWUAAAVQAAABEgAAAoA4pV3kcG9zdAAABmQAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpinMDAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWABNDDdYAAAB42kXIIQIBARQFwHl/QQIkWXInUAANXMOBJCcTd+KIGCjMNViq9/H0CM6P/S0j0bOwUqh08iEb8kPTXn3RiMoYhD90Nwc3AAB42lXIRwHCQBAF0JceehWAlTjhjikUgAVQA4mJLbdk5neUqHBVKWSv3XF2VCnt3AyevkVZv+sxBBbbq/6HfFP4hEcYQgEK82v1aHQ5RTs3FRQAAAAAAQAB//8AD3jabZA1tNRAFEDfTGDdfXHI2QQnZJJvK5ngDs13Welwt/78CtcS7xvcrcHKbXCtceh+wgtu437nXRCgC4BY9AGOXOAFYNHR0dzoKCGju8gJ6xiZaF3DWqcPBiSV5i2geaCgAlAJ77ghgjfiLC7KojvOZEmSXS63emXr5W7lsTLtXFMkRmks4ly+cYOEnvO2YLDNANv+9oJwhkpAAJAcHPG/1RC2BERc1ZGGMxYVWDyVSjc0NMaZELUf9e4JhCgNB3b2PiJRctuqZ0WPR8zilxutN/ji97vUBYMAnGjtzxjtK3wrDaMABo+R9KjWwNRUMppwuWS1QdfFZCIlMF2TxDGuJJlYW7OmVlvD+sx86b1hvC/l8yXf2hqZ66xbZ80yWzyD9/fzGaRzA58+nSOzYC+gw9AP+vyNqUAUhoD4lSnputbgUFPJ5O9Y+ReWlxkrc96naX08b3zk/KORb+E+VjYPmH1M6+UHeVlDtCzzGZ9FY8YMA8gPMsQA0jqaGkHT6cYSdVwl7Zs9Wzx+DyWUugPujd03T52ikrUvM26kF9PIcRmycuDBKcd3XRhPDgtnQACINzJ3fVl1tTB++3bc2S7kyD3cCQIQNMcSKaY2YOciE+d0zFbGjps6u0PILTFlRZHNJfAFnfeHtgAAAAABAAAAAjYEro52gl8PPPUAAwPoAAAAANvSppoAAAAA29rQ8vk5/tQEkgP8AAAABgACAAAAAAAAeNpjYGRgYP7z7woDA8uGn5Z/+1kmAUVQAR8Ar8AG6gB42mOKYIgCYiMkrAzCUHEbJJoBikHgCkMPAPDwCFUAAAAAABoAOwBGAFEAbwB3AKkAsQDmAQkBCQEJAQkBFgEveNpjYGRgYOBn3MGQx7CFgQ3MQwBmBiYALRoB+HjajJADbgVQEEXPZ20bQW3bthvXbr8Vp4to1KV0AV1Wb9JvZzJvzhvcB6CQL0wYzHnAj6E/yAYaDeVBNlJsMAfZxCy/QTbTy3eQLdTzGWQr3VwGuZhx2v/ZAIVUB9kc0TSUKJ8f5FIRHGPjnWs+2MKt+MYzt1xwr/jIk3JymR0X0wzIXKo7VbXjFvfLn3lTtCn7qPoB6+yyzb3qy8pdq/6hrj11fMj7OFbtEY+mrlU/516rVFCdVobplw/JEjVaCaqIYlUiUzOaW9aa/Q1idmlPXZHbCagW/B10XwaRi06VuVdMf+9DnIov6rlF8yzhUXxC/4c66Uz48UepqEN9N/Tzt2RwjOljsUUfj581AbaEXsIAAHjaY2BiAIP/qQxGQIqRAR3wA7EKw0lGJgYbRmZGFkZWRjZGdgZmRg5GTkYuRm42x6Si1LJU9tK8TAMTR1cI7WoB5btB+Zas6Ym5uYlgnoGjAZNzEF9icmlJanJ+bpJecmJxKg9IxtjADMwBAKDtHJg=)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA9UABAAAAAALMAAAA7zAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnAbhWocghYGYD9TVEFUXgCDBBEICrBAp3ILgjgAATYCJAOEKAQgBYUAB4xODAcbIiYzo8LGAQCKfn4o/usELQ4rdj22ABHwitFYjZPqB3XSqAbV3C5dFkHYtTehxpeGbU+3+QexdERCkxARw9oNxAyetvXzdhdjl/7aiBiHgcqBjZywaGPSh4mNFccpF3DHlfyO8Jc/OiSe/kb7/iQYRAE23iScpHngiRRBFETNiZzQwc2HOllJ0fqXIjTY8RTYbDsklKc81hGPQcOJojhD/w80ll1aG/qiQErbzqOXjmvOVKd14tuv+Hxrlbarq/5xH7CiMPjaZXlrfNSp7uqaroZXvYAzc8A0kH2zs3MvHQBUORcJ2GG2cdFRgArh+Sgb7yOsjImpmgM0kq1FwhQCQzQ1Mt+j7at5GSAAIQAAKFLk6uMul4pIl4HIpEEUK0dUMiCMmhFWNoSDC+Exghgzi5i3hNhtN9qaINo+EbQj1tEIgJVLj5oebQ6I1/fyLMQYALYgALKS0yEOQCJG89uIiEPKyeRDVCmC0HgZ203jIg7kk6cHxfEKeBSDXtxd6n5yJzqpfSgXs9xMri1fPezlKMAVcCGEIhmwHiDRtJOyKfXkGsAVqI7ohIZs0rsDM/IU4fuQgkppCk2n+VRHy6mFttJ26t16mBjQPyIeYhvZnyXaiDSeaAYYXLiKPIm4uKh1zIq6gSRVU7WNPIV5v1PwBOy07RrrT6skwoEAtYyZeYgpBUABaDEmtPWRGP/UGABFgUUjchFXAghAgAYQpyPkCIBBoRwQgU/g3kQcyqTY9KSDItmjjmmkP+qJHG3C66hjXhtlhzwglI+1+4Be+T77hYQxxeNkCIDaKU+ANXhkMqePOVAQr7uwCjoBlCdtHQE8TNRd17//A/evkhSpkOMDA9VTmwAVAbLNlwMkoAG5qG2bWCYA/h3uEYgEhFqSmJJPpCIFbJHg1Aw5GaAujjqMzIHc8NrIHBEJJjGZP3cuFQZD9PvzLvZIaCIjBcTvEnIzTWiGjqdzlD+VAO2TUERK8smEi8lNNOguiAM9P6Gfo6bX8bD0v7V/cPwA/fDBi0BaGgUllWy5AATy6X9gAZqRVIsMLuVmqQ3QmrBbiFgTiWbxLDj1hBqINGLVYewQwySWWRyeQK1kXVJ0S2UjZ5WgXaIOSTodp42CUzqHXH226ZfJI4tXth45eqnslGdQgSGFhmmMyOdTbEyJcdv56U0pNa3MDJ1JVRZUmldtkcESglQkAOA8AMgAoBeYLQi+wDxAtwAAGlXJUdVLPLmo/TLRystE3SsqO29LUY0hsrtvBoXUw1Fy+XjIhqbj4rEZISsUysW1L68PlGRwyWImjWXjS9LFyUzjC7v7Z5hYsYKRhIH49EyxTJxutwOy2PRxp1R63SVViB+eNFYRywlEzJBIMDIl5Aa4PtbFOno416WTTkfVQwSPgIve66BCbLAuLmpCh59ln5uFECODSuUIJ2CJCCzDwbf+DV2/3yTtan5J1gEVuilcVASHULO9Bt+nWkIEHMMit5gOxaO4JpWjvdzOcySeFek9q4dy3jxi2BxHwsuuo2CzbQ+KJWxyqPUJljVCU3WT8JwlhZyLkKODRhZkQByHu8ERJIcGBexSmdwGPfMPbjnC0SwRUTyCAIwY4Mdr9zxJTKE5yp0mcEe9s3Umm/TZp2s4X/27cQUmhrd4Ow4ibPOTOxxT6w+S8ENc9AGE7meFOlNbuzjngJtzjFKcrMsxtf4G4UIPcNGXbvwNaeDea6+1L7kaYG+M13a455pruOh5Ww0HlhllPy/PsqS9Zr7ZV9cSLODAoItzBt2cI5i1brCxQRIcH6yr9wV5+XjhtlxuziH7LiqGTXVnkfCZntd1doJ5liyIno6X3GqH56fcnGNwE2IXvYhw5a/MJGsMns/TOawd+2HX5kOXxQZFsYkwmMetzGtqKDKSe+h9h7jX77z2Snb98vyL7rjmil1N3B/cCBfsC5rymA/ExpPlni/DL9i7eflmn66oxrSlMRRB/8Dbq/e/3aN95L3BG+dFd1d+uCVzKhQy5/+I77CmWJ/o2Hygaay8yleXU1c1NH2IpqHOYUtriyWHf3iZwxjZvNxm/Ti/O5+22uC3nVFxhu1wvQc08ZZ+nb5/9oBF38ehJXaKPt7K6/v34Ltqai21rbXDXI3BRDa+9XDSGp8gzZZarV2ag9v3RBzSNfFjU/M+uVduNDTsMNY0GCOHDU3O4dazeb3zFXjg0rlPuiV75+m+kzV3v5qc/PHdJ2j6pI+wDP+U7mFPW/uw23ltZemTVTo+3+KNa1yyuwdmfI41j1/yvbG3oaLR3G3Sd1xdrNOUfAou3jYw0z860D9jr+9sqU1IIHve9W56/fIEU2fztvaqHQ213trhKauqjXVmr/kFxP1m7bdCE88Plpb1m840l/VNQz72QvvMPlc5z9fvKPt1xBtXv9yVZ9nGmxscXiDfwGcI4LQ9duBaG7Nxjw2aWMuArp7In2qxObTwKfr40/iy/j34zhqeN59qHuZqDBaysQWiL/PZsk4cyV13mvbwWw7phfEDC/O+fm9/ram+sspcXxs5hm9pHjufSujGRbKXaTPmBAPPfMm45bau15+jR/bbBx80mR7sCth94rfB6Q6sngJcuO1v4a7Lu157ad9GKIlypuEea9GDnXs0IytDmZ2Rka2cVv4jrIHmaFZ3O9OWlWX7gLuRH1mMjsxE8VrEH/XNRrErsh61R6PD3e2d7dDsb3Z38k15W/kFkrwmHk+PhWNKx3nLMhHkSl5ZLMvHWPGPfwRB9AKr2QoSUb4qSlB18X715zkqwRI0G3lvUOptugtcID+tsKQForrC+pqxS4X1dcof21bf4OQcbZ2Le6y53kKao3rxNWE9f1a+S3t2tiIu5yej2d/W12RozBwrLh7LbDT0NkUDi+HBQPj0xIlAoKHFFxAMPB8Vce+KKo28Rq0SHV3LUk6MNLv35DMrCzVNmbxBeCGCKzMtu20y8f+SVD4h31Sosky03Upl9YJxzh+L0ZFANLR4LOpYj452tne145E/wok2e6JX/xBX/vH8WaFQojdWlrhzuOXjs1Zn3cCkT4qWSmZeqX/B4tciE4HBmUBZwGxtMDaqnCpdllPVaIzdNw9ZqfDU30ppYDgw2B+A5JP5L8bj4tgWoy/t6WRRcO2P8uFDakiP2fMWaviyaOYFr94gE0nEsXysWligOuHRC2TiH0XSJ/4WqQcjE4GxmUAocKlG+jECgZHFwGX8vabVzf8f4KQSi8Gp6laIdgV0q8OzbmjyaWdnW1MQXZoJDb7ZaEdzVzMoNQiAGESUwszDAIzTDIqSxGFoxoRZ/vTKM8CfyZ9V/ZAPfzZ/Ds4tMHm0dSxCkOPaNpKlK8/KwGQVCdzqbPDn1HKuiT8WHUnStEQYZB2TC6WJ6spymNIjBV7JK5lSs1C5qDoRSYBUSlgH31LlM7X5O4o8eBxrX3MDwtOG1iZdZ/NjXsu0gBJohRVmlQNfwVfQmsReAdZEAahljqkMaxLHg/gT+BONkwxcgT0CH/5k/pQrcCpMUYiGtPqbDGvVgALfitYyTHyI7iP25WqsSqAlstCbcmZ3k0PcRZlgbs0KCrwb7lImBTqQCCawVEpMWHur0DRm3+9sVAOK6UQiqESr8NaEtY8Vu86AIjK3KRZhXNwqD34Oc38umLZM7/33+38/uOj7///Z9yMAAHqAUtN3Bsa/l9rSiKVxlONqqbKozYWfYMRMRkicEE2FhIs4TuWQJL0RDNwCPy0hP1CbGAVY9Mb6W+DZ2p14CIQoIBjqGKpe6lOONhDJTUFBXMgZYOPct8C7Ffmf2jR2ksQ72U7f6SBu5gywoW8x2Qhy1APl1CZGAQ4ksGGD8loGsjY0UQKXmhdvpBboCNglmiU2XUCieL2dF1bDaTacoykaTjgFAhquyoFkiSk0LZyooeM7gQDVIlmNOwCPlICNKQpatkhBhUQJpdLCVwFqWj3FQ8sWeajTWbJiLeRJQlRmsyh1YLRZtAzVNr0dAoCqYN6wXLhzQGL8LY6mvwSAd1698ly88s2Xfwa7FbVA/wsgBhQAgABfG3dQHs2o/066DhB0wWo68NIlpR8Rtqkj9flbwtMc3oZyWoIn3n+L86o5vA1V8ng6L4C9+Ax3YgMBHN8Er4rV97ZRXgdo2vF244hH35wAzlOM0Y1BABGNnNCZ4UFNPID7U9KeSCgiP5EiDnMizejpExlFzj9RIM2BE2MU8pwgViH7TAQQSqpgnDuJJAk2kHIaYDNnhs+sFsvBuaf5DXMbXT9uwvLIbk49b4mBNm3JsEV+85YtKUHWb5rT5ywap9WpUZtWo6q5Fot8W89a0m4OaXOK2Ywat2KaD3NdRi1S/+eloldCT0fn1K5q61Mpa6eaNrKMB6WMQqn83IfXmTNv1eIRiaKj7aOsikMmoxej+EfqsmjOpFHDLnneylGLQxT66vnHnh/n12VXDN1Hw6/bcNpctWo3vrwApZvfrdEDiP8IzgPkeiYUoQlzDvYWB0cnZ6uLq5t7+aRk5I6TIFGS5IqkSJWWXjqFDEqZVLJky5FrG7W8quQrUEijSLESWtsz0tErVVa9chUqValmUMNoh1omZjxSM4s69Ro0atKspTe1smrLpl2HTl262dg5OLm4eezMw6tHrz79BgzyGarXsBGjxqJtJvhNmjJtxqw58xYsWrJsxS4Bu61aE7THXvvsFxJ2wEERhxx2xFHHrIs6fuE/r+1vm6/8jhhtDCwnASDGR1h4SGhYwEGU1Y/Xffk5G4u9XgIAYtxyGpZ5y9sDdNbyP142W5DgAhoE7i3q0c5x2vm9v24aZuNohdcxqSEAz8up00My03HSwmqPa8bMecG3Tjzb+f9EelEtg2vpzPeiIEEBwSA8IEDBwAE9F5Z6vQIQjAnLGTgWLO+uZTL/qwGEAYOAQpg3TefgwBCQgBDzqukKDBAOoU3KVtqIbBXK9XpEAAujuudkZN724kIGmrtVaS38ZZLrS9/4fsKMQhN3yXK5gvSBvJ2Y9/Nydbcvb0bm58+e3FhmGfGLJ9u7axl1F1LQTbaCeyrbu7wFCsorFgV4qnh+GUrWtaczqkSBB96AEeKRB94k2SyLuyw3qwrxeg3P5FNR1Av1Gsq2/ds6dPPkBAAA)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAASUABAAAAAACRAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3oLIAABNgIkAzoEIAWFHgeBFAwHG3AHKB4HzukrRjyF5Gb4kQ/B873d17mv8TWkoqUUGaHodJCtoqntw7m8tiPWyGkfWDU/IMpzVk4zAs9Czv3c7Os5NvKFG1Ht9vBVXySRZpJc4tTrbM3sTRFcLa3zVboKWRIoAksKSKgqUQWEwlSoqjp44V5J9/kjd0+Fi5xaFjwJArgBAIJgIAgCCAI4CdNMqGuYXYUKdADLAkAAJwl6iX0+bZqEm1AH0Hu9rvrJHwxQG1Q/gFYwWYbgTRWgwEESVzbmtjQAt3DXO7Tu/+9Q/KNKWhTCgZ8fQSWoL0CUUgTBjgL8iEAcce7YHBeA8ZvogieCnxI0BCVeACCAAhBD/oDcAdUPABSgAX4kBPBTwjCAjwYSCneiqF65LUo/qXdYFrRwTujtMrKm07plTbSqLQFAiHBN7E4DG5wkiGXhCYBNETh3K/AciHN69iFfQjFOr9EXQQAAQXRNszs8PR0OH4fDV/dwGe76CHdj1MQa11DXYGcfZ6+B1X0OfwjY+i7KpQ1w9d+1z3/HydCB1f3U8A0fRFv+0bXxPWrZu3d9Nn4UcbLs/QCXLH/j3PCKblKOiZxLOR78W9brPo7eGTLz/F27ZPmePQdCB1YP4nJU91o4gU9cy64L3c3SPu8GfDn6ZXD2cGmllVqSxtD5vCXHm5xaeHlnpffx7DcPvXog5NnjA//cPz2btsz3yf+0MI8ri33tuv7upNbYmW5STbosW8bYItV/SPzxvXC0KnpWnFdC91oojit5Lyo6WcJQ1YzwBYbi52ohJVpcxfcHBqsv0nFz8U74rzS6M7r0RVlXZ3jJC4G92O//7Lm78VOtnUx+aQxAzsqPnrRr1t9zDrezKePvZ027x+fGte4s4NXu7/jEp3G9cM1bICYgACbuETUUD5wmenGXA/IBpAKVrl0AEJ5cqr6Q89tGq+SpqkDfX2DtG+pZ9teuae0AX98c301CX179InyErnSG8WCiABB4HFbVrw/lpTdBIOk82nXbpHKoQGyBpUovAAD4XQA8ZTUCeBJHIpI0v0FRrgcnckV3ANckrwYJKXEihQfdSKPER6XeExmEeEMmSe6QBwWmkZdmSOSthhibgIkBlUYreBKd/0NeVAE9WAyEaQpH6KikDWlUVg43Jy2FOmaYlsZhDEGZXO3mWEyWHI6zuaJkMlcSQ9k4F+KidIiFyZItGDc7r1pUj6wP6zrWB0/fbeeFeHl4YOvETMNiM8Ny+7OO6Qh2wur20YVxFts5dlORdl5Kwd5utR7SRcxqX8RA5Ehacha76hg7c6yzNm/Xf6vOLNrv544lIEkWg7xWo/ItBAeIJEmt0XgBwgM8gTifoiiLJroYYooNTeziEKe4zOoR/wvIKp89hSr+6jFAqw/LaonjmZHSscMNg4iPlWpFrO1RN3zkMU+/xUP+JQ99TbvTl1Vg0gtirT6lbwYAAAA=)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbQAA8AAAAACMAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgF2hca1NUQVQAAAIMAAAAPQAAAEzpM8woY21hcAAAAkwAAABRAAAAdAyHCodnYXNwAAACoAAAAAgAAAAIAAAAEGdseWYAAAKoAAAB8AAAAl604cJFaGVhZAAABJgAAAA2AAAANhSS8UNoaGVhAAAE0AAAAB8AAAAkAcwBEGhtdHgAAATwAAAAHwAAADoe/QLmbG9jYQAABRAAAAAgAAAAIATcBZ9tYXhwAAAFMAAAABwAAAAgAIcCb25hbWUAAAVMAAABEwAAAmo0OV08cG9zdAAABmAAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpi/MLAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWADbPDjoAAAB42gXBsQ1AABQFwHsfiY5CYQBDaVVIlBL7mckA7kT0CpPCop79uIPz3q4MojUrSJePvNSKRlRGEH74hwYNAAAAeNpVyEcBwkAQBdCXHnoVgJU44Y4pFIAFUAOJiS23ZOZ3lKhwVSlkr91xdlQp7dwMnr5FWb/rMQQW26v+h3xT+IRHGEIBCvNr9Wh0OUU7NxUUAAAAAAEAAf//AA942mzQNZTUQAAG4H9mIDlbySoOt5I9HHZiL+vS4VDh7u40OFRo3+FQ464V7tbiUmHdJczicsm4fe/9YBgDEIc+BYOEeoArzUqyWSGkeQzZ6+wmfZwLot6nT1vVNM04oBlQ9AZoX3FHhh/gQR6Mp+JykKdUNSVJcu9T20/N73OrT3F/2qMw5vfWLp88SQL3rFE+3ygTrvv9BXaMqiCAkD3d2lr1ipagK4QqNDHjCuPBSCRqGGaQM+XLk0XrPX5GlaY1i54QD7nhvO/c3+Pp35mEHO58dN2fd6mEdgAYRrhfqEyfi7ei6AG0j6m6ohk8HQkrIUlKpQ1dj4dDEcZ1TY3HpDDpM3PZspkzl+lTqlbmZUYUy8o0LJtKSlOXLp3qnC9N1ieU7FWr7BIZPssuFm1hpt3BVBW/yPMPcwAUdEL8m6nqumbU1Eg4/Ceb+s2WpxrG1HKtnVKxcm9zolhWrkGbVN5RmqQJdGdpkj6ukGluzhTed7ULBRvkp4wAENVFUt1oNGrmaS2r8JcrCxfJjXWUUCo3yvMXXDlyhKrO3mhLj/qGhvoeLREyvvXpEYDgGutFDrFjYEDQ5PK1OcsWs15bt4JgM0uQe2LHAxCRHA9FeNoQnUS+Tsc7JkRXVV03JIZZJcBJRUdHxSmAAQCFZYU3AAEAAAACNgQJCtdkXw889QADA+gAAAAA29KmmgAAAADb2tDy+Tv+1ASSA/wAAAAGAAIAAAAAAAB42mNgZGBg/vPvCgMDy4af1n9rWSYBRVABHwCudAbaAHjaY4pgiAJibSQsC8WBQGyERDNAMQicZmgFAOeFB/4AAAAAGgA7AEYAUQBvAHcAqQCxAOYBCQEJAQkBCQEWAS942mNgZGBg4GfcwZDHsIWBDcxDAGYGJgAtGgH4eNqM0IFGQ2EUB/DfqqJMBZLAFUh0V0MoUBGllKQArHVtN9vu3HuH3iEAPUJP0cP0BD1D3D6zKQqHH9/5n885qHs1qza3iPfaenDNts/gGcs+gmcdeAuem+iZt+EleMGWx+Bl++Jv16jbDJ5Xtxa8om4peNUSbmT6WgbOlFp6Um2XEo9SI333EqmOrrKq0lDhQENDoS2XGioVYoVUTyyT62i4curCuUTpWK4lNVC4lBnI7Ez9dCeRK6TVa6Qp1rRnb0KHzh07/PfMG4mOkZ6W/JdUNM5FU7kTmaFn+Xj3SNNuVZFbXYnoj3nXcpkniXaVPzKqbpjJq86tH/fsSKuOkQextkzf1/Sx2KKPx/+aADN1XKsAeNpjYGIAg/+pDEZAipEBHfADsQrDSUYmBhtGZkYWRlZGNkZ2BmZGDkZORi5GbjbHpKLUslT20rxMAxNHVwjtagHlu0H5lqzpibm5iWCegaMBk3MQX2JyaUlqcn5ukl5yYnEqD0jG2MAMzAEAoO0cmA==)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAA/IABAAAAAALMwAAA9mAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnAbhXAcghYGYD9TVEFUTACDBBEICrA8p1ILgjgAATYCJAOEKAQgBYUeB4xODAcbFCYzA/aDkxp0RMXmTMH/IcEUkaXZhe7qAVQoRhtRmOhkzaUYXs3lyzTUlwptwwNGy28PLP/oZewn39g4Jjp8YusISWZ9eNpW788MNQMI7jZprgsqRiJ7imCBYlEWIBhgoWjj7uJGcddednnRIQ/fX77n7i8NtLf08UwEQl3jq59XJCShypU4lMyz3Hb3X0omkAkZCYVNhfN/c3Pmf1nJcDqnj2VE35fYAx+8WYIJhZj4znn1Qbjp9+f4Pab0wOi7JSECzG0o6DRWu/MBgfu/NdPu5O8cUssKSJ1wUyTjq6oWZic7nUsKuIEySsIkzXvdKzArVNkCwvP1lQCgK4yu0BVWFp6vrWVm/6Nt7H82JGhxDyAteCbHZLRdzTsxJqNEUxb+txHysoxjwQzz2p8tU5uFtC4RmcGouCRX3v1195cCAYgBAECRIWSIVNsQCiqEhh6RpxRRzogwaUTYdSCc3AivAcSQCcSkacSCBbQlcbQ9DqAddgyNAFiZilAX9c1OSB/6ZyYgxQCwDgGQoVQGIYAIRvVlRAiR7Ax+jsqKIDacjVExNGWA/MQLk8VzJshTmOztrVbySNyHVnaAiUVpcgdvmnh9FNeAYYXkMl4AqisEoDtIZK0zs6lsSM8yAboEhZ5CFVqD23kNfor49QgAGWwFBeRAIZRCLdigBbqPFSIF+ABeQAfotUU0g+rL1gCMOnSNn4S0PWEL5Nw2QBqyIVvBT2Fe9wCSYDa3QH3Vt4cSaWSAug+NT0JKDgAKQOMLa96EFIKf/gOUWDQiE3EFgAB4aACxikhFAAwKZZ8DgHeiRQixRghm5n4HrCOOSrQAtqJU3LzpFAr/6TAHnDo8QQgszNHZ77FXwgom85JfwQOqMC8Ae/gYkSsURQ1AgQgAQAutAAoAALCdA3gIkv619L//vwb0H8nVgjz+bwLUlFoDaPGQkfqBjQcpc4R8ODxDAPwurhVJMbRRa7ksFTJAUJERK+RXgDxDi8az0D39NBJmMjGZP5MWgyH5+mYXeZg0kZOdJEIu5k1OaIYW0Rnqv/S2DtQxKCIjOSRMLuKNDjpwIXDRE0Y407zODF3/W/ovnvbiAz6YIOC0nZKaVrpMADK9/g8sQDORaaLiVmpCNj+DsAUJUg1SNBKpxbESqyNRj2XB2IWvmkANITOe42zRZqt223RIZbdRi00cNmu1QTMlFwWnTH2y+Gh4pemWrkeGXlpddgjYKUgnRG9Ajn55huQbViCiyKhiY0qMKzSiwpRykyrFGE0jSCIFAJwLADkD0AtMDvBegHkHug0AoFGJVK2qhCXG61AIrWWr8aYYT2zhWkVVD6EX62dQyHJqVGLicdAyTQtFjJgVi1Olw0wdI6eouC1SZjvL3umikG5h3BSHrTOMQKpkUgQu/aGoVC5VKLOjXKBIrWSy2FqmlB+dTKAUcDwJE5TwBkbFnJ/rY92ss4dzXxKbV1/T9hAJvBUu+bwOaq/XWDeXTEKvBMv+HYDYtSMXHI8lErBlDv1FvCF2yDfJcie3f1oWe+wCtb9HCZdshHBIfLC9FrNf60J4HGMKYkfC5TJ+lSNHd3NdZ5dNZ96o6OG8lOvpt5IcR3r2z61suaFBNQmrT0wrCXkvwKkNWenURddyk4+u1FuSiQRtRvQxxhEfxFo411PBvfbTQ1aCPSbA0yIczRIJRXEEQyYS4ocX/of1WiiyaY7SI3Z54u6pUe8m+30ZXB4f13V23XbupYoeLhwa5QqcRIKRdhwtDjdHX7sj8SSWqhgd2s25/B7OuTu4WLdz9FgQLtG55HhMlbFN/J5rrmGPXQWwZOVVLnn31VevgnPrfKt+IsHWeS5ZYVnCJZ9HIqem3z+aeAsjx92cK+7hnPGyVcarN47i9QctdADS864Xl+f2cM6E6W7jwyDLmWTlDNfAWRtN3eLupy1VuUoXA0Y9nDMwDm0aWWy8vkY6yniPTKmax1mFMSPTY+OyNo5gvPrMaWh+d6Yocqzobrh2BM+xO665gj12WQPSixm3X325OHNpey4+FiI+ViG4n+0mtkeDT6J77bK1vsLcqur1aMyF/u63T4xFx/V3vXhzq+VXFL7ypKwjPz+l4w2I7O1b21+wrz3XGCkzhqwKi3EwUtbo7w+YrLVVCuM8U1MAvrXrA5YXtX7tt5YAgoHTtp8WWF0eGHqRNVhUEjBba0v8h+bWaAV+c525JPC7Y/GXH19hrUyWl51baa04D0cn7Sp5qsze1VrwV7OyZHfSiyJTsZB0TFoerSjfW97MUD0Yt59oL3Kd4SNndY35u+St5yYTG575P1cpvWf3hskypgS/yB30tjjC3t6zi/Om4l/vjtYRYdOcpyc4FXQtRAZTN5h66vUdRpsxv/FMnSRHdzIYUWcg6vcHAtFOq8NmDm+l9r49tjYS2RI2O2zqvuITK5wVJxaXLhudxmXyUWt/K/Qiy0BJqb/mZHOpb6DEYg2VlPrMQWf+rheNhpOjo1zdfIfKkm6qMhsrTeZd234B2oMPB68Kyh+7OQi90BoqLvWbT6wt9YWKrdEKfLUnmkv9J2fxld9XeaLx3vKyZ40nVj6HfU/YdfKw79i9rQU1lSWHXuzBSScKzcZC3WPdlRcUl9xQeTh2aC6G9md6xnorxgsKd1f0dvkr/e7KQtNT/YHYFK691fHqc7z5WGnoTXPhm6HR0mnubTCFnYEJf7bfP+G0Ouw1k4QvuOw/rPsO97uflSxXKCuWS0rjlcrKePHlrYZWnH9AY9VoL03tATMa+kB/IGO1LLqakbF6sqvQHJhOLowm8cyBSHJmMonogaPJATpOOOweE/o99p7WWmfms1k7ns101lZHxtRBTefZMzIJkSsaNIZ6PReT/ohVl1uGg2e7ml3474DkI8kGTVtDZOe2TO2ONujXMk7TagqPrtGehm2f5GksNUqWOMsAC1JpXVMB8a265dwCWrecb+qjmcuF3pKhX/qEodrl80v5RPPuq9xGdUu9x3B2pnqrdvnB6Pe2BBpN7ap0nS5d1W7yN56QiB0YXTzQIWMqsVit2E1IJJ65TsI+KzVZbHmN6dJzkiro99t7Gqscyl/8nbTSUVWdjOByTedCSCZdr0kNW3MHcrWWxWmp1cp+yE6c98d0jC0lz4gdGXjRaLO92ffUHysp8pF3giv+eOcGjvsbGa11hkiW+PB5hmPdht38S67pmA9my+IbNmXULvS3VG07Lq136q4xnKz01oPhuZGJueMWrK31JofKklae1qlqKba7vg5yWnz3hzAuBOeGe+aQ8ur03gWhSNxQ3a/htqUcWzqxZsgptuwTcY3NaGzZLlTUKP8UW4zHk6oxHFFf9+F9MrFUwq/n52j06vNeGlmS9eyJU7A8ejA8F5uYO2Oh2i5K+uDcaxPRubvf6vbTxu85m5WnWqo9WbdqJUcOf3tSoNvCbrn09HJ9io6MjZ4Xny5qb2puApUNggl8KLVU1ACQTpMomG2HoEriLLkaejrIM8gzIx90Is8iz8bnjGNjNLQADHJcM4VcEXqXkOUhG7nIA5BvNJ+N9MKmYbuN05Tq5ZrWhcjqhmQ1IzdINamW1V4WrBhk29RG6FoDqfIt9wjkbNfvcq4XYOw1PHUJmquCZ03r3q6PSYNswHBLUJbKWbcHWUaWQZUN89AnAsi+EPxQrrIlEJnJIlUJM7HMcyIb2WdiwCYYhdkKuBjZ5gUYSBu2TYSNZEBQZ/dsLMogZAlqcMnlTpcszNOWC7LHy0oMpAd7JmhjAL8NbmRdayAVvDU+WxL5XR70AowhbINbkc7/KgLwLmPqTfwNBEUHCMBxmUhdQj6WUlkZlKnxu6pO1d9/v//3Q7rw+///2fMjAAB6oDb0HaH0b6GUJU8Y0eR64ojqUqm14Od8duRDHPKhFfZpiGupUNnzetjxdgRbK/5+l4IJ5JeSir8t3R+1IaFaa9AZitANXTvqUxavQ2TYeNmrYwP4det2tGuWgFpDejL9euYAfQfK28gGGIvbgQRcpXesotZIABUK/LoCMgX5tBzoUFiWbADfCNfMu98PsCghbdyeq6jgel07qoCDJjjsyIFY7MAODSYL1alQ9phCIRt3Ri4tbQVgE5dpkfhjGAkZMAWRYzPLNioh68Amvwwd4zGzodCRGaTlUjZqVdaBTSBDfJ6vWzoqG6lZhQKbFK6EAKgz5unB00f9KabfIE1/CcA764pzcPbvSz+DTdl+/xcAHwUACHwM3JK6lBL+d88HxAVfFHh3m1b6a8TWqK9qwVrRVjPaq6WqFSbUXqOOqrXXCkfN6KhWPgnndsCsD3CdZzHpoEPOX6wjz67FHso9aAqWW+ynpyeAc+VhtGMQgKDhk7pBGKUsAnBflEhlCV2wnFLxv2VpRo+QTFme7a4qy5cjUVaqjK2sjFJ+GTmx9FYE4M2hvDRKwSyXLSegQ9S4fhOazOT8YyJCPAaHHhY2o8XyD4iYNc7mNKNWTL+ICdO0Go+aiFqsGZM3ZyMDg2khMRGTZqrMfNN8LD/nqJhhBq3qNXN2r8LzGkBuHpMgYmkV2dpFChUKu08Vm1pVR9TBh+FjevSxMYZr7aNbRE1aFJsrvS1RcG1pOS9ocBJ8rTYx4yMuQj6W2WwW4VnSDJFz5tU/LKK0ZgWXCD2/qRmKRWuYh+47US6adX1FAOIfwbmATE+T2t4wLVab3eF0uT1eXz6MQKLQGCyuGE8gVpLIFCqNzmCy2Bwur54vEIrEEqlM3qxQqtTdSrU6vcFoMlusNjsz0q+WhVWdeg0aNfUmG7vmOrRwaNWmXYdOTi5uHl5deXXr0auPj19Av2C9QgYMGor2C4sYMWrMuAlRk6bETJsxa868BYuWxC3bbY+9EjhBUjTDcrwgSih88/y+eq/C13kHnXKhbTUDgISUCgNDoABXKLCL+2X27E/c2jAAQEKsFigx1qgLEbSeu+NyhcJGIECQNm9L567c3l7uZ5Wo3pkx4tYOhJANKw9dEonovRqVDb5dMKz515Ng+hci23hm4UQEs8eChwPB0BZYOBINbH3Erw0HECzUaokWa42eyGD3PIBIMBSOrfryBQ3G4oHQKi+/kEA0tuaDV40GP3h0+wuAAgXTKy0v5428xUDwksfm538juY9ni9fz2Ggy4iWLMz4qLklle7kcZvOLwy5bXp7fdYrRJlP4l5NDdZPiKVeLnJV7Ohg2VAs/aQwZNVtodX2jki6RU1e/j6GkgZbgAmmogZafuF4mZlb1t+COUyrcnF/CCZzS4MO/dX1T6QQAAAA=)format("woff2"),url(/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-500:oklch(62.7% .265 303.9);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--default-mono-font-family:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.bottom-3{bottom:calc(var(--spacing) * 3)}.-left-\[23px\]{left:-23px}.left-0{left:0}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.-z-50{z-index:-50}.z-0{z-index:0}.z-10{z-index:10}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[99\]{z-index:99}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-3\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-6{-webkit-line-clamp:6;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-5\.5{height:calc(var(--spacing) * 5.5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-44{height:calc(var(--spacing) * 44)}.h-64{height:calc(var(--spacing) * 64)}.h-\[120px\]{height:120px}.h-\[150px\]{height:150px}.h-\[480px\]{height:480px}.h-\[500px\]{height:500px}.h-\[calc\(100vh-8\.5rem\)\]{height:calc(100vh - 8.5rem)}.h-full{height:100%}.h-screen{height:100vh}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[28rem\]{max-height:28rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.min-h-\[16rem\]{min-height:16rem}.min-h-\[58vh\]{min-height:58vh}.min-h-\[300px\]{min-height:300px}.min-h-\[620px\]{min-height:620px}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-4\.5{width:calc(var(--spacing) * 4.5)}.w-5{width:calc(var(--spacing) * 5)}.w-5\.5{width:calc(var(--spacing) * 5.5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-60{width:calc(var(--spacing) * 60)}.w-72{width:calc(var(--spacing) * 72)}.w-fit{width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[16rem\]{max-width:16rem}.max-w-\[85vw\]{max-width:85vw}.max-w-\[250px\]{max-width:250px}.max-w-\[280px\]{max-width:280px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[2\.5rem\]{min-width:2.5rem}.min-w-\[2rem\]{min-width:2rem}.min-w-\[3ch\]{min-width:3ch}.min-w-\[680px\]{min-width:680px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.resize-none{resize:none}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.scrollbar-none{scrollbar-width:none}.scrollbar-thin{scrollbar-width:thin}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-7>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 7) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 7) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-border\/20>:not(:last-child)){border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/20>:not(:last-child)){border-color:color-mix(in oklab,hsl(var(--border)) 20%,transparent)}}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500) 25%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500) 40%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.border-border,.border-border\/20{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/20{border-color:color-mix(in oklab,hsl(var(--border)) 20%,transparent)}}.border-border\/30{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/30{border-color:color-mix(in oklab,hsl(var(--border)) 30%,transparent)}}.border-border\/40{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/40{border-color:color-mix(in oklab,hsl(var(--border)) 40%,transparent)}}.border-border\/50{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,hsl(var(--border)) 50%,transparent)}}.border-border\/60{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,hsl(var(--border)) 60%,transparent)}}.border-border\/70{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/70{border-color:color-mix(in oklab,hsl(var(--border)) 70%,transparent)}}.border-border\/80{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/80{border-color:color-mix(in oklab,hsl(var(--border)) 80%,transparent)}}.border-cyan-500\/20{border-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/20{border-color:color-mix(in oklab,var(--color-cyan-500) 20%,transparent)}}.border-cyan-500\/25{border-color:#00b7d740}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/25{border-color:color-mix(in oklab,var(--color-cyan-500) 25%,transparent)}}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/30{border-color:color-mix(in oklab,var(--color-cyan-500) 30%,transparent)}}.border-emerald-500\/10{border-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/10{border-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-fuchsia-500\/25{border-color:#e12afb40}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-500\/25{border-color:color-mix(in oklab,var(--color-fuchsia-500) 25%,transparent)}}.border-fuchsia-500\/30{border-color:#e12afb4d}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-500\/30{border-color:color-mix(in oklab,var(--color-fuchsia-500) 30%,transparent)}}.border-indigo-500\/25{border-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/25{border-color:color-mix(in oklab,var(--color-indigo-500) 25%,transparent)}}.border-indigo-500\/40{border-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/40{border-color:color-mix(in oklab,var(--color-indigo-500) 40%,transparent)}}.border-lime-500\/25{border-color:#80cd0040}@supports (color:color-mix(in lab,red,red)){.border-lime-500\/25{border-color:color-mix(in oklab,var(--color-lime-500) 25%,transparent)}}.border-neutral-700{border-color:var(--color-neutral-700)}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500) 30%,transparent)}}.border-pink-500\/25{border-color:#f6339a40}@supports (color:color-mix(in lab,red,red)){.border-pink-500\/25{border-color:color-mix(in oklab,var(--color-pink-500) 25%,transparent)}}.border-pink-500\/40{border-color:#f6339a66}@supports (color:color-mix(in lab,red,red)){.border-pink-500\/40{border-color:color-mix(in oklab,var(--color-pink-500) 40%,transparent)}}.border-primary,.border-primary\/20{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/20{border-color:color-mix(in oklab,hsl(var(--primary)) 20%,transparent)}}.border-primary\/25{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/25{border-color:color-mix(in oklab,hsl(var(--primary)) 25%,transparent)}}.border-primary\/30{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/30{border-color:color-mix(in oklab,hsl(var(--primary)) 30%,transparent)}}.border-primary\/40{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/40{border-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent)}}.border-primary\/50{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/50{border-color:color-mix(in oklab,hsl(var(--primary)) 50%,transparent)}}.border-primary\/60{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/60{border-color:color-mix(in oklab,hsl(var(--primary)) 60%,transparent)}}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/30{border-color:color-mix(in oklab,var(--color-purple-500) 30%,transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500) 25%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab,red,red)){.border-red-500\/40{border-color:color-mix(in oklab,var(--color-red-500) 40%,transparent)}}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.border-red-500\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab,red,red)){.border-red-500\/60{border-color:color-mix(in oklab,var(--color-red-500) 60%,transparent)}}.border-sky-500\/25{border-color:#00a5ef40}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/25{border-color:color-mix(in oklab,var(--color-sky-500) 25%,transparent)}}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/30{border-color:color-mix(in oklab,var(--color-sky-500) 30%,transparent)}}.border-sky-500\/40{border-color:#00a5ef66}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/40{border-color:color-mix(in oklab,var(--color-sky-500) 40%,transparent)}}.border-slate-500\/25{border-color:#62748e40}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/25{border-color:color-mix(in oklab,var(--color-slate-500) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500) 30%,transparent)}}.border-teal-500\/25{border-color:#00baa740}@supports (color:color-mix(in lab,red,red)){.border-teal-500\/25{border-color:color-mix(in oklab,var(--color-teal-500) 25%,transparent)}}.border-transparent{border-color:#0000}.border-violet-500\/15{border-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/15{border-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.border-violet-500\/20{border-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/20{border-color:color-mix(in oklab,var(--color-violet-500) 20%,transparent)}}.border-violet-500\/25{border-color:#8d54ff40}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/25{border-color:color-mix(in oklab,var(--color-violet-500) 25%,transparent)}}.border-violet-500\/30{border-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/30{border-color:color-mix(in oklab,var(--color-violet-500) 30%,transparent)}}.border-violet-500\/40{border-color:#8d54ff66}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/40{border-color:color-mix(in oklab,var(--color-violet-500) 40%,transparent)}}.border-t-emerald-500\/70{border-top-color:#00bb7fb3}@supports (color:color-mix(in lab,red,red)){.border-t-emerald-500\/70{border-top-color:color-mix(in oklab,var(--color-emerald-500) 70%,transparent)}}.border-t-primary\/70{border-top-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-t-primary\/70{border-top-color:color-mix(in oklab,hsl(var(--primary)) 70%,transparent)}}.border-t-violet-500\/70{border-top-color:#8d54ffb3}@supports (color:color-mix(in lab,red,red)){.border-t-violet-500\/70{border-top-color:color-mix(in oklab,var(--color-violet-500) 70%,transparent)}}.border-l-amber-500\/80{border-left-color:#f99c00cc}@supports (color:color-mix(in lab,red,red)){.border-l-amber-500\/80{border-left-color:color-mix(in oklab,var(--color-amber-500) 80%,transparent)}}.border-l-cyan-500\/80{border-left-color:#00b7d7cc}@supports (color:color-mix(in lab,red,red)){.border-l-cyan-500\/80{border-left-color:color-mix(in oklab,var(--color-cyan-500) 80%,transparent)}}.border-l-indigo-500\/80{border-left-color:#625fffcc}@supports (color:color-mix(in lab,red,red)){.border-l-indigo-500\/80{border-left-color:color-mix(in oklab,var(--color-indigo-500) 80%,transparent)}}.border-l-muted{border-left-color:hsl(var(--muted))}.border-l-violet-500\/80{border-left-color:#8d54ffcc}@supports (color:color-mix(in lab,red,red)){.border-l-violet-500\/80{border-left-color:color-mix(in oklab,var(--color-violet-500) 80%,transparent)}}.bg-\[\#030712\]{background-color:#030712}.bg-\[hsl\(224\,28\%\,8\%\)\]{background-color:#0f121a}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500) 15%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.bg-amber-500\/80{background-color:#f99c00cc}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/80{background-color:color-mix(in oklab,var(--color-amber-500) 80%,transparent)}}.bg-amber-500\/\[0\.06\]{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-amber-500) 6%,transparent)}}.bg-background\/10{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/10{background-color:color-mix(in oklab,hsl(var(--background)) 10%,transparent)}}.bg-background\/20{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/20{background-color:color-mix(in oklab,hsl(var(--background)) 20%,transparent)}}.bg-background\/25{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/25{background-color:color-mix(in oklab,hsl(var(--background)) 25%,transparent)}}.bg-background\/30{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/30{background-color:color-mix(in oklab,hsl(var(--background)) 30%,transparent)}}.bg-background\/35{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/35{background-color:color-mix(in oklab,hsl(var(--background)) 35%,transparent)}}.bg-background\/40{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/40{background-color:color-mix(in oklab,hsl(var(--background)) 40%,transparent)}}.bg-background\/50{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/50{background-color:color-mix(in oklab,hsl(var(--background)) 50%,transparent)}}.bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background)) 60%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card,.bg-card\/10{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/10{background-color:color-mix(in oklab,hsl(var(--card)) 10%,transparent)}}.bg-card\/20{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/20{background-color:color-mix(in oklab,hsl(var(--card)) 20%,transparent)}}.bg-card\/30{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/30{background-color:color-mix(in oklab,hsl(var(--card)) 30%,transparent)}}.bg-card\/40{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/40{background-color:color-mix(in oklab,hsl(var(--card)) 40%,transparent)}}.bg-card\/45{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/45{background-color:color-mix(in oklab,hsl(var(--card)) 45%,transparent)}}.bg-card\/50{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/50{background-color:color-mix(in oklab,hsl(var(--card)) 50%,transparent)}}.bg-card\/60{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/60{background-color:color-mix(in oklab,hsl(var(--card)) 60%,transparent)}}.bg-card\/70{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/70{background-color:color-mix(in oklab,hsl(var(--card)) 70%,transparent)}}.bg-card\/85{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/85{background-color:color-mix(in oklab,hsl(var(--card)) 85%,transparent)}}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/10{background-color:color-mix(in oklab,var(--color-cyan-500) 10%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500) 15%,transparent)}}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/20{background-color:color-mix(in oklab,var(--color-cyan-500) 20%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/5{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.bg-emerald-500\/80{background-color:#00bb7fcc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/80{background-color:color-mix(in oklab,var(--color-emerald-500) 80%,transparent)}}.bg-foreground\/10{background-color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/10{background-color:color-mix(in oklab,hsl(var(--foreground)) 10%,transparent)}}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-fuchsia-500\/10{background-color:#e12afb1a}@supports (color:color-mix(in lab,red,red)){.bg-fuchsia-500\/10{background-color:color-mix(in oklab,var(--color-fuchsia-500) 10%,transparent)}}.bg-fuchsia-500\/15{background-color:#e12afb26}@supports (color:color-mix(in lab,red,red)){.bg-fuchsia-500\/15{background-color:color-mix(in oklab,var(--color-fuchsia-500) 15%,transparent)}}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/10{background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.bg-indigo-500\/15{background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.bg-lime-500{background-color:var(--color-lime-500)}.bg-lime-500\/15{background-color:#80cd0026}@supports (color:color-mix(in lab,red,red)){.bg-lime-500\/15{background-color:color-mix(in oklab,var(--color-lime-500) 15%,transparent)}}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/30{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,hsl(var(--muted-foreground)) 30%,transparent)}}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab,hsl(var(--muted-foreground)) 40%,transparent)}}.bg-muted-foreground\/45{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/45{background-color:color-mix(in oklab,hsl(var(--muted-foreground)) 45%,transparent)}}.bg-muted\/10{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/10{background-color:color-mix(in oklab,hsl(var(--muted)) 10%,transparent)}}.bg-muted\/25{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/25{background-color:color-mix(in oklab,hsl(var(--muted)) 25%,transparent)}}.bg-muted\/40{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,hsl(var(--muted)) 40%,transparent)}}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.bg-pink-500{background-color:var(--color-pink-500)}.bg-pink-500\/10{background-color:#f6339a1a}@supports (color:color-mix(in lab,red,red)){.bg-pink-500\/10{background-color:color-mix(in oklab,var(--color-pink-500) 10%,transparent)}}.bg-pink-500\/15{background-color:#f6339a26}@supports (color:color-mix(in lab,red,red)){.bg-pink-500\/15{background-color:color-mix(in oklab,var(--color-pink-500) 15%,transparent)}}.bg-popover,.bg-popover\/95{background-color:hsl(var(--popover))}@supports (color:color-mix(in lab,red,red)){.bg-popover\/95{background-color:color-mix(in oklab,hsl(var(--popover)) 95%,transparent)}}.bg-primary,.bg-primary\/5{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,hsl(var(--primary)) 5%,transparent)}}.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary)) 10%,transparent)}}.bg-primary\/15{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,hsl(var(--primary)) 15%,transparent)}}.bg-primary\/70{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/70{background-color:color-mix(in oklab,hsl(var(--primary)) 70%,transparent)}}.bg-primary\/\[0\.06\]{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/\[0\.06\]{background-color:color-mix(in oklab,hsl(var(--primary)) 6%,transparent)}}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/20{background-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/5{background-color:color-mix(in oklab,var(--color-red-500) 5%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-500\/80{background-color:#fb2c36cc}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/80{background-color:color-mix(in oklab,var(--color-red-500) 80%,transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/15{background-color:color-mix(in oklab,var(--color-rose-500) 15%,transparent)}}.bg-sky-500\/5{background-color:#00a5ef0d}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/5{background-color:color-mix(in oklab,var(--color-sky-500) 5%,transparent)}}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/10{background-color:color-mix(in oklab,var(--color-sky-500) 10%,transparent)}}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500\/15{background-color:#62748e26}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/15{background-color:color-mix(in oklab,var(--color-slate-500) 15%,transparent)}}.bg-slate-500\/20{background-color:#62748e33}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/20{background-color:color-mix(in oklab,var(--color-slate-500) 20%,transparent)}}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-500\/10{background-color:#00baa71a}@supports (color:color-mix(in lab,red,red)){.bg-teal-500\/10{background-color:color-mix(in oklab,var(--color-teal-500) 10%,transparent)}}.bg-teal-500\/15{background-color:#00baa726}@supports (color:color-mix(in lab,red,red)){.bg-teal-500\/15{background-color:color-mix(in oklab,var(--color-teal-500) 15%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-500{background-color:var(--color-violet-500)}.bg-violet-500\/5{background-color:#8d54ff0d}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/5{background-color:color-mix(in oklab,var(--color-violet-500) 5%,transparent)}}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/10{background-color:color-mix(in oklab,var(--color-violet-500) 10%,transparent)}}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/15{background-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.bg-violet-500\/\[0\.04\]{background-color:#8d54ff0a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-violet-500) 4%,transparent)}}.bg-violet-500\/\[0\.05\]{background-color:#8d54ff0d}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-violet-500) 5%,transparent)}}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-500\/10{background-color:#71717b1a}@supports (color:color-mix(in lab,red,red)){.bg-zinc-500\/10{background-color:color-mix(in oklab,var(--color-zinc-500) 10%,transparent)}}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-foreground{--tw-gradient-from:hsl(var(--foreground));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-foreground{--tw-gradient-via:hsl(var(--foreground));--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-primary{--tw-gradient-to:hsl(var(--primary));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-repeat{background-repeat:repeat}.fill-primary\/20{fill:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.fill-primary\/20{fill:color-mix(in oklab,hsl(var(--primary)) 20%,transparent)}}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[12vh\]{padding-top:12vh}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}.font-space{font-family:Space Grotesk,sans-serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-300\/70{color:#ffd236b3}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/70{color:color-mix(in oklab,var(--color-amber-300) 70%,transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/90{color:color-mix(in oklab,var(--color-amber-400) 90%,transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-cyan-200\/90{color:#a2f4fde6}@supports (color:color-mix(in lab,red,red)){.text-cyan-200\/90{color:color-mix(in oklab,var(--color-cyan-200) 90%,transparent)}}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-300\/80{color:#53eafdcc}@supports (color:color-mix(in lab,red,red)){.text-cyan-300\/80{color:color-mix(in oklab,var(--color-cyan-300) 80%,transparent)}}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-300\/70{color:#5ee9b5b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/70{color:color-mix(in oklab,var(--color-emerald-300) 70%,transparent)}}.text-emerald-300\/80{color:#5ee9b5cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/80{color:color-mix(in oklab,var(--color-emerald-300) 80%,transparent)}}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/70{color:#00d294b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/70{color:color-mix(in oklab,var(--color-emerald-400) 70%,transparent)}}.text-emerald-400\/90{color:#00d294e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/90{color:color-mix(in oklab,var(--color-emerald-400) 90%,transparent)}}.text-foreground,.text-foreground\/70{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/70{color:color-mix(in oklab,hsl(var(--foreground)) 70%,transparent)}}.text-foreground\/75{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/75{color:color-mix(in oklab,hsl(var(--foreground)) 75%,transparent)}}.text-foreground\/80{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,hsl(var(--foreground)) 80%,transparent)}}.text-foreground\/85{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/85{color:color-mix(in oklab,hsl(var(--foreground)) 85%,transparent)}}.text-foreground\/90{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/90{color:color-mix(in oklab,hsl(var(--foreground)) 90%,transparent)}}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-400{color:var(--color-fuchsia-400)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-lime-400{color:var(--color-lime-400)}.text-muted-foreground,.text-muted-foreground\/40{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/40{color:color-mix(in oklab,hsl(var(--muted-foreground)) 40%,transparent)}}.text-muted-foreground\/50{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,hsl(var(--muted-foreground)) 50%,transparent)}}.text-muted-foreground\/55{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/55{color:color-mix(in oklab,hsl(var(--muted-foreground)) 55%,transparent)}}.text-muted-foreground\/60{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,hsl(var(--muted-foreground)) 60%,transparent)}}.text-muted-foreground\/70{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,hsl(var(--muted-foreground)) 70%,transparent)}}.text-muted-foreground\/75{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/75{color:color-mix(in oklab,hsl(var(--muted-foreground)) 75%,transparent)}}.text-muted-foreground\/80{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/80{color:color-mix(in oklab,hsl(var(--muted-foreground)) 80%,transparent)}}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-400{color:var(--color-neutral-400)}.text-orange-300{color:var(--color-orange-300)}.text-pink-300{color:var(--color-pink-300)}.text-pink-400{color:var(--color-pink-400)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/70{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.text-primary\/70{color:color-mix(in oklab,hsl(var(--primary)) 70%,transparent)}}.text-primary\/80{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.text-primary\/80{color:color-mix(in oklab,hsl(var(--primary)) 80%,transparent)}}.text-purple-300{color:var(--color-purple-300)}.text-red-200{color:var(--color-red-200)}.text-red-200\/90{color:#ffcacae6}@supports (color:color-mix(in lab,red,red)){.text-red-200\/90{color:color-mix(in oklab,var(--color-red-200) 90%,transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-300\/70{color:#ffa3a3b3}@supports (color:color-mix(in lab,red,red)){.text-red-300\/70{color:color-mix(in oklab,var(--color-red-300) 70%,transparent)}}.text-red-300\/90{color:#ffa3a3e6}@supports (color:color-mix(in lab,red,red)){.text-red-300\/90{color:color-mix(in oklab,var(--color-red-300) 90%,transparent)}}.text-red-400{color:var(--color-red-400)}.text-red-400\/80{color:#ff6568cc}@supports (color:color-mix(in lab,red,red)){.text-red-400\/80{color:color-mix(in oklab,var(--color-red-400) 80%,transparent)}}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-sky-200\/80{color:#b8e6fecc}@supports (color:color-mix(in lab,red,red)){.text-sky-200\/80{color:color-mix(in oklab,var(--color-sky-200) 80%,transparent)}}.text-sky-300{color:var(--color-sky-300)}.text-sky-300\/80{color:#77d4ffcc}@supports (color:color-mix(in lab,red,red)){.text-sky-300\/80{color:color-mix(in oklab,var(--color-sky-300) 80%,transparent)}}.text-sky-300\/90{color:#77d4ffe6}@supports (color:color-mix(in lab,red,red)){.text-sky-300\/90{color:color-mix(in oklab,var(--color-sky-300) 90%,transparent)}}.text-sky-400{color:var(--color-sky-400)}.text-slate-300{color:var(--color-slate-300)}.text-teal-300{color:var(--color-teal-300)}.text-teal-400{color:var(--color-teal-400)}.text-transparent{color:#0000}.text-violet-200\/90{color:#ddd6ffe6}@supports (color:color-mix(in lab,red,red)){.text-violet-200\/90{color:color-mix(in oklab,var(--color-violet-200) 90%,transparent)}}.text-violet-300{color:var(--color-violet-300)}.text-violet-300\/70{color:#c4b4ffb3}@supports (color:color-mix(in lab,red,red)){.text-violet-300\/70{color:color-mix(in oklab,var(--color-violet-300) 70%,transparent)}}.text-violet-300\/80{color:#c4b4ffcc}@supports (color:color-mix(in lab,red,red)){.text-violet-300\/80{color:color-mix(in oklab,var(--color-violet-300) 80%,transparent)}}.text-violet-300\/90{color:#c4b4ffe6}@supports (color:color-mix(in lab,red,red)){.text-violet-300\/90{color:color-mix(in oklab,var(--color-violet-300) 90%,transparent)}}.text-violet-400{color:var(--color-violet-400)}.text-white{color:var(--color-white)}.text-zinc-400{color:var(--color-zinc-400)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-primary\/40{-webkit-text-decoration-color:hsl(var(--primary));text-decoration-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.decoration-primary\/40{-webkit-text-decoration-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent);text-decoration-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent)}}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.accent-primary{accent-color:hsl(var(--primary))}.\[color-scheme\:dark\]{color-scheme:dark}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(16\,185\,129\,0\.4\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#10b98166);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(239\,68\,68\,0\.4\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#ef444466);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(245\,158\,11\,0\.4\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#f59e0b66);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-amber-500\/10{--tw-shadow-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.shadow-amber-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/15{--tw-shadow-color:#00000026}@supports (color:color-mix(in lab,red,red)){.shadow-black\/15{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab,red,red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/25{--tw-shadow-color:#00000040}@supports (color:color-mix(in lab,red,red)){.shadow-black\/25{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 25%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/5{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-primary\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/10{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-primary\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/20{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-background\/60{--tw-ring-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.ring-background\/60{--tw-ring-color:color-mix(in oklab, hsl(var(--background)) 60%, transparent)}}.ring-black\/40{--tw-ring-color:#0006}@supports (color:color-mix(in lab,red,red)){.ring-black\/40{--tw-ring-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.ring-white\/70{--tw-ring-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.ring-white\/70{--tw-ring-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition\!{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media(hover:hover){.group-hover\:translate-x-0\.5:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:text-foreground:is(:where(.group):hover *){color:hsl(var(--foreground))}.group-hover\:text-primary:is(:where(.group):hover *){color:hsl(var(--primary))}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/50::placeholder{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-muted-foreground\/50::placeholder{color:color-mix(in oklab,hsl(var(--muted-foreground)) 50%,transparent)}}.first\:mt-0:first-child{margin-top:0}.first\:rounded-l-sm:first-child{border-top-left-radius:calc(var(--radius) - 4px);border-bottom-left-radius:calc(var(--radius) - 4px)}@media(hover:hover){.hover\:border-amber-500\/50:hover{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.hover\:border-amber-500\/50:hover{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.hover\:border-border:hover,.hover\:border-border\/60:hover{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.hover\:border-border\/60:hover{border-color:color-mix(in oklab,hsl(var(--border)) 60%,transparent)}}.hover\:border-emerald-500\/40:hover{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/40:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 30%,transparent)}}.hover\:border-primary\/40:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent)}}.hover\:border-primary\/45:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/45:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 45%,transparent)}}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 50%,transparent)}}.hover\:border-red-500\/50:hover{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.hover\:border-red-500\/50:hover{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-400:hover{background-color:var(--color-amber-400)}.hover\:bg-amber-500\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.hover\:bg-amber-500\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.hover\:bg-background\/40:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/40:hover{background-color:color-mix(in oklab,hsl(var(--background)) 40%,transparent)}}.hover\:bg-background\/60:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/60:hover{background-color:color-mix(in oklab,hsl(var(--background)) 60%,transparent)}}.hover\:bg-background\/80:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/80:hover{background-color:color-mix(in oklab,hsl(var(--background)) 80%,transparent)}}.hover\:bg-card\/45:hover{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-card\/45:hover{background-color:color-mix(in oklab,hsl(var(--card)) 45%,transparent)}}.hover\:bg-card\/75:hover{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-card\/75:hover{background-color:color-mix(in oklab,hsl(var(--card)) 75%,transparent)}}.hover\:bg-emerald-500\/10:hover{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/10:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.hover\:bg-emerald-500\/15:hover{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/15:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.hover\:bg-emerald-500\/20:hover{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/20:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.hover\:bg-neutral-700:hover{background-color:var(--color-neutral-700)}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 10%,transparent)}}.hover\:bg-primary\/20:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/20:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 20%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 90%,transparent)}}.hover\:bg-primary\/95:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/95:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 95%,transparent)}}.hover\:bg-red-500\/5:hover{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/5:hover{background-color:color-mix(in oklab,var(--color-red-500) 5%,transparent)}}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.hover\:bg-red-500\/15:hover{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/15:hover{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-sky-500\/20:hover{background-color:#00a5ef33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sky-500\/20:hover{background-color:color-mix(in oklab,var(--color-sky-500) 20%,transparent)}}.hover\:bg-violet-500\/20:hover{background-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-violet-500\/20:hover{background-color:color-mix(in oklab,var(--color-violet-500) 20%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-200:hover{color:var(--color-amber-200)}.hover\:text-emerald-300:hover{color:var(--color-emerald-300)}.hover\:text-foreground:hover,.hover\:text-foreground\/80:hover{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.hover\:text-foreground\/80:hover{color:color-mix(in oklab,hsl(var(--foreground)) 80%,transparent)}}.hover\:text-primary:hover,.hover\:text-primary\/80:hover{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab,hsl(var(--primary)) 80%,transparent)}}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-violet-200:hover{color:var(--color-violet-200)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-primary:focus,.focus\:border-primary\/50:focus{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus\:border-primary\/50:focus{border-color:color-mix(in oklab,hsl(var(--primary)) 50%,transparent)}}.focus\:border-red-400\/50:focus{border-color:#ff656880}@supports (color:color-mix(in lab,red,red)){.focus\:border-red-400\/50:focus{border-color:color-mix(in oklab,var(--color-red-400) 50%,transparent)}}.focus\:border-sky-400\/50:focus{border-color:#00bcfe80}@supports (color:color-mix(in lab,red,red)){.focus\:border-sky-400\/50:focus{border-color:color-mix(in oklab,var(--color-sky-400) 50%,transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary\/50:focus{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/50:focus{--tw-ring-color:color-mix(in oklab, hsl(var(--primary)) 50%, transparent)}}.focus\:ring-violet-500\/50:focus{--tw-ring-color:#8d54ff80}@supports (color:color-mix(in lab,red,red)){.focus\:ring-violet-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-violet-500) 50%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}@media(min-width:40rem){.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:w-36{width:calc(var(--spacing) * 36)}.sm\:w-\[640px\]{width:640px}.sm\:w-auto{width:auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:p-10{padding:calc(var(--spacing) * 10)}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[170px_1fr\]{grid-template-columns:170px 1fr}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media(min-width:64rem){.lg\:absolute{position:absolute}.lg\:top-4{top:calc(var(--spacing) * 4)}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:right-4{right:calc(var(--spacing) * 4)}.lg\:right-6{right:calc(var(--spacing) * 6)}.lg\:bottom-4{bottom:calc(var(--spacing) * 4)}.lg\:bottom-6{bottom:calc(var(--spacing) * 6)}.lg\:left-4{left:calc(var(--spacing) * 4)}.lg\:left-6{left:calc(var(--spacing) * 6)}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-\[calc\(100\%-2rem\)\]{height:calc(100% - 2rem)}.lg\:h-\[calc\(100\%-3rem\)\]{height:calc(100% - 3rem)}.lg\:w-40{width:calc(var(--spacing) * 40)}.lg\:w-72{width:calc(var(--spacing) * 72)}.lg\:w-80{width:calc(var(--spacing) * 80)}.lg\:w-96{width:calc(var(--spacing) * 96)}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1\.3fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1.3fr)}.lg\:flex-row{flex-direction:row}.lg\:items-stretch{align-items:stretch}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:border-border\/40{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.lg\:border-border\/40{border-color:color-mix(in oklab,hsl(var(--border)) 40%,transparent)}}.lg\:bg-background\/65{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.lg\:bg-background\/65{background-color:color-mix(in oklab,hsl(var(--background)) 65%,transparent)}}.lg\:p-4{padding:calc(var(--spacing) * 4)}.lg\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:shadow-black\/50{--tw-shadow-color:#00000080}@supports (color:color-mix(in lab,red,red)){.lg\:shadow-black\/50{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.lg\:backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}}:root{--background:224 30% 6%;--foreground:210 20% 92%;--card:224 25% 10%;--card-foreground:210 20% 94%;--popover:224 28% 9%;--popover-foreground:210 20% 94%;--primary:172 72% 50%;--primary-foreground:224 47% 8%;--muted:220 16% 14%;--muted-foreground:215 14% 64%;--accent:220 16% 16%;--accent-foreground:210 20% 94%;--border:222 18% 23%;--input:222 18% 23%;--ring:172 72% 50%;--radius:.75rem;color-scheme:dark}html,body,#root{height:100%;overflow:hidden}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0}*{border-color:hsl(var(--border) / .85);outline-color:hsl(var(--primary) / .5)}:focus-visible{outline:2px solid hsl(var(--primary) / .7);outline-offset:2px}input:focus,textarea:focus,select:focus{border-color:hsl(var(--primary));box-shadow:0 0 0 2px hsl(var(--primary) / .15);outline:none}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--primary) / .25);border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--primary) / .5)}.mc-card{border:1px solid hsl(var(--border) / .95);background-color:hsl(var(--card) / .85);border-radius:1rem;transition:transform .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;box-shadow:0 10px 30px -15px #00000073,inset 0 1px #ffffff0d}.mc-card:before{content:"";background:linear-gradient(90deg,hsl(var(--primary)),#6366f1,#a855f7);opacity:.75;height:3.5px;transition:opacity .3s;position:absolute;top:0;left:0;right:0}.mc-card:hover{background-color:hsl(var(--card) / .92);border-color:hsl(var(--primary) / .35);box-shadow:0 20px 40px -20px #000000a6,0 0 18px 2px hsl(var(--primary) / .05);transform:translateY(-3px)}.mc-card:hover:before{opacity:1}.mc-card-sm{border:1px solid hsl(var(--border) / .9);background-color:hsl(var(--card) / .88);border-radius:.75rem;transition:background-color .2s,border-color .2s}.mc-card-sm:hover{background-color:hsl(var(--card) / .95);border-color:hsl(var(--primary) / .3)}.nav-active{background:linear-gradient(90deg,hsl(var(--primary) / .18),#6366f11f);color:hsl(var(--primary));border-left:3.5px solid hsl(var(--primary));border-radius:0 var(--radius) var(--radius) 0;padding-left:calc(.75rem - 3.5px);box-shadow:inset 0 1px #ffffff05}.nav-active-collapsed{background:hsl(var(--primary) / .18);color:hsl(var(--primary));box-shadow:0 0 12px 1px hsl(var(--primary) / .1);border:1px solid hsl(var(--primary) / .3)}@keyframes flow-cyan{0%{stroke-dasharray:6 3;stroke-dashoffset:18px}to{stroke-dasharray:6 3;stroke-dashoffset:0}}.animate-flow-cyan{animation:1.2s linear infinite flow-cyan}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media(min-width:1440px){html{font-size:16.5px}}@media(min-width:1920px){html{font-size:17.5px}}@media(min-width:2560px){html{font-size:19px}}@media(min-width:3440px){html{font-size:20px}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/frontend/dist/assets/index-Bm-JldFM.css b/frontend/dist/assets/index-Bm-JldFM.css deleted file mode 100644 index d66034f..0000000 --- a/frontend/dist/assets/index-Bm-JldFM.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-pan-x:initial;--tw-pan-y:initial;--tw-pinch-zoom:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-cyrillic-ext-300-normal-CgCALhwJ.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-300-normal-RId2JxDB.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-cyrillic-300-normal-BnqRxXuy.woff2)format("woff2"),url(/assets/inter-cyrillic-300-normal-LR1W_oT8.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-greek-ext-300-normal-l2DDyC6M.woff2)format("woff2"),url(/assets/inter-greek-ext-300-normal-DLbbeei1.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-greek-300-normal-DmGD3g_f.woff2)format("woff2"),url(/assets/inter-greek-300-normal-BrhSP0vQ.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-vietnamese-300-normal-Bdr24Bqb.woff2)format("woff2"),url(/assets/inter-vietnamese-300-normal-DDGmYYdT.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-latin-ext-300-normal-CPgO9Ksf.woff2)format("woff2"),url(/assets/inter-latin-ext-300-normal-Dp1L8vcn.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:300;src:url(/assets/inter-latin-300-normal-BVlfKGgI.woff2)format("woff2"),url(/assets/inter-latin-300-normal-i8F0SvXL.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-cyrillic-ext-400-normal-BQZuk6qB.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-400-normal-DQukG94-.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-cyrillic-400-normal-obahsSVq.woff2)format("woff2"),url(/assets/inter-cyrillic-400-normal-HOLc17fK.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-greek-ext-400-normal-DGGRlc-M.woff2)format("woff2"),url(/assets/inter-greek-ext-400-normal-KugGGMne.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-greek-400-normal-B4URO6DV.woff2)format("woff2"),url(/assets/inter-greek-400-normal-q2sYcFCs.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-vietnamese-400-normal-DMkecbls.woff2)format("woff2"),url(/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-ext-400-normal-C1nco2VV.woff2)format("woff2"),url(/assets/inter-latin-ext-400-normal-77YHD8bZ.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-400-normal-C38fXH4l.woff2)format("woff2"),url(/assets/inter-latin-400-normal-CyCys3Eg.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-cyrillic-ext-500-normal-B0yAr1jD.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-500-normal-BmqWE9Dz.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-cyrillic-500-normal-BasfLYem.woff2)format("woff2"),url(/assets/inter-cyrillic-500-normal-CxZf_p3X.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-greek-ext-500-normal-C4iEst2y.woff2)format("woff2"),url(/assets/inter-greek-ext-500-normal-2j5mBUwD.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-greek-500-normal-BIZE56-Y.woff2)format("woff2"),url(/assets/inter-greek-500-normal-Xzm54t5V.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-vietnamese-500-normal-DOriooB6.woff2)format("woff2"),url(/assets/inter-vietnamese-500-normal-mJboJaSs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-ext-500-normal-CV4jyFjo.woff2)format("woff2"),url(/assets/inter-latin-ext-500-normal-BxGbmqWO.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-500-normal-Cerq10X2.woff2)format("woff2"),url(/assets/inter-latin-500-normal-BL9OpVg8.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-cyrillic-ext-600-normal-Dfes3d0z.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-600-normal-Bcila6Z-.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-cyrillic-600-normal-CWCymEST.woff2)format("woff2"),url(/assets/inter-cyrillic-600-normal-4D_pXhcN.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-greek-ext-600-normal-DRtmH8MT.woff2)format("woff2"),url(/assets/inter-greek-ext-600-normal-B8X0CLgF.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-greek-600-normal-plRanbMR.woff2)format("woff2"),url(/assets/inter-greek-600-normal-BZpKdvQh.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2)format("woff2"),url(/assets/inter-vietnamese-600-normal-BuLX-rYi.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-ext-600-normal-D2bJ5OIk.woff2)format("woff2"),url(/assets/inter-latin-ext-600-normal-CIVaiw4L.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-600-normal-LgqL8muc.woff2)format("woff2"),url(/assets/inter-latin-600-normal-CiBQ2DWP.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-cyrillic-ext-700-normal-BjwYoWNd.woff2)format("woff2"),url(/assets/inter-cyrillic-ext-700-normal-LO58E6JB.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-cyrillic-700-normal-CjBOestx.woff2)format("woff2"),url(/assets/inter-cyrillic-700-normal-DrXBdSj3.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-greek-ext-700-normal-qfdV9bQt.woff2)format("woff2"),url(/assets/inter-greek-ext-700-normal-BoQ6DsYi.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-greek-700-normal-C3JjAnD8.woff2)format("woff2"),url(/assets/inter-greek-700-normal-BUv2fZ6O.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-vietnamese-700-normal-DlLaEgI2.woff2)format("woff2"),url(/assets/inter-vietnamese-700-normal-BZaoP0fm.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-ext-700-normal-Ca8adRJv.woff2)format("woff2"),url(/assets/inter-latin-ext-700-normal-TidjK2hL.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-latin-700-normal-Yt3aPRUw.woff2)format("woff2"),url(/assets/inter-latin-700-normal-BLAVimhd.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-vietnamese-400-normal-B7xT_GF5.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-400-normal-BIWiOVfw.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-ext-400-normal-CfP_5XZW.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-400-normal-DRPE3kg4.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/space-grotesk-latin-400-normal-CJ-V5oYT.woff2)format("woff2"),url(/assets/space-grotesk-latin-400-normal-BnQMeOim.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-vietnamese-500-normal-BmEvtly_.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-500-normal-BTqKIpxg.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-ext-500-normal-DUe3BAxM.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-500-normal-3dgZTiw9.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/space-grotesk-latin-500-normal-lFbtlQH6.woff2)format("woff2"),url(/assets/space-grotesk-latin-500-normal-CNSSEhBt.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-vietnamese-600-normal-DUi7WF5p.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-600-normal-D6zpsUhD.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-ext-600-normal-DxxdqCpr.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-600-normal-VcznFIpX.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/space-grotesk-latin-600-normal-DjKNqYRj.woff2)format("woff2"),url(/assets/space-grotesk-latin-600-normal-BflQw4A9.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-vietnamese-700-normal-DMty7AZE.woff2)format("woff2"),url(/assets/space-grotesk-vietnamese-700-normal-Duxec5Rn.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-ext-700-normal-BQnZhY3m.woff2)format("woff2"),url(/assets/space-grotesk-latin-ext-700-normal-HVCqSBdx.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Space Grotesk;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/space-grotesk-latin-700-normal-RjhwGPKo.woff2)format("woff2"),url(/assets/space-grotesk-latin-700-normal-CwsQ-cCU.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAASIABAAAAAACQQAAAQuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVF4AdBEICoRkhAALIAABNgIkAzoEIAWFAAeBFAwHG2oHKJ6DceNW4lJEFHn9tEOE37LNsvkjHr7f739rn3u+OSrSxLQytE91Dw2PYtNVq3Qaw/vJ7fUBMdOj/u2ImB98cT5WUx9F13ZKt06mU7tG1sAYcM26yCRX4f/0904bmwq8hwkUUMTRX61pa9C3xlpAGYw1vOu8C2SBZZFlld7DAW82RJWmwYMI1AJCKBNCIASqdZGFmtPSNQRhMpR0EKjWTwm6z6sJ+4jqhxjovTinVdRpZaQjaQzAYjI8NgAKDJCokgunCn9oUQE8VZd/F//+v6P4F1U9gLr58yNI/dJX9BAshEoJbTDogz7ocKoUsPvES8UK/aQIUQgpGgECBVLkOEV6iASTYgNAPKdNXayhDPL7IJuAZnEYSZ0eOLc9i5Rv5/+lEi3sW/kfnCf/+fTe0sxS7CKLx5erRJkKOixEqQaoqrvx5HN4iz4VhX0gS6DjFIWUzn/fIXJRVFY1NFRVNVeFt+SYmrK6vCU6eJsnKnJj5HTESMTQZOTI3Y/tzr3rUcOsiRy/ciP50s3Mycgxmhz9GMXhjzVH30ut796NHP0UUa31/Zoa6vCH6iPvdIM0IRANaT60FablmZlZd+UKNFy9NrvnFGxb5NC2CRxR0/rIyF/WNn+35sv9r+tHVhkseuWGKkCPPh96+GXt8Lc/Sh24ujfjf+tNw1lZWreiPuHb/PSpyjdv2rf/++ZE5TSKjFdZxYsBvr1sEHl5STuHZqYR7jGYGvGBBdjcaB5bODY1GAxMjsd0wDMIzXAXODRd74DxNMtO4YuYHclgLQRzp9KlUmxptCwv9bYgvWGD2xBW7r9413fdJu+mxzvzAUYeeONQvZP4kgfqZle4jhH/MWh+UbxgtJdrLdXLymNL53PRU0D3Q6FcXTfGqGcul6vrqhgLGAVSv+IVIfZOHpu+mlLqSlnj903j8mazXDsba/wbxhS/4Oubh1c5/uXDgt4j5KtnGEy5BIJHo0ur+jD+r2qCkuP1aRVM8EpUoRYSJyqNRA38uwDvHBNo0AejO2Z+ZYLLal1QiFyFh1EDQOgSCSCpjwwKU8yDbIjroEwne0G5Qca49cYp4AlqtQNZfWTQoFb1tRpFYAmRD+HXTkV4uQhG2bg4OKmyoypAsUGtWgQXyFxYrkpODeUxvGqIZA61erXo0sFG1UBGuPgpuon8RNUG2DhovAjZCBuZwtXrU3mQGki9+pm0eVZAXoWxLWTQoYHBPrJR4WunNxIFbCHfkTyPK+sqxjxDmGArZvf79JGJ3GwEqjwc7a7NIrl/7bJ7Nzu4+n1Ow6shEPnUrtVo7cnd5Wi5qCUbBIQbNKCP95FMCSZylEV5VCiiMqqiOmrKZ/I/C0gI1fyuulVcM2E1r4MhtcV/fbCD+HwEvVzH1dGNAzFE0FTbKzyQz3gootrNbN2a4PuG0j0JOgE=)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbUAA8AAAAACOgAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgFwRca1NUQVQAAAIMAAAARgAAAF7mY9MfY21hcAAAAlQAAABRAAAAdAyHCodnYXNwAAACqAAAAAgAAAAIAAAAEGdseWYAAAKwAAAB6QAAAl7g5OpvaGVhZAAABJwAAAA2AAAANhSQ8UNoaGVhAAAE1AAAAB8AAAAkAcoBImhtdHgAAAT0AAAAHgAAADofBAM2bG9jYQAABRQAAAAgAAAAIATcBZ9tYXhwAAAFNAAAABwAAAAgAIcCb25hbWUAAAVQAAABEgAAAoA4pV3kcG9zdAAABmQAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpinMDAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWABNDDdYAAAB42kXIIQIBARQFwHl/QQIkWXInUAANXMOBJCcTd+KIGCjMNViq9/H0CM6P/S0j0bOwUqh08iEb8kPTXn3RiMoYhD90Nwc3AAB42lXIRwHCQBAF0JceehWAlTjhjikUgAVQA4mJLbdk5neUqHBVKWSv3XF2VCnt3AyevkVZv+sxBBbbq/6HfFP4hEcYQgEK82v1aHQ5RTs3FRQAAAAAAQAB//8AD3jabZA1tNRAFEDfTGDdfXHI2QQnZJJvK5ngDs13Welwt/78CtcS7xvcrcHKbXCtceh+wgtu437nXRCgC4BY9AGOXOAFYNHR0dzoKCGju8gJ6xiZaF3DWqcPBiSV5i2geaCgAlAJ77ghgjfiLC7KojvOZEmSXS63emXr5W7lsTLtXFMkRmks4ly+cYOEnvO2YLDNANv+9oJwhkpAAJAcHPG/1RC2BERc1ZGGMxYVWDyVSjc0NMaZELUf9e4JhCgNB3b2PiJRctuqZ0WPR8zilxutN/ji97vUBYMAnGjtzxjtK3wrDaMABo+R9KjWwNRUMppwuWS1QdfFZCIlMF2TxDGuJJlYW7OmVlvD+sx86b1hvC/l8yXf2hqZ66xbZ80yWzyD9/fzGaRzA58+nSOzYC+gw9AP+vyNqUAUhoD4lSnputbgUFPJ5O9Y+ReWlxkrc96naX08b3zk/KORb+E+VjYPmH1M6+UHeVlDtCzzGZ9FY8YMA8gPMsQA0jqaGkHT6cYSdVwl7Zs9Wzx+DyWUugPujd03T52ikrUvM26kF9PIcRmycuDBKcd3XRhPDgtnQACINzJ3fVl1tTB++3bc2S7kyD3cCQIQNMcSKaY2YOciE+d0zFbGjps6u0PILTFlRZHNJfAFnfeHtgAAAAABAAAAAjYEro52gl8PPPUAAwPoAAAAANvSppoAAAAA29rQ8vk5/tQEkgP8AAAABgACAAAAAAAAeNpjYGRgYP7z7woDA8uGn5Z/+1kmAUVQAR8Ar8AG6gB42mOKYIgCYiMkrAzCUHEbJJoBikHgCkMPAPDwCFUAAAAAABoAOwBGAFEAbwB3AKkAsQDmAQkBCQEJAQkBFgEveNpjYGRgYOBn3MGQx7CFgQ3MQwBmBiYALRoB+HjajJADbgVQEEXPZ20bQW3bthvXbr8Vp4to1KV0AV1Wb9JvZzJvzhvcB6CQL0wYzHnAj6E/yAYaDeVBNlJsMAfZxCy/QTbTy3eQLdTzGWQr3VwGuZhx2v/ZAIVUB9kc0TSUKJ8f5FIRHGPjnWs+2MKt+MYzt1xwr/jIk3JymR0X0wzIXKo7VbXjFvfLn3lTtCn7qPoB6+yyzb3qy8pdq/6hrj11fMj7OFbtEY+mrlU/516rVFCdVobplw/JEjVaCaqIYlUiUzOaW9aa/Q1idmlPXZHbCagW/B10XwaRi06VuVdMf+9DnIov6rlF8yzhUXxC/4c66Uz48UepqEN9N/Tzt2RwjOljsUUfj581AbaEXsIAAHjaY2BiAIP/qQxGQIqRAR3wA7EKw0lGJgYbRmZGFkZWRjZGdgZmRg5GTkYuRm42x6Si1LJU9tK8TAMTR1cI7WoB5btB+Zas6Ym5uYlgnoGjAZNzEF9icmlJanJ+bpJecmJxKg9IxtjADMwBAKDtHJg=)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-cyrillic-400-normal-BEIGL1Tu.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-400-normal-ugxPyKxw.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-greek-400-normal-C190GLew.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-400-normal-B9oWc5Lo.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA9UABAAAAAALMAAAA7zAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnAbhWocghYGYD9TVEFUXgCDBBEICrBAp3ILgjgAATYCJAOEKAQgBYUAB4xODAcbIiYzo8LGAQCKfn4o/usELQ4rdj22ABHwitFYjZPqB3XSqAbV3C5dFkHYtTehxpeGbU+3+QexdERCkxARw9oNxAyetvXzdhdjl/7aiBiHgcqBjZywaGPSh4mNFccpF3DHlfyO8Jc/OiSe/kb7/iQYRAE23iScpHngiRRBFETNiZzQwc2HOllJ0fqXIjTY8RTYbDsklKc81hGPQcOJojhD/w80ll1aG/qiQErbzqOXjmvOVKd14tuv+Hxrlbarq/5xH7CiMPjaZXlrfNSp7uqaroZXvYAzc8A0kH2zs3MvHQBUORcJ2GG2cdFRgArh+Sgb7yOsjImpmgM0kq1FwhQCQzQ1Mt+j7at5GSAAIQAAKFLk6uMul4pIl4HIpEEUK0dUMiCMmhFWNoSDC+Exghgzi5i3hNhtN9qaINo+EbQj1tEIgJVLj5oebQ6I1/fyLMQYALYgALKS0yEOQCJG89uIiEPKyeRDVCmC0HgZ203jIg7kk6cHxfEKeBSDXtxd6n5yJzqpfSgXs9xMri1fPezlKMAVcCGEIhmwHiDRtJOyKfXkGsAVqI7ohIZs0rsDM/IU4fuQgkppCk2n+VRHy6mFttJ26t16mBjQPyIeYhvZnyXaiDSeaAYYXLiKPIm4uKh1zIq6gSRVU7WNPIV5v1PwBOy07RrrT6skwoEAtYyZeYgpBUABaDEmtPWRGP/UGABFgUUjchFXAghAgAYQpyPkCIBBoRwQgU/g3kQcyqTY9KSDItmjjmmkP+qJHG3C66hjXhtlhzwglI+1+4Be+T77hYQxxeNkCIDaKU+ANXhkMqePOVAQr7uwCjoBlCdtHQE8TNRd17//A/evkhSpkOMDA9VTmwAVAbLNlwMkoAG5qG2bWCYA/h3uEYgEhFqSmJJPpCIFbJHg1Aw5GaAujjqMzIHc8NrIHBEJJjGZP3cuFQZD9PvzLvZIaCIjBcTvEnIzTWiGjqdzlD+VAO2TUERK8smEi8lNNOguiAM9P6Gfo6bX8bD0v7V/cPwA/fDBi0BaGgUllWy5AATy6X9gAZqRVIsMLuVmqQ3QmrBbiFgTiWbxLDj1hBqINGLVYewQwySWWRyeQK1kXVJ0S2UjZ5WgXaIOSTodp42CUzqHXH226ZfJI4tXth45eqnslGdQgSGFhmmMyOdTbEyJcdv56U0pNa3MDJ1JVRZUmldtkcESglQkAOA8AMgAoBeYLQi+wDxAtwAAGlXJUdVLPLmo/TLRystE3SsqO29LUY0hsrtvBoXUw1Fy+XjIhqbj4rEZISsUysW1L68PlGRwyWImjWXjS9LFyUzjC7v7Z5hYsYKRhIH49EyxTJxutwOy2PRxp1R63SVViB+eNFYRywlEzJBIMDIl5Aa4PtbFOno416WTTkfVQwSPgIve66BCbLAuLmpCh59ln5uFECODSuUIJ2CJCCzDwbf+DV2/3yTtan5J1gEVuilcVASHULO9Bt+nWkIEHMMit5gOxaO4JpWjvdzOcySeFek9q4dy3jxi2BxHwsuuo2CzbQ+KJWxyqPUJljVCU3WT8JwlhZyLkKODRhZkQByHu8ERJIcGBexSmdwGPfMPbjnC0SwRUTyCAIwY4Mdr9zxJTKE5yp0mcEe9s3Umm/TZp2s4X/27cQUmhrd4Ow4ibPOTOxxT6w+S8ENc9AGE7meFOlNbuzjngJtzjFKcrMsxtf4G4UIPcNGXbvwNaeDea6+1L7kaYG+M13a455pruOh5Ww0HlhllPy/PsqS9Zr7ZV9cSLODAoItzBt2cI5i1brCxQRIcH6yr9wV5+XjhtlxuziH7LiqGTXVnkfCZntd1doJ5liyIno6X3GqH56fcnGNwE2IXvYhw5a/MJGsMns/TOawd+2HX5kOXxQZFsYkwmMetzGtqKDKSe+h9h7jX77z2Snb98vyL7rjmil1N3B/cCBfsC5rymA/ExpPlni/DL9i7eflmn66oxrSlMRRB/8Dbq/e/3aN95L3BG+dFd1d+uCVzKhQy5/+I77CmWJ/o2Hygaay8yleXU1c1NH2IpqHOYUtriyWHf3iZwxjZvNxm/Ti/O5+22uC3nVFxhu1wvQc08ZZ+nb5/9oBF38ehJXaKPt7K6/v34Ltqai21rbXDXI3BRDa+9XDSGp8gzZZarV2ag9v3RBzSNfFjU/M+uVduNDTsMNY0GCOHDU3O4dazeb3zFXjg0rlPuiV75+m+kzV3v5qc/PHdJ2j6pI+wDP+U7mFPW/uw23ltZemTVTo+3+KNa1yyuwdmfI41j1/yvbG3oaLR3G3Sd1xdrNOUfAou3jYw0z860D9jr+9sqU1IIHve9W56/fIEU2fztvaqHQ213trhKauqjXVmr/kFxP1m7bdCE88Plpb1m840l/VNQz72QvvMPlc5z9fvKPt1xBtXv9yVZ9nGmxscXiDfwGcI4LQ9duBaG7Nxjw2aWMuArp7In2qxObTwKfr40/iy/j34zhqeN59qHuZqDBaysQWiL/PZsk4cyV13mvbwWw7phfEDC/O+fm9/ram+sspcXxs5hm9pHjufSujGRbKXaTPmBAPPfMm45bau15+jR/bbBx80mR7sCth94rfB6Q6sngJcuO1v4a7Lu157ad9GKIlypuEea9GDnXs0IytDmZ2Rka2cVv4jrIHmaFZ3O9OWlWX7gLuRH1mMjsxE8VrEH/XNRrErsh61R6PD3e2d7dDsb3Z38k15W/kFkrwmHk+PhWNKx3nLMhHkSl5ZLMvHWPGPfwRB9AKr2QoSUb4qSlB18X715zkqwRI0G3lvUOptugtcID+tsKQForrC+pqxS4X1dcof21bf4OQcbZ2Le6y53kKao3rxNWE9f1a+S3t2tiIu5yej2d/W12RozBwrLh7LbDT0NkUDi+HBQPj0xIlAoKHFFxAMPB8Vce+KKo28Rq0SHV3LUk6MNLv35DMrCzVNmbxBeCGCKzMtu20y8f+SVD4h31Sosky03Upl9YJxzh+L0ZFANLR4LOpYj452tne145E/wok2e6JX/xBX/vH8WaFQojdWlrhzuOXjs1Zn3cCkT4qWSmZeqX/B4tciE4HBmUBZwGxtMDaqnCpdllPVaIzdNw9ZqfDU30ppYDgw2B+A5JP5L8bj4tgWoy/t6WRRcO2P8uFDakiP2fMWaviyaOYFr94gE0nEsXysWligOuHRC2TiH0XSJ/4WqQcjE4GxmUAocKlG+jECgZHFwGX8vabVzf8f4KQSi8Gp6laIdgV0q8OzbmjyaWdnW1MQXZoJDb7ZaEdzVzMoNQiAGESUwszDAIzTDIqSxGFoxoRZ/vTKM8CfyZ9V/ZAPfzZ/Ds4tMHm0dSxCkOPaNpKlK8/KwGQVCdzqbPDn1HKuiT8WHUnStEQYZB2TC6WJ6spymNIjBV7JK5lSs1C5qDoRSYBUSlgH31LlM7X5O4o8eBxrX3MDwtOG1iZdZ/NjXsu0gBJohRVmlQNfwVfQmsReAdZEAahljqkMaxLHg/gT+BONkwxcgT0CH/5k/pQrcCpMUYiGtPqbDGvVgALfitYyTHyI7iP25WqsSqAlstCbcmZ3k0PcRZlgbs0KCrwb7lImBTqQCCawVEpMWHur0DRm3+9sVAOK6UQiqESr8NaEtY8Vu86AIjK3KRZhXNwqD34Oc38umLZM7/33+38/uOj7///Z9yMAAHqAUtN3Bsa/l9rSiKVxlONqqbKozYWfYMRMRkicEE2FhIs4TuWQJL0RDNwCPy0hP1CbGAVY9Mb6W+DZ2p14CIQoIBjqGKpe6lOONhDJTUFBXMgZYOPct8C7Ffmf2jR2ksQ72U7f6SBu5gywoW8x2Qhy1APl1CZGAQ4ksGGD8loGsjY0UQKXmhdvpBboCNglmiU2XUCieL2dF1bDaTacoykaTjgFAhquyoFkiSk0LZyooeM7gQDVIlmNOwCPlICNKQpatkhBhUQJpdLCVwFqWj3FQ8sWeajTWbJiLeRJQlRmsyh1YLRZtAzVNr0dAoCqYN6wXLhzQGL8LY6mvwSAd1698ly88s2Xfwa7FbVA/wsgBhQAgABfG3dQHs2o/066DhB0wWo68NIlpR8Rtqkj9flbwtMc3oZyWoIn3n+L86o5vA1V8ng6L4C9+Ax3YgMBHN8Er4rV97ZRXgdo2vF244hH35wAzlOM0Y1BABGNnNCZ4UFNPID7U9KeSCgiP5EiDnMizejpExlFzj9RIM2BE2MU8pwgViH7TAQQSqpgnDuJJAk2kHIaYDNnhs+sFsvBuaf5DXMbXT9uwvLIbk49b4mBNm3JsEV+85YtKUHWb5rT5ywap9WpUZtWo6q5Fot8W89a0m4OaXOK2Ywat2KaD3NdRi1S/+eloldCT0fn1K5q61Mpa6eaNrKMB6WMQqn83IfXmTNv1eIRiaKj7aOsikMmoxej+EfqsmjOpFHDLnneylGLQxT66vnHnh/n12VXDN1Hw6/bcNpctWo3vrwApZvfrdEDiP8IzgPkeiYUoQlzDvYWB0cnZ6uLq5t7+aRk5I6TIFGS5IqkSJWWXjqFDEqZVLJky5FrG7W8quQrUEijSLESWtsz0tErVVa9chUqValmUMNoh1omZjxSM4s69Ro0atKspTe1smrLpl2HTl262dg5OLm4eezMw6tHrz79BgzyGarXsBGjxqJtJvhNmjJtxqw58xYsWrJsxS4Bu61aE7THXvvsFxJ2wEERhxx2xFHHrIs6fuE/r+1vm6/8jhhtDCwnASDGR1h4SGhYwEGU1Y/Xffk5G4u9XgIAYtxyGpZ5y9sDdNbyP142W5DgAhoE7i3q0c5x2vm9v24aZuNohdcxqSEAz8up00My03HSwmqPa8bMecG3Tjzb+f9EelEtg2vpzPeiIEEBwSA8IEDBwAE9F5Z6vQIQjAnLGTgWLO+uZTL/qwGEAYOAQpg3TefgwBCQgBDzqukKDBAOoU3KVtqIbBXK9XpEAAujuudkZN724kIGmrtVaS38ZZLrS9/4fsKMQhN3yXK5gvSBvJ2Y9/Nydbcvb0bm58+e3FhmGfGLJ9u7axl1F1LQTbaCeyrbu7wFCsorFgV4qnh+GUrWtaczqkSBB96AEeKRB94k2SyLuyw3qwrxeg3P5FNR1Av1Gsq2/ds6dPPkBAAA)format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-ext-400-normal-Bc8Ftmh3.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-400-normal-fXTG6kC5.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAASUABAAAAAACRAAAAQ3AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVEwAdBEICoRkg3oLIAABNgIkAzoEIAWFHgeBFAwHG3AHKB4HzukrRjyF5Gb4kQ/B873d17mv8TWkoqUUGaHodJCtoqntw7m8tiPWyGkfWDU/IMpzVk4zAs9Czv3c7Os5NvKFG1Ht9vBVXySRZpJc4tTrbM3sTRFcLa3zVboKWRIoAksKSKgqUQWEwlSoqjp44V5J9/kjd0+Fi5xaFjwJArgBAIJgIAgCCAI4CdNMqGuYXYUKdADLAkAAJwl6iX0+bZqEm1AH0Hu9rvrJHwxQG1Q/gFYwWYbgTRWgwEESVzbmtjQAt3DXO7Tu/+9Q/KNKWhTCgZ8fQSWoL0CUUgTBjgL8iEAcce7YHBeA8ZvogieCnxI0BCVeACCAAhBD/oDcAdUPABSgAX4kBPBTwjCAjwYSCneiqF65LUo/qXdYFrRwTujtMrKm07plTbSqLQFAiHBN7E4DG5wkiGXhCYBNETh3K/AciHN69iFfQjFOr9EXQQAAQXRNszs8PR0OH4fDV/dwGe76CHdj1MQa11DXYGcfZ6+B1X0OfwjY+i7KpQ1w9d+1z3/HydCB1f3U8A0fRFv+0bXxPWrZu3d9Nn4UcbLs/QCXLH/j3PCKblKOiZxLOR78W9brPo7eGTLz/F27ZPmePQdCB1YP4nJU91o4gU9cy64L3c3SPu8GfDn6ZXD2cGmllVqSxtD5vCXHm5xaeHlnpffx7DcPvXog5NnjA//cPz2btsz3yf+0MI8ri33tuv7upNbYmW5STbosW8bYItV/SPzxvXC0KnpWnFdC91oojit5Lyo6WcJQ1YzwBYbi52ohJVpcxfcHBqsv0nFz8U74rzS6M7r0RVlXZ3jJC4G92O//7Lm78VOtnUx+aQxAzsqPnrRr1t9zDrezKePvZ027x+fGte4s4NXu7/jEp3G9cM1bICYgACbuETUUD5wmenGXA/IBpAKVrl0AEJ5cqr6Q89tGq+SpqkDfX2DtG+pZ9teuae0AX98c301CX179InyErnSG8WCiABB4HFbVrw/lpTdBIOk82nXbpHKoQGyBpUovAAD4XQA8ZTUCeBJHIpI0v0FRrgcnckV3ANckrwYJKXEihQfdSKPER6XeExmEeEMmSe6QBwWmkZdmSOSthhibgIkBlUYreBKd/0NeVAE9WAyEaQpH6KikDWlUVg43Jy2FOmaYlsZhDEGZXO3mWEyWHI6zuaJkMlcSQ9k4F+KidIiFyZItGDc7r1pUj6wP6zrWB0/fbeeFeHl4YOvETMNiM8Ny+7OO6Qh2wur20YVxFts5dlORdl5Kwd5utR7SRcxqX8RA5Ehacha76hg7c6yzNm/Xf6vOLNrv544lIEkWg7xWo/ItBAeIJEmt0XgBwgM8gTifoiiLJroYYooNTeziEKe4zOoR/wvIKp89hSr+6jFAqw/LaonjmZHSscMNg4iPlWpFrO1RN3zkMU+/xUP+JQ99TbvTl1Vg0gtirT6lbwYAAAA=)format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAbQAA8AAAAACMAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAABHREVGAAABWAAAABgAAAAcABQABEdQT1MAAAFwAAAAHgAAAB5EdEx1R1NVQgAAAZAAAAAnAAAAKLj8uOpPUy8yAAABuAAAAFEAAABgF2hca1NUQVQAAAIMAAAAPQAAAEzpM8woY21hcAAAAkwAAABRAAAAdAyHCodnYXNwAAACoAAAAAgAAAAIAAAAEGdseWYAAAKoAAAB8AAAAl604cJFaGVhZAAABJgAAAA2AAAANhSS8UNoaGVhAAAE0AAAAB8AAAAkAcwBEGhtdHgAAATwAAAAHwAAADoe/QLmbG9jYQAABRAAAAAgAAAAIATcBZ9tYXhwAAAFMAAAABwAAAAgAIcCb25hbWUAAAVMAAABEwAAAmo0OV08cG9zdAAABmAAAABwAAAAlNdzMTB42mNgZGBg4GGAAEYgZAWTjCAeAAG0ABkAAQAAAAoAHAAcAAFERkxUAAgABAAAAAD//wAAAAAAAHjaY2BkYGDgYlADQiYXN58QBqGcxJI8Bj4GEGABEf//g0gAWkkFVQB42mNgYYpi/MLAysDA1MUUwcDA4A2hGeMYjBgdgKIMDJwMUMDEzoAEvJyAxAEGXpaXzH/+XWFgYP7DqKPAwDj//nWgSjWmW0BZBQZWADbPDjoAAAB42gXBsQ1AABQFwHsfiY5CYQBDaVVIlBL7mckA7kT0CpPCop79uIPz3q4MojUrSJePvNSKRlRGEH74hwYNAAAAeNpVyEcBwkAQBdCXHnoVgJU44Y4pFIAFUAOJiS23ZOZ3lKhwVSlkr91xdlQp7dwMnr5FWb/rMQQW26v+h3xT+IRHGEIBCvNr9Wh0OUU7NxUUAAAAAAEAAf//AA942mzQNZTUQAAG4H9mIDlbySoOt5I9HHZiL+vS4VDh7u40OFRo3+FQ464V7tbiUmHdJczicsm4fe/9YBgDEIc+BYOEeoArzUqyWSGkeQzZ6+wmfZwLot6nT1vVNM04oBlQ9AZoX3FHhh/gQR6Mp+JykKdUNSVJcu9T20/N73OrT3F/2qMw5vfWLp88SQL3rFE+3ygTrvv9BXaMqiCAkD3d2lr1ipagK4QqNDHjCuPBSCRqGGaQM+XLk0XrPX5GlaY1i54QD7nhvO/c3+Pp35mEHO58dN2fd6mEdgAYRrhfqEyfi7ei6AG0j6m6ohk8HQkrIUlKpQ1dj4dDEcZ1TY3HpDDpM3PZspkzl+lTqlbmZUYUy8o0LJtKSlOXLp3qnC9N1ieU7FWr7BIZPssuFm1hpt3BVBW/yPMPcwAUdEL8m6nqumbU1Eg4/Ceb+s2WpxrG1HKtnVKxcm9zolhWrkGbVN5RmqQJdGdpkj6ukGluzhTed7ULBRvkp4wAENVFUt1oNGrmaS2r8JcrCxfJjXWUUCo3yvMXXDlyhKrO3mhLj/qGhvoeLREyvvXpEYDgGutFDrFjYEDQ5PK1OcsWs15bt4JgM0uQe2LHAxCRHA9FeNoQnUS+Tsc7JkRXVV03JIZZJcBJRUdHxSmAAQCFZYU3AAEAAAACNgQJCtdkXw889QADA+gAAAAA29KmmgAAAADb2tDy+Tv+1ASSA/wAAAAGAAIAAAAAAAB42mNgZGBg/vPvCgMDy4af1n9rWSYBRVABHwCudAbaAHjaY4pgiAJibSQsC8WBQGyERDNAMQicZmgFAOeFB/4AAAAAGgA7AEYAUQBvAHcAqQCxAOYBCQEJAQkBCQEWAS942mNgZGBg4GfcwZDHsIWBDcxDAGYGJgAtGgH4eNqM0IFGQ2EUB/DfqqJMBZLAFUh0V0MoUBGllKQArHVtN9vu3HuH3iEAPUJP0cP0BD1D3D6zKQqHH9/5n885qHs1qza3iPfaenDNts/gGcs+gmcdeAuem+iZt+EleMGWx+Bl++Jv16jbDJ5Xtxa8om4peNUSbmT6WgbOlFp6Um2XEo9SI333EqmOrrKq0lDhQENDoS2XGioVYoVUTyyT62i4curCuUTpWK4lNVC4lBnI7Ez9dCeRK6TVa6Qp1rRnb0KHzh07/PfMG4mOkZ6W/JdUNM5FU7kTmaFn+Xj3SNNuVZFbXYnoj3nXcpkniXaVPzKqbpjJq86tH/fsSKuOkQextkzf1/Sx2KKPx/+aADN1XKsAeNpjYGIAg/+pDEZAipEBHfADsQrDSUYmBhtGZkYWRlZGNkZ2BmZGDkZORi5GbjbHpKLUslT20rxMAxNHVwjtagHlu0H5lqzpibm5iWCegaMBk3MQX2JyaUlqcn5ukl5yYnEqD0jG2MAMzAEAoO0cmA==)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-cyrillic-500-normal-DmUKJPL_.woff2)format("woff2"),url(/assets/jetbrains-mono-cyrillic-500-normal-DJqRU3vO.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-greek-500-normal-JpySY46c.woff2)format("woff2"),url(/assets/jetbrains-mono-greek-500-normal-D7SFKleX.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,d09GMgABAAAAAA/IABAAAAAALMwAAA9mAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnAbhXAcghYGYD9TVEFUTACDBBEICrA8p1ILgjgAATYCJAOEKAQgBYUeB4xODAcbFCYzA/aDkxp0RMXmTMH/IcEUkaXZhe7qAVQoRhtRmOhkzaUYXs3lyzTUlwptwwNGy28PLP/oZewn39g4Jjp8YusISWZ9eNpW788MNQMI7jZprgsqRiJ7imCBYlEWIBhgoWjj7uJGcddednnRIQ/fX77n7i8NtLf08UwEQl3jq59XJCShypU4lMyz3Hb3X0omkAkZCYVNhfN/c3Pmf1nJcDqnj2VE35fYAx+8WYIJhZj4znn1Qbjp9+f4Pab0wOi7JSECzG0o6DRWu/MBgfu/NdPu5O8cUssKSJ1wUyTjq6oWZic7nUsKuIEySsIkzXvdKzArVNkCwvP1lQCgK4yu0BVWFp6vrWVm/6Nt7H82JGhxDyAteCbHZLRdzTsxJqNEUxb+txHysoxjwQzz2p8tU5uFtC4RmcGouCRX3v1195cCAYgBAECRIWSIVNsQCiqEhh6RpxRRzogwaUTYdSCc3AivAcSQCcSkacSCBbQlcbQ9DqAddgyNAFiZilAX9c1OSB/6ZyYgxQCwDgGQoVQGIYAIRvVlRAiR7Ax+jsqKIDacjVExNGWA/MQLk8VzJshTmOztrVbySNyHVnaAiUVpcgdvmnh9FNeAYYXkMl4AqisEoDtIZK0zs6lsSM8yAboEhZ5CFVqD23kNfor49QgAGWwFBeRAIZRCLdigBbqPFSIF+ABeQAfotUU0g+rL1gCMOnSNn4S0PWEL5Nw2QBqyIVvBT2Fe9wCSYDa3QH3Vt4cSaWSAug+NT0JKDgAKQOMLa96EFIKf/gOUWDQiE3EFgAB4aACxikhFAAwKZZ8DgHeiRQixRghm5n4HrCOOSrQAtqJU3LzpFAr/6TAHnDo8QQgszNHZ77FXwgom85JfwQOqMC8Ae/gYkSsURQ1AgQgAQAutAAoAALCdA3gIkv619L//vwb0H8nVgjz+bwLUlFoDaPGQkfqBjQcpc4R8ODxDAPwurhVJMbRRa7ksFTJAUJERK+RXgDxDi8az0D39NBJmMjGZP5MWgyH5+mYXeZg0kZOdJEIu5k1OaIYW0Rnqv/S2DtQxKCIjOSRMLuKNDjpwIXDRE0Y407zODF3/W/ovnvbiAz6YIOC0nZKaVrpMADK9/g8sQDORaaLiVmpCNj+DsAUJUg1SNBKpxbESqyNRj2XB2IWvmkANITOe42zRZqt223RIZbdRi00cNmu1QTMlFwWnTH2y+Gh4pemWrkeGXlpddgjYKUgnRG9Ajn55huQbViCiyKhiY0qMKzSiwpRykyrFGE0jSCIFAJwLADkD0AtMDvBegHkHug0AoFGJVK2qhCXG61AIrWWr8aYYT2zhWkVVD6EX62dQyHJqVGLicdAyTQtFjJgVi1Olw0wdI6eouC1SZjvL3umikG5h3BSHrTOMQKpkUgQu/aGoVC5VKLOjXKBIrWSy2FqmlB+dTKAUcDwJE5TwBkbFnJ/rY92ss4dzXxKbV1/T9hAJvBUu+bwOaq/XWDeXTEKvBMv+HYDYtSMXHI8lErBlDv1FvCF2yDfJcie3f1oWe+wCtb9HCZdshHBIfLC9FrNf60J4HGMKYkfC5TJ+lSNHd3NdZ5dNZ96o6OG8lOvpt5IcR3r2z61suaFBNQmrT0wrCXkvwKkNWenURddyk4+u1FuSiQRtRvQxxhEfxFo411PBvfbTQ1aCPSbA0yIczRIJRXEEQyYS4ocX/of1WiiyaY7SI3Z54u6pUe8m+30ZXB4f13V23XbupYoeLhwa5QqcRIKRdhwtDjdHX7sj8SSWqhgd2s25/B7OuTu4WLdz9FgQLtG55HhMlbFN/J5rrmGPXQWwZOVVLnn31VevgnPrfKt+IsHWeS5ZYVnCJZ9HIqem3z+aeAsjx92cK+7hnPGyVcarN47i9QctdADS864Xl+f2cM6E6W7jwyDLmWTlDNfAWRtN3eLupy1VuUoXA0Y9nDMwDm0aWWy8vkY6yniPTKmax1mFMSPTY+OyNo5gvPrMaWh+d6Yocqzobrh2BM+xO665gj12WQPSixm3X325OHNpey4+FiI+ViG4n+0mtkeDT6J77bK1vsLcqur1aMyF/u63T4xFx/V3vXhzq+VXFL7ypKwjPz+l4w2I7O1b21+wrz3XGCkzhqwKi3EwUtbo7w+YrLVVCuM8U1MAvrXrA5YXtX7tt5YAgoHTtp8WWF0eGHqRNVhUEjBba0v8h+bWaAV+c525JPC7Y/GXH19hrUyWl51baa04D0cn7Sp5qsze1VrwV7OyZHfSiyJTsZB0TFoerSjfW97MUD0Yt59oL3Kd4SNndY35u+St5yYTG575P1cpvWf3hskypgS/yB30tjjC3t6zi/Om4l/vjtYRYdOcpyc4FXQtRAZTN5h66vUdRpsxv/FMnSRHdzIYUWcg6vcHAtFOq8NmDm+l9r49tjYS2RI2O2zqvuITK5wVJxaXLhudxmXyUWt/K/Qiy0BJqb/mZHOpb6DEYg2VlPrMQWf+rheNhpOjo1zdfIfKkm6qMhsrTeZd234B2oMPB68Kyh+7OQi90BoqLvWbT6wt9YWKrdEKfLUnmkv9J2fxld9XeaLx3vKyZ40nVj6HfU/YdfKw79i9rQU1lSWHXuzBSScKzcZC3WPdlRcUl9xQeTh2aC6G9md6xnorxgsKd1f0dvkr/e7KQtNT/YHYFK691fHqc7z5WGnoTXPhm6HR0mnubTCFnYEJf7bfP+G0Ouw1k4QvuOw/rPsO97uflSxXKCuWS0rjlcrKePHlrYZWnH9AY9VoL03tATMa+kB/IGO1LLqakbF6sqvQHJhOLowm8cyBSHJmMonogaPJATpOOOweE/o99p7WWmfms1k7ns101lZHxtRBTefZMzIJkSsaNIZ6PReT/ohVl1uGg2e7ml3474DkI8kGTVtDZOe2TO2ONujXMk7TagqPrtGehm2f5GksNUqWOMsAC1JpXVMB8a265dwCWrecb+qjmcuF3pKhX/qEodrl80v5RPPuq9xGdUu9x3B2pnqrdvnB6Pe2BBpN7ap0nS5d1W7yN56QiB0YXTzQIWMqsVit2E1IJJ65TsI+KzVZbHmN6dJzkiro99t7Gqscyl/8nbTSUVWdjOByTedCSCZdr0kNW3MHcrWWxWmp1cp+yE6c98d0jC0lz4gdGXjRaLO92ffUHysp8pF3giv+eOcGjvsbGa11hkiW+PB5hmPdht38S67pmA9my+IbNmXULvS3VG07Lq136q4xnKz01oPhuZGJueMWrK31JofKklae1qlqKba7vg5yWnz3hzAuBOeGe+aQ8ur03gWhSNxQ3a/htqUcWzqxZsgptuwTcY3NaGzZLlTUKP8UW4zHk6oxHFFf9+F9MrFUwq/n52j06vNeGlmS9eyJU7A8ejA8F5uYO2Oh2i5K+uDcaxPRubvf6vbTxu85m5WnWqo9WbdqJUcOf3tSoNvCbrn09HJ9io6MjZ4Xny5qb2puApUNggl8KLVU1ACQTpMomG2HoEriLLkaejrIM8gzIx90Is8iz8bnjGNjNLQADHJcM4VcEXqXkOUhG7nIA5BvNJ+N9MKmYbuN05Tq5ZrWhcjqhmQ1IzdINamW1V4WrBhk29RG6FoDqfIt9wjkbNfvcq4XYOw1PHUJmquCZ03r3q6PSYNswHBLUJbKWbcHWUaWQZUN89AnAsi+EPxQrrIlEJnJIlUJM7HMcyIb2WdiwCYYhdkKuBjZ5gUYSBu2TYSNZEBQZ/dsLMogZAlqcMnlTpcszNOWC7LHy0oMpAd7JmhjAL8NbmRdayAVvDU+WxL5XR70AowhbINbkc7/KgLwLmPqTfwNBEUHCMBxmUhdQj6WUlkZlKnxu6pO1d9/v//3Q7rw+///2fMjAAB6oDb0HaH0b6GUJU8Y0eR64ojqUqm14Od8duRDHPKhFfZpiGupUNnzetjxdgRbK/5+l4IJ5JeSir8t3R+1IaFaa9AZitANXTvqUxavQ2TYeNmrYwP4det2tGuWgFpDejL9euYAfQfK28gGGIvbgQRcpXesotZIABUK/LoCMgX5tBzoUFiWbADfCNfMu98PsCghbdyeq6jgel07qoCDJjjsyIFY7MAODSYL1alQ9phCIRt3Ri4tbQVgE5dpkfhjGAkZMAWRYzPLNioh68Amvwwd4zGzodCRGaTlUjZqVdaBTSBDfJ6vWzoqG6lZhQKbFK6EAKgz5unB00f9KabfIE1/CcA764pzcPbvSz+DTdl+/xcAHwUACHwM3JK6lBL+d88HxAVfFHh3m1b6a8TWqK9qwVrRVjPaq6WqFSbUXqOOqrXXCkfN6KhWPgnndsCsD3CdZzHpoEPOX6wjz67FHso9aAqWW+ynpyeAc+VhtGMQgKDhk7pBGKUsAnBflEhlCV2wnFLxv2VpRo+QTFme7a4qy5cjUVaqjK2sjFJ+GTmx9FYE4M2hvDRKwSyXLSegQ9S4fhOazOT8YyJCPAaHHhY2o8XyD4iYNc7mNKNWTL+ICdO0Go+aiFqsGZM3ZyMDg2khMRGTZqrMfNN8LD/nqJhhBq3qNXN2r8LzGkBuHpMgYmkV2dpFChUKu08Vm1pVR9TBh+FjevSxMYZr7aNbRE1aFJsrvS1RcG1pOS9ocBJ8rTYx4yMuQj6W2WwW4VnSDJFz5tU/LKK0ZgWXCD2/qRmKRWuYh+47US6adX1FAOIfwbmATE+T2t4wLVab3eF0uT1eXz6MQKLQGCyuGE8gVpLIFCqNzmCy2Bwur54vEIrEEqlM3qxQqtTdSrU6vcFoMlusNjsz0q+WhVWdeg0aNfUmG7vmOrRwaNWmXYdOTi5uHl5deXXr0auPj19Av2C9QgYMGor2C4sYMWrMuAlRk6bETJsxa868BYuWxC3bbY+9EjhBUjTDcrwgSih88/y+eq/C13kHnXKhbTUDgISUCgNDoABXKLCL+2X27E/c2jAAQEKsFigx1qgLEbSeu+NyhcJGIECQNm9L567c3l7uZ5Wo3pkx4tYOhJANKw9dEonovRqVDb5dMKz515Ng+hci23hm4UQEs8eChwPB0BZYOBINbH3Erw0HECzUaokWa42eyGD3PIBIMBSOrfryBQ3G4oHQKi+/kEA0tuaDV40GP3h0+wuAAgXTKy0v5428xUDwksfm538juY9ni9fz2Ggy4iWLMz4qLklle7kcZvOLwy5bXp7fdYrRJlP4l5NDdZPiKVeLnJV7Ohg2VAs/aQwZNVtodX2jki6RU1e/j6GkgZbgAmmogZafuF4mZlb1t+COUyrcnF/CCZzS4MO/dX1T6QQAAAA=)format("woff2"),url(/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-ext-500-normal-Cut-4mMH.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-ext-500-normal-ckzbgY84.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-cyan-200:oklch(91.7% .08 205.041);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-300:oklch(82.8% .111 230.318);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-500:oklch(68.5% .169 237.323);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-500:oklch(62.7% .265 303.9);--color-fuchsia-300:oklch(83.3% .145 321.434);--color-fuchsia-400:oklch(74% .238 322.16);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-400:oklch(71.8% .202 349.761);--color-pink-500:oklch(65.6% .241 354.308);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-950:oklch(14.5% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--default-mono-font-family:"JetBrains Mono", ui-monospace, SFMono-Regular, monospace}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.not-sr-only{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-y-0{inset-block:0}.top-0{top:0}.top-1\/2{top:50%}.top-2\.5{top:calc(var(--spacing) * 2.5)}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.bottom-3{bottom:calc(var(--spacing) * 3)}.-left-\[23px\]{left:-23px}.left-0{left:0}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.isolate{isolation:isolate}.isolation-auto{isolation:auto}.-z-50{z-index:-50}.z-0{z-index:0}.z-10{z-index:10}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[99\]{z-index:99}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-auto{margin-inline:auto}.my-3{margin-block:calc(var(--spacing) * 3)}.-mt-1{margin-top:calc(var(--spacing) * -1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-3\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.-ml-1{margin-left:calc(var(--spacing) * -1)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-6{-webkit-line-clamp:6;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.inline-table{display:inline-table}.list-item{display:list-item}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-column{display:table-column}.table-column-group{display:table-column-group}.table-footer-group{display:table-footer-group}.table-header-group{display:table-header-group}.table-row{display:table-row}.table-row-group{display:table-row-group}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.h-5{height:calc(var(--spacing) * 5)}.h-5\.5{height:calc(var(--spacing) * 5.5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-44{height:calc(var(--spacing) * 44)}.h-64{height:calc(var(--spacing) * 64)}.h-\[120px\]{height:120px}.h-\[150px\]{height:150px}.h-\[480px\]{height:480px}.h-\[500px\]{height:500px}.h-\[calc\(100vh-8\.5rem\)\]{height:calc(100vh - 8.5rem)}.h-full{height:100%}.h-screen{height:100vh}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-56{max-height:calc(var(--spacing) * 56)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[28rem\]{max-height:28rem}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.min-h-\[16rem\]{min-height:16rem}.min-h-\[58vh\]{min-height:58vh}.min-h-\[300px\]{min-height:300px}.min-h-\[620px\]{min-height:620px}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-4\.5{width:calc(var(--spacing) * 4.5)}.w-5{width:calc(var(--spacing) * 5)}.w-5\.5{width:calc(var(--spacing) * 5.5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-60{width:calc(var(--spacing) * 60)}.w-72{width:calc(var(--spacing) * 72)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[16rem\]{max-width:16rem}.max-w-\[85vw\]{max-width:85vw}.max-w-\[250px\]{max-width:250px}.max-w-\[280px\]{max-width:280px}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:0}.min-w-\[2\.5rem\]{min-width:2.5rem}.min-w-\[2rem\]{min-width:2rem}.min-w-\[3ch\]{min-width:3ch}.min-w-\[680px\]{min-width:680px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.touch-pinch-zoom{--tw-pinch-zoom:pinch-zoom;touch-action:var(--tw-pan-x,) var(--tw-pan-y,) var(--tw-pinch-zoom,)}.resize{resize:both}.resize-none{resize:none}.scroll-mt-20{scroll-margin-top:calc(var(--spacing) * 20)}.scrollbar-none{scrollbar-width:none}.scrollbar-thin{scrollbar-width:thin}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-7>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 7) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 7) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-reverse>:not(:last-child)){--tw-space-y-reverse:1}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}:where(.space-x-reverse>:not(:last-child)){--tw-space-x-reverse:1}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-y-reverse>:not(:last-child)){--tw-divide-y-reverse:1}:where(.divide-border\/20>:not(:last-child)){border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/20>:not(:last-child)){border-color:color-mix(in oklab,hsl(var(--border)) 20%,transparent)}}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-br{border-bottom-right-radius:.25rem}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-s{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.border-e{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.border-amber-500\/25{border-color:#f99c0040}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/25{border-color:color-mix(in oklab,var(--color-amber-500) 25%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-amber-500\/40{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/40{border-color:color-mix(in oklab,var(--color-amber-500) 40%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.border-border,.border-border\/20{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/20{border-color:color-mix(in oklab,hsl(var(--border)) 20%,transparent)}}.border-border\/30{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/30{border-color:color-mix(in oklab,hsl(var(--border)) 30%,transparent)}}.border-border\/40{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/40{border-color:color-mix(in oklab,hsl(var(--border)) 40%,transparent)}}.border-border\/50{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,hsl(var(--border)) 50%,transparent)}}.border-border\/60{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,hsl(var(--border)) 60%,transparent)}}.border-border\/70{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/70{border-color:color-mix(in oklab,hsl(var(--border)) 70%,transparent)}}.border-border\/80{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.border-border\/80{border-color:color-mix(in oklab,hsl(var(--border)) 80%,transparent)}}.border-cyan-500\/20{border-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/20{border-color:color-mix(in oklab,var(--color-cyan-500) 20%,transparent)}}.border-cyan-500\/25{border-color:#00b7d740}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/25{border-color:color-mix(in oklab,var(--color-cyan-500) 25%,transparent)}}.border-cyan-500\/30{border-color:#00b7d74d}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/30{border-color:color-mix(in oklab,var(--color-cyan-500) 30%,transparent)}}.border-emerald-500\/10{border-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/10{border-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.border-emerald-500\/25{border-color:#00bb7f40}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/25{border-color:color-mix(in oklab,var(--color-emerald-500) 25%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500) 30%,transparent)}}.border-emerald-500\/40{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/40{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.border-fuchsia-500\/25{border-color:#e12afb40}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-500\/25{border-color:color-mix(in oklab,var(--color-fuchsia-500) 25%,transparent)}}.border-fuchsia-500\/30{border-color:#e12afb4d}@supports (color:color-mix(in lab,red,red)){.border-fuchsia-500\/30{border-color:color-mix(in oklab,var(--color-fuchsia-500) 30%,transparent)}}.border-indigo-500\/25{border-color:#625fff40}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/25{border-color:color-mix(in oklab,var(--color-indigo-500) 25%,transparent)}}.border-indigo-500\/40{border-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/40{border-color:color-mix(in oklab,var(--color-indigo-500) 40%,transparent)}}.border-lime-500\/25{border-color:#80cd0040}@supports (color:color-mix(in lab,red,red)){.border-lime-500\/25{border-color:color-mix(in oklab,var(--color-lime-500) 25%,transparent)}}.border-neutral-700{border-color:var(--color-neutral-700)}.border-orange-500\/30{border-color:#fe6e004d}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/30{border-color:color-mix(in oklab,var(--color-orange-500) 30%,transparent)}}.border-pink-500\/25{border-color:#f6339a40}@supports (color:color-mix(in lab,red,red)){.border-pink-500\/25{border-color:color-mix(in oklab,var(--color-pink-500) 25%,transparent)}}.border-pink-500\/40{border-color:#f6339a66}@supports (color:color-mix(in lab,red,red)){.border-pink-500\/40{border-color:color-mix(in oklab,var(--color-pink-500) 40%,transparent)}}.border-primary,.border-primary\/20{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/20{border-color:color-mix(in oklab,hsl(var(--primary)) 20%,transparent)}}.border-primary\/25{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/25{border-color:color-mix(in oklab,hsl(var(--primary)) 25%,transparent)}}.border-primary\/30{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/30{border-color:color-mix(in oklab,hsl(var(--primary)) 30%,transparent)}}.border-primary\/40{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/40{border-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent)}}.border-primary\/50{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/50{border-color:color-mix(in oklab,hsl(var(--primary)) 50%,transparent)}}.border-primary\/60{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-primary\/60{border-color:color-mix(in oklab,hsl(var(--primary)) 60%,transparent)}}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/30{border-color:color-mix(in oklab,var(--color-purple-500) 30%,transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.border-red-500\/20{border-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.border-red-500\/25{border-color:#fb2c3640}@supports (color:color-mix(in lab,red,red)){.border-red-500\/25{border-color:color-mix(in oklab,var(--color-red-500) 25%,transparent)}}.border-red-500\/30{border-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.border-red-500\/30{border-color:color-mix(in oklab,var(--color-red-500) 30%,transparent)}}.border-red-500\/40{border-color:#fb2c3666}@supports (color:color-mix(in lab,red,red)){.border-red-500\/40{border-color:color-mix(in oklab,var(--color-red-500) 40%,transparent)}}.border-red-500\/50{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.border-red-500\/50{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.border-red-500\/60{border-color:#fb2c3699}@supports (color:color-mix(in lab,red,red)){.border-red-500\/60{border-color:color-mix(in oklab,var(--color-red-500) 60%,transparent)}}.border-sky-500\/25{border-color:#00a5ef40}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/25{border-color:color-mix(in oklab,var(--color-sky-500) 25%,transparent)}}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/30{border-color:color-mix(in oklab,var(--color-sky-500) 30%,transparent)}}.border-sky-500\/40{border-color:#00a5ef66}@supports (color:color-mix(in lab,red,red)){.border-sky-500\/40{border-color:color-mix(in oklab,var(--color-sky-500) 40%,transparent)}}.border-slate-500\/25{border-color:#62748e40}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/25{border-color:color-mix(in oklab,var(--color-slate-500) 25%,transparent)}}.border-slate-500\/30{border-color:#62748e4d}@supports (color:color-mix(in lab,red,red)){.border-slate-500\/30{border-color:color-mix(in oklab,var(--color-slate-500) 30%,transparent)}}.border-teal-500\/25{border-color:#00baa740}@supports (color:color-mix(in lab,red,red)){.border-teal-500\/25{border-color:color-mix(in oklab,var(--color-teal-500) 25%,transparent)}}.border-transparent{border-color:#0000}.border-violet-500\/15{border-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/15{border-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.border-violet-500\/20{border-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/20{border-color:color-mix(in oklab,var(--color-violet-500) 20%,transparent)}}.border-violet-500\/25{border-color:#8d54ff40}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/25{border-color:color-mix(in oklab,var(--color-violet-500) 25%,transparent)}}.border-violet-500\/30{border-color:#8d54ff4d}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/30{border-color:color-mix(in oklab,var(--color-violet-500) 30%,transparent)}}.border-violet-500\/40{border-color:#8d54ff66}@supports (color:color-mix(in lab,red,red)){.border-violet-500\/40{border-color:color-mix(in oklab,var(--color-violet-500) 40%,transparent)}}.border-t-emerald-500\/70{border-top-color:#00bb7fb3}@supports (color:color-mix(in lab,red,red)){.border-t-emerald-500\/70{border-top-color:color-mix(in oklab,var(--color-emerald-500) 70%,transparent)}}.border-t-primary\/70{border-top-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.border-t-primary\/70{border-top-color:color-mix(in oklab,hsl(var(--primary)) 70%,transparent)}}.border-t-violet-500\/70{border-top-color:#8d54ffb3}@supports (color:color-mix(in lab,red,red)){.border-t-violet-500\/70{border-top-color:color-mix(in oklab,var(--color-violet-500) 70%,transparent)}}.border-l-amber-500\/80{border-left-color:#f99c00cc}@supports (color:color-mix(in lab,red,red)){.border-l-amber-500\/80{border-left-color:color-mix(in oklab,var(--color-amber-500) 80%,transparent)}}.border-l-cyan-500\/80{border-left-color:#00b7d7cc}@supports (color:color-mix(in lab,red,red)){.border-l-cyan-500\/80{border-left-color:color-mix(in oklab,var(--color-cyan-500) 80%,transparent)}}.border-l-indigo-500\/80{border-left-color:#625fffcc}@supports (color:color-mix(in lab,red,red)){.border-l-indigo-500\/80{border-left-color:color-mix(in oklab,var(--color-indigo-500) 80%,transparent)}}.border-l-muted{border-left-color:hsl(var(--muted))}.border-l-violet-500\/80{border-left-color:#8d54ffcc}@supports (color:color-mix(in lab,red,red)){.border-l-violet-500\/80{border-left-color:color-mix(in oklab,var(--color-violet-500) 80%,transparent)}}.bg-\[\#030712\]{background-color:#030712}.bg-\[hsl\(224\,28\%\,8\%\)\]{background-color:#0f121a}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-400\/80{background-color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.bg-amber-400\/80{background-color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/5{background-color:#f99c000d}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/5{background-color:color-mix(in oklab,var(--color-amber-500) 5%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500) 15%,transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/20{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.bg-amber-500\/80{background-color:#f99c00cc}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/80{background-color:color-mix(in oklab,var(--color-amber-500) 80%,transparent)}}.bg-amber-500\/\[0\.06\]{background-color:#f99c000f}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-amber-500) 6%,transparent)}}.bg-background\/10{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/10{background-color:color-mix(in oklab,hsl(var(--background)) 10%,transparent)}}.bg-background\/20{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/20{background-color:color-mix(in oklab,hsl(var(--background)) 20%,transparent)}}.bg-background\/25{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/25{background-color:color-mix(in oklab,hsl(var(--background)) 25%,transparent)}}.bg-background\/30{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/30{background-color:color-mix(in oklab,hsl(var(--background)) 30%,transparent)}}.bg-background\/35{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/35{background-color:color-mix(in oklab,hsl(var(--background)) 35%,transparent)}}.bg-background\/40{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/40{background-color:color-mix(in oklab,hsl(var(--background)) 40%,transparent)}}.bg-background\/50{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/50{background-color:color-mix(in oklab,hsl(var(--background)) 50%,transparent)}}.bg-background\/60{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.bg-background\/60{background-color:color-mix(in oklab,hsl(var(--background)) 60%,transparent)}}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab,red,red)){.bg-black\/10{background-color:color-mix(in oklab,var(--color-black) 10%,transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\/30{background-color:color-mix(in oklab,var(--color-black) 30%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-blue-500\/20{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/20{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card,.bg-card\/10{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/10{background-color:color-mix(in oklab,hsl(var(--card)) 10%,transparent)}}.bg-card\/20{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/20{background-color:color-mix(in oklab,hsl(var(--card)) 20%,transparent)}}.bg-card\/30{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/30{background-color:color-mix(in oklab,hsl(var(--card)) 30%,transparent)}}.bg-card\/40{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/40{background-color:color-mix(in oklab,hsl(var(--card)) 40%,transparent)}}.bg-card\/45{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/45{background-color:color-mix(in oklab,hsl(var(--card)) 45%,transparent)}}.bg-card\/50{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/50{background-color:color-mix(in oklab,hsl(var(--card)) 50%,transparent)}}.bg-card\/60{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/60{background-color:color-mix(in oklab,hsl(var(--card)) 60%,transparent)}}.bg-card\/70{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/70{background-color:color-mix(in oklab,hsl(var(--card)) 70%,transparent)}}.bg-card\/85{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.bg-card\/85{background-color:color-mix(in oklab,hsl(var(--card)) 85%,transparent)}}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/10{background-color:color-mix(in oklab,var(--color-cyan-500) 10%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500) 15%,transparent)}}.bg-cyan-500\/20{background-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/20{background-color:color-mix(in oklab,var(--color-cyan-500) 20%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/5{background-color:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/5{background-color:color-mix(in oklab,var(--color-emerald-500) 5%,transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.bg-emerald-500\/80{background-color:#00bb7fcc}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/80{background-color:color-mix(in oklab,var(--color-emerald-500) 80%,transparent)}}.bg-foreground\/10{background-color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.bg-foreground\/10{background-color:color-mix(in oklab,hsl(var(--foreground)) 10%,transparent)}}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-fuchsia-500\/10{background-color:#e12afb1a}@supports (color:color-mix(in lab,red,red)){.bg-fuchsia-500\/10{background-color:color-mix(in oklab,var(--color-fuchsia-500) 10%,transparent)}}.bg-fuchsia-500\/15{background-color:#e12afb26}@supports (color:color-mix(in lab,red,red)){.bg-fuchsia-500\/15{background-color:color-mix(in oklab,var(--color-fuchsia-500) 15%,transparent)}}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/10{background-color:color-mix(in oklab,var(--color-indigo-500) 10%,transparent)}}.bg-indigo-500\/15{background-color:#625fff26}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/15{background-color:color-mix(in oklab,var(--color-indigo-500) 15%,transparent)}}.bg-lime-500{background-color:var(--color-lime-500)}.bg-lime-500\/15{background-color:#80cd0026}@supports (color:color-mix(in lab,red,red)){.bg-lime-500\/15{background-color:color-mix(in oklab,var(--color-lime-500) 15%,transparent)}}.bg-muted{background-color:hsl(var(--muted))}.bg-muted-foreground\/30{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/30{background-color:color-mix(in oklab,hsl(var(--muted-foreground)) 30%,transparent)}}.bg-muted-foreground\/40{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/40{background-color:color-mix(in oklab,hsl(var(--muted-foreground)) 40%,transparent)}}.bg-muted-foreground\/45{background-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/45{background-color:color-mix(in oklab,hsl(var(--muted-foreground)) 45%,transparent)}}.bg-muted\/10{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/10{background-color:color-mix(in oklab,hsl(var(--muted)) 10%,transparent)}}.bg-muted\/15{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/15{background-color:color-mix(in oklab,hsl(var(--muted)) 15%,transparent)}}.bg-muted\/20{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,hsl(var(--muted)) 20%,transparent)}}.bg-muted\/25{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/25{background-color:color-mix(in oklab,hsl(var(--muted)) 25%,transparent)}}.bg-muted\/40{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,hsl(var(--muted)) 40%,transparent)}}.bg-neutral-800{background-color:var(--color-neutral-800)}.bg-neutral-950{background-color:var(--color-neutral-950)}.bg-orange-500\/20{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/20{background-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.bg-pink-500{background-color:var(--color-pink-500)}.bg-pink-500\/10{background-color:#f6339a1a}@supports (color:color-mix(in lab,red,red)){.bg-pink-500\/10{background-color:color-mix(in oklab,var(--color-pink-500) 10%,transparent)}}.bg-pink-500\/15{background-color:#f6339a26}@supports (color:color-mix(in lab,red,red)){.bg-pink-500\/15{background-color:color-mix(in oklab,var(--color-pink-500) 15%,transparent)}}.bg-popover,.bg-popover\/95{background-color:hsl(var(--popover))}@supports (color:color-mix(in lab,red,red)){.bg-popover\/95{background-color:color-mix(in oklab,hsl(var(--popover)) 95%,transparent)}}.bg-primary,.bg-primary\/5{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,hsl(var(--primary)) 5%,transparent)}}.bg-primary\/10{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,hsl(var(--primary)) 10%,transparent)}}.bg-primary\/15{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,hsl(var(--primary)) 15%,transparent)}}.bg-primary\/70{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/70{background-color:color-mix(in oklab,hsl(var(--primary)) 70%,transparent)}}.bg-primary\/\[0\.06\]{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.bg-primary\/\[0\.06\]{background-color:color-mix(in oklab,hsl(var(--primary)) 6%,transparent)}}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/20{background-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/5{background-color:color-mix(in oklab,var(--color-red-500) 5%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-500\/15{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/15{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.bg-red-500\/20{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/20{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.bg-red-500\/80{background-color:#fb2c36cc}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/80{background-color:color-mix(in oklab,var(--color-red-500) 80%,transparent)}}.bg-rose-400\/80{background-color:#ff667fcc}@supports (color:color-mix(in lab,red,red)){.bg-rose-400\/80{background-color:color-mix(in oklab,var(--color-rose-400) 80%,transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/15{background-color:color-mix(in oklab,var(--color-rose-500) 15%,transparent)}}.bg-sky-500\/5{background-color:#00a5ef0d}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/5{background-color:color-mix(in oklab,var(--color-sky-500) 5%,transparent)}}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab,red,red)){.bg-sky-500\/10{background-color:color-mix(in oklab,var(--color-sky-500) 10%,transparent)}}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-500\/15{background-color:#62748e26}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/15{background-color:color-mix(in oklab,var(--color-slate-500) 15%,transparent)}}.bg-slate-500\/20{background-color:#62748e33}@supports (color:color-mix(in lab,red,red)){.bg-slate-500\/20{background-color:color-mix(in oklab,var(--color-slate-500) 20%,transparent)}}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-500\/10{background-color:#00baa71a}@supports (color:color-mix(in lab,red,red)){.bg-teal-500\/10{background-color:color-mix(in oklab,var(--color-teal-500) 10%,transparent)}}.bg-teal-500\/15{background-color:#00baa726}@supports (color:color-mix(in lab,red,red)){.bg-teal-500\/15{background-color:color-mix(in oklab,var(--color-teal-500) 15%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-500{background-color:var(--color-violet-500)}.bg-violet-500\/5{background-color:#8d54ff0d}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/5{background-color:color-mix(in oklab,var(--color-violet-500) 5%,transparent)}}.bg-violet-500\/10{background-color:#8d54ff1a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/10{background-color:color-mix(in oklab,var(--color-violet-500) 10%,transparent)}}.bg-violet-500\/15{background-color:#8d54ff26}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/15{background-color:color-mix(in oklab,var(--color-violet-500) 15%,transparent)}}.bg-violet-500\/\[0\.04\]{background-color:#8d54ff0a}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-violet-500) 4%,transparent)}}.bg-violet-500\/\[0\.05\]{background-color:#8d54ff0d}@supports (color:color-mix(in lab,red,red)){.bg-violet-500\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-violet-500) 5%,transparent)}}.bg-zinc-500{background-color:var(--color-zinc-500)}.bg-zinc-500\/10{background-color:#71717b1a}@supports (color:color-mix(in lab,red,red)){.bg-zinc-500\/10{background-color:color-mix(in oklab,var(--color-zinc-500) 10%,transparent)}}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-foreground{--tw-gradient-from:hsl(var(--foreground));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-foreground{--tw-gradient-via:hsl(var(--foreground));--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-primary{--tw-gradient-to:hsl(var(--primary));--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-repeat{background-repeat:repeat}.fill-primary\/20{fill:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.fill-primary\/20{fill:color-mix(in oklab,hsl(var(--primary)) 20%,transparent)}}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0{padding-top:0}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[12vh\]{padding-top:12vh}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pb-1{padding-bottom:var(--spacing)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,monospace}.font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,sans-serif}.font-space{font-family:Space Grotesk,sans-serif}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-wrap{text-wrap:wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-clip{text-overflow:clip}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-300\/70{color:#ffd236b3}@supports (color:color-mix(in lab,red,red)){.text-amber-300\/70{color:color-mix(in oklab,var(--color-amber-300) 70%,transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400) 80%,transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/90{color:color-mix(in oklab,var(--color-amber-400) 90%,transparent)}}.text-amber-500{color:var(--color-amber-500)}.text-black{color:var(--color-black)}.text-blue-300{color:var(--color-blue-300)}.text-cyan-200\/90{color:#a2f4fde6}@supports (color:color-mix(in lab,red,red)){.text-cyan-200\/90{color:color-mix(in oklab,var(--color-cyan-200) 90%,transparent)}}.text-cyan-300{color:var(--color-cyan-300)}.text-cyan-300\/80{color:#53eafdcc}@supports (color:color-mix(in lab,red,red)){.text-cyan-300\/80{color:color-mix(in oklab,var(--color-cyan-300) 80%,transparent)}}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-300\/70{color:#5ee9b5b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/70{color:color-mix(in oklab,var(--color-emerald-300) 70%,transparent)}}.text-emerald-300\/80{color:#5ee9b5cc}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/80{color:color-mix(in oklab,var(--color-emerald-300) 80%,transparent)}}.text-emerald-300\/90{color:#5ee9b5e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-300\/90{color:color-mix(in oklab,var(--color-emerald-300) 90%,transparent)}}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-400\/70{color:#00d294b3}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/70{color:color-mix(in oklab,var(--color-emerald-400) 70%,transparent)}}.text-emerald-400\/90{color:#00d294e6}@supports (color:color-mix(in lab,red,red)){.text-emerald-400\/90{color:color-mix(in oklab,var(--color-emerald-400) 90%,transparent)}}.text-foreground,.text-foreground\/70{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/70{color:color-mix(in oklab,hsl(var(--foreground)) 70%,transparent)}}.text-foreground\/75{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/75{color:color-mix(in oklab,hsl(var(--foreground)) 75%,transparent)}}.text-foreground\/80{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,hsl(var(--foreground)) 80%,transparent)}}.text-foreground\/85{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/85{color:color-mix(in oklab,hsl(var(--foreground)) 85%,transparent)}}.text-foreground\/90{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.text-foreground\/90{color:color-mix(in oklab,hsl(var(--foreground)) 90%,transparent)}}.text-fuchsia-300{color:var(--color-fuchsia-300)}.text-fuchsia-400{color:var(--color-fuchsia-400)}.text-indigo-300{color:var(--color-indigo-300)}.text-indigo-400{color:var(--color-indigo-400)}.text-lime-400{color:var(--color-lime-400)}.text-muted-foreground,.text-muted-foreground\/40{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/40{color:color-mix(in oklab,hsl(var(--muted-foreground)) 40%,transparent)}}.text-muted-foreground\/50{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,hsl(var(--muted-foreground)) 50%,transparent)}}.text-muted-foreground\/55{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/55{color:color-mix(in oklab,hsl(var(--muted-foreground)) 55%,transparent)}}.text-muted-foreground\/60{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,hsl(var(--muted-foreground)) 60%,transparent)}}.text-muted-foreground\/70{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/70{color:color-mix(in oklab,hsl(var(--muted-foreground)) 70%,transparent)}}.text-muted-foreground\/75{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/75{color:color-mix(in oklab,hsl(var(--muted-foreground)) 75%,transparent)}}.text-muted-foreground\/80{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/80{color:color-mix(in oklab,hsl(var(--muted-foreground)) 80%,transparent)}}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-400{color:var(--color-neutral-400)}.text-orange-300{color:var(--color-orange-300)}.text-pink-300{color:var(--color-pink-300)}.text-pink-400{color:var(--color-pink-400)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-primary\/70{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.text-primary\/70{color:color-mix(in oklab,hsl(var(--primary)) 70%,transparent)}}.text-primary\/80{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.text-primary\/80{color:color-mix(in oklab,hsl(var(--primary)) 80%,transparent)}}.text-purple-300{color:var(--color-purple-300)}.text-red-200{color:var(--color-red-200)}.text-red-200\/90{color:#ffcacae6}@supports (color:color-mix(in lab,red,red)){.text-red-200\/90{color:color-mix(in oklab,var(--color-red-200) 90%,transparent)}}.text-red-300{color:var(--color-red-300)}.text-red-300\/70{color:#ffa3a3b3}@supports (color:color-mix(in lab,red,red)){.text-red-300\/70{color:color-mix(in oklab,var(--color-red-300) 70%,transparent)}}.text-red-300\/90{color:#ffa3a3e6}@supports (color:color-mix(in lab,red,red)){.text-red-300\/90{color:color-mix(in oklab,var(--color-red-300) 90%,transparent)}}.text-red-400{color:var(--color-red-400)}.text-red-400\/80{color:#ff6568cc}@supports (color:color-mix(in lab,red,red)){.text-red-400\/80{color:color-mix(in oklab,var(--color-red-400) 80%,transparent)}}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-sky-200\/80{color:#b8e6fecc}@supports (color:color-mix(in lab,red,red)){.text-sky-200\/80{color:color-mix(in oklab,var(--color-sky-200) 80%,transparent)}}.text-sky-300{color:var(--color-sky-300)}.text-sky-300\/80{color:#77d4ffcc}@supports (color:color-mix(in lab,red,red)){.text-sky-300\/80{color:color-mix(in oklab,var(--color-sky-300) 80%,transparent)}}.text-sky-300\/90{color:#77d4ffe6}@supports (color:color-mix(in lab,red,red)){.text-sky-300\/90{color:color-mix(in oklab,var(--color-sky-300) 90%,transparent)}}.text-sky-400{color:var(--color-sky-400)}.text-slate-300{color:var(--color-slate-300)}.text-teal-300{color:var(--color-teal-300)}.text-teal-400{color:var(--color-teal-400)}.text-transparent{color:#0000}.text-violet-200\/90{color:#ddd6ffe6}@supports (color:color-mix(in lab,red,red)){.text-violet-200\/90{color:color-mix(in oklab,var(--color-violet-200) 90%,transparent)}}.text-violet-300{color:var(--color-violet-300)}.text-violet-300\/70{color:#c4b4ffb3}@supports (color:color-mix(in lab,red,red)){.text-violet-300\/70{color:color-mix(in oklab,var(--color-violet-300) 70%,transparent)}}.text-violet-300\/80{color:#c4b4ffcc}@supports (color:color-mix(in lab,red,red)){.text-violet-300\/80{color:color-mix(in oklab,var(--color-violet-300) 80%,transparent)}}.text-violet-300\/90{color:#c4b4ffe6}@supports (color:color-mix(in lab,red,red)){.text-violet-300\/90{color:color-mix(in oklab,var(--color-violet-300) 90%,transparent)}}.text-violet-400{color:var(--color-violet-400)}.text-white{color:var(--color-white)}.text-zinc-400{color:var(--color-zinc-400)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.diagonal-fractions{--tw-numeric-fraction:diagonal-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.lining-nums{--tw-numeric-figure:lining-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.oldstyle-nums{--tw-numeric-figure:oldstyle-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.proportional-nums{--tw-numeric-spacing:proportional-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.slashed-zero{--tw-slashed-zero:slashed-zero;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.stacked-fractions{--tw-numeric-fraction:stacked-fractions;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.normal-nums{font-variant-numeric:normal}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.overline{text-decoration-line:overline}.underline{text-decoration-line:underline}.decoration-primary\/40{-webkit-text-decoration-color:hsl(var(--primary));text-decoration-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.decoration-primary\/40{-webkit-text-decoration-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent);text-decoration-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent)}}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.accent-primary{accent-color:hsl(var(--primary))}.\[color-scheme\:dark\]{color-scheme:dark}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-80{opacity:.8}.opacity-85{opacity:.85}.opacity-90{opacity:.9}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(16\,185\,129\,0\.4\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#10b98166);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(239\,68\,68\,0\.4\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#ef444466);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(245\,158\,11\,0\.4\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,#f59e0b66);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-4{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-amber-500\/10{--tw-shadow-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.shadow-amber-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-amber-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/15{--tw-shadow-color:#00000026}@supports (color:color-mix(in lab,red,red)){.shadow-black\/15{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 15%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/20{--tw-shadow-color:#0003}@supports (color:color-mix(in lab,red,red)){.shadow-black\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/25{--tw-shadow-color:#00000040}@supports (color:color-mix(in lab,red,red)){.shadow-black\/25{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 25%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/5{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-primary\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/10{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-primary\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/20{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-background\/60{--tw-ring-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.ring-background\/60{--tw-ring-color:color-mix(in oklab, hsl(var(--background)) 60%, transparent)}}.ring-black\/40{--tw-ring-color:#0006}@supports (color:color-mix(in lab,red,red)){.ring-black\/40{--tw-ring-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.ring-white\/70{--tw-ring-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.ring-white\/70{--tw-ring-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-xl{--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-grayscale{--tw-backdrop-grayscale:grayscale(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-invert{--tw-backdrop-invert:invert(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-sepia{--tw-backdrop-sepia:sepia(100%);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition\!{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events!important;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))!important;transition-duration:var(--tw-duration,var(--default-transition-duration))!important}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}:where(.divide-x-reverse>:not(:last-child)){--tw-divide-x-reverse:1}.ring-inset{--tw-ring-inset:inset}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}@media(hover:hover){.group-hover\:translate-x-0\.5:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:text-foreground:is(:where(.group):hover *){color:hsl(var(--foreground))}.group-hover\:text-primary:is(:where(.group):hover *){color:hsl(var(--primary))}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/50::placeholder{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-muted-foreground\/50::placeholder{color:color-mix(in oklab,hsl(var(--muted-foreground)) 50%,transparent)}}.first\:mt-0:first-child{margin-top:0}.first\:rounded-l-sm:first-child{border-top-left-radius:calc(var(--radius) - 4px);border-bottom-left-radius:calc(var(--radius) - 4px)}@media(hover:hover){.hover\:border-amber-500\/50:hover{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.hover\:border-amber-500\/50:hover{border-color:color-mix(in oklab,var(--color-amber-500) 50%,transparent)}}.hover\:border-border:hover,.hover\:border-border\/60:hover{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.hover\:border-border\/60:hover{border-color:color-mix(in oklab,hsl(var(--border)) 60%,transparent)}}.hover\:border-emerald-500\/40:hover{border-color:#00bb7f66}@supports (color:color-mix(in lab,red,red)){.hover\:border-emerald-500\/40:hover{border-color:color-mix(in oklab,var(--color-emerald-500) 40%,transparent)}}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 30%,transparent)}}.hover\:border-primary\/40:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 40%,transparent)}}.hover\:border-primary\/45:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/45:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 45%,transparent)}}.hover\:border-primary\/50:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/50:hover{border-color:color-mix(in oklab,hsl(var(--primary)) 50%,transparent)}}.hover\:border-red-500\/50:hover{border-color:#fb2c3680}@supports (color:color-mix(in lab,red,red)){.hover\:border-red-500\/50:hover{border-color:color-mix(in oklab,var(--color-red-500) 50%,transparent)}}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-400:hover{background-color:var(--color-amber-400)}.hover\:bg-amber-500\/10:hover{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.hover\:bg-amber-500\/20:hover{background-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-amber-500\/20:hover{background-color:color-mix(in oklab,var(--color-amber-500) 20%,transparent)}}.hover\:bg-background\/40:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/40:hover{background-color:color-mix(in oklab,hsl(var(--background)) 40%,transparent)}}.hover\:bg-background\/60:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/60:hover{background-color:color-mix(in oklab,hsl(var(--background)) 60%,transparent)}}.hover\:bg-background\/80:hover{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-background\/80:hover{background-color:color-mix(in oklab,hsl(var(--background)) 80%,transparent)}}.hover\:bg-card\/45:hover{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-card\/45:hover{background-color:color-mix(in oklab,hsl(var(--card)) 45%,transparent)}}.hover\:bg-card\/75:hover{background-color:hsl(var(--card))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-card\/75:hover{background-color:color-mix(in oklab,hsl(var(--card)) 75%,transparent)}}.hover\:bg-emerald-500\/10:hover{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/10:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 10%,transparent)}}.hover\:bg-emerald-500\/15:hover{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/15:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 15%,transparent)}}.hover\:bg-emerald-500\/20:hover{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-emerald-500\/20:hover{background-color:color-mix(in oklab,var(--color-emerald-500) 20%,transparent)}}.hover\:bg-neutral-700:hover{background-color:var(--color-neutral-700)}.hover\:bg-primary\/10:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 10%,transparent)}}.hover\:bg-primary\/20:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/20:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 20%,transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 90%,transparent)}}.hover\:bg-primary\/95:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/95:hover{background-color:color-mix(in oklab,hsl(var(--primary)) 95%,transparent)}}.hover\:bg-red-500\/5:hover{background-color:#fb2c360d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/5:hover{background-color:color-mix(in oklab,var(--color-red-500) 5%,transparent)}}.hover\:bg-red-500\/10:hover{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/10:hover{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.hover\:bg-red-500\/15:hover{background-color:#fb2c3626}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/15:hover{background-color:color-mix(in oklab,var(--color-red-500) 15%,transparent)}}.hover\:bg-red-500\/20:hover{background-color:#fb2c3633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-500\/20:hover{background-color:color-mix(in oklab,var(--color-red-500) 20%,transparent)}}.hover\:bg-sky-500\/20:hover{background-color:#00a5ef33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-sky-500\/20:hover{background-color:color-mix(in oklab,var(--color-sky-500) 20%,transparent)}}.hover\:bg-violet-500\/20:hover{background-color:#8d54ff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-violet-500\/20:hover{background-color:color-mix(in oklab,var(--color-violet-500) 20%,transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-200:hover{color:var(--color-amber-200)}.hover\:text-emerald-300:hover{color:var(--color-emerald-300)}.hover\:text-foreground:hover,.hover\:text-foreground\/80:hover{color:hsl(var(--foreground))}@supports (color:color-mix(in lab,red,red)){.hover\:text-foreground\/80:hover{color:color-mix(in oklab,hsl(var(--foreground)) 80%,transparent)}}.hover\:text-primary:hover,.hover\:text-primary\/80:hover{color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab,hsl(var(--primary)) 80%,transparent)}}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-violet-200:hover{color:var(--color-violet-200)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-primary:focus,.focus\:border-primary\/50:focus{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus\:border-primary\/50:focus{border-color:color-mix(in oklab,hsl(var(--primary)) 50%,transparent)}}.focus\:border-red-400\/50:focus{border-color:#ff656880}@supports (color:color-mix(in lab,red,red)){.focus\:border-red-400\/50:focus{border-color:color-mix(in oklab,var(--color-red-400) 50%,transparent)}}.focus\:border-sky-400\/50:focus{border-color:#00bcfe80}@supports (color:color-mix(in lab,red,red)){.focus\:border-sky-400\/50:focus{border-color:color-mix(in oklab,var(--color-sky-400) 50%,transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-primary\/50:focus{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab,red,red)){.focus\:ring-primary\/50:focus{--tw-ring-color:color-mix(in oklab, hsl(var(--primary)) 50%, transparent)}}.focus\:ring-violet-500\/50:focus{--tw-ring-color:#8d54ff80}@supports (color:color-mix(in lab,red,red)){.focus\:ring-violet-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-violet-500) 50%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}@media(min-width:40rem){.sm\:flex{display:flex}.sm\:inline{display:inline}.sm\:w-36{width:calc(var(--spacing) * 36)}.sm\:w-\[640px\]{width:640px}.sm\:w-auto{width:auto}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:justify-between{justify-content:space-between}.sm\:p-10{padding:calc(var(--spacing) * 10)}}@media(min-width:48rem){.md\:col-span-2{grid-column:span 2/span 2}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-\[170px_1fr\]{grid-template-columns:170px 1fr}.md\:p-6{padding:calc(var(--spacing) * 6)}.md\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media(min-width:64rem){.lg\:absolute{position:absolute}.lg\:top-4{top:calc(var(--spacing) * 4)}.lg\:top-6{top:calc(var(--spacing) * 6)}.lg\:right-4{right:calc(var(--spacing) * 4)}.lg\:right-6{right:calc(var(--spacing) * 6)}.lg\:bottom-4{bottom:calc(var(--spacing) * 4)}.lg\:bottom-6{bottom:calc(var(--spacing) * 6)}.lg\:left-4{left:calc(var(--spacing) * 4)}.lg\:left-6{left:calc(var(--spacing) * 6)}.lg\:col-span-2{grid-column:span 2/span 2}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-\[calc\(100\%-2rem\)\]{height:calc(100% - 2rem)}.lg\:h-\[calc\(100\%-3rem\)\]{height:calc(100% - 3rem)}.lg\:w-40{width:calc(var(--spacing) * 40)}.lg\:w-72{width:calc(var(--spacing) * 72)}.lg\:w-80{width:calc(var(--spacing) * 80)}.lg\:w-96{width:calc(var(--spacing) * 96)}.lg\:flex-none{flex:none}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,1\.3fr\)\]{grid-template-columns:minmax(0,1fr) minmax(0,1.3fr)}.lg\:flex-row{flex-direction:row}.lg\:items-stretch{align-items:stretch}.lg\:rounded-xl{border-radius:var(--radius-xl)}.lg\:border{border-style:var(--tw-border-style);border-width:1px}.lg\:border-border\/40{border-color:hsl(var(--border))}@supports (color:color-mix(in lab,red,red)){.lg\:border-border\/40{border-color:color-mix(in oklab,hsl(var(--border)) 40%,transparent)}}.lg\:bg-background\/65{background-color:hsl(var(--background))}@supports (color:color-mix(in lab,red,red)){.lg\:bg-background\/65{background-color:color-mix(in oklab,hsl(var(--background)) 65%,transparent)}}.lg\:p-4{padding:calc(var(--spacing) * 4)}.lg\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.lg\:shadow-black\/50{--tw-shadow-color:#00000080}@supports (color:color-mix(in lab,red,red)){.lg\:shadow-black\/50{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 50%, transparent) var(--tw-shadow-alpha), transparent)}}.lg\:backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}}:root{--background:224 30% 6%;--foreground:210 20% 92%;--card:224 25% 10%;--card-foreground:210 20% 94%;--popover:224 28% 9%;--popover-foreground:210 20% 94%;--primary:172 72% 50%;--primary-foreground:224 47% 8%;--muted:220 16% 14%;--muted-foreground:215 14% 64%;--accent:220 16% 16%;--accent-foreground:210 20% 94%;--border:222 18% 23%;--input:222 18% 23%;--ring:172 72% 50%;--radius:.75rem;color-scheme:dark}html,body,#root{height:100%;overflow:hidden}body{background-color:hsl(var(--background));color:hsl(var(--foreground));font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0}*{border-color:hsl(var(--border) / .85);outline-color:hsl(var(--primary) / .5)}:focus-visible{outline:2px solid hsl(var(--primary) / .7);outline-offset:2px}input:focus,textarea:focus,select:focus{border-color:hsl(var(--primary));box-shadow:0 0 0 2px hsl(var(--primary) / .15);outline:none}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--primary) / .25);border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:hsl(var(--primary) / .5)}.mc-card{border:1px solid hsl(var(--border) / .95);background-color:hsl(var(--card) / .85);border-radius:1rem;transition:transform .3s cubic-bezier(.4,0,.2,1),background-color .3s cubic-bezier(.4,0,.2,1),border-color .3s cubic-bezier(.4,0,.2,1),box-shadow .3s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;box-shadow:0 10px 30px -15px #00000073,inset 0 1px #ffffff0d}.mc-card:before{content:"";background:linear-gradient(90deg,hsl(var(--primary)),#6366f1,#a855f7);opacity:.75;height:3.5px;transition:opacity .3s;position:absolute;top:0;left:0;right:0}.mc-card:hover{background-color:hsl(var(--card) / .92);border-color:hsl(var(--primary) / .35);box-shadow:0 20px 40px -20px #000000a6,0 0 18px 2px hsl(var(--primary) / .05);transform:translateY(-3px)}.mc-card:hover:before{opacity:1}.mc-card-sm{border:1px solid hsl(var(--border) / .9);background-color:hsl(var(--card) / .88);border-radius:.75rem;transition:background-color .2s,border-color .2s}.mc-card-sm:hover{background-color:hsl(var(--card) / .95);border-color:hsl(var(--primary) / .3)}.nav-active{background:linear-gradient(90deg,hsl(var(--primary) / .18),#6366f11f);color:hsl(var(--primary));border-left:3.5px solid hsl(var(--primary));border-radius:0 var(--radius) var(--radius) 0;padding-left:calc(.75rem - 3.5px);box-shadow:inset 0 1px #ffffff05}.nav-active-collapsed{background:hsl(var(--primary) / .18);color:hsl(var(--primary));box-shadow:0 0 12px 1px hsl(var(--primary) / .1);border:1px solid hsl(var(--primary) / .3)}@keyframes flow-cyan{0%{stroke-dasharray:6 3;stroke-dashoffset:18px}to{stroke-dasharray:6 3;stroke-dashoffset:0}}.animate-flow-cyan{animation:1.2s linear infinite flow-cyan}@media(prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media(min-width:1440px){html{font-size:16.5px}}@media(min-width:1920px){html{font-size:17.5px}}@media(min-width:2560px){html{font-size:19px}}@media(min-width:3440px){html{font-size:20px}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-pan-x{syntax:"*";inherits:false}@property --tw-pan-y{syntax:"*";inherits:false}@property --tw-pinch-zoom{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/frontend/dist/assets/index-BChEIiQl.js b/frontend/dist/assets/index-Cejiqiju.js similarity index 51% rename from frontend/dist/assets/index-BChEIiQl.js rename to frontend/dist/assets/index-Cejiqiju.js index 3d017fa..ffa2bc2 100644 --- a/frontend/dist/assets/index-BChEIiQl.js +++ b/frontend/dist/assets/index-Cejiqiju.js @@ -1,5 +1,5 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ModelsView-CoGGXlnQ.js","assets/code-xml-owp4HQPY.js","assets/rotate-ccw-CPYnjQ6M.js","assets/zap-I2SMIyr4.js","assets/layers-C62c1z5s.js","assets/ConnectView-DegkAqmm.js","assets/folder-open-CtWva2VF.js","assets/circle-x-D8NCr-a2.js","assets/copy-CRj5M_pY.js","assets/MemoryView-DNCBwc-V.js","assets/send-CS1kRsDf.js","assets/book-open-2v7qByfb.js","assets/GuideView-DqsY9Wr1.js","assets/AuftragsbuchView-DPitmBxF.js","assets/SectionLabel-gNRlDlbe.js","assets/IdeenView-lXJC70fR.js","assets/ChronikView-DKRwHk9a.js","assets/EigenlebenView-nhdxSyQi.js","assets/WissenView-Czc4UCXS.js"])))=>i.map(i=>d[i]); -var YI=Object.defineProperty;var S1=e=>{throw TypeError(e)};var QI=(e,t,r)=>t in e?YI(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ws=(e,t,r)=>QI(e,typeof t!="symbol"?t+"":t,r),gm=(e,t,r)=>t.has(e)||S1("Cannot "+r);var $=(e,t,r)=>(gm(e,t,"read from private field"),r?r.call(e):t.get(e)),je=(e,t,r)=>t.has(e)?S1("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),pe=(e,t,r,n)=>(gm(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),ze=(e,t,r)=>(gm(e,t,"access private method"),r);var qc=(e,t,r,n)=>({set _(i){pe(e,t,i,r)},get _(){return $(e,t,n)}});function XI(e,t){for(var r=0;rn[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();function Dg(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ym={exports:{}},Ss={},xm={exports:{}},Le={};/** +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ModelsView-Dqag6LQ7.js","assets/code-xml-BJe9mLlE.js","assets/rotate-ccw-C_-gXN7Y.js","assets/zap-BeUXRjSL.js","assets/chevron-down-DNDogRoC.js","assets/layers-DxeU1JZb.js","assets/ConnectView-DTJvmfv6.js","assets/folder-open-B5JYx4j5.js","assets/circle-x-BxATYeTa.js","assets/copy-g04tL7QX.js","assets/MemoryView-4uLiE0nS.js","assets/send-pU4Gy5vX.js","assets/book-open-CWgPuOOr.js","assets/GuideView-D88tSftX.js","assets/AuftragsbuchView-D_PNalAe.js","assets/SectionLabel-PIsOl-2s.js","assets/IdeenView-6hSlKBsS.js","assets/ChronikView-gK7ROOGU.js","assets/EigenlebenView-BSzH0Ym2.js","assets/WissenView-DIk50fMS.js"])))=>i.map(i=>d[i]); +var UI=Object.defineProperty;var w1=e=>{throw TypeError(e)};var WI=(e,t,r)=>t in e?UI(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var bs=(e,t,r)=>WI(e,typeof t!="symbol"?t+"":t,r),ym=(e,t,r)=>t.has(e)||w1("Cannot "+r);var $=(e,t,r)=>(ym(e,t,"read from private field"),r?r.call(e):t.get(e)),_e=(e,t,r)=>t.has(e)?w1("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),pe=(e,t,r,n)=>(ym(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r),ze=(e,t,r)=>(ym(e,t,"access private method"),r);var qc=(e,t,r,n)=>({set _(i){pe(e,t,i,r)},get _(){return $(e,t,n)}});function HI(e,t){for(var r=0;rn[i]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const o of i)if(o.type==="childList")for(const s of o.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function r(i){const o={};return i.integrity&&(o.integrity=i.integrity),i.referrerPolicy&&(o.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?o.credentials="include":i.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function n(i){if(i.ep)return;i.ep=!0;const o=r(i);fetch(i.href,o)}})();function Ty(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var gm={exports:{}},ws={},xm={exports:{}},Le={};/** * @license React * react.production.min.js * @@ -7,7 +7,7 @@ var YI=Object.defineProperty;var S1=e=>{throw TypeError(e)};var QI=(e,t,r)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var k1;function ZI(){if(k1)return Le;k1=1;var e=Symbol.for("react.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),n=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),o=Symbol.for("react.provider"),s=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),f=Symbol.for("react.memo"),h=Symbol.for("react.lazy"),m=Symbol.iterator;function v(M){return M===null||typeof M!="object"?null:(M=m&&M[m]||M["@@iterator"],typeof M=="function"?M:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,S={};function E(M,T,Z){this.props=M,this.context=T,this.refs=S,this.updater=Z||x}E.prototype.isReactComponent={},E.prototype.setState=function(M,T){if(typeof M!="object"&&typeof M!="function"&&M!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,M,T,"setState")},E.prototype.forceUpdate=function(M){this.updater.enqueueForceUpdate(this,M,"forceUpdate")};function P(){}P.prototype=E.prototype;function j(M,T,Z){this.props=M,this.context=T,this.refs=S,this.updater=Z||x}var _=j.prototype=new P;_.constructor=j,k(_,E.prototype),_.isPureReactComponent=!0;var O=Array.isArray,N=Object.prototype.hasOwnProperty,C={current:null},R={key:!0,ref:!0,__self:!0,__source:!0};function z(M,T,Z){var se,te={},ce=null,ge=null;if(T!=null)for(se in T.ref!==void 0&&(ge=T.ref),T.key!==void 0&&(ce=""+T.key),T)N.call(T,se)&&!R.hasOwnProperty(se)&&(te[se]=T[se]);var _e=arguments.length-2;if(_e===1)te.children=Z;else if(1<_e){for(var J=Array(_e),we=0;we<_e;we++)J[we]=arguments[we+2];te.children=J}if(M&&M.defaultProps)for(se in _e=M.defaultProps,_e)te[se]===void 0&&(te[se]=_e[se]);return{$$typeof:e,type:M,key:ce,ref:ge,props:te,_owner:C.current}}function F(M,T){return{$$typeof:e,type:M.type,key:T,ref:M.ref,props:M.props,_owner:M._owner}}function V(M){return typeof M=="object"&&M!==null&&M.$$typeof===e}function Q(M){var T={"=":"=0",":":"=2"};return"$"+M.replace(/[=:]/g,function(Z){return T[Z]})}var B=/\/+/g;function ue(M,T){return typeof M=="object"&&M!==null&&M.key!=null?Q(""+M.key):T.toString(36)}function G(M,T,Z,se,te){var ce=typeof M;(ce==="undefined"||ce==="boolean")&&(M=null);var ge=!1;if(M===null)ge=!0;else switch(ce){case"string":case"number":ge=!0;break;case"object":switch(M.$$typeof){case e:case t:ge=!0}}if(ge)return ge=M,te=te(ge),M=se===""?"."+ue(ge,0):se,O(te)?(Z="",M!=null&&(Z=M.replace(B,"$&/")+"/"),G(te,T,Z,"",function(we){return we})):te!=null&&(V(te)&&(te=F(te,Z+(!te.key||ge&&ge.key===te.key?"":(""+te.key).replace(B,"$&/")+"/")+M)),T.push(te)),1;if(ge=0,se=se===""?".":se+":",O(M))for(var _e=0;_e{throw TypeError(e)};var QI=(e,t,r)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var P1;function JI(){if(P1)return Ss;P1=1;var e=kl(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,i=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function s(u,d,f){var h,m={},v=null,x=null;f!==void 0&&(v=""+f),d.key!==void 0&&(v=""+d.key),d.ref!==void 0&&(x=d.ref);for(h in d)n.call(d,h)&&!o.hasOwnProperty(h)&&(m[h]=d[h]);if(u&&u.defaultProps)for(h in d=u.defaultProps,d)m[h]===void 0&&(m[h]=d[h]);return{$$typeof:t,type:u,key:v,ref:x,props:m,_owner:i.current}}return Ss.Fragment=r,Ss.jsx=s,Ss.jsxs=s,Ss}var A1;function eM(){return A1||(A1=1,ym.exports=JI()),ym.exports}var b=eM(),y=kl();const Rg=Dg(y),Cf=XI({__proto__:null,default:Rg},[y]);var Gc={},bm={exports:{}},hr={},wm={exports:{}},Sm={};/** + */var E1;function VI(){if(E1)return ws;E1=1;var e=Sl(),t=Symbol.for("react.element"),r=Symbol.for("react.fragment"),n=Object.prototype.hasOwnProperty,i=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function s(u,d,f){var h,m={},v=null,x=null;f!==void 0&&(v=""+f),d.key!==void 0&&(v=""+d.key),d.ref!==void 0&&(x=d.ref);for(h in d)n.call(d,h)&&!o.hasOwnProperty(h)&&(m[h]=d[h]);if(u&&u.defaultProps)for(h in d=u.defaultProps,d)m[h]===void 0&&(m[h]=d[h]);return{$$typeof:t,type:u,key:v,ref:x,props:m,_owner:i.current}}return ws.Fragment=r,ws.jsx=s,ws.jsxs=s,ws}var P1;function qI(){return P1||(P1=1,gm.exports=VI()),gm.exports}var w=qI(),g=Sl();const Dy=Ty(g),Cf=HI({__proto__:null,default:Dy},[g]);var Gc={},bm={exports:{}},hr={},wm={exports:{}},Sm={};/** * @license React * scheduler.production.min.js * @@ -23,7 +23,7 @@ var YI=Object.defineProperty;var S1=e=>{throw TypeError(e)};var QI=(e,t,r)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var O1;function tM(){return O1||(O1=1,(function(e){function t(Y,ae){var X=Y.length;Y.push(ae);e:for(;0>>1,T=Y[M];if(0>>1;Mi(te,X))cei(ge,te)?(Y[M]=ge,Y[ce]=X,M=ce):(Y[M]=te,Y[se]=X,M=se);else if(cei(ge,X))Y[M]=ge,Y[ce]=X,M=ce;else break e}}return ae}function i(Y,ae){var X=Y.sortIndex-ae.sortIndex;return X!==0?X:Y.id-ae.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,u=s.now();e.unstable_now=function(){return s.now()-u}}var d=[],f=[],h=1,m=null,v=3,x=!1,k=!1,S=!1,E=typeof setTimeout=="function"?setTimeout:null,P=typeof clearTimeout=="function"?clearTimeout:null,j=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function _(Y){for(var ae=r(f);ae!==null;){if(ae.callback===null)n(f);else if(ae.startTime<=Y)n(f),ae.sortIndex=ae.expirationTime,t(d,ae);else break;ae=r(f)}}function O(Y){if(S=!1,_(Y),!k)if(r(d)!==null)k=!0,fe(N);else{var ae=r(f);ae!==null&&de(O,ae.startTime-Y)}}function N(Y,ae){k=!1,S&&(S=!1,P(z),z=-1),x=!0;var X=v;try{for(_(ae),m=r(d);m!==null&&(!(m.expirationTime>ae)||Y&&!Q());){var M=m.callback;if(typeof M=="function"){m.callback=null,v=m.priorityLevel;var T=M(m.expirationTime<=ae);ae=e.unstable_now(),typeof T=="function"?m.callback=T:m===r(d)&&n(d),_(ae)}else n(d);m=r(d)}if(m!==null)var Z=!0;else{var se=r(f);se!==null&&de(O,se.startTime-ae),Z=!1}return Z}finally{m=null,v=X,x=!1}}var C=!1,R=null,z=-1,F=5,V=-1;function Q(){return!(e.unstable_now()-VY||125M?(Y.sortIndex=X,t(f,Y),r(d)===null&&Y===r(f)&&(S?(P(z),z=-1):S=!0,de(O,X-M))):(Y.sortIndex=T,t(d,Y),k||x||(k=!0,fe(N))),Y},e.unstable_shouldYield=Q,e.unstable_wrapCallback=function(Y){var ae=v;return function(){var X=v;v=ae;try{return Y.apply(this,arguments)}finally{v=X}}}})(Sm)),Sm}var C1;function rM(){return C1||(C1=1,wm.exports=tM()),wm.exports}/** + */var A1;function GI(){return A1||(A1=1,(function(e){function t(Y,ae){var X=Y.length;Y.push(ae);e:for(;0>>1,T=Y[M];if(0>>1;Mi(te,X))cei(ye,te)?(Y[M]=ye,Y[ce]=X,M=ce):(Y[M]=te,Y[se]=X,M=se);else if(cei(ye,X))Y[M]=ye,Y[ce]=X,M=ce;else break e}}return ae}function i(Y,ae){var X=Y.sortIndex-ae.sortIndex;return X!==0?X:Y.id-ae.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var s=Date,u=s.now();e.unstable_now=function(){return s.now()-u}}var d=[],f=[],h=1,m=null,v=3,x=!1,k=!1,S=!1,E=typeof setTimeout=="function"?setTimeout:null,P=typeof clearTimeout=="function"?clearTimeout:null,_=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function j(Y){for(var ae=r(f);ae!==null;){if(ae.callback===null)n(f);else if(ae.startTime<=Y)n(f),ae.sortIndex=ae.expirationTime,t(d,ae);else break;ae=r(f)}}function O(Y){if(S=!1,j(Y),!k)if(r(d)!==null)k=!0,fe(N);else{var ae=r(f);ae!==null&&de(O,ae.startTime-Y)}}function N(Y,ae){k=!1,S&&(S=!1,P(z),z=-1),x=!0;var X=v;try{for(j(ae),m=r(d);m!==null&&(!(m.expirationTime>ae)||Y&&!Q());){var M=m.callback;if(typeof M=="function"){m.callback=null,v=m.priorityLevel;var T=M(m.expirationTime<=ae);ae=e.unstable_now(),typeof T=="function"?m.callback=T:m===r(d)&&n(d),j(ae)}else n(d);m=r(d)}if(m!==null)var Z=!0;else{var se=r(f);se!==null&&de(O,se.startTime-ae),Z=!1}return Z}finally{m=null,v=X,x=!1}}var C=!1,R=null,z=-1,F=5,V=-1;function Q(){return!(e.unstable_now()-VY||125M?(Y.sortIndex=X,t(f,Y),r(d)===null&&Y===r(f)&&(S?(P(z),z=-1):S=!0,de(O,X-M))):(Y.sortIndex=T,t(d,Y),k||x||(k=!0,fe(N))),Y},e.unstable_shouldYield=Q,e.unstable_wrapCallback=function(Y){var ae=v;return function(){var X=v;v=ae;try{return Y.apply(this,arguments)}finally{v=X}}}})(Sm)),Sm}var O1;function YI(){return O1||(O1=1,wm.exports=GI()),wm.exports}/** * @license React * react-dom.production.min.js * @@ -31,324 +31,309 @@ var YI=Object.defineProperty;var S1=e=>{throw TypeError(e)};var QI=(e,t,r)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var j1;function nM(){if(j1)return hr;j1=1;var e=kl(),t=rM();function r(a){for(var l="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),d=Object.prototype.hasOwnProperty,f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,h={},m={};function v(a){return d.call(m,a)?!0:d.call(h,a)?!1:f.test(a)?m[a]=!0:(h[a]=!0,!1)}function x(a,l,c,p){if(c!==null&&c.type===0)return!1;switch(typeof l){case"function":case"symbol":return!0;case"boolean":return p?!1:c!==null?!c.acceptsBooleans:(a=a.toLowerCase().slice(0,5),a!=="data-"&&a!=="aria-");default:return!1}}function k(a,l,c,p){if(l===null||typeof l>"u"||x(a,l,c,p))return!0;if(p)return!1;if(c!==null)switch(c.type){case 3:return!l;case 4:return l===!1;case 5:return isNaN(l);case 6:return isNaN(l)||1>l}return!1}function S(a,l,c,p,g,w,A){this.acceptsBooleans=l===2||l===3||l===4,this.attributeName=p,this.attributeNamespace=g,this.mustUseProperty=c,this.propertyName=a,this.type=l,this.sanitizeURL=w,this.removeEmptyString=A}var E={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){E[a]=new S(a,0,!1,a,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var l=a[0];E[l]=new S(l,1,!1,a[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(a){E[a]=new S(a,2,!1,a.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){E[a]=new S(a,2,!1,a,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){E[a]=new S(a,3,!1,a.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(a){E[a]=new S(a,3,!0,a,null,!1,!1)}),["capture","download"].forEach(function(a){E[a]=new S(a,4,!1,a,null,!1,!1)}),["cols","rows","size","span"].forEach(function(a){E[a]=new S(a,6,!1,a,null,!1,!1)}),["rowSpan","start"].forEach(function(a){E[a]=new S(a,5,!1,a.toLowerCase(),null,!1,!1)});var P=/[\-:]([a-z])/g;function j(a){return a[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var l=a.replace(P,j);E[l]=new S(l,1,!1,a,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var l=a.replace(P,j);E[l]=new S(l,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(a){var l=a.replace(P,j);E[l]=new S(l,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(a){E[a]=new S(a,1,!1,a.toLowerCase(),null,!1,!1)}),E.xlinkHref=new S("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(a){E[a]=new S(a,1,!1,a.toLowerCase(),null,!0,!0)});function _(a,l,c,p){var g=E.hasOwnProperty(l)?E[l]:null;(g!==null?g.type!==0:p||!(2I||g[A]!==w[I]){var D=` -`+g[A].replace(" at new "," at ");return a.displayName&&D.includes("")&&(D=D.replace("",a.displayName)),D}while(1<=A&&0<=I);break}}}finally{Z=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?T(a):""}function te(a){switch(a.tag){case 5:return T(a.type);case 16:return T("Lazy");case 13:return T("Suspense");case 19:return T("SuspenseList");case 0:case 2:case 15:return a=se(a.type,!1),a;case 11:return a=se(a.type.render,!1),a;case 1:return a=se(a.type,!0),a;default:return""}}function ce(a){if(a==null)return null;if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case R:return"Fragment";case C:return"Portal";case F:return"Profiler";case z:return"StrictMode";case ue:return"Suspense";case G:return"SuspenseList"}if(typeof a=="object")switch(a.$$typeof){case Q:return(a.displayName||"Context")+".Consumer";case V:return(a._context.displayName||"Context")+".Provider";case B:var l=a.render;return a=a.displayName,a||(a=l.displayName||l.name||"",a=a!==""?"ForwardRef("+a+")":"ForwardRef"),a;case le:return l=a.displayName||null,l!==null?l:ce(a.type)||"Memo";case fe:l=a._payload,a=a._init;try{return ce(a(l))}catch{}}return null}function ge(a){var l=a.type;switch(a.tag){case 24:return"Cache";case 9:return(l.displayName||"Context")+".Consumer";case 10:return(l._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return a=l.render,a=a.displayName||a.name||"",l.displayName||(a!==""?"ForwardRef("+a+")":"ForwardRef");case 7:return"Fragment";case 5:return l;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ce(l);case 8:return l===z?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l}return null}function _e(a){switch(typeof a){case"boolean":case"number":case"string":case"undefined":return a;case"object":return a;default:return""}}function J(a){var l=a.type;return(a=a.nodeName)&&a.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function we(a){var l=J(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,l),p=""+a[l];if(!a.hasOwnProperty(l)&&typeof c<"u"&&typeof c.get=="function"&&typeof c.set=="function"){var g=c.get,w=c.set;return Object.defineProperty(a,l,{configurable:!0,get:function(){return g.call(this)},set:function(A){p=""+A,w.call(this,A)}}),Object.defineProperty(a,l,{enumerable:c.enumerable}),{getValue:function(){return p},setValue:function(A){p=""+A},stopTracking:function(){a._valueTracker=null,delete a[l]}}}}function Ae(a){a._valueTracker||(a._valueTracker=we(a))}function ne(a){if(!a)return!1;var l=a._valueTracker;if(!l)return!0;var c=l.getValue(),p="";return a&&(p=J(a)?a.checked?"true":"false":a.value),a=p,a!==c?(l.setValue(a),!0):!1}function lt(a){if(a=a||(typeof document<"u"?document:void 0),typeof a>"u")return null;try{return a.activeElement||a.body}catch{return a.body}}function $e(a,l){var c=l.checked;return X({},l,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:c??a._wrapperState.initialChecked})}function Pe(a,l){var c=l.defaultValue==null?"":l.defaultValue,p=l.checked!=null?l.checked:l.defaultChecked;c=_e(l.value!=null?l.value:c),a._wrapperState={initialChecked:p,initialValue:c,controlled:l.type==="checkbox"||l.type==="radio"?l.checked!=null:l.value!=null}}function vt(a,l){l=l.checked,l!=null&&_(a,"checked",l,!1)}function lr(a,l){vt(a,l);var c=_e(l.value),p=l.type;if(c!=null)p==="number"?(c===0&&a.value===""||a.value!=c)&&(a.value=""+c):a.value!==""+c&&(a.value=""+c);else if(p==="submit"||p==="reset"){a.removeAttribute("value");return}l.hasOwnProperty("value")?q(a,l.type,c):l.hasOwnProperty("defaultValue")&&q(a,l.type,_e(l.defaultValue)),l.checked==null&&l.defaultChecked!=null&&(a.defaultChecked=!!l.defaultChecked)}function fi(a,l,c){if(l.hasOwnProperty("value")||l.hasOwnProperty("defaultValue")){var p=l.type;if(!(p!=="submit"&&p!=="reset"||l.value!==void 0&&l.value!==null))return;l=""+a._wrapperState.initialValue,c||l===a.value||(a.value=l),a.defaultValue=l}c=a.name,c!==""&&(a.name=""),a.defaultChecked=!!a._wrapperState.initialChecked,c!==""&&(a.name=c)}function q(a,l,c){(l!=="number"||lt(a.ownerDocument)!==a)&&(c==null?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c))}var Ie=Array.isArray;function Ze(a,l,c,p){if(a=a.options,l){l={};for(var g=0;g"+l.valueOf().toString()+"",l=zu.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}});function $l(a,l){if(l){var c=a.firstChild;if(c&&c===a.lastChild&&c.nodeType===3){c.nodeValue=l;return}}a.textContent=l}var Ll={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},J_=["Webkit","ms","Moz","O"];Object.keys(Ll).forEach(function(a){J_.forEach(function(l){l=l+a.charAt(0).toUpperCase()+a.substring(1),Ll[l]=Ll[a]})});function $0(a,l,c){return l==null||typeof l=="boolean"||l===""?"":c||typeof l!="number"||l===0||Ll.hasOwnProperty(a)&&Ll[a]?(""+l).trim():l+"px"}function L0(a,l){a=a.style;for(var c in l)if(l.hasOwnProperty(c)){var p=c.indexOf("--")===0,g=$0(c,l[c],p);c==="float"&&(c="cssFloat"),p?a.setProperty(c,g):a[c]=g}}var eN=X({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function jh(a,l){if(l){if(eN[a]&&(l.children!=null||l.dangerouslySetInnerHTML!=null))throw Error(r(137,a));if(l.dangerouslySetInnerHTML!=null){if(l.children!=null)throw Error(r(60));if(typeof l.dangerouslySetInnerHTML!="object"||!("__html"in l.dangerouslySetInnerHTML))throw Error(r(61))}if(l.style!=null&&typeof l.style!="object")throw Error(r(62))}}function _h(a,l){if(a.indexOf("-")===-1)return typeof l.is=="string";switch(a){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Nh=null;function Ih(a){return a=a.target||a.srcElement||window,a.correspondingUseElement&&(a=a.correspondingUseElement),a.nodeType===3?a.parentNode:a}var Mh=null,ro=null,no=null;function z0(a){if(a=os(a)){if(typeof Mh!="function")throw Error(r(280));var l=a.stateNode;l&&(l=sc(l),Mh(a.stateNode,a.type,l))}}function F0(a){ro?no?no.push(a):no=[a]:ro=a}function B0(){if(ro){var a=ro,l=no;if(no=ro=null,z0(a),l)for(a=0;a>>=0,a===0?32:31-(dN(a)/fN|0)|0}var Hu=64,Ku=4194304;function Ul(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return a}}function Vu(a,l){var c=a.pendingLanes;if(c===0)return 0;var p=0,g=a.suspendedLanes,w=a.pingedLanes,A=c&268435455;if(A!==0){var I=A&~g;I!==0?p=Ul(I):(w&=A,w!==0&&(p=Ul(w)))}else A=c&~g,A!==0?p=Ul(A):w!==0&&(p=Ul(w));if(p===0)return 0;if(l!==0&&l!==p&&(l&g)===0&&(g=p&-p,w=l&-l,g>=w||g===16&&(w&4194240)!==0))return l;if((p&4)!==0&&(p|=c&16),l=a.entangledLanes,l!==0)for(a=a.entanglements,l&=p;0c;c++)l.push(a);return l}function Wl(a,l,c){a.pendingLanes|=l,l!==536870912&&(a.suspendedLanes=0,a.pingedLanes=0),a=a.eventTimes,l=31-qr(l),a[l]=c}function vN(a,l){var c=a.pendingLanes&~l;a.pendingLanes=l,a.suspendedLanes=0,a.pingedLanes=0,a.expiredLanes&=l,a.mutableReadLanes&=l,a.entangledLanes&=l,l=a.entanglements;var p=a.eventTimes;for(a=a.expirationTimes;0=Xl),mx=" ",vx=!1;function gx(a,l){switch(a){case"keyup":return HN.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yx(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var oo=!1;function VN(a,l){switch(a){case"compositionend":return yx(l);case"keypress":return l.which!==32?null:(vx=!0,mx);case"textInput":return a=l.data,a===mx&&vx?null:a;default:return null}}function qN(a,l){if(oo)return a==="compositionend"||!Xh&&gx(a,l)?(a=ux(),Xu=Kh=gi=null,oo=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:c,offset:l-a};a=p}e:{for(;c;){if(c.nextSibling){c=c.nextSibling;break e}c=c.parentNode}c=void 0}c=Px(c)}}function Ox(a,l){return a&&l?a===l?!0:a&&a.nodeType===3?!1:l&&l.nodeType===3?Ox(a,l.parentNode):"contains"in a?a.contains(l):a.compareDocumentPosition?!!(a.compareDocumentPosition(l)&16):!1:!1}function Cx(){for(var a=window,l=lt();l instanceof a.HTMLIFrameElement;){try{var c=typeof l.contentWindow.location.href=="string"}catch{c=!1}if(c)a=l.contentWindow;else break;l=lt(a.document)}return l}function ep(a){var l=a&&a.nodeName&&a.nodeName.toLowerCase();return l&&(l==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||l==="textarea"||a.contentEditable==="true")}function rI(a){var l=Cx(),c=a.focusedElem,p=a.selectionRange;if(l!==c&&c&&c.ownerDocument&&Ox(c.ownerDocument.documentElement,c)){if(p!==null&&ep(c)){if(l=p.start,a=p.end,a===void 0&&(a=l),"selectionStart"in c)c.selectionStart=l,c.selectionEnd=Math.min(a,c.value.length);else if(a=(l=c.ownerDocument||document)&&l.defaultView||window,a.getSelection){a=a.getSelection();var g=c.textContent.length,w=Math.min(p.start,g);p=p.end===void 0?w:Math.min(p.end,g),!a.extend&&w>p&&(g=p,p=w,w=g),g=Ax(c,w);var A=Ax(c,p);g&&A&&(a.rangeCount!==1||a.anchorNode!==g.node||a.anchorOffset!==g.offset||a.focusNode!==A.node||a.focusOffset!==A.offset)&&(l=l.createRange(),l.setStart(g.node,g.offset),a.removeAllRanges(),w>p?(a.addRange(l),a.extend(A.node,A.offset)):(l.setEnd(A.node,A.offset),a.addRange(l)))}}for(l=[],a=c;a=a.parentNode;)a.nodeType===1&&l.push({element:a,left:a.scrollLeft,top:a.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;c=document.documentMode,lo=null,tp=null,ts=null,rp=!1;function jx(a,l,c){var p=c.window===c?c.document:c.nodeType===9?c:c.ownerDocument;rp||lo==null||lo!==lt(p)||(p=lo,"selectionStart"in p&&ep(p)?p={start:p.selectionStart,end:p.selectionEnd}:(p=(p.ownerDocument&&p.ownerDocument.defaultView||window).getSelection(),p={anchorNode:p.anchorNode,anchorOffset:p.anchorOffset,focusNode:p.focusNode,focusOffset:p.focusOffset}),ts&&es(ts,p)||(ts=p,p=ac(tp,"onSelect"),0ho||(a.current=pp[ho],pp[ho]=null,ho--)}function Qe(a,l){ho++,pp[ho]=a.current,a.current=l}var wi={},Kt=bi(wi),sr=bi(!1),aa=wi;function po(a,l){var c=a.type.contextTypes;if(!c)return wi;var p=a.stateNode;if(p&&p.__reactInternalMemoizedUnmaskedChildContext===l)return p.__reactInternalMemoizedMaskedChildContext;var g={},w;for(w in c)g[w]=l[w];return p&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=l,a.__reactInternalMemoizedMaskedChildContext=g),g}function ur(a){return a=a.childContextTypes,a!=null}function uc(){et(sr),et(Kt)}function Hx(a,l,c){if(Kt.current!==wi)throw Error(r(168));Qe(Kt,l),Qe(sr,c)}function Kx(a,l,c){var p=a.stateNode;if(l=l.childContextTypes,typeof p.getChildContext!="function")return c;p=p.getChildContext();for(var g in p)if(!(g in l))throw Error(r(108,ge(a)||"Unknown",g));return X({},c,p)}function cc(a){return a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||wi,aa=Kt.current,Qe(Kt,a),Qe(sr,sr.current),!0}function Vx(a,l,c){var p=a.stateNode;if(!p)throw Error(r(169));c?(a=Kx(a,l,aa),p.__reactInternalMemoizedMergedChildContext=a,et(sr),et(Kt),Qe(Kt,a)):et(sr),Qe(sr,c)}var Rn=null,dc=!1,mp=!1;function qx(a){Rn===null?Rn=[a]:Rn.push(a)}function pI(a){dc=!0,qx(a)}function Si(){if(!mp&&Rn!==null){mp=!0;var a=0,l=qe;try{var c=Rn;for(qe=1;a>=A,g-=A,$n=1<<32-qr(l)+g|c<Ne?(Ct=Ce,Ce=null):Ct=Ce.sibling;var He=ee(U,Ce,W[Ne],oe);if(He===null){Ce===null&&(Ce=Ct);break}a&&Ce&&He.alternate===null&&l(U,Ce),L=w(He,L,Ne),Oe===null?Se=He:Oe.sibling=He,Oe=He,Ce=Ct}if(Ne===W.length)return c(U,Ce),it&&la(U,Ne),Se;if(Ce===null){for(;NeNe?(Ct=Ce,Ce=null):Ct=Ce.sibling;var Ni=ee(U,Ce,He.value,oe);if(Ni===null){Ce===null&&(Ce=Ct);break}a&&Ce&&Ni.alternate===null&&l(U,Ce),L=w(Ni,L,Ne),Oe===null?Se=Ni:Oe.sibling=Ni,Oe=Ni,Ce=Ct}if(He.done)return c(U,Ce),it&&la(U,Ne),Se;if(Ce===null){for(;!He.done;Ne++,He=W.next())He=ie(U,He.value,oe),He!==null&&(L=w(He,L,Ne),Oe===null?Se=He:Oe.sibling=He,Oe=He);return it&&la(U,Ne),Se}for(Ce=p(U,Ce);!He.done;Ne++,He=W.next())He=he(Ce,U,Ne,He.value,oe),He!==null&&(a&&He.alternate!==null&&Ce.delete(He.key===null?Ne:He.key),L=w(He,L,Ne),Oe===null?Se=He:Oe.sibling=He,Oe=He);return a&&Ce.forEach(function(GI){return l(U,GI)}),it&&la(U,Ne),Se}function mt(U,L,W,oe){if(typeof W=="object"&&W!==null&&W.type===R&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case N:e:{for(var Se=W.key,Oe=L;Oe!==null;){if(Oe.key===Se){if(Se=W.type,Se===R){if(Oe.tag===7){c(U,Oe.sibling),L=g(Oe,W.props.children),L.return=U,U=L;break e}}else if(Oe.elementType===Se||typeof Se=="object"&&Se!==null&&Se.$$typeof===fe&&Jx(Se)===Oe.type){c(U,Oe.sibling),L=g(Oe,W.props),L.ref=ls(U,Oe,W),L.return=U,U=L;break e}c(U,Oe);break}else l(U,Oe);Oe=Oe.sibling}W.type===R?(L=ma(W.props.children,U.mode,oe,W.key),L.return=U,U=L):(oe=zc(W.type,W.key,W.props,null,U.mode,oe),oe.ref=ls(U,L,W),oe.return=U,U=oe)}return A(U);case C:e:{for(Oe=W.key;L!==null;){if(L.key===Oe)if(L.tag===4&&L.stateNode.containerInfo===W.containerInfo&&L.stateNode.implementation===W.implementation){c(U,L.sibling),L=g(L,W.children||[]),L.return=U,U=L;break e}else{c(U,L);break}else l(U,L);L=L.sibling}L=fm(W,U.mode,oe),L.return=U,U=L}return A(U);case fe:return Oe=W._init,mt(U,L,Oe(W._payload),oe)}if(Ie(W))return ye(U,L,W,oe);if(ae(W))return xe(U,L,W,oe);mc(U,W)}return typeof W=="string"&&W!==""||typeof W=="number"?(W=""+W,L!==null&&L.tag===6?(c(U,L.sibling),L=g(L,W),L.return=U,U=L):(c(U,L),L=dm(W,U.mode,oe),L.return=U,U=L),A(U)):c(U,L)}return mt}var yo=eb(!0),tb=eb(!1),vc=bi(null),gc=null,xo=null,wp=null;function Sp(){wp=xo=gc=null}function kp(a){var l=vc.current;et(vc),a._currentValue=l}function Ep(a,l,c){for(;a!==null;){var p=a.alternate;if((a.childLanes&l)!==l?(a.childLanes|=l,p!==null&&(p.childLanes|=l)):p!==null&&(p.childLanes&l)!==l&&(p.childLanes|=l),a===c)break;a=a.return}}function bo(a,l){gc=a,wp=xo=null,a=a.dependencies,a!==null&&a.firstContext!==null&&((a.lanes&l)!==0&&(cr=!0),a.firstContext=null)}function Ir(a){var l=a._currentValue;if(wp!==a)if(a={context:a,memoizedValue:l,next:null},xo===null){if(gc===null)throw Error(r(308));xo=a,gc.dependencies={lanes:0,firstContext:a}}else xo=xo.next=a;return l}var sa=null;function Pp(a){sa===null?sa=[a]:sa.push(a)}function rb(a,l,c,p){var g=l.interleaved;return g===null?(c.next=c,Pp(l)):(c.next=g.next,g.next=c),l.interleaved=c,zn(a,p)}function zn(a,l){a.lanes|=l;var c=a.alternate;for(c!==null&&(c.lanes|=l),c=a,a=a.return;a!==null;)a.childLanes|=l,c=a.alternate,c!==null&&(c.childLanes|=l),c=a,a=a.return;return c.tag===3?c.stateNode:null}var ki=!1;function Ap(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function nb(a,l){a=a.updateQueue,l.updateQueue===a&&(l.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function Fn(a,l){return{eventTime:a,lane:l,tag:0,payload:null,callback:null,next:null}}function Ei(a,l,c){var p=a.updateQueue;if(p===null)return null;if(p=p.shared,(We&2)!==0){var g=p.pending;return g===null?l.next=l:(l.next=g.next,g.next=l),p.pending=l,zn(a,c)}return g=p.interleaved,g===null?(l.next=l,Pp(p)):(l.next=g.next,g.next=l),p.interleaved=l,zn(a,c)}function yc(a,l,c){if(l=l.updateQueue,l!==null&&(l=l.shared,(c&4194240)!==0)){var p=l.lanes;p&=a.pendingLanes,c|=p,l.lanes=c,Fh(a,c)}}function ib(a,l){var c=a.updateQueue,p=a.alternate;if(p!==null&&(p=p.updateQueue,c===p)){var g=null,w=null;if(c=c.firstBaseUpdate,c!==null){do{var A={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};w===null?g=w=A:w=w.next=A,c=c.next}while(c!==null);w===null?g=w=l:w=w.next=l}else g=w=l;c={baseState:p.baseState,firstBaseUpdate:g,lastBaseUpdate:w,shared:p.shared,effects:p.effects},a.updateQueue=c;return}a=c.lastBaseUpdate,a===null?c.firstBaseUpdate=l:a.next=l,c.lastBaseUpdate=l}function xc(a,l,c,p){var g=a.updateQueue;ki=!1;var w=g.firstBaseUpdate,A=g.lastBaseUpdate,I=g.shared.pending;if(I!==null){g.shared.pending=null;var D=I,K=D.next;D.next=null,A===null?w=K:A.next=K,A=D;var re=a.alternate;re!==null&&(re=re.updateQueue,I=re.lastBaseUpdate,I!==A&&(I===null?re.firstBaseUpdate=K:I.next=K,re.lastBaseUpdate=D))}if(w!==null){var ie=g.baseState;A=0,re=K=D=null,I=w;do{var ee=I.lane,he=I.eventTime;if((p&ee)===ee){re!==null&&(re=re.next={eventTime:he,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var ye=a,xe=I;switch(ee=l,he=c,xe.tag){case 1:if(ye=xe.payload,typeof ye=="function"){ie=ye.call(he,ie,ee);break e}ie=ye;break e;case 3:ye.flags=ye.flags&-65537|128;case 0:if(ye=xe.payload,ee=typeof ye=="function"?ye.call(he,ie,ee):ye,ee==null)break e;ie=X({},ie,ee);break e;case 2:ki=!0}}I.callback!==null&&I.lane!==0&&(a.flags|=64,ee=g.effects,ee===null?g.effects=[I]:ee.push(I))}else he={eventTime:he,lane:ee,tag:I.tag,payload:I.payload,callback:I.callback,next:null},re===null?(K=re=he,D=ie):re=re.next=he,A|=ee;if(I=I.next,I===null){if(I=g.shared.pending,I===null)break;ee=I,I=ee.next,ee.next=null,g.lastBaseUpdate=ee,g.shared.pending=null}}while(!0);if(re===null&&(D=ie),g.baseState=D,g.firstBaseUpdate=K,g.lastBaseUpdate=re,l=g.shared.interleaved,l!==null){g=l;do A|=g.lane,g=g.next;while(g!==l)}else w===null&&(g.shared.lanes=0);da|=A,a.lanes=A,a.memoizedState=ie}}function ab(a,l,c){if(a=l.effects,l.effects=null,a!==null)for(l=0;lc?c:4,a(!0);var p=Np.transition;Np.transition={};try{a(!1),l()}finally{qe=c,Np.transition=p}}function Eb(){return Mr().memoizedState}function yI(a,l,c){var p=Ci(a);if(c={lane:p,action:c,hasEagerState:!1,eagerState:null,next:null},Pb(a))Ab(l,c);else if(c=rb(a,l,c,p),c!==null){var g=tr();Jr(c,a,p,g),Ob(c,l,p)}}function xI(a,l,c){var p=Ci(a),g={lane:p,action:c,hasEagerState:!1,eagerState:null,next:null};if(Pb(a))Ab(l,g);else{var w=a.alternate;if(a.lanes===0&&(w===null||w.lanes===0)&&(w=l.lastRenderedReducer,w!==null))try{var A=l.lastRenderedState,I=w(A,c);if(g.hasEagerState=!0,g.eagerState=I,Gr(I,A)){var D=l.interleaved;D===null?(g.next=g,Pp(l)):(g.next=D.next,D.next=g),l.interleaved=g;return}}catch{}finally{}c=rb(a,l,g,p),c!==null&&(g=tr(),Jr(c,a,p,g),Ob(c,l,p))}}function Pb(a){var l=a.alternate;return a===ut||l!==null&&l===ut}function Ab(a,l){ds=Sc=!0;var c=a.pending;c===null?l.next=l:(l.next=c.next,c.next=l),a.pending=l}function Ob(a,l,c){if((c&4194240)!==0){var p=l.lanes;p&=a.pendingLanes,c|=p,l.lanes=c,Fh(a,c)}}var Pc={readContext:Ir,useCallback:Vt,useContext:Vt,useEffect:Vt,useImperativeHandle:Vt,useInsertionEffect:Vt,useLayoutEffect:Vt,useMemo:Vt,useReducer:Vt,useRef:Vt,useState:Vt,useDebugValue:Vt,useDeferredValue:Vt,useTransition:Vt,useMutableSource:Vt,useSyncExternalStore:Vt,useId:Vt,unstable_isNewReconciler:!1},bI={readContext:Ir,useCallback:function(a,l){return pn().memoizedState=[a,l===void 0?null:l],a},useContext:Ir,useEffect:vb,useImperativeHandle:function(a,l,c){return c=c!=null?c.concat([a]):null,kc(4194308,4,xb.bind(null,l,a),c)},useLayoutEffect:function(a,l){return kc(4194308,4,a,l)},useInsertionEffect:function(a,l){return kc(4,2,a,l)},useMemo:function(a,l){var c=pn();return l=l===void 0?null:l,a=a(),c.memoizedState=[a,l],a},useReducer:function(a,l,c){var p=pn();return l=c!==void 0?c(l):l,p.memoizedState=p.baseState=l,a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:l},p.queue=a,a=a.dispatch=yI.bind(null,ut,a),[p.memoizedState,a]},useRef:function(a){var l=pn();return a={current:a},l.memoizedState=a},useState:pb,useDebugValue:Lp,useDeferredValue:function(a){return pn().memoizedState=a},useTransition:function(){var a=pb(!1),l=a[0];return a=gI.bind(null,a[1]),pn().memoizedState=a,[l,a]},useMutableSource:function(){},useSyncExternalStore:function(a,l,c){var p=ut,g=pn();if(it){if(c===void 0)throw Error(r(407));c=c()}else{if(c=l(),Ot===null)throw Error(r(349));(ca&30)!==0||ub(p,l,c)}g.memoizedState=c;var w={value:c,getSnapshot:l};return g.queue=w,vb(db.bind(null,p,w,a),[a]),p.flags|=2048,ps(9,cb.bind(null,p,w,c,l),void 0,null),c},useId:function(){var a=pn(),l=Ot.identifierPrefix;if(it){var c=Ln,p=$n;c=(p&~(1<<32-qr(p)-1)).toString(32)+c,l=":"+l+"R"+c,c=fs++,0<\/script>",a=a.removeChild(a.firstChild)):typeof p.is=="string"?a=A.createElement(c,{is:p.is}):(a=A.createElement(c),c==="select"&&(A=a,p.multiple?A.multiple=!0:p.size&&(A.size=p.size))):a=A.createElementNS(a,c),a[fn]=l,a[as]=p,qb(a,l,!1,!1),l.stateNode=a;e:{switch(A=_h(c,p),c){case"dialog":Je("cancel",a),Je("close",a),g=p;break;case"iframe":case"object":case"embed":Je("load",a),g=p;break;case"video":case"audio":for(g=0;gPo&&(l.flags|=128,p=!0,ms(w,!1),l.lanes=4194304)}else{if(!p)if(a=bc(A),a!==null){if(l.flags|=128,p=!0,c=a.updateQueue,c!==null&&(l.updateQueue=c,l.flags|=4),ms(w,!0),w.tail===null&&w.tailMode==="hidden"&&!A.alternate&&!it)return qt(l),null}else 2*pt()-w.renderingStartTime>Po&&c!==1073741824&&(l.flags|=128,p=!0,ms(w,!1),l.lanes=4194304);w.isBackwards?(A.sibling=l.child,l.child=A):(c=w.last,c!==null?c.sibling=A:l.child=A,w.last=A)}return w.tail!==null?(l=w.tail,w.rendering=l,w.tail=l.sibling,w.renderingStartTime=pt(),l.sibling=null,c=st.current,Qe(st,p?c&1|2:c&1),l):(qt(l),null);case 22:case 23:return sm(),p=l.memoizedState!==null,a!==null&&a.memoizedState!==null!==p&&(l.flags|=8192),p&&(l.mode&1)!==0?(Sr&1073741824)!==0&&(qt(l),l.subtreeFlags&6&&(l.flags|=8192)):qt(l),null;case 24:return null;case 25:return null}throw Error(r(156,l.tag))}function CI(a,l){switch(gp(l),l.tag){case 1:return ur(l.type)&&uc(),a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 3:return wo(),et(sr),et(Kt),_p(),a=l.flags,(a&65536)!==0&&(a&128)===0?(l.flags=a&-65537|128,l):null;case 5:return Cp(l),null;case 13:if(et(st),a=l.memoizedState,a!==null&&a.dehydrated!==null){if(l.alternate===null)throw Error(r(340));go()}return a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 19:return et(st),null;case 4:return wo(),null;case 10:return kp(l.type._context),null;case 22:case 23:return sm(),null;case 24:return null;default:return null}}var jc=!1,Gt=!1,jI=typeof WeakSet=="function"?WeakSet:Set,me=null;function ko(a,l){var c=a.ref;if(c!==null)if(typeof c=="function")try{c(null)}catch(p){ct(a,l,p)}else c.current=null}function Qp(a,l,c){try{c()}catch(p){ct(a,l,p)}}var Qb=!1;function _I(a,l){if(sp=Yu,a=Cx(),ep(a)){if("selectionStart"in a)var c={start:a.selectionStart,end:a.selectionEnd};else e:{c=(c=a.ownerDocument)&&c.defaultView||window;var p=c.getSelection&&c.getSelection();if(p&&p.rangeCount!==0){c=p.anchorNode;var g=p.anchorOffset,w=p.focusNode;p=p.focusOffset;try{c.nodeType,w.nodeType}catch{c=null;break e}var A=0,I=-1,D=-1,K=0,re=0,ie=a,ee=null;t:for(;;){for(var he;ie!==c||g!==0&&ie.nodeType!==3||(I=A+g),ie!==w||p!==0&&ie.nodeType!==3||(D=A+p),ie.nodeType===3&&(A+=ie.nodeValue.length),(he=ie.firstChild)!==null;)ee=ie,ie=he;for(;;){if(ie===a)break t;if(ee===c&&++K===g&&(I=A),ee===w&&++re===p&&(D=A),(he=ie.nextSibling)!==null)break;ie=ee,ee=ie.parentNode}ie=he}c=I===-1||D===-1?null:{start:I,end:D}}else c=null}c=c||{start:0,end:0}}else c=null;for(up={focusedElem:a,selectionRange:c},Yu=!1,me=l;me!==null;)if(l=me,a=l.child,(l.subtreeFlags&1028)!==0&&a!==null)a.return=l,me=a;else for(;me!==null;){l=me;try{var ye=l.alternate;if((l.flags&1024)!==0)switch(l.tag){case 0:case 11:case 15:break;case 1:if(ye!==null){var xe=ye.memoizedProps,mt=ye.memoizedState,U=l.stateNode,L=U.getSnapshotBeforeUpdate(l.elementType===l.type?xe:Qr(l.type,xe),mt);U.__reactInternalSnapshotBeforeUpdate=L}break;case 3:var W=l.stateNode.containerInfo;W.nodeType===1?W.textContent="":W.nodeType===9&&W.documentElement&&W.removeChild(W.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(oe){ct(l,l.return,oe)}if(a=l.sibling,a!==null){a.return=l.return,me=a;break}me=l.return}return ye=Qb,Qb=!1,ye}function vs(a,l,c){var p=l.updateQueue;if(p=p!==null?p.lastEffect:null,p!==null){var g=p=p.next;do{if((g.tag&a)===a){var w=g.destroy;g.destroy=void 0,w!==void 0&&Qp(l,c,w)}g=g.next}while(g!==p)}}function _c(a,l){if(l=l.updateQueue,l=l!==null?l.lastEffect:null,l!==null){var c=l=l.next;do{if((c.tag&a)===a){var p=c.create;c.destroy=p()}c=c.next}while(c!==l)}}function Xp(a){var l=a.ref;if(l!==null){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}typeof l=="function"?l(a):l.current=a}}function Xb(a){var l=a.alternate;l!==null&&(a.alternate=null,Xb(l)),a.child=null,a.deletions=null,a.sibling=null,a.tag===5&&(l=a.stateNode,l!==null&&(delete l[fn],delete l[as],delete l[hp],delete l[fI],delete l[hI])),a.stateNode=null,a.return=null,a.dependencies=null,a.memoizedProps=null,a.memoizedState=null,a.pendingProps=null,a.stateNode=null,a.updateQueue=null}function Zb(a){return a.tag===5||a.tag===3||a.tag===4}function Jb(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||Zb(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function Zp(a,l,c){var p=a.tag;if(p===5||p===6)a=a.stateNode,l?c.nodeType===8?c.parentNode.insertBefore(a,l):c.insertBefore(a,l):(c.nodeType===8?(l=c.parentNode,l.insertBefore(a,c)):(l=c,l.appendChild(a)),c=c._reactRootContainer,c!=null||l.onclick!==null||(l.onclick=lc));else if(p!==4&&(a=a.child,a!==null))for(Zp(a,l,c),a=a.sibling;a!==null;)Zp(a,l,c),a=a.sibling}function Jp(a,l,c){var p=a.tag;if(p===5||p===6)a=a.stateNode,l?c.insertBefore(a,l):c.appendChild(a);else if(p!==4&&(a=a.child,a!==null))for(Jp(a,l,c),a=a.sibling;a!==null;)Jp(a,l,c),a=a.sibling}var Dt=null,Xr=!1;function Pi(a,l,c){for(c=c.child;c!==null;)e1(a,l,c),c=c.sibling}function e1(a,l,c){if(dn&&typeof dn.onCommitFiberUnmount=="function")try{dn.onCommitFiberUnmount(Wu,c)}catch{}switch(c.tag){case 5:Gt||ko(c,l);case 6:var p=Dt,g=Xr;Dt=null,Pi(a,l,c),Dt=p,Xr=g,Dt!==null&&(Xr?(a=Dt,c=c.stateNode,a.nodeType===8?a.parentNode.removeChild(c):a.removeChild(c)):Dt.removeChild(c.stateNode));break;case 18:Dt!==null&&(Xr?(a=Dt,c=c.stateNode,a.nodeType===8?fp(a.parentNode,c):a.nodeType===1&&fp(a,c),Gl(a)):fp(Dt,c.stateNode));break;case 4:p=Dt,g=Xr,Dt=c.stateNode.containerInfo,Xr=!0,Pi(a,l,c),Dt=p,Xr=g;break;case 0:case 11:case 14:case 15:if(!Gt&&(p=c.updateQueue,p!==null&&(p=p.lastEffect,p!==null))){g=p=p.next;do{var w=g,A=w.destroy;w=w.tag,A!==void 0&&((w&2)!==0||(w&4)!==0)&&Qp(c,l,A),g=g.next}while(g!==p)}Pi(a,l,c);break;case 1:if(!Gt&&(ko(c,l),p=c.stateNode,typeof p.componentWillUnmount=="function"))try{p.props=c.memoizedProps,p.state=c.memoizedState,p.componentWillUnmount()}catch(I){ct(c,l,I)}Pi(a,l,c);break;case 21:Pi(a,l,c);break;case 22:c.mode&1?(Gt=(p=Gt)||c.memoizedState!==null,Pi(a,l,c),Gt=p):Pi(a,l,c);break;default:Pi(a,l,c)}}function t1(a){var l=a.updateQueue;if(l!==null){a.updateQueue=null;var c=a.stateNode;c===null&&(c=a.stateNode=new jI),l.forEach(function(p){var g=zI.bind(null,a,p);c.has(p)||(c.add(p),p.then(g,g))})}}function Zr(a,l){var c=l.deletions;if(c!==null)for(var p=0;pg&&(g=A),p&=~w}if(p=g,p=pt()-p,p=(120>p?120:480>p?480:1080>p?1080:1920>p?1920:3e3>p?3e3:4320>p?4320:1960*II(p/1960))-p,10a?16:a,Oi===null)var p=!1;else{if(a=Oi,Oi=null,Dc=0,(We&6)!==0)throw Error(r(331));var g=We;for(We|=4,me=a.current;me!==null;){var w=me,A=w.child;if((me.flags&16)!==0){var I=w.deletions;if(I!==null){for(var D=0;Dpt()-rm?ha(a,0):tm|=c),fr(a,l)}function p1(a,l){l===0&&((a.mode&1)===0?l=1:(l=Ku,Ku<<=1,(Ku&130023424)===0&&(Ku=4194304)));var c=tr();a=zn(a,l),a!==null&&(Wl(a,l,c),fr(a,c))}function LI(a){var l=a.memoizedState,c=0;l!==null&&(c=l.retryLane),p1(a,c)}function zI(a,l){var c=0;switch(a.tag){case 13:var p=a.stateNode,g=a.memoizedState;g!==null&&(c=g.retryLane);break;case 19:p=a.stateNode;break;default:throw Error(r(314))}p!==null&&p.delete(l),p1(a,c)}var m1;m1=function(a,l,c){if(a!==null)if(a.memoizedProps!==l.pendingProps||sr.current)cr=!0;else{if((a.lanes&c)===0&&(l.flags&128)===0)return cr=!1,AI(a,l,c);cr=(a.flags&131072)!==0}else cr=!1,it&&(l.flags&1048576)!==0&&Gx(l,hc,l.index);switch(l.lanes=0,l.tag){case 2:var p=l.type;Cc(a,l),a=l.pendingProps;var g=po(l,Kt.current);bo(l,c),g=Mp(null,l,p,a,g,c);var w=Tp();return l.flags|=1,typeof g=="object"&&g!==null&&typeof g.render=="function"&&g.$$typeof===void 0?(l.tag=1,l.memoizedState=null,l.updateQueue=null,ur(p)?(w=!0,cc(l)):w=!1,l.memoizedState=g.state!==null&&g.state!==void 0?g.state:null,Ap(l),g.updater=Ac,l.stateNode=g,g._reactInternals=l,Fp(l,p,a,c),l=Hp(null,l,p,!0,w,c)):(l.tag=0,it&&w&&vp(l),er(null,l,g,c),l=l.child),l;case 16:p=l.elementType;e:{switch(Cc(a,l),a=l.pendingProps,g=p._init,p=g(p._payload),l.type=p,g=l.tag=BI(p),a=Qr(p,a),g){case 0:l=Wp(null,l,p,a,c);break e;case 1:l=Bb(null,l,p,a,c);break e;case 11:l=Rb(null,l,p,a,c);break e;case 14:l=$b(null,l,p,Qr(p.type,a),c);break e}throw Error(r(306,p,""))}return l;case 0:return p=l.type,g=l.pendingProps,g=l.elementType===p?g:Qr(p,g),Wp(a,l,p,g,c);case 1:return p=l.type,g=l.pendingProps,g=l.elementType===p?g:Qr(p,g),Bb(a,l,p,g,c);case 3:e:{if(Ub(l),a===null)throw Error(r(387));p=l.pendingProps,w=l.memoizedState,g=w.element,nb(a,l),xc(l,p,null,c);var A=l.memoizedState;if(p=A.element,w.isDehydrated)if(w={element:p,isDehydrated:!1,cache:A.cache,pendingSuspenseBoundaries:A.pendingSuspenseBoundaries,transitions:A.transitions},l.updateQueue.baseState=w,l.memoizedState=w,l.flags&256){g=So(Error(r(423)),l),l=Wb(a,l,p,c,g);break e}else if(p!==g){g=So(Error(r(424)),l),l=Wb(a,l,p,c,g);break e}else for(wr=xi(l.stateNode.containerInfo.firstChild),br=l,it=!0,Yr=null,c=tb(l,null,p,c),l.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{if(go(),p===g){l=Bn(a,l,c);break e}er(a,l,p,c)}l=l.child}return l;case 5:return ob(l),a===null&&xp(l),p=l.type,g=l.pendingProps,w=a!==null?a.memoizedProps:null,A=g.children,cp(p,g)?A=null:w!==null&&cp(p,w)&&(l.flags|=32),Fb(a,l),er(a,l,A,c),l.child;case 6:return a===null&&xp(l),null;case 13:return Hb(a,l,c);case 4:return Op(l,l.stateNode.containerInfo),p=l.pendingProps,a===null?l.child=yo(l,null,p,c):er(a,l,p,c),l.child;case 11:return p=l.type,g=l.pendingProps,g=l.elementType===p?g:Qr(p,g),Rb(a,l,p,g,c);case 7:return er(a,l,l.pendingProps,c),l.child;case 8:return er(a,l,l.pendingProps.children,c),l.child;case 12:return er(a,l,l.pendingProps.children,c),l.child;case 10:e:{if(p=l.type._context,g=l.pendingProps,w=l.memoizedProps,A=g.value,Qe(vc,p._currentValue),p._currentValue=A,w!==null)if(Gr(w.value,A)){if(w.children===g.children&&!sr.current){l=Bn(a,l,c);break e}}else for(w=l.child,w!==null&&(w.return=l);w!==null;){var I=w.dependencies;if(I!==null){A=w.child;for(var D=I.firstContext;D!==null;){if(D.context===p){if(w.tag===1){D=Fn(-1,c&-c),D.tag=2;var K=w.updateQueue;if(K!==null){K=K.shared;var re=K.pending;re===null?D.next=D:(D.next=re.next,re.next=D),K.pending=D}}w.lanes|=c,D=w.alternate,D!==null&&(D.lanes|=c),Ep(w.return,c,l),I.lanes|=c;break}D=D.next}}else if(w.tag===10)A=w.type===l.type?null:w.child;else if(w.tag===18){if(A=w.return,A===null)throw Error(r(341));A.lanes|=c,I=A.alternate,I!==null&&(I.lanes|=c),Ep(A,c,l),A=w.sibling}else A=w.child;if(A!==null)A.return=w;else for(A=w;A!==null;){if(A===l){A=null;break}if(w=A.sibling,w!==null){w.return=A.return,A=w;break}A=A.return}w=A}er(a,l,g.children,c),l=l.child}return l;case 9:return g=l.type,p=l.pendingProps.children,bo(l,c),g=Ir(g),p=p(g),l.flags|=1,er(a,l,p,c),l.child;case 14:return p=l.type,g=Qr(p,l.pendingProps),g=Qr(p.type,g),$b(a,l,p,g,c);case 15:return Lb(a,l,l.type,l.pendingProps,c);case 17:return p=l.type,g=l.pendingProps,g=l.elementType===p?g:Qr(p,g),Cc(a,l),l.tag=1,ur(p)?(a=!0,cc(l)):a=!1,bo(l,c),jb(l,p,g),Fp(l,p,g,c),Hp(null,l,p,!0,a,c);case 19:return Vb(a,l,c);case 22:return zb(a,l,c)}throw Error(r(156,l.tag))};function v1(a,l){return Y0(a,l)}function FI(a,l,c,p){this.tag=a,this.key=c,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=l,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=p,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Dr(a,l,c,p){return new FI(a,l,c,p)}function cm(a){return a=a.prototype,!(!a||!a.isReactComponent)}function BI(a){if(typeof a=="function")return cm(a)?1:0;if(a!=null){if(a=a.$$typeof,a===B)return 11;if(a===le)return 14}return 2}function _i(a,l){var c=a.alternate;return c===null?(c=Dr(a.tag,l,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=l,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null),c.flags=a.flags&14680064,c.childLanes=a.childLanes,c.lanes=a.lanes,c.child=a.child,c.memoizedProps=a.memoizedProps,c.memoizedState=a.memoizedState,c.updateQueue=a.updateQueue,l=a.dependencies,c.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext},c.sibling=a.sibling,c.index=a.index,c.ref=a.ref,c}function zc(a,l,c,p,g,w){var A=2;if(p=a,typeof a=="function")cm(a)&&(A=1);else if(typeof a=="string")A=5;else e:switch(a){case R:return ma(c.children,g,w,l);case z:A=8,g|=8;break;case F:return a=Dr(12,c,l,g|2),a.elementType=F,a.lanes=w,a;case ue:return a=Dr(13,c,l,g),a.elementType=ue,a.lanes=w,a;case G:return a=Dr(19,c,l,g),a.elementType=G,a.lanes=w,a;case de:return Fc(c,g,w,l);default:if(typeof a=="object"&&a!==null)switch(a.$$typeof){case V:A=10;break e;case Q:A=9;break e;case B:A=11;break e;case le:A=14;break e;case fe:A=16,p=null;break e}throw Error(r(130,a==null?a:typeof a,""))}return l=Dr(A,c,l,g),l.elementType=a,l.type=p,l.lanes=w,l}function ma(a,l,c,p){return a=Dr(7,a,p,l),a.lanes=c,a}function Fc(a,l,c,p){return a=Dr(22,a,p,l),a.elementType=de,a.lanes=c,a.stateNode={isHidden:!1},a}function dm(a,l,c){return a=Dr(6,a,null,l),a.lanes=c,a}function fm(a,l,c){return l=Dr(4,a.children!==null?a.children:[],a.key,l),l.lanes=c,l.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation},l}function UI(a,l,c,p,g){this.tag=l,this.containerInfo=a,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zh(0),this.expirationTimes=zh(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zh(0),this.identifierPrefix=p,this.onRecoverableError=g,this.mutableSourceEagerHydrationData=null}function hm(a,l,c,p,g,w,A,I,D){return a=new UI(a,l,c,I,D),l===1?(l=1,w===!0&&(l|=8)):l=0,w=Dr(3,null,null,l),a.current=w,w.stateNode=a,w.memoizedState={element:p,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ap(w),a}function WI(a,l,c){var p=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),bm.exports=nM(),bm.exports}var N1;function iM(){if(N1)return Gc;N1=1;var e=CP();return Gc.createRoot=e.createRoot,Gc.hydrateRoot=e.hydrateRoot,Gc}var aM=iM();const oM=Dg(aM);var yu=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},_a,Fi,Jo,yP,lM=(yP=class extends yu{constructor(){super();je(this,_a);je(this,Fi);je(this,Jo);pe(this,Jo,t=>{if(typeof window<"u"&&window.addEventListener){const r=()=>t();return window.addEventListener("visibilitychange",r,!1),()=>{window.removeEventListener("visibilitychange",r)}}})}onSubscribe(){$(this,Fi)||this.setEventListener($(this,Jo))}onUnsubscribe(){var t;this.hasListeners()||((t=$(this,Fi))==null||t.call(this),pe(this,Fi,void 0))}setEventListener(t){var r;pe(this,Jo,t),(r=$(this,Fi))==null||r.call(this),pe(this,Fi,t(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()}))}setFocused(t){$(this,_a)!==t&&(pe(this,_a,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(r=>{r(t)})}isFocused(){var t;return typeof $(this,_a)=="boolean"?$(this,_a):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},_a=new WeakMap,Fi=new WeakMap,Jo=new WeakMap,yP),$g=new lM,sM={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},Bi,Tg,xP,uM=(xP=class{constructor(){je(this,Bi,sM);je(this,Tg,!1)}setTimeoutProvider(e){pe(this,Bi,e)}setTimeout(e,t){return $(this,Bi).setTimeout(e,t)}clearTimeout(e){$(this,Bi).clearTimeout(e)}setInterval(e,t){return $(this,Bi).setInterval(e,t)}clearInterval(e){$(this,Bi).clearInterval(e)}},Bi=new WeakMap,Tg=new WeakMap,xP),ka=new uM;function cM(e){setTimeout(e,0)}var dM=typeof window>"u"||"Deno"in globalThis;function mr(){}function fM(e,t){return typeof e=="function"?e(t):e}function pv(e){return typeof e=="number"&&e>=0&&e!==1/0}function jP(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Yi(e,t){return typeof e=="function"?e(t):e}function Er(e,t){return typeof e=="function"?e(t):e}function I1(e,t){const{type:r="all",exact:n,fetchStatus:i,predicate:o,queryKey:s,stale:u}=e;if(s){if(n){if(t.queryHash!==Lg(s,t.options))return!1}else if(!Vs(t.queryKey,s))return!1}if(r!=="all"){const d=t.isActive();if(r==="active"&&!d||r==="inactive"&&d)return!1}return!(typeof u=="boolean"&&t.isStale()!==u||i&&i!==t.state.fetchStatus||o&&!o(t))}function M1(e,t){const{exact:r,status:n,predicate:i,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(r){if(Ks(t.options.mutationKey)!==Ks(o))return!1}else if(!Vs(t.options.mutationKey,o))return!1}return!(n&&t.state.status!==n||i&&!i(t))}function Lg(e,t){return((t==null?void 0:t.queryKeyHashFn)||Ks)(e)}function Ks(e){return JSON.stringify(e,(t,r)=>vv(r)?Object.keys(r).sort().reduce((n,i)=>(n[i]=r[i],n),{}):r)}function Vs(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(r=>Vs(e[r],t[r])):!1}var hM=Object.prototype.hasOwnProperty;function _P(e,t,r=0){if(e===t)return e;if(r>500)return t;const n=T1(e)&&T1(t);if(!n&&!(vv(e)&&vv(t)))return t;const o=(n?e:Object.keys(e)).length,s=n?t:Object.keys(t),u=s.length,d=n?new Array(u):{};let f=0;for(let h=0;h{ka.setTimeout(t,e)})}function gv(e,t,r){return typeof r.structuralSharing=="function"?r.structuralSharing(e,t):r.structuralSharing!==!1?_P(e,t):t}function mM(e,t,r=0){const n=[...e,t];return r&&n.length>r?n.slice(1):n}function vM(e,t,r=0){const n=[t,...e];return r&&n.length>r?n.slice(0,-1):n}var zg=Symbol();function NP(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===zg?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function IP(e,t){return typeof e=="function"?e(...t):!!e}function gM(e,t,r){let n=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??(i=t()),n||(n=!0,i.aborted?r():i.addEventListener("abort",r,{once:!0})),i)}),e}var qs=(()=>{let e=()=>dM;return{isServer(){return e()},setIsServer(t){e=t}}})();function yv(){let e,t;const r=new Promise((i,o)=>{e=i,t=o});r.status="pending",r.catch(()=>{});function n(i){Object.assign(r,i),delete r.resolve,delete r.reject}return r.resolve=i=>{n({status:"fulfilled",value:i}),e(i)},r.reject=i=>{n({status:"rejected",reason:i}),t(i)},r}var yM=cM;function xM(){let e=[],t=0,r=u=>{u()},n=u=>{u()},i=yM;const o=u=>{t?e.push(u):i(()=>{r(u)})},s=()=>{const u=e;e=[],u.length&&i(()=>{n(()=>{u.forEach(d=>{r(d)})})})};return{batch:u=>{let d;t++;try{d=u()}finally{t--,t||s()}return d},batchCalls:u=>(...d)=>{o(()=>{u(...d)})},schedule:o,setNotifyFunction:u=>{r=u},setBatchNotifyFunction:u=>{n=u},setScheduler:u=>{i=u}}}var Ft=xM(),el,Ui,tl,bP,bM=(bP=class extends yu{constructor(){super();je(this,el,!0);je(this,Ui);je(this,tl);pe(this,tl,t=>{if(typeof window<"u"&&window.addEventListener){const r=()=>t(!0),n=()=>t(!1);return window.addEventListener("online",r,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",r),window.removeEventListener("offline",n)}}})}onSubscribe(){$(this,Ui)||this.setEventListener($(this,tl))}onUnsubscribe(){var t;this.hasListeners()||((t=$(this,Ui))==null||t.call(this),pe(this,Ui,void 0))}setEventListener(t){var r;pe(this,tl,t),(r=$(this,Ui))==null||r.call(this),pe(this,Ui,t(this.setOnline.bind(this)))}setOnline(t){$(this,el)!==t&&(pe(this,el,t),this.listeners.forEach(n=>{n(t)}))}isOnline(){return $(this,el)}},el=new WeakMap,Ui=new WeakMap,tl=new WeakMap,bP),_d=new bM;function wM(e){return Math.min(1e3*2**e,3e4)}function MP(e){return(e??"online")==="online"?_d.isOnline():!0}var xv=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function TP(e){let t=!1,r=0,n;const i=yv(),o=()=>i.status!=="pending",s=S=>{var E;if(!o()){const P=new xv(S);v(P),(E=e.onCancel)==null||E.call(e,P)}},u=()=>{t=!0},d=()=>{t=!1},f=()=>$g.isFocused()&&(e.networkMode==="always"||_d.isOnline())&&e.canRun(),h=()=>MP(e.networkMode)&&e.canRun(),m=S=>{o()||(n==null||n(),i.resolve(S))},v=S=>{o()||(n==null||n(),i.reject(S))},x=()=>new Promise(S=>{var E;n=P=>{(o()||f())&&S(P)},(E=e.onPause)==null||E.call(e)}).then(()=>{var S;n=void 0,o()||(S=e.onContinue)==null||S.call(e)}),k=()=>{if(o())return;let S;const E=r===0?e.initialPromise:void 0;try{S=E??e.fn()}catch(P){S=Promise.reject(P)}Promise.resolve(S).then(m).catch(P=>{var C;if(o())return;const j=e.retry??(qs.isServer()?0:3),_=e.retryDelay??wM,O=typeof _=="function"?_(r,P):_,N=j===!0||typeof j=="number"&&rf()?void 0:x()).then(()=>{t?v(P):k()})})};return{promise:i,status:()=>i.status,cancel:s,continue:()=>(n==null||n(),i),cancelRetry:u,continueRetry:d,canStart:h,start:()=>(h()?k():x().then(k),i)}}var Na,wP,DP=(wP=class{constructor(){je(this,Na)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),pv(this.gcTime)&&pe(this,Na,ka.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(qs.isServer()?1/0:300*1e3))}clearGcTimeout(){$(this,Na)!==void 0&&(ka.clearTimeout($(this,Na)),pe(this,Na,void 0))}},Na=new WeakMap,wP);function SM(e){return{onFetch:(t,r)=>{var h,m,v,x,k;const n=t.options,i=(v=(m=(h=t.fetchOptions)==null?void 0:h.meta)==null?void 0:m.fetchMore)==null?void 0:v.direction,o=((x=t.state.data)==null?void 0:x.pages)||[],s=((k=t.state.data)==null?void 0:k.pageParams)||[];let u={pages:[],pageParams:[]},d=0;const f=async()=>{let S=!1;const E=_=>{gM(_,()=>t.signal,()=>S=!0)},P=NP(t.options,t.fetchOptions),j=async(_,O,N)=>{if(S)return Promise.reject(t.signal.reason);if(O==null&&_.pages.length)return Promise.resolve(_);const R=(()=>{const Q={client:t.client,queryKey:t.queryKey,pageParam:O,direction:N?"backward":"forward",meta:t.options.meta};return E(Q),Q})(),z=await P(R),{maxPages:F}=t.options,V=N?vM:mM;return{pages:V(_.pages,z,F),pageParams:V(_.pageParams,O,F)}};if(i&&o.length){const _=i==="backward",O=_?kM:R1,N={pages:o,pageParams:s},C=O(n,N);u=await j(N,C,_)}else{const _=e??o.length;do{const O=d===0?s[0]??n.initialPageParam:R1(n,u);if(d>0&&O==null)break;u=await j(u,O),d++}while(d<_)}return u};t.options.persister?t.fetchFn=()=>{var S,E;return(E=(S=t.options).persister)==null?void 0:E.call(S,f,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r)}:t.fetchFn=f}}}function R1(e,{pages:t,pageParams:r}){const n=t.length-1;return t.length>0?e.getNextPageParam(t[n],t,r[n],r):void 0}function kM(e,{pages:t,pageParams:r}){var n;return t.length>0?(n=e.getPreviousPageParam)==null?void 0:n.call(e,t[0],t,r[0],r):void 0}var rl,Ia,nl,$r,Ma,jt,hu,Ta,kr,RP,Hn,SP,EM=(SP=class extends DP{constructor(t){super();je(this,kr);je(this,rl);je(this,Ia);je(this,nl);je(this,$r);je(this,Ma);je(this,jt);je(this,hu);je(this,Ta);pe(this,Ta,!1),pe(this,hu,t.defaultOptions),this.setOptions(t.options),this.observers=[],pe(this,Ma,t.client),pe(this,$r,$(this,Ma).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,pe(this,Ia,L1(this.options)),this.state=t.state??$(this,Ia),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return $(this,rl)}get promise(){var t;return(t=$(this,jt))==null?void 0:t.promise}setOptions(t){if(this.options={...$(this,hu),...t},t!=null&&t._type&&pe(this,rl,t._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const r=L1(this.options);r.data!==void 0&&(this.setState($1(r.data,r.dataUpdatedAt)),pe(this,Ia,r))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&$(this,$r).remove(this)}setData(t,r){const n=gv(this.state.data,t,this.options);return ze(this,kr,Hn).call(this,{data:n,type:"success",dataUpdatedAt:r==null?void 0:r.updatedAt,manual:r==null?void 0:r.manual}),n}setState(t){ze(this,kr,Hn).call(this,{type:"setState",state:t})}cancel(t){var n,i;const r=(n=$(this,jt))==null?void 0:n.promise;return(i=$(this,jt))==null||i.cancel(t),r?r.then(mr).catch(mr):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return $(this,Ia)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>Er(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===zg||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Yi(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!jP(this.state.dataUpdatedAt,t)}onFocus(){var r;const t=this.observers.find(n=>n.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(r=$(this,jt))==null||r.continue()}onOnline(){var r;const t=this.observers.find(n=>n.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(r=$(this,jt))==null||r.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),$(this,$r).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(r=>r!==t),this.observers.length||($(this,jt)&&($(this,Ta)||ze(this,kr,RP).call(this)?$(this,jt).cancel({revert:!0}):$(this,jt).cancelRetry()),this.scheduleGc()),$(this,$r).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ze(this,kr,Hn).call(this,{type:"invalidate"})}async fetch(t,r){var f,h,m,v,x,k,S,E,P,j,_;if(this.state.fetchStatus!=="idle"&&((f=$(this,jt))==null?void 0:f.status())!=="rejected"){if(this.state.data!==void 0&&(r!=null&&r.cancelRefetch))this.cancel({silent:!0});else if($(this,jt))return $(this,jt).continueRetry(),$(this,jt).promise}if(t&&this.setOptions(t),!this.options.queryFn){const O=this.observers.find(N=>N.options.queryFn);O&&this.setOptions(O.options)}const n=new AbortController,i=O=>{Object.defineProperty(O,"signal",{enumerable:!0,get:()=>(pe(this,Ta,!0),n.signal)})},o=()=>{const O=NP(this.options,r),C=(()=>{const R={client:$(this,Ma),queryKey:this.queryKey,meta:this.meta};return i(R),R})();return pe(this,Ta,!1),this.options.persister?this.options.persister(O,C,this):O(C)},u=(()=>{const O={fetchOptions:r,options:this.options,queryKey:this.queryKey,client:$(this,Ma),state:this.state,fetchFn:o};return i(O),O})(),d=$(this,rl)==="infinite"?SM(this.options.pages):this.options.behavior;d==null||d.onFetch(u,this),pe(this,nl,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((h=u.fetchOptions)==null?void 0:h.meta))&&ze(this,kr,Hn).call(this,{type:"fetch",meta:(m=u.fetchOptions)==null?void 0:m.meta}),pe(this,jt,TP({initialPromise:r==null?void 0:r.initialPromise,fn:u.fetchFn,onCancel:O=>{O instanceof xv&&O.revert&&this.setState({...$(this,nl),fetchStatus:"idle"}),n.abort()},onFail:(O,N)=>{ze(this,kr,Hn).call(this,{type:"failed",failureCount:O,error:N})},onPause:()=>{ze(this,kr,Hn).call(this,{type:"pause"})},onContinue:()=>{ze(this,kr,Hn).call(this,{type:"continue"})},retry:u.options.retry,retryDelay:u.options.retryDelay,networkMode:u.options.networkMode,canRun:()=>!0}));try{const O=await $(this,jt).start();if(O===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(O),(x=(v=$(this,$r).config).onSuccess)==null||x.call(v,O,this),(S=(k=$(this,$r).config).onSettled)==null||S.call(k,O,this.state.error,this),O}catch(O){if(O instanceof xv){if(O.silent)return $(this,jt).promise;if(O.revert){if(this.state.data===void 0)throw O;return this.state.data}}throw ze(this,kr,Hn).call(this,{type:"error",error:O}),(P=(E=$(this,$r).config).onError)==null||P.call(E,O,this),(_=(j=$(this,$r).config).onSettled)==null||_.call(j,this.state.data,O,this),O}finally{this.scheduleGc()}}},rl=new WeakMap,Ia=new WeakMap,nl=new WeakMap,$r=new WeakMap,Ma=new WeakMap,jt=new WeakMap,hu=new WeakMap,Ta=new WeakMap,kr=new WeakSet,RP=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},Hn=function(t){const r=n=>{switch(t.type){case"failed":return{...n,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...$P(n.data,this.options),fetchMeta:t.meta??null};case"success":const i={...n,...$1(t.data,t.dataUpdatedAt),dataUpdateCount:n.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return pe(this,nl,t.manual?i:void 0),i;case"error":const o=t.error;return{...n,error:o,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...t.state}}};this.state=r(this.state),Ft.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),$(this,$r).notify({query:this,type:"updated",action:t})})},SP);function $P(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:MP(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function $1(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function L1(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,r=t!==void 0,n=r?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?n??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}var pr,Be,pu,rr,Da,il,Vn,Wi,mu,al,ol,Ra,$a,Hi,ll,Ve,Ls,bv,wv,Sv,kv,Ev,Pv,Av,LP,kP,PM=(kP=class extends yu{constructor(t,r){super();je(this,Ve);je(this,pr);je(this,Be);je(this,pu);je(this,rr);je(this,Da);je(this,il);je(this,Vn);je(this,Wi);je(this,mu);je(this,al);je(this,ol);je(this,Ra);je(this,$a);je(this,Hi);je(this,ll,new Set);this.options=r,pe(this,pr,t),pe(this,Wi,null),pe(this,Vn,yv()),this.bindMethods(),this.setOptions(r)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&($(this,Be).addObserver(this),z1($(this,Be),this.options)?ze(this,Ve,Ls).call(this):this.updateResult(),ze(this,Ve,kv).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Ov($(this,Be),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Ov($(this,Be),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,ze(this,Ve,Ev).call(this),ze(this,Ve,Pv).call(this),$(this,Be).removeObserver(this)}setOptions(t){const r=this.options,n=$(this,Be);if(this.options=$(this,pr).defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Er(this.options.enabled,$(this,Be))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");ze(this,Ve,Av).call(this),$(this,Be).setOptions(this.options),r._defaulted&&!mv(this.options,r)&&$(this,pr).getQueryCache().notify({type:"observerOptionsUpdated",query:$(this,Be),observer:this});const i=this.hasListeners();i&&F1($(this,Be),n,this.options,r)&&ze(this,Ve,Ls).call(this),this.updateResult(),i&&($(this,Be)!==n||Er(this.options.enabled,$(this,Be))!==Er(r.enabled,$(this,Be))||Yi(this.options.staleTime,$(this,Be))!==Yi(r.staleTime,$(this,Be)))&&ze(this,Ve,bv).call(this);const o=ze(this,Ve,wv).call(this);i&&($(this,Be)!==n||Er(this.options.enabled,$(this,Be))!==Er(r.enabled,$(this,Be))||o!==$(this,Hi))&&ze(this,Ve,Sv).call(this,o)}getOptimisticResult(t){const r=$(this,pr).getQueryCache().build($(this,pr),t),n=this.createResult(r,t);return OM(this,n)&&(pe(this,rr,n),pe(this,il,this.options),pe(this,Da,$(this,Be).state)),n}getCurrentResult(){return $(this,rr)}trackResult(t,r){return new Proxy(t,{get:(n,i)=>(this.trackProp(i),r==null||r(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&$(this,Vn).status==="pending"&&$(this,Vn).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(n,i))})}trackProp(t){$(this,ll).add(t)}getCurrentQuery(){return $(this,Be)}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const r=$(this,pr).defaultQueryOptions(t),n=$(this,pr).getQueryCache().build($(this,pr),r);return n.fetch().then(()=>this.createResult(n,r))}fetch(t){return ze(this,Ve,Ls).call(this,{...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),$(this,rr)))}createResult(t,r){var F;const n=$(this,Be),i=this.options,o=$(this,rr),s=$(this,Da),u=$(this,il),f=t!==n?t.state:$(this,pu),{state:h}=t;let m={...h},v=!1,x;if(r._optimisticResults){const V=this.hasListeners(),Q=!V&&z1(t,r),B=V&&F1(t,n,r,i);(Q||B)&&(m={...m,...$P(h.data,t.options)}),r._optimisticResults==="isRestoring"&&(m.fetchStatus="idle")}let{error:k,errorUpdatedAt:S,status:E}=m;x=m.data;let P=!1;if(r.placeholderData!==void 0&&x===void 0&&E==="pending"){let V;o!=null&&o.isPlaceholderData&&r.placeholderData===(u==null?void 0:u.placeholderData)?(V=o.data,P=!0):V=typeof r.placeholderData=="function"?r.placeholderData((F=$(this,ol))==null?void 0:F.state.data,$(this,ol)):r.placeholderData,V!==void 0&&(E="success",x=gv(o==null?void 0:o.data,V,r),v=!0)}if(r.select&&x!==void 0&&!P)if(o&&x===(s==null?void 0:s.data)&&r.select===$(this,mu))x=$(this,al);else try{pe(this,mu,r.select),x=r.select(x),x=gv(o==null?void 0:o.data,x,r),pe(this,al,x),pe(this,Wi,null)}catch(V){pe(this,Wi,V)}$(this,Wi)&&(k=$(this,Wi),x=$(this,al),S=Date.now(),E="error");const j=m.fetchStatus==="fetching",_=E==="pending",O=E==="error",N=_&&j,C=x!==void 0,z={status:E,fetchStatus:m.fetchStatus,isPending:_,isSuccess:E==="success",isError:O,isInitialLoading:N,isLoading:N,data:x,dataUpdatedAt:m.dataUpdatedAt,error:k,errorUpdatedAt:S,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:t.isFetched(),isFetchedAfterMount:m.dataUpdateCount>f.dataUpdateCount||m.errorUpdateCount>f.errorUpdateCount,isFetching:j,isRefetching:j&&!_,isLoadingError:O&&!C,isPaused:m.fetchStatus==="paused",isPlaceholderData:v,isRefetchError:O&&C,isStale:Fg(t,r),refetch:this.refetch,promise:$(this,Vn),isEnabled:Er(r.enabled,t)!==!1};if(this.options.experimental_prefetchInRender){const V=z.data!==void 0,Q=z.status==="error"&&!V,B=le=>{Q?le.reject(z.error):V&&le.resolve(z.data)},ue=()=>{const le=pe(this,Vn,z.promise=yv());B(le)},G=$(this,Vn);switch(G.status){case"pending":t.queryHash===n.queryHash&&B(G);break;case"fulfilled":(Q||z.data!==G.value)&&ue();break;case"rejected":(!Q||z.error!==G.reason)&&ue();break}}return z}updateResult(){const t=$(this,rr),r=this.createResult($(this,Be),this.options);if(pe(this,Da,$(this,Be).state),pe(this,il,this.options),$(this,Da).data!==void 0&&pe(this,ol,$(this,Be)),mv(r,t))return;pe(this,rr,r);const n=()=>{if(!t)return!0;const{notifyOnChangeProps:i}=this.options,o=typeof i=="function"?i():i;if(o==="all"||!o&&!$(this,ll).size)return!0;const s=new Set(o??$(this,ll));return this.options.throwOnError&&s.add("error"),Object.keys($(this,rr)).some(u=>{const d=u;return $(this,rr)[d]!==t[d]&&s.has(d)})};ze(this,Ve,LP).call(this,{listeners:n()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&ze(this,Ve,kv).call(this)}},pr=new WeakMap,Be=new WeakMap,pu=new WeakMap,rr=new WeakMap,Da=new WeakMap,il=new WeakMap,Vn=new WeakMap,Wi=new WeakMap,mu=new WeakMap,al=new WeakMap,ol=new WeakMap,Ra=new WeakMap,$a=new WeakMap,Hi=new WeakMap,ll=new WeakMap,Ve=new WeakSet,Ls=function(t){ze(this,Ve,Av).call(this);let r=$(this,Be).fetch(this.options,t);return t!=null&&t.throwOnError||(r=r.catch(mr)),r},bv=function(){ze(this,Ve,Ev).call(this);const t=Yi(this.options.staleTime,$(this,Be));if(qs.isServer()||$(this,rr).isStale||!pv(t))return;const n=jP($(this,rr).dataUpdatedAt,t)+1;pe(this,Ra,ka.setTimeout(()=>{$(this,rr).isStale||this.updateResult()},n))},wv=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval($(this,Be)):this.options.refetchInterval)??!1},Sv=function(t){ze(this,Ve,Pv).call(this),pe(this,Hi,t),!(qs.isServer()||Er(this.options.enabled,$(this,Be))===!1||!pv($(this,Hi))||$(this,Hi)===0)&&pe(this,$a,ka.setInterval(()=>{(this.options.refetchIntervalInBackground||$g.isFocused())&&ze(this,Ve,Ls).call(this)},$(this,Hi)))},kv=function(){ze(this,Ve,bv).call(this),ze(this,Ve,Sv).call(this,ze(this,Ve,wv).call(this))},Ev=function(){$(this,Ra)!==void 0&&(ka.clearTimeout($(this,Ra)),pe(this,Ra,void 0))},Pv=function(){$(this,$a)!==void 0&&(ka.clearInterval($(this,$a)),pe(this,$a,void 0))},Av=function(){const t=$(this,pr).getQueryCache().build($(this,pr),this.options);if(t===$(this,Be))return;const r=$(this,Be);pe(this,Be,t),pe(this,pu,t.state),this.hasListeners()&&(r==null||r.removeObserver(this),t.addObserver(this))},LP=function(t){Ft.batch(()=>{t.listeners&&this.listeners.forEach(r=>{r($(this,rr))}),$(this,pr).getQueryCache().notify({query:$(this,Be),type:"observerResultsUpdated"})})},kP);function AM(e,t){return Er(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&Er(t.retryOnMount,e)===!1)}function z1(e,t){return AM(e,t)||e.state.data!==void 0&&Ov(e,t,t.refetchOnMount)}function Ov(e,t,r){if(Er(t.enabled,e)!==!1&&Yi(t.staleTime,e)!=="static"){const n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&Fg(e,t)}return!1}function F1(e,t,r,n){return(e!==t||Er(n.enabled,e)===!1)&&(!r.suspense||e.state.status!=="error")&&Fg(e,r)}function Fg(e,t){return Er(t.enabled,e)!==!1&&e.isStaleByTime(Yi(t.staleTime,e))}function OM(e,t){return!mv(e.getCurrentResult(),t)}var vu,bn,Yt,La,wn,Di,EP,CM=(EP=class extends DP{constructor(t){super();je(this,wn);je(this,vu);je(this,bn);je(this,Yt);je(this,La);pe(this,vu,t.client),this.mutationId=t.mutationId,pe(this,Yt,t.mutationCache),pe(this,bn,[]),this.state=t.state||jM(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){$(this,bn).includes(t)||($(this,bn).push(t),this.clearGcTimeout(),$(this,Yt).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){pe(this,bn,$(this,bn).filter(r=>r!==t)),this.scheduleGc(),$(this,Yt).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){$(this,bn).length||(this.state.status==="pending"?this.scheduleGc():$(this,Yt).remove(this))}continue(){var t;return((t=$(this,La))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var s,u,d,f,h,m,v,x,k,S,E,P,j,_,O,N,C,R;const r=()=>{ze(this,wn,Di).call(this,{type:"continue"})},n={client:$(this,vu),meta:this.options.meta,mutationKey:this.options.mutationKey};pe(this,La,TP({fn:()=>this.options.mutationFn?this.options.mutationFn(t,n):Promise.reject(new Error("No mutationFn found")),onFail:(z,F)=>{ze(this,wn,Di).call(this,{type:"failed",failureCount:z,error:F})},onPause:()=>{ze(this,wn,Di).call(this,{type:"pause"})},onContinue:r,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>$(this,Yt).canRun(this)}));const i=this.state.status==="pending",o=!$(this,La).canStart();try{if(i)r();else{ze(this,wn,Di).call(this,{type:"pending",variables:t,isPaused:o}),$(this,Yt).config.onMutate&&await $(this,Yt).config.onMutate(t,this,n);const F=await((u=(s=this.options).onMutate)==null?void 0:u.call(s,t,n));F!==this.state.context&&ze(this,wn,Di).call(this,{type:"pending",context:F,variables:t,isPaused:o})}const z=await $(this,La).start();return await((f=(d=$(this,Yt).config).onSuccess)==null?void 0:f.call(d,z,t,this.state.context,this,n)),await((m=(h=this.options).onSuccess)==null?void 0:m.call(h,z,t,this.state.context,n)),await((x=(v=$(this,Yt).config).onSettled)==null?void 0:x.call(v,z,null,this.state.variables,this.state.context,this,n)),await((S=(k=this.options).onSettled)==null?void 0:S.call(k,z,null,t,this.state.context,n)),ze(this,wn,Di).call(this,{type:"success",data:z}),z}catch(z){try{await((P=(E=$(this,Yt).config).onError)==null?void 0:P.call(E,z,t,this.state.context,this,n))}catch(F){Promise.reject(F)}try{await((_=(j=this.options).onError)==null?void 0:_.call(j,z,t,this.state.context,n))}catch(F){Promise.reject(F)}try{await((N=(O=$(this,Yt).config).onSettled)==null?void 0:N.call(O,void 0,z,this.state.variables,this.state.context,this,n))}catch(F){Promise.reject(F)}try{await((R=(C=this.options).onSettled)==null?void 0:R.call(C,void 0,z,t,this.state.context,n))}catch(F){Promise.reject(F)}throw ze(this,wn,Di).call(this,{type:"error",error:z}),z}finally{$(this,Yt).runNext(this)}}},vu=new WeakMap,bn=new WeakMap,Yt=new WeakMap,La=new WeakMap,wn=new WeakSet,Di=function(t){const r=n=>{switch(t.type){case"failed":return{...n,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...n,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:t.error,failureCount:n.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=r(this.state),Ft.batch(()=>{$(this,bn).forEach(n=>{n.onMutationUpdate(t)}),$(this,Yt).notify({mutation:this,type:"updated",action:t})})},EP);function jM(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var qn,tn,gu,PP,_M=(PP=class extends yu{constructor(t={}){super();je(this,qn);je(this,tn);je(this,gu);this.config=t,pe(this,qn,new Set),pe(this,tn,new Map),pe(this,gu,0)}build(t,r,n){const i=new CM({client:t,mutationCache:this,mutationId:++qc(this,gu)._,options:t.defaultMutationOptions(r),state:n});return this.add(i),i}add(t){$(this,qn).add(t);const r=Yc(t);if(typeof r=="string"){const n=$(this,tn).get(r);n?n.push(t):$(this,tn).set(r,[t])}this.notify({type:"added",mutation:t})}remove(t){if($(this,qn).delete(t)){const r=Yc(t);if(typeof r=="string"){const n=$(this,tn).get(r);if(n)if(n.length>1){const i=n.indexOf(t);i!==-1&&n.splice(i,1)}else n[0]===t&&$(this,tn).delete(r)}}this.notify({type:"removed",mutation:t})}canRun(t){const r=Yc(t);if(typeof r=="string"){const n=$(this,tn).get(r),i=n==null?void 0:n.find(o=>o.state.status==="pending");return!i||i===t}else return!0}runNext(t){var n;const r=Yc(t);if(typeof r=="string"){const i=(n=$(this,tn).get(r))==null?void 0:n.find(o=>o!==t&&o.state.isPaused);return(i==null?void 0:i.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Ft.batch(()=>{$(this,qn).forEach(t=>{this.notify({type:"removed",mutation:t})}),$(this,qn).clear(),$(this,tn).clear()})}getAll(){return Array.from($(this,qn))}find(t){const r={exact:!0,...t};return this.getAll().find(n=>M1(r,n))}findAll(t={}){return this.getAll().filter(r=>M1(t,r))}notify(t){Ft.batch(()=>{this.listeners.forEach(r=>{r(t)})})}resumePausedMutations(){const t=this.getAll().filter(r=>r.state.isPaused);return Ft.batch(()=>Promise.all(t.map(r=>r.continue().catch(mr))))}},qn=new WeakMap,tn=new WeakMap,gu=new WeakMap,PP);function Yc(e){var t;return(t=e.options.scope)==null?void 0:t.id}var Sn,AP,NM=(AP=class extends yu{constructor(t={}){super();je(this,Sn);this.config=t,pe(this,Sn,new Map)}build(t,r,n){const i=r.queryKey,o=r.queryHash??Lg(i,r);let s=this.get(o);return s||(s=new EM({client:t,queryKey:i,queryHash:o,options:t.defaultQueryOptions(r),state:n,defaultOptions:t.getQueryDefaults(i)}),this.add(s)),s}add(t){$(this,Sn).has(t.queryHash)||($(this,Sn).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const r=$(this,Sn).get(t.queryHash);r&&(t.destroy(),r===t&&$(this,Sn).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Ft.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return $(this,Sn).get(t)}getAll(){return[...$(this,Sn).values()]}find(t){const r={exact:!0,...t};return this.getAll().find(n=>I1(r,n))}findAll(t={}){const r=this.getAll();return Object.keys(t).length>0?r.filter(n=>I1(t,n)):r}notify(t){Ft.batch(()=>{this.listeners.forEach(r=>{r(t)})})}onFocus(){Ft.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Ft.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Sn=new WeakMap,AP),dt,Ki,Vi,sl,ul,qi,cl,dl,OP,IM=(OP=class{constructor(e={}){je(this,dt);je(this,Ki);je(this,Vi);je(this,sl);je(this,ul);je(this,qi);je(this,cl);je(this,dl);pe(this,dt,e.queryCache||new NM),pe(this,Ki,e.mutationCache||new _M),pe(this,Vi,e.defaultOptions||{}),pe(this,sl,new Map),pe(this,ul,new Map),pe(this,qi,0)}mount(){qc(this,qi)._++,$(this,qi)===1&&(pe(this,cl,$g.subscribe(async e=>{e&&(await this.resumePausedMutations(),$(this,dt).onFocus())})),pe(this,dl,_d.subscribe(async e=>{e&&(await this.resumePausedMutations(),$(this,dt).onOnline())})))}unmount(){var e,t;qc(this,qi)._--,$(this,qi)===0&&((e=$(this,cl))==null||e.call(this),pe(this,cl,void 0),(t=$(this,dl))==null||t.call(this),pe(this,dl,void 0))}isFetching(e){return $(this,dt).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return $(this,Ki).findAll({...e,status:"pending"}).length}getQueryData(e){var r;const t=this.defaultQueryOptions({queryKey:e});return(r=$(this,dt).get(t.queryHash))==null?void 0:r.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),r=$(this,dt).build(this,t),n=r.state.data;return n===void 0?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(Yi(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(n))}getQueriesData(e){return $(this,dt).findAll(e).map(({queryKey:t,state:r})=>{const n=r.data;return[t,n]})}setQueryData(e,t,r){const n=this.defaultQueryOptions({queryKey:e}),i=$(this,dt).get(n.queryHash),o=i==null?void 0:i.state.data,s=fM(t,o);if(s!==void 0)return $(this,dt).build(this,n).setData(s,{...r,manual:!0})}setQueriesData(e,t,r){return Ft.batch(()=>$(this,dt).findAll(e).map(({queryKey:n})=>[n,this.setQueryData(n,t,r)]))}getQueryState(e){var r;const t=this.defaultQueryOptions({queryKey:e});return(r=$(this,dt).get(t.queryHash))==null?void 0:r.state}removeQueries(e){const t=$(this,dt);Ft.batch(()=>{t.findAll(e).forEach(r=>{t.remove(r)})})}resetQueries(e,t){const r=$(this,dt);return Ft.batch(()=>(r.findAll(e).forEach(n=>{n.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const r={revert:!0,...t},n=Ft.batch(()=>$(this,dt).findAll(e).map(i=>i.cancel(r)));return Promise.all(n).then(mr).catch(mr)}invalidateQueries(e,t={}){return Ft.batch(()=>($(this,dt).findAll(e).forEach(r=>{r.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const r={...t,cancelRefetch:t.cancelRefetch??!0},n=Ft.batch(()=>$(this,dt).findAll(e).filter(i=>!i.isDisabled()&&!i.isStatic()).map(i=>{let o=i.fetch(void 0,r);return r.throwOnError||(o=o.catch(mr)),i.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(n).then(mr)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const r=$(this,dt).build(this,t);return r.isStaleByTime(Yi(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(mr).catch(mr)}fetchInfiniteQuery(e){return e._type="infinite",this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(mr).catch(mr)}ensureInfiniteQueryData(e){return e._type="infinite",this.ensureQueryData(e)}resumePausedMutations(){return _d.isOnline()?$(this,Ki).resumePausedMutations():Promise.resolve()}getQueryCache(){return $(this,dt)}getMutationCache(){return $(this,Ki)}getDefaultOptions(){return $(this,Vi)}setDefaultOptions(e){pe(this,Vi,e)}setQueryDefaults(e,t){$(this,sl).set(Ks(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...$(this,sl).values()],r={};return t.forEach(n=>{Vs(e,n.queryKey)&&Object.assign(r,n.defaultOptions)}),r}setMutationDefaults(e,t){$(this,ul).set(Ks(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...$(this,ul).values()],r={};return t.forEach(n=>{Vs(e,n.mutationKey)&&Object.assign(r,n.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;const t={...$(this,Vi).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=Lg(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===zg&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...$(this,Vi).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){$(this,dt).clear(),$(this,Ki).clear()}},dt=new WeakMap,Ki=new WeakMap,Vi=new WeakMap,sl=new WeakMap,ul=new WeakMap,qi=new WeakMap,cl=new WeakMap,dl=new WeakMap,OP),zP=y.createContext(void 0),xu=e=>{const t=y.useContext(zP);if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},MM=({client:e,children:t})=>(y.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),b.jsx(zP.Provider,{value:e,children:t})),FP=y.createContext(!1),TM=()=>y.useContext(FP);FP.Provider;function DM(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var RM=y.createContext(DM()),$M=()=>y.useContext(RM),LM=(e,t,r)=>{const n=r!=null&&r.state.error&&typeof e.throwOnError=="function"?IP(e.throwOnError,[r.state.error,r]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||n)&&(t.isReset()||(e.retryOnMount=!1))},zM=e=>{y.useEffect(()=>{e.clearReset()},[e])},FM=({result:e,errorResetBoundary:t,throwOnError:r,query:n,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&n&&(i&&e.data===void 0||IP(r,[e.error,n])),BM=e=>{if(e.suspense){const r=i=>i==="static"?i:Math.max(i??1e3,1e3),n=e.staleTime;e.staleTime=typeof n=="function"?(...i)=>r(n(...i)):r(n),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},UM=(e,t)=>e.isLoading&&e.isFetching&&!t,WM=(e,t)=>(e==null?void 0:e.suspense)&&t.isPending,B1=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function HM(e,t,r){var x,k,S,E;const n=TM(),i=$M(),o=xu(),s=o.defaultQueryOptions(e);(k=(x=o.getDefaultOptions().queries)==null?void 0:x._experimental_beforeQuery)==null||k.call(x,s);const u=o.getQueryCache().get(s.queryHash),d=e.subscribed!==!1;s._optimisticResults=n?"isRestoring":d?"optimistic":void 0,BM(s),LM(s,i,u),zM(i);const f=!o.getQueryCache().get(s.queryHash),[h]=y.useState(()=>new t(o,s)),m=h.getOptimisticResult(s),v=!n&&d;if(y.useSyncExternalStore(y.useCallback(P=>{const j=v?h.subscribe(Ft.batchCalls(P)):mr;return h.updateResult(),j},[h,v]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),y.useEffect(()=>{h.setOptions(s)},[s,h]),WM(s,m))throw B1(s,h,i);if(FM({result:m,errorResetBoundary:i,throwOnError:s.throwOnError,query:u,suspense:s.suspense}))throw m.error;if((E=(S=o.getDefaultOptions().queries)==null?void 0:S._experimental_afterQuery)==null||E.call(S,s,m),s.experimental_prefetchInRender&&!qs.isServer()&&UM(m,n)){const P=f?B1(s,h,i):u==null?void 0:u.promise;P==null||P.catch(mr).finally(()=>{h.updateResult()})}return s.notifyOnChangeProps?m:h.trackResult(m)}function Ye(e,t){return HM(e,PM)}const KM="modulepreload",VM=function(e){return"/"+e},U1={},sn=function(t,r,n){let i=Promise.resolve();if(r&&r.length>0){let s=function(f){return Promise.all(f.map(h=>Promise.resolve(h).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),d=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));i=s(r.map(f=>{if(f=VM(f),f in U1)return;U1[f]=!0;const h=f.endsWith(".css"),m=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${m}`))return;const v=document.createElement("link");if(v.rel=h?"stylesheet":KM,h||(v.as="script"),v.crossOrigin="",v.href=f,d&&v.setAttribute("nonce",d),document.head.appendChild(v),h)return new Promise((x,k)=>{v.addEventListener("load",x),v.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${f}`)))})}))}function o(s){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=s,window.dispatchEvent(u),!u.defaultPrevented)throw s}return i.then(s=>{for(const u of s||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};/** + */var C1;function QI(){if(C1)return hr;C1=1;var e=Sl(),t=YI();function r(a){for(var l="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),d=Object.prototype.hasOwnProperty,f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,h={},m={};function v(a){return d.call(m,a)?!0:d.call(h,a)?!1:f.test(a)?m[a]=!0:(h[a]=!0,!1)}function x(a,l,c,p){if(c!==null&&c.type===0)return!1;switch(typeof l){case"function":case"symbol":return!0;case"boolean":return p?!1:c!==null?!c.acceptsBooleans:(a=a.toLowerCase().slice(0,5),a!=="data-"&&a!=="aria-");default:return!1}}function k(a,l,c,p){if(l===null||typeof l>"u"||x(a,l,c,p))return!0;if(p)return!1;if(c!==null)switch(c.type){case 3:return!l;case 4:return l===!1;case 5:return isNaN(l);case 6:return isNaN(l)||1>l}return!1}function S(a,l,c,p,y,b,A){this.acceptsBooleans=l===2||l===3||l===4,this.attributeName=p,this.attributeNamespace=y,this.mustUseProperty=c,this.propertyName=a,this.type=l,this.sanitizeURL=b,this.removeEmptyString=A}var E={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){E[a]=new S(a,0,!1,a,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var l=a[0];E[l]=new S(l,1,!1,a[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(a){E[a]=new S(a,2,!1,a.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){E[a]=new S(a,2,!1,a,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){E[a]=new S(a,3,!1,a.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(a){E[a]=new S(a,3,!0,a,null,!1,!1)}),["capture","download"].forEach(function(a){E[a]=new S(a,4,!1,a,null,!1,!1)}),["cols","rows","size","span"].forEach(function(a){E[a]=new S(a,6,!1,a,null,!1,!1)}),["rowSpan","start"].forEach(function(a){E[a]=new S(a,5,!1,a.toLowerCase(),null,!1,!1)});var P=/[\-:]([a-z])/g;function _(a){return a[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var l=a.replace(P,_);E[l]=new S(l,1,!1,a,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var l=a.replace(P,_);E[l]=new S(l,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(a){var l=a.replace(P,_);E[l]=new S(l,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(a){E[a]=new S(a,1,!1,a.toLowerCase(),null,!1,!1)}),E.xlinkHref=new S("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(a){E[a]=new S(a,1,!1,a.toLowerCase(),null,!0,!0)});function j(a,l,c,p){var y=E.hasOwnProperty(l)?E[l]:null;(y!==null?y.type!==0:p||!(2I||y[A]!==b[I]){var D=` +`+y[A].replace(" at new "," at ");return a.displayName&&D.includes("")&&(D=D.replace("",a.displayName)),D}while(1<=A&&0<=I);break}}}finally{Z=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?T(a):""}function te(a){switch(a.tag){case 5:return T(a.type);case 16:return T("Lazy");case 13:return T("Suspense");case 19:return T("SuspenseList");case 0:case 2:case 15:return a=se(a.type,!1),a;case 11:return a=se(a.type.render,!1),a;case 1:return a=se(a.type,!0),a;default:return""}}function ce(a){if(a==null)return null;if(typeof a=="function")return a.displayName||a.name||null;if(typeof a=="string")return a;switch(a){case R:return"Fragment";case C:return"Portal";case F:return"Profiler";case z:return"StrictMode";case ue:return"Suspense";case G:return"SuspenseList"}if(typeof a=="object")switch(a.$$typeof){case Q:return(a.displayName||"Context")+".Consumer";case V:return(a._context.displayName||"Context")+".Provider";case B:var l=a.render;return a=a.displayName,a||(a=l.displayName||l.name||"",a=a!==""?"ForwardRef("+a+")":"ForwardRef"),a;case le:return l=a.displayName||null,l!==null?l:ce(a.type)||"Memo";case fe:l=a._payload,a=a._init;try{return ce(a(l))}catch{}}return null}function ye(a){var l=a.type;switch(a.tag){case 24:return"Cache";case 9:return(l.displayName||"Context")+".Consumer";case 10:return(l._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return a=l.render,a=a.displayName||a.name||"",l.displayName||(a!==""?"ForwardRef("+a+")":"ForwardRef");case 7:return"Fragment";case 5:return l;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return ce(l);case 8:return l===z?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof l=="function")return l.displayName||l.name||null;if(typeof l=="string")return l}return null}function je(a){switch(typeof a){case"boolean":case"number":case"string":case"undefined":return a;case"object":return a;default:return""}}function J(a){var l=a.type;return(a=a.nodeName)&&a.toLowerCase()==="input"&&(l==="checkbox"||l==="radio")}function we(a){var l=J(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,l),p=""+a[l];if(!a.hasOwnProperty(l)&&typeof c<"u"&&typeof c.get=="function"&&typeof c.set=="function"){var y=c.get,b=c.set;return Object.defineProperty(a,l,{configurable:!0,get:function(){return y.call(this)},set:function(A){p=""+A,b.call(this,A)}}),Object.defineProperty(a,l,{enumerable:c.enumerable}),{getValue:function(){return p},setValue:function(A){p=""+A},stopTracking:function(){a._valueTracker=null,delete a[l]}}}}function Ae(a){a._valueTracker||(a._valueTracker=we(a))}function ne(a){if(!a)return!1;var l=a._valueTracker;if(!l)return!0;var c=l.getValue(),p="";return a&&(p=J(a)?a.checked?"true":"false":a.value),a=p,a!==c?(l.setValue(a),!0):!1}function lt(a){if(a=a||(typeof document<"u"?document:void 0),typeof a>"u")return null;try{return a.activeElement||a.body}catch{return a.body}}function $e(a,l){var c=l.checked;return X({},l,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:c??a._wrapperState.initialChecked})}function Ee(a,l){var c=l.defaultValue==null?"":l.defaultValue,p=l.checked!=null?l.checked:l.defaultChecked;c=je(l.value!=null?l.value:c),a._wrapperState={initialChecked:p,initialValue:c,controlled:l.type==="checkbox"||l.type==="radio"?l.checked!=null:l.value!=null}}function vt(a,l){l=l.checked,l!=null&&j(a,"checked",l,!1)}function lr(a,l){vt(a,l);var c=je(l.value),p=l.type;if(c!=null)p==="number"?(c===0&&a.value===""||a.value!=c)&&(a.value=""+c):a.value!==""+c&&(a.value=""+c);else if(p==="submit"||p==="reset"){a.removeAttribute("value");return}l.hasOwnProperty("value")?q(a,l.type,c):l.hasOwnProperty("defaultValue")&&q(a,l.type,je(l.defaultValue)),l.checked==null&&l.defaultChecked!=null&&(a.defaultChecked=!!l.defaultChecked)}function fi(a,l,c){if(l.hasOwnProperty("value")||l.hasOwnProperty("defaultValue")){var p=l.type;if(!(p!=="submit"&&p!=="reset"||l.value!==void 0&&l.value!==null))return;l=""+a._wrapperState.initialValue,c||l===a.value||(a.value=l),a.defaultValue=l}c=a.name,c!==""&&(a.name=""),a.defaultChecked=!!a._wrapperState.initialChecked,c!==""&&(a.name=c)}function q(a,l,c){(l!=="number"||lt(a.ownerDocument)!==a)&&(c==null?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c))}var Ie=Array.isArray;function Ze(a,l,c,p){if(a=a.options,l){l={};for(var y=0;y"+l.valueOf().toString()+"",l=zu.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;l.firstChild;)a.appendChild(l.firstChild)}});function Rl(a,l){if(l){var c=a.firstChild;if(c&&c===a.lastChild&&c.nodeType===3){c.nodeValue=l;return}}a.textContent=l}var $l={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Vj=["Webkit","ms","Moz","O"];Object.keys($l).forEach(function(a){Vj.forEach(function(l){l=l+a.charAt(0).toUpperCase()+a.substring(1),$l[l]=$l[a]})});function R0(a,l,c){return l==null||typeof l=="boolean"||l===""?"":c||typeof l!="number"||l===0||$l.hasOwnProperty(a)&&$l[a]?(""+l).trim():l+"px"}function $0(a,l){a=a.style;for(var c in l)if(l.hasOwnProperty(c)){var p=c.indexOf("--")===0,y=R0(c,l[c],p);c==="float"&&(c="cssFloat"),p?a.setProperty(c,y):a[c]=y}}var qj=X({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function _h(a,l){if(l){if(qj[a]&&(l.children!=null||l.dangerouslySetInnerHTML!=null))throw Error(r(137,a));if(l.dangerouslySetInnerHTML!=null){if(l.children!=null)throw Error(r(60));if(typeof l.dangerouslySetInnerHTML!="object"||!("__html"in l.dangerouslySetInnerHTML))throw Error(r(61))}if(l.style!=null&&typeof l.style!="object")throw Error(r(62))}}function jh(a,l){if(a.indexOf("-")===-1)return typeof l.is=="string";switch(a){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Nh=null;function Ih(a){return a=a.target||a.srcElement||window,a.correspondingUseElement&&(a=a.correspondingUseElement),a.nodeType===3?a.parentNode:a}var Mh=null,ro=null,no=null;function L0(a){if(a=as(a)){if(typeof Mh!="function")throw Error(r(280));var l=a.stateNode;l&&(l=sc(l),Mh(a.stateNode,a.type,l))}}function z0(a){ro?no?no.push(a):no=[a]:ro=a}function F0(){if(ro){var a=ro,l=no;if(no=ro=null,L0(a),l)for(a=0;a>>=0,a===0?32:31-(iN(a)/aN|0)|0}var Hu=64,Ku=4194304;function Bl(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return a}}function Vu(a,l){var c=a.pendingLanes;if(c===0)return 0;var p=0,y=a.suspendedLanes,b=a.pingedLanes,A=c&268435455;if(A!==0){var I=A&~y;I!==0?p=Bl(I):(b&=A,b!==0&&(p=Bl(b)))}else A=c&~y,A!==0?p=Bl(A):b!==0&&(p=Bl(b));if(p===0)return 0;if(l!==0&&l!==p&&(l&y)===0&&(y=p&-p,b=l&-l,y>=b||y===16&&(b&4194240)!==0))return l;if((p&4)!==0&&(p|=c&16),l=a.entangledLanes,l!==0)for(a=a.entanglements,l&=p;0c;c++)l.push(a);return l}function Ul(a,l,c){a.pendingLanes|=l,l!==536870912&&(a.suspendedLanes=0,a.pingedLanes=0),a=a.eventTimes,l=31-qr(l),a[l]=c}function uN(a,l){var c=a.pendingLanes&~l;a.pendingLanes=l,a.suspendedLanes=0,a.pingedLanes=0,a.expiredLanes&=l,a.mutableReadLanes&=l,a.entangledLanes&=l,l=a.entanglements;var p=a.eventTimes;for(a=a.expirationTimes;0=Ql),px=" ",mx=!1;function vx(a,l){switch(a){case"keyup":return $N.indexOf(l.keyCode)!==-1;case"keydown":return l.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function yx(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var oo=!1;function zN(a,l){switch(a){case"compositionend":return yx(l);case"keypress":return l.which!==32?null:(mx=!0,px);case"textInput":return a=l.data,a===px&&mx?null:a;default:return null}}function FN(a,l){if(oo)return a==="compositionend"||!Xh&&vx(a,l)?(a=sx(),Xu=Kh=yi=null,oo=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(l.ctrlKey||l.altKey||l.metaKey)||l.ctrlKey&&l.altKey){if(l.char&&1=l)return{node:c,offset:l-a};a=p}e:{for(;c;){if(c.nextSibling){c=c.nextSibling;break e}c=c.parentNode}c=void 0}c=Ex(c)}}function Ax(a,l){return a&&l?a===l?!0:a&&a.nodeType===3?!1:l&&l.nodeType===3?Ax(a,l.parentNode):"contains"in a?a.contains(l):a.compareDocumentPosition?!!(a.compareDocumentPosition(l)&16):!1:!1}function Ox(){for(var a=window,l=lt();l instanceof a.HTMLIFrameElement;){try{var c=typeof l.contentWindow.location.href=="string"}catch{c=!1}if(c)a=l.contentWindow;else break;l=lt(a.document)}return l}function ep(a){var l=a&&a.nodeName&&a.nodeName.toLowerCase();return l&&(l==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||l==="textarea"||a.contentEditable==="true")}function YN(a){var l=Ox(),c=a.focusedElem,p=a.selectionRange;if(l!==c&&c&&c.ownerDocument&&Ax(c.ownerDocument.documentElement,c)){if(p!==null&&ep(c)){if(l=p.start,a=p.end,a===void 0&&(a=l),"selectionStart"in c)c.selectionStart=l,c.selectionEnd=Math.min(a,c.value.length);else if(a=(l=c.ownerDocument||document)&&l.defaultView||window,a.getSelection){a=a.getSelection();var y=c.textContent.length,b=Math.min(p.start,y);p=p.end===void 0?b:Math.min(p.end,y),!a.extend&&b>p&&(y=p,p=b,b=y),y=Px(c,b);var A=Px(c,p);y&&A&&(a.rangeCount!==1||a.anchorNode!==y.node||a.anchorOffset!==y.offset||a.focusNode!==A.node||a.focusOffset!==A.offset)&&(l=l.createRange(),l.setStart(y.node,y.offset),a.removeAllRanges(),b>p?(a.addRange(l),a.extend(A.node,A.offset)):(l.setEnd(A.node,A.offset),a.addRange(l)))}}for(l=[],a=c;a=a.parentNode;)a.nodeType===1&&l.push({element:a,left:a.scrollLeft,top:a.scrollTop});for(typeof c.focus=="function"&&c.focus(),c=0;c=document.documentMode,lo=null,tp=null,es=null,rp=!1;function Cx(a,l,c){var p=c.window===c?c.document:c.nodeType===9?c:c.ownerDocument;rp||lo==null||lo!==lt(p)||(p=lo,"selectionStart"in p&&ep(p)?p={start:p.selectionStart,end:p.selectionEnd}:(p=(p.ownerDocument&&p.ownerDocument.defaultView||window).getSelection(),p={anchorNode:p.anchorNode,anchorOffset:p.anchorOffset,focusNode:p.focusNode,focusOffset:p.focusOffset}),es&&Jl(es,p)||(es=p,p=ac(tp,"onSelect"),0ho||(a.current=pp[ho],pp[ho]=null,ho--)}function Qe(a,l){ho++,pp[ho]=a.current,a.current=l}var wi={},Kt=bi(wi),sr=bi(!1),aa=wi;function po(a,l){var c=a.type.contextTypes;if(!c)return wi;var p=a.stateNode;if(p&&p.__reactInternalMemoizedUnmaskedChildContext===l)return p.__reactInternalMemoizedMaskedChildContext;var y={},b;for(b in c)y[b]=l[b];return p&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=l,a.__reactInternalMemoizedMaskedChildContext=y),y}function ur(a){return a=a.childContextTypes,a!=null}function uc(){et(sr),et(Kt)}function Wx(a,l,c){if(Kt.current!==wi)throw Error(r(168));Qe(Kt,l),Qe(sr,c)}function Hx(a,l,c){var p=a.stateNode;if(l=l.childContextTypes,typeof p.getChildContext!="function")return c;p=p.getChildContext();for(var y in p)if(!(y in l))throw Error(r(108,ye(a)||"Unknown",y));return X({},c,p)}function cc(a){return a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||wi,aa=Kt.current,Qe(Kt,a),Qe(sr,sr.current),!0}function Kx(a,l,c){var p=a.stateNode;if(!p)throw Error(r(169));c?(a=Hx(a,l,aa),p.__reactInternalMemoizedMergedChildContext=a,et(sr),et(Kt),Qe(Kt,a)):et(sr),Qe(sr,c)}var Rn=null,dc=!1,mp=!1;function Vx(a){Rn===null?Rn=[a]:Rn.push(a)}function lI(a){dc=!0,Vx(a)}function Si(){if(!mp&&Rn!==null){mp=!0;var a=0,l=qe;try{var c=Rn;for(qe=1;a>=A,y-=A,$n=1<<32-qr(l)+y|c<Ne?(Ct=Ce,Ce=null):Ct=Ce.sibling;var He=ee(U,Ce,W[Ne],oe);if(He===null){Ce===null&&(Ce=Ct);break}a&&Ce&&He.alternate===null&&l(U,Ce),L=b(He,L,Ne),Oe===null?Se=He:Oe.sibling=He,Oe=He,Ce=Ct}if(Ne===W.length)return c(U,Ce),it&&la(U,Ne),Se;if(Ce===null){for(;NeNe?(Ct=Ce,Ce=null):Ct=Ce.sibling;var Ni=ee(U,Ce,He.value,oe);if(Ni===null){Ce===null&&(Ce=Ct);break}a&&Ce&&Ni.alternate===null&&l(U,Ce),L=b(Ni,L,Ne),Oe===null?Se=Ni:Oe.sibling=Ni,Oe=Ni,Ce=Ct}if(He.done)return c(U,Ce),it&&la(U,Ne),Se;if(Ce===null){for(;!He.done;Ne++,He=W.next())He=ie(U,He.value,oe),He!==null&&(L=b(He,L,Ne),Oe===null?Se=He:Oe.sibling=He,Oe=He);return it&&la(U,Ne),Se}for(Ce=p(U,Ce);!He.done;Ne++,He=W.next())He=he(Ce,U,Ne,He.value,oe),He!==null&&(a&&He.alternate!==null&&Ce.delete(He.key===null?Ne:He.key),L=b(He,L,Ne),Oe===null?Se=He:Oe.sibling=He,Oe=He);return a&&Ce.forEach(function(BI){return l(U,BI)}),it&&la(U,Ne),Se}function mt(U,L,W,oe){if(typeof W=="object"&&W!==null&&W.type===R&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case N:e:{for(var Se=W.key,Oe=L;Oe!==null;){if(Oe.key===Se){if(Se=W.type,Se===R){if(Oe.tag===7){c(U,Oe.sibling),L=y(Oe,W.props.children),L.return=U,U=L;break e}}else if(Oe.elementType===Se||typeof Se=="object"&&Se!==null&&Se.$$typeof===fe&&Zx(Se)===Oe.type){c(U,Oe.sibling),L=y(Oe,W.props),L.ref=os(U,Oe,W),L.return=U,U=L;break e}c(U,Oe);break}else l(U,Oe);Oe=Oe.sibling}W.type===R?(L=ma(W.props.children,U.mode,oe,W.key),L.return=U,U=L):(oe=zc(W.type,W.key,W.props,null,U.mode,oe),oe.ref=os(U,L,W),oe.return=U,U=oe)}return A(U);case C:e:{for(Oe=W.key;L!==null;){if(L.key===Oe)if(L.tag===4&&L.stateNode.containerInfo===W.containerInfo&&L.stateNode.implementation===W.implementation){c(U,L.sibling),L=y(L,W.children||[]),L.return=U,U=L;break e}else{c(U,L);break}else l(U,L);L=L.sibling}L=fm(W,U.mode,oe),L.return=U,U=L}return A(U);case fe:return Oe=W._init,mt(U,L,Oe(W._payload),oe)}if(Ie(W))return ge(U,L,W,oe);if(ae(W))return xe(U,L,W,oe);mc(U,W)}return typeof W=="string"&&W!==""||typeof W=="number"?(W=""+W,L!==null&&L.tag===6?(c(U,L.sibling),L=y(L,W),L.return=U,U=L):(c(U,L),L=dm(W,U.mode,oe),L.return=U,U=L),A(U)):c(U,L)}return mt}var go=Jx(!0),eb=Jx(!1),vc=bi(null),yc=null,xo=null,wp=null;function Sp(){wp=xo=yc=null}function kp(a){var l=vc.current;et(vc),a._currentValue=l}function Ep(a,l,c){for(;a!==null;){var p=a.alternate;if((a.childLanes&l)!==l?(a.childLanes|=l,p!==null&&(p.childLanes|=l)):p!==null&&(p.childLanes&l)!==l&&(p.childLanes|=l),a===c)break;a=a.return}}function bo(a,l){yc=a,wp=xo=null,a=a.dependencies,a!==null&&a.firstContext!==null&&((a.lanes&l)!==0&&(cr=!0),a.firstContext=null)}function Ir(a){var l=a._currentValue;if(wp!==a)if(a={context:a,memoizedValue:l,next:null},xo===null){if(yc===null)throw Error(r(308));xo=a,yc.dependencies={lanes:0,firstContext:a}}else xo=xo.next=a;return l}var sa=null;function Pp(a){sa===null?sa=[a]:sa.push(a)}function tb(a,l,c,p){var y=l.interleaved;return y===null?(c.next=c,Pp(l)):(c.next=y.next,y.next=c),l.interleaved=c,zn(a,p)}function zn(a,l){a.lanes|=l;var c=a.alternate;for(c!==null&&(c.lanes|=l),c=a,a=a.return;a!==null;)a.childLanes|=l,c=a.alternate,c!==null&&(c.childLanes|=l),c=a,a=a.return;return c.tag===3?c.stateNode:null}var ki=!1;function Ap(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function rb(a,l){a=a.updateQueue,l.updateQueue===a&&(l.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function Fn(a,l){return{eventTime:a,lane:l,tag:0,payload:null,callback:null,next:null}}function Ei(a,l,c){var p=a.updateQueue;if(p===null)return null;if(p=p.shared,(We&2)!==0){var y=p.pending;return y===null?l.next=l:(l.next=y.next,y.next=l),p.pending=l,zn(a,c)}return y=p.interleaved,y===null?(l.next=l,Pp(p)):(l.next=y.next,y.next=l),p.interleaved=l,zn(a,c)}function gc(a,l,c){if(l=l.updateQueue,l!==null&&(l=l.shared,(c&4194240)!==0)){var p=l.lanes;p&=a.pendingLanes,c|=p,l.lanes=c,Fh(a,c)}}function nb(a,l){var c=a.updateQueue,p=a.alternate;if(p!==null&&(p=p.updateQueue,c===p)){var y=null,b=null;if(c=c.firstBaseUpdate,c!==null){do{var A={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};b===null?y=b=A:b=b.next=A,c=c.next}while(c!==null);b===null?y=b=l:b=b.next=l}else y=b=l;c={baseState:p.baseState,firstBaseUpdate:y,lastBaseUpdate:b,shared:p.shared,effects:p.effects},a.updateQueue=c;return}a=c.lastBaseUpdate,a===null?c.firstBaseUpdate=l:a.next=l,c.lastBaseUpdate=l}function xc(a,l,c,p){var y=a.updateQueue;ki=!1;var b=y.firstBaseUpdate,A=y.lastBaseUpdate,I=y.shared.pending;if(I!==null){y.shared.pending=null;var D=I,K=D.next;D.next=null,A===null?b=K:A.next=K,A=D;var re=a.alternate;re!==null&&(re=re.updateQueue,I=re.lastBaseUpdate,I!==A&&(I===null?re.firstBaseUpdate=K:I.next=K,re.lastBaseUpdate=D))}if(b!==null){var ie=y.baseState;A=0,re=K=D=null,I=b;do{var ee=I.lane,he=I.eventTime;if((p&ee)===ee){re!==null&&(re=re.next={eventTime:he,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var ge=a,xe=I;switch(ee=l,he=c,xe.tag){case 1:if(ge=xe.payload,typeof ge=="function"){ie=ge.call(he,ie,ee);break e}ie=ge;break e;case 3:ge.flags=ge.flags&-65537|128;case 0:if(ge=xe.payload,ee=typeof ge=="function"?ge.call(he,ie,ee):ge,ee==null)break e;ie=X({},ie,ee);break e;case 2:ki=!0}}I.callback!==null&&I.lane!==0&&(a.flags|=64,ee=y.effects,ee===null?y.effects=[I]:ee.push(I))}else he={eventTime:he,lane:ee,tag:I.tag,payload:I.payload,callback:I.callback,next:null},re===null?(K=re=he,D=ie):re=re.next=he,A|=ee;if(I=I.next,I===null){if(I=y.shared.pending,I===null)break;ee=I,I=ee.next,ee.next=null,y.lastBaseUpdate=ee,y.shared.pending=null}}while(!0);if(re===null&&(D=ie),y.baseState=D,y.firstBaseUpdate=K,y.lastBaseUpdate=re,l=y.shared.interleaved,l!==null){y=l;do A|=y.lane,y=y.next;while(y!==l)}else b===null&&(y.shared.lanes=0);da|=A,a.lanes=A,a.memoizedState=ie}}function ib(a,l,c){if(a=l.effects,l.effects=null,a!==null)for(l=0;lc?c:4,a(!0);var p=Np.transition;Np.transition={};try{a(!1),l()}finally{qe=c,Np.transition=p}}function kb(){return Mr().memoizedState}function dI(a,l,c){var p=Ci(a);if(c={lane:p,action:c,hasEagerState:!1,eagerState:null,next:null},Eb(a))Pb(l,c);else if(c=tb(a,l,c,p),c!==null){var y=tr();Jr(c,a,p,y),Ab(c,l,p)}}function fI(a,l,c){var p=Ci(a),y={lane:p,action:c,hasEagerState:!1,eagerState:null,next:null};if(Eb(a))Pb(l,y);else{var b=a.alternate;if(a.lanes===0&&(b===null||b.lanes===0)&&(b=l.lastRenderedReducer,b!==null))try{var A=l.lastRenderedState,I=b(A,c);if(y.hasEagerState=!0,y.eagerState=I,Gr(I,A)){var D=l.interleaved;D===null?(y.next=y,Pp(l)):(y.next=D.next,D.next=y),l.interleaved=y;return}}catch{}finally{}c=tb(a,l,y,p),c!==null&&(y=tr(),Jr(c,a,p,y),Ab(c,l,p))}}function Eb(a){var l=a.alternate;return a===ut||l!==null&&l===ut}function Pb(a,l){cs=Sc=!0;var c=a.pending;c===null?l.next=l:(l.next=c.next,c.next=l),a.pending=l}function Ab(a,l,c){if((c&4194240)!==0){var p=l.lanes;p&=a.pendingLanes,c|=p,l.lanes=c,Fh(a,c)}}var Pc={readContext:Ir,useCallback:Vt,useContext:Vt,useEffect:Vt,useImperativeHandle:Vt,useInsertionEffect:Vt,useLayoutEffect:Vt,useMemo:Vt,useReducer:Vt,useRef:Vt,useState:Vt,useDebugValue:Vt,useDeferredValue:Vt,useTransition:Vt,useMutableSource:Vt,useSyncExternalStore:Vt,useId:Vt,unstable_isNewReconciler:!1},hI={readContext:Ir,useCallback:function(a,l){return pn().memoizedState=[a,l===void 0?null:l],a},useContext:Ir,useEffect:mb,useImperativeHandle:function(a,l,c){return c=c!=null?c.concat([a]):null,kc(4194308,4,gb.bind(null,l,a),c)},useLayoutEffect:function(a,l){return kc(4194308,4,a,l)},useInsertionEffect:function(a,l){return kc(4,2,a,l)},useMemo:function(a,l){var c=pn();return l=l===void 0?null:l,a=a(),c.memoizedState=[a,l],a},useReducer:function(a,l,c){var p=pn();return l=c!==void 0?c(l):l,p.memoizedState=p.baseState=l,a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:l},p.queue=a,a=a.dispatch=dI.bind(null,ut,a),[p.memoizedState,a]},useRef:function(a){var l=pn();return a={current:a},l.memoizedState=a},useState:hb,useDebugValue:Lp,useDeferredValue:function(a){return pn().memoizedState=a},useTransition:function(){var a=hb(!1),l=a[0];return a=cI.bind(null,a[1]),pn().memoizedState=a,[l,a]},useMutableSource:function(){},useSyncExternalStore:function(a,l,c){var p=ut,y=pn();if(it){if(c===void 0)throw Error(r(407));c=c()}else{if(c=l(),Ot===null)throw Error(r(349));(ca&30)!==0||sb(p,l,c)}y.memoizedState=c;var b={value:c,getSnapshot:l};return y.queue=b,mb(cb.bind(null,p,b,a),[a]),p.flags|=2048,hs(9,ub.bind(null,p,b,c,l),void 0,null),c},useId:function(){var a=pn(),l=Ot.identifierPrefix;if(it){var c=Ln,p=$n;c=(p&~(1<<32-qr(p)-1)).toString(32)+c,l=":"+l+"R"+c,c=ds++,0<\/script>",a=a.removeChild(a.firstChild)):typeof p.is=="string"?a=A.createElement(c,{is:p.is}):(a=A.createElement(c),c==="select"&&(A=a,p.multiple?A.multiple=!0:p.size&&(A.size=p.size))):a=A.createElementNS(a,c),a[fn]=l,a[is]=p,Vb(a,l,!1,!1),l.stateNode=a;e:{switch(A=jh(c,p),c){case"dialog":Je("cancel",a),Je("close",a),y=p;break;case"iframe":case"object":case"embed":Je("load",a),y=p;break;case"video":case"audio":for(y=0;yPo&&(l.flags|=128,p=!0,ps(b,!1),l.lanes=4194304)}else{if(!p)if(a=bc(A),a!==null){if(l.flags|=128,p=!0,c=a.updateQueue,c!==null&&(l.updateQueue=c,l.flags|=4),ps(b,!0),b.tail===null&&b.tailMode==="hidden"&&!A.alternate&&!it)return qt(l),null}else 2*pt()-b.renderingStartTime>Po&&c!==1073741824&&(l.flags|=128,p=!0,ps(b,!1),l.lanes=4194304);b.isBackwards?(A.sibling=l.child,l.child=A):(c=b.last,c!==null?c.sibling=A:l.child=A,b.last=A)}return b.tail!==null?(l=b.tail,b.rendering=l,b.tail=l.sibling,b.renderingStartTime=pt(),l.sibling=null,c=st.current,Qe(st,p?c&1|2:c&1),l):(qt(l),null);case 22:case 23:return sm(),p=l.memoizedState!==null,a!==null&&a.memoizedState!==null!==p&&(l.flags|=8192),p&&(l.mode&1)!==0?(Sr&1073741824)!==0&&(qt(l),l.subtreeFlags&6&&(l.flags|=8192)):qt(l),null;case 24:return null;case 25:return null}throw Error(r(156,l.tag))}function wI(a,l){switch(yp(l),l.tag){case 1:return ur(l.type)&&uc(),a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 3:return wo(),et(sr),et(Kt),jp(),a=l.flags,(a&65536)!==0&&(a&128)===0?(l.flags=a&-65537|128,l):null;case 5:return Cp(l),null;case 13:if(et(st),a=l.memoizedState,a!==null&&a.dehydrated!==null){if(l.alternate===null)throw Error(r(340));yo()}return a=l.flags,a&65536?(l.flags=a&-65537|128,l):null;case 19:return et(st),null;case 4:return wo(),null;case 10:return kp(l.type._context),null;case 22:case 23:return sm(),null;case 24:return null;default:return null}}var _c=!1,Gt=!1,SI=typeof WeakSet=="function"?WeakSet:Set,me=null;function ko(a,l){var c=a.ref;if(c!==null)if(typeof c=="function")try{c(null)}catch(p){ct(a,l,p)}else c.current=null}function Qp(a,l,c){try{c()}catch(p){ct(a,l,p)}}var Yb=!1;function kI(a,l){if(sp=Yu,a=Ox(),ep(a)){if("selectionStart"in a)var c={start:a.selectionStart,end:a.selectionEnd};else e:{c=(c=a.ownerDocument)&&c.defaultView||window;var p=c.getSelection&&c.getSelection();if(p&&p.rangeCount!==0){c=p.anchorNode;var y=p.anchorOffset,b=p.focusNode;p=p.focusOffset;try{c.nodeType,b.nodeType}catch{c=null;break e}var A=0,I=-1,D=-1,K=0,re=0,ie=a,ee=null;t:for(;;){for(var he;ie!==c||y!==0&&ie.nodeType!==3||(I=A+y),ie!==b||p!==0&&ie.nodeType!==3||(D=A+p),ie.nodeType===3&&(A+=ie.nodeValue.length),(he=ie.firstChild)!==null;)ee=ie,ie=he;for(;;){if(ie===a)break t;if(ee===c&&++K===y&&(I=A),ee===b&&++re===p&&(D=A),(he=ie.nextSibling)!==null)break;ie=ee,ee=ie.parentNode}ie=he}c=I===-1||D===-1?null:{start:I,end:D}}else c=null}c=c||{start:0,end:0}}else c=null;for(up={focusedElem:a,selectionRange:c},Yu=!1,me=l;me!==null;)if(l=me,a=l.child,(l.subtreeFlags&1028)!==0&&a!==null)a.return=l,me=a;else for(;me!==null;){l=me;try{var ge=l.alternate;if((l.flags&1024)!==0)switch(l.tag){case 0:case 11:case 15:break;case 1:if(ge!==null){var xe=ge.memoizedProps,mt=ge.memoizedState,U=l.stateNode,L=U.getSnapshotBeforeUpdate(l.elementType===l.type?xe:Qr(l.type,xe),mt);U.__reactInternalSnapshotBeforeUpdate=L}break;case 3:var W=l.stateNode.containerInfo;W.nodeType===1?W.textContent="":W.nodeType===9&&W.documentElement&&W.removeChild(W.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(oe){ct(l,l.return,oe)}if(a=l.sibling,a!==null){a.return=l.return,me=a;break}me=l.return}return ge=Yb,Yb=!1,ge}function ms(a,l,c){var p=l.updateQueue;if(p=p!==null?p.lastEffect:null,p!==null){var y=p=p.next;do{if((y.tag&a)===a){var b=y.destroy;y.destroy=void 0,b!==void 0&&Qp(l,c,b)}y=y.next}while(y!==p)}}function jc(a,l){if(l=l.updateQueue,l=l!==null?l.lastEffect:null,l!==null){var c=l=l.next;do{if((c.tag&a)===a){var p=c.create;c.destroy=p()}c=c.next}while(c!==l)}}function Xp(a){var l=a.ref;if(l!==null){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}typeof l=="function"?l(a):l.current=a}}function Qb(a){var l=a.alternate;l!==null&&(a.alternate=null,Qb(l)),a.child=null,a.deletions=null,a.sibling=null,a.tag===5&&(l=a.stateNode,l!==null&&(delete l[fn],delete l[is],delete l[hp],delete l[aI],delete l[oI])),a.stateNode=null,a.return=null,a.dependencies=null,a.memoizedProps=null,a.memoizedState=null,a.pendingProps=null,a.stateNode=null,a.updateQueue=null}function Xb(a){return a.tag===5||a.tag===3||a.tag===4}function Zb(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||Xb(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function Zp(a,l,c){var p=a.tag;if(p===5||p===6)a=a.stateNode,l?c.nodeType===8?c.parentNode.insertBefore(a,l):c.insertBefore(a,l):(c.nodeType===8?(l=c.parentNode,l.insertBefore(a,c)):(l=c,l.appendChild(a)),c=c._reactRootContainer,c!=null||l.onclick!==null||(l.onclick=lc));else if(p!==4&&(a=a.child,a!==null))for(Zp(a,l,c),a=a.sibling;a!==null;)Zp(a,l,c),a=a.sibling}function Jp(a,l,c){var p=a.tag;if(p===5||p===6)a=a.stateNode,l?c.insertBefore(a,l):c.appendChild(a);else if(p!==4&&(a=a.child,a!==null))for(Jp(a,l,c),a=a.sibling;a!==null;)Jp(a,l,c),a=a.sibling}var Dt=null,Xr=!1;function Pi(a,l,c){for(c=c.child;c!==null;)Jb(a,l,c),c=c.sibling}function Jb(a,l,c){if(dn&&typeof dn.onCommitFiberUnmount=="function")try{dn.onCommitFiberUnmount(Wu,c)}catch{}switch(c.tag){case 5:Gt||ko(c,l);case 6:var p=Dt,y=Xr;Dt=null,Pi(a,l,c),Dt=p,Xr=y,Dt!==null&&(Xr?(a=Dt,c=c.stateNode,a.nodeType===8?a.parentNode.removeChild(c):a.removeChild(c)):Dt.removeChild(c.stateNode));break;case 18:Dt!==null&&(Xr?(a=Dt,c=c.stateNode,a.nodeType===8?fp(a.parentNode,c):a.nodeType===1&&fp(a,c),ql(a)):fp(Dt,c.stateNode));break;case 4:p=Dt,y=Xr,Dt=c.stateNode.containerInfo,Xr=!0,Pi(a,l,c),Dt=p,Xr=y;break;case 0:case 11:case 14:case 15:if(!Gt&&(p=c.updateQueue,p!==null&&(p=p.lastEffect,p!==null))){y=p=p.next;do{var b=y,A=b.destroy;b=b.tag,A!==void 0&&((b&2)!==0||(b&4)!==0)&&Qp(c,l,A),y=y.next}while(y!==p)}Pi(a,l,c);break;case 1:if(!Gt&&(ko(c,l),p=c.stateNode,typeof p.componentWillUnmount=="function"))try{p.props=c.memoizedProps,p.state=c.memoizedState,p.componentWillUnmount()}catch(I){ct(c,l,I)}Pi(a,l,c);break;case 21:Pi(a,l,c);break;case 22:c.mode&1?(Gt=(p=Gt)||c.memoizedState!==null,Pi(a,l,c),Gt=p):Pi(a,l,c);break;default:Pi(a,l,c)}}function e1(a){var l=a.updateQueue;if(l!==null){a.updateQueue=null;var c=a.stateNode;c===null&&(c=a.stateNode=new SI),l.forEach(function(p){var y=II.bind(null,a,p);c.has(p)||(c.add(p),p.then(y,y))})}}function Zr(a,l){var c=l.deletions;if(c!==null)for(var p=0;py&&(y=A),p&=~b}if(p=y,p=pt()-p,p=(120>p?120:480>p?480:1080>p?1080:1920>p?1920:3e3>p?3e3:4320>p?4320:1960*PI(p/1960))-p,10a?16:a,Oi===null)var p=!1;else{if(a=Oi,Oi=null,Dc=0,(We&6)!==0)throw Error(r(331));var y=We;for(We|=4,me=a.current;me!==null;){var b=me,A=b.child;if((me.flags&16)!==0){var I=b.deletions;if(I!==null){for(var D=0;Dpt()-rm?ha(a,0):tm|=c),fr(a,l)}function h1(a,l){l===0&&((a.mode&1)===0?l=1:(l=Ku,Ku<<=1,(Ku&130023424)===0&&(Ku=4194304)));var c=tr();a=zn(a,l),a!==null&&(Ul(a,l,c),fr(a,c))}function NI(a){var l=a.memoizedState,c=0;l!==null&&(c=l.retryLane),h1(a,c)}function II(a,l){var c=0;switch(a.tag){case 13:var p=a.stateNode,y=a.memoizedState;y!==null&&(c=y.retryLane);break;case 19:p=a.stateNode;break;default:throw Error(r(314))}p!==null&&p.delete(l),h1(a,c)}var p1;p1=function(a,l,c){if(a!==null)if(a.memoizedProps!==l.pendingProps||sr.current)cr=!0;else{if((a.lanes&c)===0&&(l.flags&128)===0)return cr=!1,xI(a,l,c);cr=(a.flags&131072)!==0}else cr=!1,it&&(l.flags&1048576)!==0&&qx(l,hc,l.index);switch(l.lanes=0,l.tag){case 2:var p=l.type;Cc(a,l),a=l.pendingProps;var y=po(l,Kt.current);bo(l,c),y=Mp(null,l,p,a,y,c);var b=Tp();return l.flags|=1,typeof y=="object"&&y!==null&&typeof y.render=="function"&&y.$$typeof===void 0?(l.tag=1,l.memoizedState=null,l.updateQueue=null,ur(p)?(b=!0,cc(l)):b=!1,l.memoizedState=y.state!==null&&y.state!==void 0?y.state:null,Ap(l),y.updater=Ac,l.stateNode=y,y._reactInternals=l,Fp(l,p,a,c),l=Hp(null,l,p,!0,b,c)):(l.tag=0,it&&b&&vp(l),er(null,l,y,c),l=l.child),l;case 16:p=l.elementType;e:{switch(Cc(a,l),a=l.pendingProps,y=p._init,p=y(p._payload),l.type=p,y=l.tag=TI(p),a=Qr(p,a),y){case 0:l=Wp(null,l,p,a,c);break e;case 1:l=Fb(null,l,p,a,c);break e;case 11:l=Db(null,l,p,a,c);break e;case 14:l=Rb(null,l,p,Qr(p.type,a),c);break e}throw Error(r(306,p,""))}return l;case 0:return p=l.type,y=l.pendingProps,y=l.elementType===p?y:Qr(p,y),Wp(a,l,p,y,c);case 1:return p=l.type,y=l.pendingProps,y=l.elementType===p?y:Qr(p,y),Fb(a,l,p,y,c);case 3:e:{if(Bb(l),a===null)throw Error(r(387));p=l.pendingProps,b=l.memoizedState,y=b.element,rb(a,l),xc(l,p,null,c);var A=l.memoizedState;if(p=A.element,b.isDehydrated)if(b={element:p,isDehydrated:!1,cache:A.cache,pendingSuspenseBoundaries:A.pendingSuspenseBoundaries,transitions:A.transitions},l.updateQueue.baseState=b,l.memoizedState=b,l.flags&256){y=So(Error(r(423)),l),l=Ub(a,l,p,c,y);break e}else if(p!==y){y=So(Error(r(424)),l),l=Ub(a,l,p,c,y);break e}else for(wr=xi(l.stateNode.containerInfo.firstChild),br=l,it=!0,Yr=null,c=eb(l,null,p,c),l.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{if(yo(),p===y){l=Bn(a,l,c);break e}er(a,l,p,c)}l=l.child}return l;case 5:return ab(l),a===null&&xp(l),p=l.type,y=l.pendingProps,b=a!==null?a.memoizedProps:null,A=y.children,cp(p,y)?A=null:b!==null&&cp(p,b)&&(l.flags|=32),zb(a,l),er(a,l,A,c),l.child;case 6:return a===null&&xp(l),null;case 13:return Wb(a,l,c);case 4:return Op(l,l.stateNode.containerInfo),p=l.pendingProps,a===null?l.child=go(l,null,p,c):er(a,l,p,c),l.child;case 11:return p=l.type,y=l.pendingProps,y=l.elementType===p?y:Qr(p,y),Db(a,l,p,y,c);case 7:return er(a,l,l.pendingProps,c),l.child;case 8:return er(a,l,l.pendingProps.children,c),l.child;case 12:return er(a,l,l.pendingProps.children,c),l.child;case 10:e:{if(p=l.type._context,y=l.pendingProps,b=l.memoizedProps,A=y.value,Qe(vc,p._currentValue),p._currentValue=A,b!==null)if(Gr(b.value,A)){if(b.children===y.children&&!sr.current){l=Bn(a,l,c);break e}}else for(b=l.child,b!==null&&(b.return=l);b!==null;){var I=b.dependencies;if(I!==null){A=b.child;for(var D=I.firstContext;D!==null;){if(D.context===p){if(b.tag===1){D=Fn(-1,c&-c),D.tag=2;var K=b.updateQueue;if(K!==null){K=K.shared;var re=K.pending;re===null?D.next=D:(D.next=re.next,re.next=D),K.pending=D}}b.lanes|=c,D=b.alternate,D!==null&&(D.lanes|=c),Ep(b.return,c,l),I.lanes|=c;break}D=D.next}}else if(b.tag===10)A=b.type===l.type?null:b.child;else if(b.tag===18){if(A=b.return,A===null)throw Error(r(341));A.lanes|=c,I=A.alternate,I!==null&&(I.lanes|=c),Ep(A,c,l),A=b.sibling}else A=b.child;if(A!==null)A.return=b;else for(A=b;A!==null;){if(A===l){A=null;break}if(b=A.sibling,b!==null){b.return=A.return,A=b;break}A=A.return}b=A}er(a,l,y.children,c),l=l.child}return l;case 9:return y=l.type,p=l.pendingProps.children,bo(l,c),y=Ir(y),p=p(y),l.flags|=1,er(a,l,p,c),l.child;case 14:return p=l.type,y=Qr(p,l.pendingProps),y=Qr(p.type,y),Rb(a,l,p,y,c);case 15:return $b(a,l,l.type,l.pendingProps,c);case 17:return p=l.type,y=l.pendingProps,y=l.elementType===p?y:Qr(p,y),Cc(a,l),l.tag=1,ur(p)?(a=!0,cc(l)):a=!1,bo(l,c),Cb(l,p,y),Fp(l,p,y,c),Hp(null,l,p,!0,a,c);case 19:return Kb(a,l,c);case 22:return Lb(a,l,c)}throw Error(r(156,l.tag))};function m1(a,l){return G0(a,l)}function MI(a,l,c,p){this.tag=a,this.key=c,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=l,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=p,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Dr(a,l,c,p){return new MI(a,l,c,p)}function cm(a){return a=a.prototype,!(!a||!a.isReactComponent)}function TI(a){if(typeof a=="function")return cm(a)?1:0;if(a!=null){if(a=a.$$typeof,a===B)return 11;if(a===le)return 14}return 2}function ji(a,l){var c=a.alternate;return c===null?(c=Dr(a.tag,l,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=l,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null),c.flags=a.flags&14680064,c.childLanes=a.childLanes,c.lanes=a.lanes,c.child=a.child,c.memoizedProps=a.memoizedProps,c.memoizedState=a.memoizedState,c.updateQueue=a.updateQueue,l=a.dependencies,c.dependencies=l===null?null:{lanes:l.lanes,firstContext:l.firstContext},c.sibling=a.sibling,c.index=a.index,c.ref=a.ref,c}function zc(a,l,c,p,y,b){var A=2;if(p=a,typeof a=="function")cm(a)&&(A=1);else if(typeof a=="string")A=5;else e:switch(a){case R:return ma(c.children,y,b,l);case z:A=8,y|=8;break;case F:return a=Dr(12,c,l,y|2),a.elementType=F,a.lanes=b,a;case ue:return a=Dr(13,c,l,y),a.elementType=ue,a.lanes=b,a;case G:return a=Dr(19,c,l,y),a.elementType=G,a.lanes=b,a;case de:return Fc(c,y,b,l);default:if(typeof a=="object"&&a!==null)switch(a.$$typeof){case V:A=10;break e;case Q:A=9;break e;case B:A=11;break e;case le:A=14;break e;case fe:A=16,p=null;break e}throw Error(r(130,a==null?a:typeof a,""))}return l=Dr(A,c,l,y),l.elementType=a,l.type=p,l.lanes=b,l}function ma(a,l,c,p){return a=Dr(7,a,p,l),a.lanes=c,a}function Fc(a,l,c,p){return a=Dr(22,a,p,l),a.elementType=de,a.lanes=c,a.stateNode={isHidden:!1},a}function dm(a,l,c){return a=Dr(6,a,null,l),a.lanes=c,a}function fm(a,l,c){return l=Dr(4,a.children!==null?a.children:[],a.key,l),l.lanes=c,l.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation},l}function DI(a,l,c,p,y){this.tag=l,this.containerInfo=a,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=zh(0),this.expirationTimes=zh(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=zh(0),this.identifierPrefix=p,this.onRecoverableError=y,this.mutableSourceEagerHydrationData=null}function hm(a,l,c,p,y,b,A,I,D){return a=new DI(a,l,c,I,D),l===1?(l=1,b===!0&&(l|=8)):l=0,b=Dr(3,null,null,l),a.current=b,b.stateNode=a,b.memoizedState={element:p,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ap(b),a}function RI(a,l,c){var p=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),bm.exports=QI(),bm.exports}var j1;function XI(){if(j1)return Gc;j1=1;var e=OP();return Gc.createRoot=e.createRoot,Gc.hydrateRoot=e.hydrateRoot,Gc}var ZI=XI();const JI=Ty(ZI);var gu=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},ja,Fi,Zo,yP,eM=(yP=class extends gu{constructor(){super();_e(this,ja);_e(this,Fi);_e(this,Zo);pe(this,Zo,t=>{if(typeof window<"u"&&window.addEventListener){const r=()=>t();return window.addEventListener("visibilitychange",r,!1),()=>{window.removeEventListener("visibilitychange",r)}}})}onSubscribe(){$(this,Fi)||this.setEventListener($(this,Zo))}onUnsubscribe(){var t;this.hasListeners()||((t=$(this,Fi))==null||t.call(this),pe(this,Fi,void 0))}setEventListener(t){var r;pe(this,Zo,t),(r=$(this,Fi))==null||r.call(this),pe(this,Fi,t(n=>{typeof n=="boolean"?this.setFocused(n):this.onFocus()}))}setFocused(t){$(this,ja)!==t&&(pe(this,ja,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(r=>{r(t)})}isFocused(){var t;return typeof $(this,ja)=="boolean"?$(this,ja):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},ja=new WeakMap,Fi=new WeakMap,Zo=new WeakMap,yP),Ry=new eM,tM={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},Bi,My,gP,rM=(gP=class{constructor(){_e(this,Bi,tM);_e(this,My,!1)}setTimeoutProvider(e){pe(this,Bi,e)}setTimeout(e,t){return $(this,Bi).setTimeout(e,t)}clearTimeout(e){$(this,Bi).clearTimeout(e)}setInterval(e,t){return $(this,Bi).setInterval(e,t)}clearInterval(e){$(this,Bi).clearInterval(e)}},Bi=new WeakMap,My=new WeakMap,gP),ka=new rM;function nM(e){setTimeout(e,0)}var iM=typeof window>"u"||"Deno"in globalThis;function mr(){}function aM(e,t){return typeof e=="function"?e(t):e}function pv(e){return typeof e=="number"&&e>=0&&e!==1/0}function CP(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Yi(e,t){return typeof e=="function"?e(t):e}function Er(e,t){return typeof e=="function"?e(t):e}function N1(e,t){const{type:r="all",exact:n,fetchStatus:i,predicate:o,queryKey:s,stale:u}=e;if(s){if(n){if(t.queryHash!==$y(s,t.options))return!1}else if(!Vs(t.queryKey,s))return!1}if(r!=="all"){const d=t.isActive();if(r==="active"&&!d||r==="inactive"&&d)return!1}return!(typeof u=="boolean"&&t.isStale()!==u||i&&i!==t.state.fetchStatus||o&&!o(t))}function I1(e,t){const{exact:r,status:n,predicate:i,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(r){if(Ks(t.options.mutationKey)!==Ks(o))return!1}else if(!Vs(t.options.mutationKey,o))return!1}return!(n&&t.state.status!==n||i&&!i(t))}function $y(e,t){return((t==null?void 0:t.queryKeyHashFn)||Ks)(e)}function Ks(e){return JSON.stringify(e,(t,r)=>vv(r)?Object.keys(r).sort().reduce((n,i)=>(n[i]=r[i],n),{}):r)}function Vs(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(r=>Vs(e[r],t[r])):!1}var oM=Object.prototype.hasOwnProperty;function _P(e,t,r=0){if(e===t)return e;if(r>500)return t;const n=M1(e)&&M1(t);if(!n&&!(vv(e)&&vv(t)))return t;const o=(n?e:Object.keys(e)).length,s=n?t:Object.keys(t),u=s.length,d=n?new Array(u):{};let f=0;for(let h=0;h{ka.setTimeout(t,e)})}function yv(e,t,r){return typeof r.structuralSharing=="function"?r.structuralSharing(e,t):r.structuralSharing!==!1?_P(e,t):t}function sM(e,t,r=0){const n=[...e,t];return r&&n.length>r?n.slice(1):n}function uM(e,t,r=0){const n=[t,...e];return r&&n.length>r?n.slice(0,-1):n}var Ly=Symbol();function jP(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===Ly?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function NP(e,t){return typeof e=="function"?e(...t):!!e}function cM(e,t,r){let n=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??(i=t()),n||(n=!0,i.aborted?r():i.addEventListener("abort",r,{once:!0})),i)}),e}var qs=(()=>{let e=()=>iM;return{isServer(){return e()},setIsServer(t){e=t}}})();function gv(){let e,t;const r=new Promise((i,o)=>{e=i,t=o});r.status="pending",r.catch(()=>{});function n(i){Object.assign(r,i),delete r.resolve,delete r.reject}return r.resolve=i=>{n({status:"fulfilled",value:i}),e(i)},r.reject=i=>{n({status:"rejected",reason:i}),t(i)},r}var dM=nM;function fM(){let e=[],t=0,r=u=>{u()},n=u=>{u()},i=dM;const o=u=>{t?e.push(u):i(()=>{r(u)})},s=()=>{const u=e;e=[],u.length&&i(()=>{n(()=>{u.forEach(d=>{r(d)})})})};return{batch:u=>{let d;t++;try{d=u()}finally{t--,t||s()}return d},batchCalls:u=>(...d)=>{o(()=>{u(...d)})},schedule:o,setNotifyFunction:u=>{r=u},setBatchNotifyFunction:u=>{n=u},setScheduler:u=>{i=u}}}var Ft=fM(),Jo,Ui,el,xP,hM=(xP=class extends gu{constructor(){super();_e(this,Jo,!0);_e(this,Ui);_e(this,el);pe(this,el,t=>{if(typeof window<"u"&&window.addEventListener){const r=()=>t(!0),n=()=>t(!1);return window.addEventListener("online",r,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",r),window.removeEventListener("offline",n)}}})}onSubscribe(){$(this,Ui)||this.setEventListener($(this,el))}onUnsubscribe(){var t;this.hasListeners()||((t=$(this,Ui))==null||t.call(this),pe(this,Ui,void 0))}setEventListener(t){var r;pe(this,el,t),(r=$(this,Ui))==null||r.call(this),pe(this,Ui,t(this.setOnline.bind(this)))}setOnline(t){$(this,Jo)!==t&&(pe(this,Jo,t),this.listeners.forEach(n=>{n(t)}))}isOnline(){return $(this,Jo)}},Jo=new WeakMap,Ui=new WeakMap,el=new WeakMap,xP),jd=new hM;function pM(e){return Math.min(1e3*2**e,3e4)}function IP(e){return(e??"online")==="online"?jd.isOnline():!0}var xv=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function MP(e){let t=!1,r=0,n;const i=gv(),o=()=>i.status!=="pending",s=S=>{var E;if(!o()){const P=new xv(S);v(P),(E=e.onCancel)==null||E.call(e,P)}},u=()=>{t=!0},d=()=>{t=!1},f=()=>Ry.isFocused()&&(e.networkMode==="always"||jd.isOnline())&&e.canRun(),h=()=>IP(e.networkMode)&&e.canRun(),m=S=>{o()||(n==null||n(),i.resolve(S))},v=S=>{o()||(n==null||n(),i.reject(S))},x=()=>new Promise(S=>{var E;n=P=>{(o()||f())&&S(P)},(E=e.onPause)==null||E.call(e)}).then(()=>{var S;n=void 0,o()||(S=e.onContinue)==null||S.call(e)}),k=()=>{if(o())return;let S;const E=r===0?e.initialPromise:void 0;try{S=E??e.fn()}catch(P){S=Promise.reject(P)}Promise.resolve(S).then(m).catch(P=>{var C;if(o())return;const _=e.retry??(qs.isServer()?0:3),j=e.retryDelay??pM,O=typeof j=="function"?j(r,P):j,N=_===!0||typeof _=="number"&&r<_||typeof _=="function"&&_(r,P);if(t||!N){v(P);return}r++,(C=e.onFail)==null||C.call(e,r,P),lM(O).then(()=>f()?void 0:x()).then(()=>{t?v(P):k()})})};return{promise:i,status:()=>i.status,cancel:s,continue:()=>(n==null||n(),i),cancelRetry:u,continueRetry:d,canStart:h,start:()=>(h()?k():x().then(k),i)}}var Na,bP,TP=(bP=class{constructor(){_e(this,Na)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),pv(this.gcTime)&&pe(this,Na,ka.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(qs.isServer()?1/0:300*1e3))}clearGcTimeout(){$(this,Na)!==void 0&&(ka.clearTimeout($(this,Na)),pe(this,Na,void 0))}},Na=new WeakMap,bP);function mM(e){return{onFetch:(t,r)=>{var h,m,v,x,k;const n=t.options,i=(v=(m=(h=t.fetchOptions)==null?void 0:h.meta)==null?void 0:m.fetchMore)==null?void 0:v.direction,o=((x=t.state.data)==null?void 0:x.pages)||[],s=((k=t.state.data)==null?void 0:k.pageParams)||[];let u={pages:[],pageParams:[]},d=0;const f=async()=>{let S=!1;const E=j=>{cM(j,()=>t.signal,()=>S=!0)},P=jP(t.options,t.fetchOptions),_=async(j,O,N)=>{if(S)return Promise.reject(t.signal.reason);if(O==null&&j.pages.length)return Promise.resolve(j);const R=(()=>{const Q={client:t.client,queryKey:t.queryKey,pageParam:O,direction:N?"backward":"forward",meta:t.options.meta};return E(Q),Q})(),z=await P(R),{maxPages:F}=t.options,V=N?uM:sM;return{pages:V(j.pages,z,F),pageParams:V(j.pageParams,O,F)}};if(i&&o.length){const j=i==="backward",O=j?vM:D1,N={pages:o,pageParams:s},C=O(n,N);u=await _(N,C,j)}else{const j=e??o.length;do{const O=d===0?s[0]??n.initialPageParam:D1(n,u);if(d>0&&O==null)break;u=await _(u,O),d++}while(d{var S,E;return(E=(S=t.options).persister)==null?void 0:E.call(S,f,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r)}:t.fetchFn=f}}}function D1(e,{pages:t,pageParams:r}){const n=t.length-1;return t.length>0?e.getNextPageParam(t[n],t,r[n],r):void 0}function vM(e,{pages:t,pageParams:r}){var n;return t.length>0?(n=e.getPreviousPageParam)==null?void 0:n.call(e,t[0],t,r[0],r):void 0}var tl,Ia,rl,$r,Ma,_t,hu,Ta,kr,DP,Hn,wP,yM=(wP=class extends TP{constructor(t){super();_e(this,kr);_e(this,tl);_e(this,Ia);_e(this,rl);_e(this,$r);_e(this,Ma);_e(this,_t);_e(this,hu);_e(this,Ta);pe(this,Ta,!1),pe(this,hu,t.defaultOptions),this.setOptions(t.options),this.observers=[],pe(this,Ma,t.client),pe(this,$r,$(this,Ma).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,pe(this,Ia,$1(this.options)),this.state=t.state??$(this,Ia),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return $(this,tl)}get promise(){var t;return(t=$(this,_t))==null?void 0:t.promise}setOptions(t){if(this.options={...$(this,hu),...t},t!=null&&t._type&&pe(this,tl,t._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const r=$1(this.options);r.data!==void 0&&(this.setState(R1(r.data,r.dataUpdatedAt)),pe(this,Ia,r))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&$(this,$r).remove(this)}setData(t,r){const n=yv(this.state.data,t,this.options);return ze(this,kr,Hn).call(this,{data:n,type:"success",dataUpdatedAt:r==null?void 0:r.updatedAt,manual:r==null?void 0:r.manual}),n}setState(t){ze(this,kr,Hn).call(this,{type:"setState",state:t})}cancel(t){var n,i;const r=(n=$(this,_t))==null?void 0:n.promise;return(i=$(this,_t))==null||i.cancel(t),r?r.then(mr).catch(mr):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return $(this,Ia)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>Er(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Ly||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Yi(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!CP(this.state.dataUpdatedAt,t)}onFocus(){var r;const t=this.observers.find(n=>n.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(r=$(this,_t))==null||r.continue()}onOnline(){var r;const t=this.observers.find(n=>n.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(r=$(this,_t))==null||r.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),$(this,$r).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(r=>r!==t),this.observers.length||($(this,_t)&&($(this,Ta)||ze(this,kr,DP).call(this)?$(this,_t).cancel({revert:!0}):$(this,_t).cancelRetry()),this.scheduleGc()),$(this,$r).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ze(this,kr,Hn).call(this,{type:"invalidate"})}async fetch(t,r){var f,h,m,v,x,k,S,E,P,_,j;if(this.state.fetchStatus!=="idle"&&((f=$(this,_t))==null?void 0:f.status())!=="rejected"){if(this.state.data!==void 0&&(r!=null&&r.cancelRefetch))this.cancel({silent:!0});else if($(this,_t))return $(this,_t).continueRetry(),$(this,_t).promise}if(t&&this.setOptions(t),!this.options.queryFn){const O=this.observers.find(N=>N.options.queryFn);O&&this.setOptions(O.options)}const n=new AbortController,i=O=>{Object.defineProperty(O,"signal",{enumerable:!0,get:()=>(pe(this,Ta,!0),n.signal)})},o=()=>{const O=jP(this.options,r),C=(()=>{const R={client:$(this,Ma),queryKey:this.queryKey,meta:this.meta};return i(R),R})();return pe(this,Ta,!1),this.options.persister?this.options.persister(O,C,this):O(C)},u=(()=>{const O={fetchOptions:r,options:this.options,queryKey:this.queryKey,client:$(this,Ma),state:this.state,fetchFn:o};return i(O),O})(),d=$(this,tl)==="infinite"?mM(this.options.pages):this.options.behavior;d==null||d.onFetch(u,this),pe(this,rl,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((h=u.fetchOptions)==null?void 0:h.meta))&&ze(this,kr,Hn).call(this,{type:"fetch",meta:(m=u.fetchOptions)==null?void 0:m.meta}),pe(this,_t,MP({initialPromise:r==null?void 0:r.initialPromise,fn:u.fetchFn,onCancel:O=>{O instanceof xv&&O.revert&&this.setState({...$(this,rl),fetchStatus:"idle"}),n.abort()},onFail:(O,N)=>{ze(this,kr,Hn).call(this,{type:"failed",failureCount:O,error:N})},onPause:()=>{ze(this,kr,Hn).call(this,{type:"pause"})},onContinue:()=>{ze(this,kr,Hn).call(this,{type:"continue"})},retry:u.options.retry,retryDelay:u.options.retryDelay,networkMode:u.options.networkMode,canRun:()=>!0}));try{const O=await $(this,_t).start();if(O===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(O),(x=(v=$(this,$r).config).onSuccess)==null||x.call(v,O,this),(S=(k=$(this,$r).config).onSettled)==null||S.call(k,O,this.state.error,this),O}catch(O){if(O instanceof xv){if(O.silent)return $(this,_t).promise;if(O.revert){if(this.state.data===void 0)throw O;return this.state.data}}throw ze(this,kr,Hn).call(this,{type:"error",error:O}),(P=(E=$(this,$r).config).onError)==null||P.call(E,O,this),(j=(_=$(this,$r).config).onSettled)==null||j.call(_,this.state.data,O,this),O}finally{this.scheduleGc()}}},tl=new WeakMap,Ia=new WeakMap,rl=new WeakMap,$r=new WeakMap,Ma=new WeakMap,_t=new WeakMap,hu=new WeakMap,Ta=new WeakMap,kr=new WeakSet,DP=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},Hn=function(t){const r=n=>{switch(t.type){case"failed":return{...n,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...RP(n.data,this.options),fetchMeta:t.meta??null};case"success":const i={...n,...R1(t.data,t.dataUpdatedAt),dataUpdateCount:n.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return pe(this,rl,t.manual?i:void 0),i;case"error":const o=t.error;return{...n,error:o,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...t.state}}};this.state=r(this.state),Ft.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),$(this,$r).notify({query:this,type:"updated",action:t})})},wP);function RP(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:IP(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function R1(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function $1(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,r=t!==void 0,n=r?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?n??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}var pr,Be,pu,rr,Da,nl,Vn,Wi,mu,il,al,Ra,$a,Hi,ol,Ve,$s,bv,wv,Sv,kv,Ev,Pv,Av,$P,SP,gM=(SP=class extends gu{constructor(t,r){super();_e(this,Ve);_e(this,pr);_e(this,Be);_e(this,pu);_e(this,rr);_e(this,Da);_e(this,nl);_e(this,Vn);_e(this,Wi);_e(this,mu);_e(this,il);_e(this,al);_e(this,Ra);_e(this,$a);_e(this,Hi);_e(this,ol,new Set);this.options=r,pe(this,pr,t),pe(this,Wi,null),pe(this,Vn,gv()),this.bindMethods(),this.setOptions(r)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&($(this,Be).addObserver(this),L1($(this,Be),this.options)?ze(this,Ve,$s).call(this):this.updateResult(),ze(this,Ve,kv).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Ov($(this,Be),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Ov($(this,Be),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,ze(this,Ve,Ev).call(this),ze(this,Ve,Pv).call(this),$(this,Be).removeObserver(this)}setOptions(t){const r=this.options,n=$(this,Be);if(this.options=$(this,pr).defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Er(this.options.enabled,$(this,Be))!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");ze(this,Ve,Av).call(this),$(this,Be).setOptions(this.options),r._defaulted&&!mv(this.options,r)&&$(this,pr).getQueryCache().notify({type:"observerOptionsUpdated",query:$(this,Be),observer:this});const i=this.hasListeners();i&&z1($(this,Be),n,this.options,r)&&ze(this,Ve,$s).call(this),this.updateResult(),i&&($(this,Be)!==n||Er(this.options.enabled,$(this,Be))!==Er(r.enabled,$(this,Be))||Yi(this.options.staleTime,$(this,Be))!==Yi(r.staleTime,$(this,Be)))&&ze(this,Ve,bv).call(this);const o=ze(this,Ve,wv).call(this);i&&($(this,Be)!==n||Er(this.options.enabled,$(this,Be))!==Er(r.enabled,$(this,Be))||o!==$(this,Hi))&&ze(this,Ve,Sv).call(this,o)}getOptimisticResult(t){const r=$(this,pr).getQueryCache().build($(this,pr),t),n=this.createResult(r,t);return bM(this,n)&&(pe(this,rr,n),pe(this,nl,this.options),pe(this,Da,$(this,Be).state)),n}getCurrentResult(){return $(this,rr)}trackResult(t,r){return new Proxy(t,{get:(n,i)=>(this.trackProp(i),r==null||r(i),i==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&$(this,Vn).status==="pending"&&$(this,Vn).reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(n,i))})}trackProp(t){$(this,ol).add(t)}getCurrentQuery(){return $(this,Be)}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const r=$(this,pr).defaultQueryOptions(t),n=$(this,pr).getQueryCache().build($(this,pr),r);return n.fetch().then(()=>this.createResult(n,r))}fetch(t){return ze(this,Ve,$s).call(this,{...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),$(this,rr)))}createResult(t,r){var F;const n=$(this,Be),i=this.options,o=$(this,rr),s=$(this,Da),u=$(this,nl),f=t!==n?t.state:$(this,pu),{state:h}=t;let m={...h},v=!1,x;if(r._optimisticResults){const V=this.hasListeners(),Q=!V&&L1(t,r),B=V&&z1(t,n,r,i);(Q||B)&&(m={...m,...RP(h.data,t.options)}),r._optimisticResults==="isRestoring"&&(m.fetchStatus="idle")}let{error:k,errorUpdatedAt:S,status:E}=m;x=m.data;let P=!1;if(r.placeholderData!==void 0&&x===void 0&&E==="pending"){let V;o!=null&&o.isPlaceholderData&&r.placeholderData===(u==null?void 0:u.placeholderData)?(V=o.data,P=!0):V=typeof r.placeholderData=="function"?r.placeholderData((F=$(this,al))==null?void 0:F.state.data,$(this,al)):r.placeholderData,V!==void 0&&(E="success",x=yv(o==null?void 0:o.data,V,r),v=!0)}if(r.select&&x!==void 0&&!P)if(o&&x===(s==null?void 0:s.data)&&r.select===$(this,mu))x=$(this,il);else try{pe(this,mu,r.select),x=r.select(x),x=yv(o==null?void 0:o.data,x,r),pe(this,il,x),pe(this,Wi,null)}catch(V){pe(this,Wi,V)}$(this,Wi)&&(k=$(this,Wi),x=$(this,il),S=Date.now(),E="error");const _=m.fetchStatus==="fetching",j=E==="pending",O=E==="error",N=j&&_,C=x!==void 0,z={status:E,fetchStatus:m.fetchStatus,isPending:j,isSuccess:E==="success",isError:O,isInitialLoading:N,isLoading:N,data:x,dataUpdatedAt:m.dataUpdatedAt,error:k,errorUpdatedAt:S,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:t.isFetched(),isFetchedAfterMount:m.dataUpdateCount>f.dataUpdateCount||m.errorUpdateCount>f.errorUpdateCount,isFetching:_,isRefetching:_&&!j,isLoadingError:O&&!C,isPaused:m.fetchStatus==="paused",isPlaceholderData:v,isRefetchError:O&&C,isStale:zy(t,r),refetch:this.refetch,promise:$(this,Vn),isEnabled:Er(r.enabled,t)!==!1};if(this.options.experimental_prefetchInRender){const V=z.data!==void 0,Q=z.status==="error"&&!V,B=le=>{Q?le.reject(z.error):V&&le.resolve(z.data)},ue=()=>{const le=pe(this,Vn,z.promise=gv());B(le)},G=$(this,Vn);switch(G.status){case"pending":t.queryHash===n.queryHash&&B(G);break;case"fulfilled":(Q||z.data!==G.value)&&ue();break;case"rejected":(!Q||z.error!==G.reason)&&ue();break}}return z}updateResult(){const t=$(this,rr),r=this.createResult($(this,Be),this.options);if(pe(this,Da,$(this,Be).state),pe(this,nl,this.options),$(this,Da).data!==void 0&&pe(this,al,$(this,Be)),mv(r,t))return;pe(this,rr,r);const n=()=>{if(!t)return!0;const{notifyOnChangeProps:i}=this.options,o=typeof i=="function"?i():i;if(o==="all"||!o&&!$(this,ol).size)return!0;const s=new Set(o??$(this,ol));return this.options.throwOnError&&s.add("error"),Object.keys($(this,rr)).some(u=>{const d=u;return $(this,rr)[d]!==t[d]&&s.has(d)})};ze(this,Ve,$P).call(this,{listeners:n()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&ze(this,Ve,kv).call(this)}},pr=new WeakMap,Be=new WeakMap,pu=new WeakMap,rr=new WeakMap,Da=new WeakMap,nl=new WeakMap,Vn=new WeakMap,Wi=new WeakMap,mu=new WeakMap,il=new WeakMap,al=new WeakMap,Ra=new WeakMap,$a=new WeakMap,Hi=new WeakMap,ol=new WeakMap,Ve=new WeakSet,$s=function(t){ze(this,Ve,Av).call(this);let r=$(this,Be).fetch(this.options,t);return t!=null&&t.throwOnError||(r=r.catch(mr)),r},bv=function(){ze(this,Ve,Ev).call(this);const t=Yi(this.options.staleTime,$(this,Be));if(qs.isServer()||$(this,rr).isStale||!pv(t))return;const n=CP($(this,rr).dataUpdatedAt,t)+1;pe(this,Ra,ka.setTimeout(()=>{$(this,rr).isStale||this.updateResult()},n))},wv=function(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval($(this,Be)):this.options.refetchInterval)??!1},Sv=function(t){ze(this,Ve,Pv).call(this),pe(this,Hi,t),!(qs.isServer()||Er(this.options.enabled,$(this,Be))===!1||!pv($(this,Hi))||$(this,Hi)===0)&&pe(this,$a,ka.setInterval(()=>{(this.options.refetchIntervalInBackground||Ry.isFocused())&&ze(this,Ve,$s).call(this)},$(this,Hi)))},kv=function(){ze(this,Ve,bv).call(this),ze(this,Ve,Sv).call(this,ze(this,Ve,wv).call(this))},Ev=function(){$(this,Ra)!==void 0&&(ka.clearTimeout($(this,Ra)),pe(this,Ra,void 0))},Pv=function(){$(this,$a)!==void 0&&(ka.clearInterval($(this,$a)),pe(this,$a,void 0))},Av=function(){const t=$(this,pr).getQueryCache().build($(this,pr),this.options);if(t===$(this,Be))return;const r=$(this,Be);pe(this,Be,t),pe(this,pu,t.state),this.hasListeners()&&(r==null||r.removeObserver(this),t.addObserver(this))},$P=function(t){Ft.batch(()=>{t.listeners&&this.listeners.forEach(r=>{r($(this,rr))}),$(this,pr).getQueryCache().notify({query:$(this,Be),type:"observerResultsUpdated"})})},SP);function xM(e,t){return Er(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&Er(t.retryOnMount,e)===!1)}function L1(e,t){return xM(e,t)||e.state.data!==void 0&&Ov(e,t,t.refetchOnMount)}function Ov(e,t,r){if(Er(t.enabled,e)!==!1&&Yi(t.staleTime,e)!=="static"){const n=typeof r=="function"?r(e):r;return n==="always"||n!==!1&&zy(e,t)}return!1}function z1(e,t,r,n){return(e!==t||Er(n.enabled,e)===!1)&&(!r.suspense||e.state.status!=="error")&&zy(e,r)}function zy(e,t){return Er(t.enabled,e)!==!1&&e.isStaleByTime(Yi(t.staleTime,e))}function bM(e,t){return!mv(e.getCurrentResult(),t)}var vu,bn,Yt,La,wn,Di,kP,wM=(kP=class extends TP{constructor(t){super();_e(this,wn);_e(this,vu);_e(this,bn);_e(this,Yt);_e(this,La);pe(this,vu,t.client),this.mutationId=t.mutationId,pe(this,Yt,t.mutationCache),pe(this,bn,[]),this.state=t.state||SM(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){$(this,bn).includes(t)||($(this,bn).push(t),this.clearGcTimeout(),$(this,Yt).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){pe(this,bn,$(this,bn).filter(r=>r!==t)),this.scheduleGc(),$(this,Yt).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){$(this,bn).length||(this.state.status==="pending"?this.scheduleGc():$(this,Yt).remove(this))}continue(){var t;return((t=$(this,La))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var s,u,d,f,h,m,v,x,k,S,E,P,_,j,O,N,C,R;const r=()=>{ze(this,wn,Di).call(this,{type:"continue"})},n={client:$(this,vu),meta:this.options.meta,mutationKey:this.options.mutationKey};pe(this,La,MP({fn:()=>this.options.mutationFn?this.options.mutationFn(t,n):Promise.reject(new Error("No mutationFn found")),onFail:(z,F)=>{ze(this,wn,Di).call(this,{type:"failed",failureCount:z,error:F})},onPause:()=>{ze(this,wn,Di).call(this,{type:"pause"})},onContinue:r,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>$(this,Yt).canRun(this)}));const i=this.state.status==="pending",o=!$(this,La).canStart();try{if(i)r();else{ze(this,wn,Di).call(this,{type:"pending",variables:t,isPaused:o}),$(this,Yt).config.onMutate&&await $(this,Yt).config.onMutate(t,this,n);const F=await((u=(s=this.options).onMutate)==null?void 0:u.call(s,t,n));F!==this.state.context&&ze(this,wn,Di).call(this,{type:"pending",context:F,variables:t,isPaused:o})}const z=await $(this,La).start();return await((f=(d=$(this,Yt).config).onSuccess)==null?void 0:f.call(d,z,t,this.state.context,this,n)),await((m=(h=this.options).onSuccess)==null?void 0:m.call(h,z,t,this.state.context,n)),await((x=(v=$(this,Yt).config).onSettled)==null?void 0:x.call(v,z,null,this.state.variables,this.state.context,this,n)),await((S=(k=this.options).onSettled)==null?void 0:S.call(k,z,null,t,this.state.context,n)),ze(this,wn,Di).call(this,{type:"success",data:z}),z}catch(z){try{await((P=(E=$(this,Yt).config).onError)==null?void 0:P.call(E,z,t,this.state.context,this,n))}catch(F){Promise.reject(F)}try{await((j=(_=this.options).onError)==null?void 0:j.call(_,z,t,this.state.context,n))}catch(F){Promise.reject(F)}try{await((N=(O=$(this,Yt).config).onSettled)==null?void 0:N.call(O,void 0,z,this.state.variables,this.state.context,this,n))}catch(F){Promise.reject(F)}try{await((R=(C=this.options).onSettled)==null?void 0:R.call(C,void 0,z,t,this.state.context,n))}catch(F){Promise.reject(F)}throw ze(this,wn,Di).call(this,{type:"error",error:z}),z}finally{$(this,Yt).runNext(this)}}},vu=new WeakMap,bn=new WeakMap,Yt=new WeakMap,La=new WeakMap,wn=new WeakSet,Di=function(t){const r=n=>{switch(t.type){case"failed":return{...n,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...n,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:t.error,failureCount:n.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=r(this.state),Ft.batch(()=>{$(this,bn).forEach(n=>{n.onMutationUpdate(t)}),$(this,Yt).notify({mutation:this,type:"updated",action:t})})},kP);function SM(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var qn,tn,yu,EP,kM=(EP=class extends gu{constructor(t={}){super();_e(this,qn);_e(this,tn);_e(this,yu);this.config=t,pe(this,qn,new Set),pe(this,tn,new Map),pe(this,yu,0)}build(t,r,n){const i=new wM({client:t,mutationCache:this,mutationId:++qc(this,yu)._,options:t.defaultMutationOptions(r),state:n});return this.add(i),i}add(t){$(this,qn).add(t);const r=Yc(t);if(typeof r=="string"){const n=$(this,tn).get(r);n?n.push(t):$(this,tn).set(r,[t])}this.notify({type:"added",mutation:t})}remove(t){if($(this,qn).delete(t)){const r=Yc(t);if(typeof r=="string"){const n=$(this,tn).get(r);if(n)if(n.length>1){const i=n.indexOf(t);i!==-1&&n.splice(i,1)}else n[0]===t&&$(this,tn).delete(r)}}this.notify({type:"removed",mutation:t})}canRun(t){const r=Yc(t);if(typeof r=="string"){const n=$(this,tn).get(r),i=n==null?void 0:n.find(o=>o.state.status==="pending");return!i||i===t}else return!0}runNext(t){var n;const r=Yc(t);if(typeof r=="string"){const i=(n=$(this,tn).get(r))==null?void 0:n.find(o=>o!==t&&o.state.isPaused);return(i==null?void 0:i.continue())??Promise.resolve()}else return Promise.resolve()}clear(){Ft.batch(()=>{$(this,qn).forEach(t=>{this.notify({type:"removed",mutation:t})}),$(this,qn).clear(),$(this,tn).clear()})}getAll(){return Array.from($(this,qn))}find(t){const r={exact:!0,...t};return this.getAll().find(n=>I1(r,n))}findAll(t={}){return this.getAll().filter(r=>I1(t,r))}notify(t){Ft.batch(()=>{this.listeners.forEach(r=>{r(t)})})}resumePausedMutations(){const t=this.getAll().filter(r=>r.state.isPaused);return Ft.batch(()=>Promise.all(t.map(r=>r.continue().catch(mr))))}},qn=new WeakMap,tn=new WeakMap,yu=new WeakMap,EP);function Yc(e){var t;return(t=e.options.scope)==null?void 0:t.id}var Sn,PP,EM=(PP=class extends gu{constructor(t={}){super();_e(this,Sn);this.config=t,pe(this,Sn,new Map)}build(t,r,n){const i=r.queryKey,o=r.queryHash??$y(i,r);let s=this.get(o);return s||(s=new yM({client:t,queryKey:i,queryHash:o,options:t.defaultQueryOptions(r),state:n,defaultOptions:t.getQueryDefaults(i)}),this.add(s)),s}add(t){$(this,Sn).has(t.queryHash)||($(this,Sn).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const r=$(this,Sn).get(t.queryHash);r&&(t.destroy(),r===t&&$(this,Sn).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){Ft.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return $(this,Sn).get(t)}getAll(){return[...$(this,Sn).values()]}find(t){const r={exact:!0,...t};return this.getAll().find(n=>N1(r,n))}findAll(t={}){const r=this.getAll();return Object.keys(t).length>0?r.filter(n=>N1(t,n)):r}notify(t){Ft.batch(()=>{this.listeners.forEach(r=>{r(t)})})}onFocus(){Ft.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){Ft.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Sn=new WeakMap,PP),dt,Ki,Vi,ll,sl,qi,ul,cl,AP,PM=(AP=class{constructor(e={}){_e(this,dt);_e(this,Ki);_e(this,Vi);_e(this,ll);_e(this,sl);_e(this,qi);_e(this,ul);_e(this,cl);pe(this,dt,e.queryCache||new EM),pe(this,Ki,e.mutationCache||new kM),pe(this,Vi,e.defaultOptions||{}),pe(this,ll,new Map),pe(this,sl,new Map),pe(this,qi,0)}mount(){qc(this,qi)._++,$(this,qi)===1&&(pe(this,ul,Ry.subscribe(async e=>{e&&(await this.resumePausedMutations(),$(this,dt).onFocus())})),pe(this,cl,jd.subscribe(async e=>{e&&(await this.resumePausedMutations(),$(this,dt).onOnline())})))}unmount(){var e,t;qc(this,qi)._--,$(this,qi)===0&&((e=$(this,ul))==null||e.call(this),pe(this,ul,void 0),(t=$(this,cl))==null||t.call(this),pe(this,cl,void 0))}isFetching(e){return $(this,dt).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return $(this,Ki).findAll({...e,status:"pending"}).length}getQueryData(e){var r;const t=this.defaultQueryOptions({queryKey:e});return(r=$(this,dt).get(t.queryHash))==null?void 0:r.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),r=$(this,dt).build(this,t),n=r.state.data;return n===void 0?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(Yi(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(n))}getQueriesData(e){return $(this,dt).findAll(e).map(({queryKey:t,state:r})=>{const n=r.data;return[t,n]})}setQueryData(e,t,r){const n=this.defaultQueryOptions({queryKey:e}),i=$(this,dt).get(n.queryHash),o=i==null?void 0:i.state.data,s=aM(t,o);if(s!==void 0)return $(this,dt).build(this,n).setData(s,{...r,manual:!0})}setQueriesData(e,t,r){return Ft.batch(()=>$(this,dt).findAll(e).map(({queryKey:n})=>[n,this.setQueryData(n,t,r)]))}getQueryState(e){var r;const t=this.defaultQueryOptions({queryKey:e});return(r=$(this,dt).get(t.queryHash))==null?void 0:r.state}removeQueries(e){const t=$(this,dt);Ft.batch(()=>{t.findAll(e).forEach(r=>{t.remove(r)})})}resetQueries(e,t){const r=$(this,dt);return Ft.batch(()=>(r.findAll(e).forEach(n=>{n.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const r={revert:!0,...t},n=Ft.batch(()=>$(this,dt).findAll(e).map(i=>i.cancel(r)));return Promise.all(n).then(mr).catch(mr)}invalidateQueries(e,t={}){return Ft.batch(()=>($(this,dt).findAll(e).forEach(r=>{r.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const r={...t,cancelRefetch:t.cancelRefetch??!0},n=Ft.batch(()=>$(this,dt).findAll(e).filter(i=>!i.isDisabled()&&!i.isStatic()).map(i=>{let o=i.fetch(void 0,r);return r.throwOnError||(o=o.catch(mr)),i.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(n).then(mr)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const r=$(this,dt).build(this,t);return r.isStaleByTime(Yi(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(mr).catch(mr)}fetchInfiniteQuery(e){return e._type="infinite",this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(mr).catch(mr)}ensureInfiniteQueryData(e){return e._type="infinite",this.ensureQueryData(e)}resumePausedMutations(){return jd.isOnline()?$(this,Ki).resumePausedMutations():Promise.resolve()}getQueryCache(){return $(this,dt)}getMutationCache(){return $(this,Ki)}getDefaultOptions(){return $(this,Vi)}setDefaultOptions(e){pe(this,Vi,e)}setQueryDefaults(e,t){$(this,ll).set(Ks(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...$(this,ll).values()],r={};return t.forEach(n=>{Vs(e,n.queryKey)&&Object.assign(r,n.defaultOptions)}),r}setMutationDefaults(e,t){$(this,sl).set(Ks(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...$(this,sl).values()],r={};return t.forEach(n=>{Vs(e,n.mutationKey)&&Object.assign(r,n.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;const t={...$(this,Vi).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=$y(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===Ly&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...$(this,Vi).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){$(this,dt).clear(),$(this,Ki).clear()}},dt=new WeakMap,Ki=new WeakMap,Vi=new WeakMap,ll=new WeakMap,sl=new WeakMap,qi=new WeakMap,ul=new WeakMap,cl=new WeakMap,AP),LP=g.createContext(void 0),xu=e=>{const t=g.useContext(LP);if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},AM=({client:e,children:t})=>(g.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),w.jsx(LP.Provider,{value:e,children:t})),zP=g.createContext(!1),OM=()=>g.useContext(zP);zP.Provider;function CM(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var _M=g.createContext(CM()),jM=()=>g.useContext(_M),NM=(e,t,r)=>{const n=r!=null&&r.state.error&&typeof e.throwOnError=="function"?NP(e.throwOnError,[r.state.error,r]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||n)&&(t.isReset()||(e.retryOnMount=!1))},IM=e=>{g.useEffect(()=>{e.clearReset()},[e])},MM=({result:e,errorResetBoundary:t,throwOnError:r,query:n,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&n&&(i&&e.data===void 0||NP(r,[e.error,n])),TM=e=>{if(e.suspense){const r=i=>i==="static"?i:Math.max(i??1e3,1e3),n=e.staleTime;e.staleTime=typeof n=="function"?(...i)=>r(n(...i)):r(n),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},DM=(e,t)=>e.isLoading&&e.isFetching&&!t,RM=(e,t)=>(e==null?void 0:e.suspense)&&t.isPending,F1=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function $M(e,t,r){var x,k,S,E;const n=OM(),i=jM(),o=xu(),s=o.defaultQueryOptions(e);(k=(x=o.getDefaultOptions().queries)==null?void 0:x._experimental_beforeQuery)==null||k.call(x,s);const u=o.getQueryCache().get(s.queryHash),d=e.subscribed!==!1;s._optimisticResults=n?"isRestoring":d?"optimistic":void 0,TM(s),NM(s,i,u),IM(i);const f=!o.getQueryCache().get(s.queryHash),[h]=g.useState(()=>new t(o,s)),m=h.getOptimisticResult(s),v=!n&&d;if(g.useSyncExternalStore(g.useCallback(P=>{const _=v?h.subscribe(Ft.batchCalls(P)):mr;return h.updateResult(),_},[h,v]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),g.useEffect(()=>{h.setOptions(s)},[s,h]),RM(s,m))throw F1(s,h,i);if(MM({result:m,errorResetBoundary:i,throwOnError:s.throwOnError,query:u,suspense:s.suspense}))throw m.error;if((E=(S=o.getDefaultOptions().queries)==null?void 0:S._experimental_afterQuery)==null||E.call(S,s,m),s.experimental_prefetchInRender&&!qs.isServer()&&DM(m,n)){const P=f?F1(s,h,i):u==null?void 0:u.promise;P==null||P.catch(mr).finally(()=>{h.updateResult()})}return s.notifyOnChangeProps?m:h.trackResult(m)}function Ye(e,t){return $M(e,gM)}const LM="modulepreload",zM=function(e){return"/"+e},B1={},sn=function(t,r,n){let i=Promise.resolve();if(r&&r.length>0){let s=function(f){return Promise.all(f.map(h=>Promise.resolve(h).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};document.getElementsByTagName("link");const u=document.querySelector("meta[property=csp-nonce]"),d=(u==null?void 0:u.nonce)||(u==null?void 0:u.getAttribute("nonce"));i=s(r.map(f=>{if(f=zM(f),f in B1)return;B1[f]=!0;const h=f.endsWith(".css"),m=h?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${f}"]${m}`))return;const v=document.createElement("link");if(v.rel=h?"stylesheet":LM,h||(v.as="script"),v.crossOrigin="",v.href=f,d&&v.setAttribute("nonce",d),document.head.appendChild(v),h)return new Promise((x,k)=>{v.addEventListener("load",x),v.addEventListener("error",()=>k(new Error(`Unable to preload CSS for ${f}`)))})}))}function o(s){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=s,window.dispatchEvent(u),!u.defaultPrevented)throw s}return i.then(s=>{for(const u of s||[])u.status==="rejected"&&o(u.reason);return t().catch(o)})};/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const qM=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),BP=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim();/** + */const FM=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),FP=(...e)=>e.filter((t,r,n)=>!!t&&t.trim()!==""&&n.indexOf(t)===r).join(" ").trim();/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */var GM={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + */var BM={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const YM=y.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:i="",children:o,iconNode:s,...u},d)=>y.createElement("svg",{ref:d,...GM,width:t,height:t,stroke:e,strokeWidth:n?Number(r)*24/Number(t):r,className:BP("lucide",i),...u},[...s.map(([f,h])=>y.createElement(f,h)),...Array.isArray(o)?o:[o]]));/** + */const UM=g.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:n,className:i="",children:o,iconNode:s,...u},d)=>g.createElement("svg",{ref:d,...BM,width:t,height:t,stroke:e,strokeWidth:n?Number(r)*24/Number(t):r,className:FP("lucide",i),...u},[...s.map(([f,h])=>g.createElement(f,h)),...Array.isArray(o)?o:[o]]));/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ke=(e,t)=>{const r=y.forwardRef(({className:n,...i},o)=>y.createElement(YM,{ref:o,iconNode:t,className:BP(`lucide-${qM(e)}`,n),...i}));return r.displayName=`${e}`,r};/** + */const Pe=(e,t)=>{const r=g.forwardRef(({className:n,...i},o)=>g.createElement(UM,{ref:o,iconNode:t,className:FP(`lucide-${FM(e)}`,n),...i}));return r.displayName=`${e}`,r};/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const QM=ke("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + */const WM=Pe("AlarmClock",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M12 9v4l2 2",key:"1c63tq"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const XM=ke("AlarmClock",[["circle",{cx:"12",cy:"13",r:"8",key:"3y4lt7"}],["path",{d:"M12 9v4l2 2",key:"1c63tq"}],["path",{d:"M5 3 2 6",key:"18tl5t"}],["path",{d:"m22 6-3-3",key:"1opdir"}],["path",{d:"M6.38 18.7 4 21",key:"17xu3x"}],["path",{d:"M17.64 18.67 20 21",key:"kv2oe2"}]]);/** + */const U1=Pe("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const W1=ke("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/** + */const HM=Pe("BookMarked",[["path",{d:"M10 2v8l3-3 3 3V2",key:"sqw3rj"}],["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20",key:"k3hazp"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ZM=ke("BookMarked",[["path",{d:"M10 2v8l3-3 3 3V2",key:"sqw3rj"}],["path",{d:"M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20",key:"k3hazp"}]]);/** + */const _f=Pe("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const jf=ke("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/** + */const KM=Pe("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const JM=ke("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/** + */const BP=Pe("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const UP=ke("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/** + */const Fy=Pe("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Bg=ke("Brain",[["path",{d:"M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z",key:"l5xja"}],["path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z",key:"ep3f8r"}],["path",{d:"M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4",key:"1p4c4q"}],["path",{d:"M17.599 6.5a3 3 0 0 0 .399-1.375",key:"tmeiqw"}],["path",{d:"M6.003 5.125A3 3 0 0 0 6.401 6.5",key:"105sqy"}],["path",{d:"M3.477 10.896a4 4 0 0 1 .585-.396",key:"ql3yin"}],["path",{d:"M19.938 10.5a4 4 0 0 1 .585.396",key:"1qfode"}],["path",{d:"M6 18a4 4 0 0 1-1.967-.516",key:"2e4loj"}],["path",{d:"M19.967 17.484A4 4 0 0 1 18 18",key:"159ez6"}]]);/** + */const VM=Pe("Camera",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const eT=ke("Camera",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]);/** + */const qM=Pe("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const tT=ke("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + */const GM=Pe("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const rT=ke("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + */const Bs=Pe("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const nT=ke("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** + */const YM=Pe("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ko=ke("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** + */const UP=Pe("CircleHelp",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const iT=ke("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + */const QM=Pe("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const WP=ke("CircleHelp",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3",key:"1u773s"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + */const XM=Pe("CloudDownload",[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const aT=ke("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + */const ZM=Pe("Command",[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const oT=ke("CloudDownload",[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]]);/** + */const WP=Pe("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const lT=ke("Command",[["path",{d:"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3",key:"11bfej"}]]);/** + */const JM=Pe("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const HP=ke("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** + */const W1=Pe("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const sT=ke("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** + */const Cv=Pe("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const H1=ke("EyeOff",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);/** + */const eT=Pe("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Cv=ke("Eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);/** + */const tT=Pe("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const uT=ke("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);/** + */const rT=Pe("GitCommitHorizontal",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const cT=ke("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** + */const nT=Pe("HardDrive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const dT=ke("GitCommitHorizontal",[["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}],["line",{x1:"3",x2:"9",y1:"12",y2:"12",key:"1dyftd"}],["line",{x1:"15",x2:"21",y1:"12",y2:"12",key:"oup4p8"}]]);/** + */const iT=Pe("HeartPulse",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const fT=ke("HardDrive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);/** + */const aT=Pe("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const hT=ke("HeartPulse",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/** + */const By=Pe("Inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const pT=ke("History",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M12 7v5l4 2",key:"1fdv2h"}]]);/** + */const oT=Pe("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ug=ke("Inbox",[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]]);/** + */const lT=Pe("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const mT=ke("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);/** + */const sT=Pe("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const vT=ke("LayoutDashboard",[["rect",{width:"7",height:"9",x:"3",y:"3",rx:"1",key:"10lvy0"}],["rect",{width:"7",height:"5",x:"14",y:"3",rx:"1",key:"16une8"}],["rect",{width:"7",height:"9",x:"14",y:"12",rx:"1",key:"1hutg5"}],["rect",{width:"7",height:"5",x:"3",y:"16",rx:"1",key:"ldoo1y"}]]);/** + */const uT=Pe("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const gT=ke("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/** + */const jf=Pe("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const yT=ke("Lightbulb",[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]]);/** + */const cT=Pe("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const _f=ke("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);/** + */const dT=Pe("Mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const xT=ke("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/** + */const H1=Pe("Package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["path",{d:"m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7",key:"yx3hmr"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const bT=ke("Mic",[["path",{d:"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z",key:"131961"}],["path",{d:"M19 10v2a7 7 0 0 1-14 0v-2",key:"1vc78b"}],["line",{x1:"12",x2:"12",y1:"19",y2:"22",key:"x3vr5v"}]]);/** + */const Uy=Pe("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const wT=ke("Moon",[["path",{d:"M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z",key:"a7tn18"}]]);/** + */const K1=Pe("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const K1=ke("Package",[["path",{d:"M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z",key:"1a0edw"}],["path",{d:"M12 22V12",key:"d0xqtd"}],["path",{d:"m3.3 7 7.703 4.734a2 2 0 0 0 1.994 0L20.7 7",key:"yx3hmr"}],["path",{d:"m7.5 4.27 9 5.15",key:"1c824w"}]]);/** + */const fT=Pe("Power",[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Wg=ke("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}],["path",{d:"M9 8V2",key:"14iosj"}],["path",{d:"M15 8V2",key:"18g5xt"}],["path",{d:"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z",key:"osxo6l"}]]);/** + */const Ko=Pe("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const V1=ke("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);/** + */const hT=Pe("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ST=ke("Power",[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]]);/** + */const pT=Pe("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Vo=ke("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** + */const Nf=Pe("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const kT=ke("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/** + */const Wy=Pe("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ET=ke("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/** + */const mT=Pe("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Nf=ke("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** + */const Hy=Pe("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Hg=ke("ShieldAlert",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"M12 8v4",key:"1got3b"}],["path",{d:"M12 16h.01",key:"1drbdi"}]]);/** + */const HP=Pe("Shuffle",[["path",{d:"M2 18h1.4c1.3 0 2.5-.6 3.3-1.7l6.1-8.6c.7-1.1 2-1.7 3.3-1.7H22",key:"1wmou1"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 6h1.9c1.5 0 2.9.9 3.6 2.2",key:"10bdb2"}],["path",{d:"M22 18h-5.9c-1.3 0-2.6-.7-3.3-1.8l-.5-.8",key:"vgxac0"}],["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const PT=ke("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/** + */const vT=Pe("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Kg=ke("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** + */const KP=Pe("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const KP=ke("Shuffle",[["path",{d:"M2 18h1.4c1.3 0 2.5-.6 3.3-1.7l6.1-8.6c.7-1.1 2-1.7 3.3-1.7H22",key:"1wmou1"}],["path",{d:"m18 2 4 4-4 4",key:"pucp1d"}],["path",{d:"M2 6h1.9c1.5 0 2.9.9 3.6 2.2",key:"10bdb2"}],["path",{d:"M22 18h-5.9c-1.3 0-2.6-.7-3.3-1.8l-.5-.8",key:"vgxac0"}],["path",{d:"m18 14 4 4-4 4",key:"10pe0f"}]]);/** + */const yT=Pe("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const AT=ke("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/** + */const gT=Pe("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const VP=ke("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);/** + */const xT=Pe("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const OT=ke("SquareTerminal",[["path",{d:"m7 11 2-2-2-2",key:"1lz0vl"}],["path",{d:"M11 13h4",key:"1p7l4v"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}]]);/** + */const Gs=Pe("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const CT=ke("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/** + */const bT=Pe("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const jT=ke("Trash2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const Gs=ke("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const _T=ke("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);/** - * @license lucide-react v0.460.0 - ISC - * - * This source code is licensed under the ISC license. - * See the LICENSE file in the root directory of this source tree. - */const bu=ke("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),qo=[{id:"dashboard",label:"Cockpit",hint:"Deine Box auf einen Blick",icon:vT,group:"Operativ"},{id:"ideen",label:"Ideen",hint:"Schreib hin, was entstehen soll",icon:yT,group:"Operativ"},{id:"auftraege",label:"Auftragsbuch",hint:"Vorschläge der Box — annehmen oder ablehnen",icon:Ug,group:"Operativ"},{id:"eigenleben",label:"Skills",hint:"Fähigkeiten der Box — aktiv/inaktiv, Herkunft & Vorschlags-Bilanz",icon:VP,group:"Operativ"},{id:"chronik",label:"Chronik",hint:"Was die Box von allein getan hat + Zeitmaschine",icon:pT,group:"Operativ"},{id:"memory",label:"Gedächtnis",hint:"Geteiltes Memory verwalten",icon:Bg,group:"Wissen"},{id:"wissen",label:"Wissen",hint:"Lucys Wissens-Vault (Traum-Notizen)",icon:gT,group:"Wissen"},{id:"connect",label:"Verbinden",hint:"IDE-/Agent-Configs erzeugen",icon:Wg,group:"Werkzeuge"},{id:"konsole",label:"Konsole",hint:"Direkte Box-Shell (SSH-artig)",icon:OT,group:"Werkzeuge"},{id:"guide",label:"Anleitung",hint:"Einrichten & Vibe-Coding",icon:WP,group:"Werkzeuge"},{id:"models",label:"Modelle",hint:"Speicher, laden & Rollen",icon:UP,group:"Wartung"},{id:"agent",label:"Hermes",hint:"Agent-Status & Verdrahtung",icon:jf,group:"Wartung"}];var q1=1,NT=.9,IT=.8,MT=.17,km=.1,Em=.999,TT=.9999,DT=.99,RT=/[\\\/_+.#"@\[\(\{&]/,$T=/[\\\/_+.#"@\[\(\{&]/g,LT=/[\s-]/,qP=/[\s-]/g;function jv(e,t,r,n,i,o,s){if(o===t.length)return i===e.length?q1:DT;var u=`${i},${o}`;if(s[u]!==void 0)return s[u];for(var d=n.charAt(o),f=r.indexOf(d,i),h=0,m,v,x,k;f>=0;)m=jv(e,t,r,n,f+1,o+1,s),m>h&&(f===i?m*=q1:RT.test(e.charAt(f-1))?(m*=IT,x=e.slice(i,f-1).match($T),x&&i>0&&(m*=Math.pow(Em,x.length))):LT.test(e.charAt(f-1))?(m*=NT,k=e.slice(i,f-1).match(qP),k&&i>0&&(m*=Math.pow(Em,k.length))):(m*=MT,i>0&&(m*=Math.pow(Em,f-i))),e.charAt(f)!==t.charAt(o)&&(m*=TT)),(mm&&(m=v*km)),m>h&&(h=m),f=r.indexOf(d,f+1);return s[u]=h,h}function G1(e){return e.toLowerCase().replace(qP," ")}function zT(e,t,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,jv(e,t,G1(e),G1(t),0,0,{})}function Qi(e,t,{checkForDefaultPrevented:r=!0}={}){return function(i){if(e==null||e(i),r===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function Y1(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function fl(...e){return t=>{let r=!1;const n=e.map(i=>{const o=Y1(i,t);return!r&&typeof o=="function"&&(r=!0),o});if(r)return()=>{for(let i=0;i{var P;const{scope:v,children:x,...k}=m,S=((P=v==null?void 0:v[e])==null?void 0:P[d])||u,E=y.useMemo(()=>k,Object.values(k));return b.jsx(S.Provider,{value:E,children:x})};f.displayName=o+"Provider";function h(m,v){var S;const x=((S=v==null?void 0:v[e])==null?void 0:S[d])||u,k=y.useContext(x);if(k)return k;if(s!==void 0)return s;throw new Error(`\`${m}\` must be used within \`${o}\``)}return[f,h]}const i=()=>{const o=r.map(s=>y.createContext(s));return function(u){const d=(u==null?void 0:u[e])||o;return y.useMemo(()=>({[`__scope${e}`]:{...u,[e]:d}}),[u,d])}};return i.scopeName=e,[n,BT(i,...t)]}function BT(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=n.reduce((u,{useScope:d,scopeName:f})=>{const m=d(o)[`__scope${f}`];return{...u,...m}},{});return y.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return r.scopeName=t.scopeName,r}var Ys=globalThis!=null&&globalThis.document?y.useLayoutEffect:()=>{},UT=Cf[" useId ".trim().toString()]||(()=>{}),WT=0;function Zn(e){const[t,r]=y.useState(UT());return Ys(()=>{r(n=>n??String(WT++))},[e]),t?`radix-${t}`:""}var HT=Cf[" useInsertionEffect ".trim().toString()]||Ys;function KT({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[i,o,s]=VT({defaultProp:t,onChange:r}),u=e!==void 0,d=u?e:i;{const h=y.useRef(e!==void 0);y.useEffect(()=>{const m=h.current;m!==u&&console.warn(`${n} is changing from ${m?"controlled":"uncontrolled"} to ${u?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),h.current=u},[u,n])}const f=y.useCallback(h=>{var m;if(u){const v=qT(h)?h(e):h;v!==e&&((m=s.current)==null||m.call(s,v))}else o(h)},[u,e,o,s]);return[d,f]}function VT({defaultProp:e,onChange:t}){const[r,n]=y.useState(e),i=y.useRef(r),o=y.useRef(t);return HT(()=>{o.current=t},[t]),y.useEffect(()=>{var s;i.current!==r&&((s=o.current)==null||s.call(o,r),i.current=r)},[r,i]),[r,n,o]}function qT(e){return typeof e=="function"}var If=CP();function GP(e){const t=y.forwardRef((r,n)=>{let{children:i,...o}=r,s=null,u=!1;const d=[];Q1(i)&&typeof Qc=="function"&&(i=Qc(i._payload)),y.Children.forEach(i,v=>{var x;if(ZT(v)){u=!0;const k=v;let S="child"in k.props?k.props.child:k.props.children;Q1(S)&&typeof Qc=="function"&&(S=Qc(S._payload)),s=YT(k,S),d.push((x=s==null?void 0:s.props)==null?void 0:x.children)}else d.push(v)}),s?s=y.cloneElement(s,void 0,d):!u&&y.Children.count(i)===1&&y.isValidElement(i)&&(s=i);const f=s?XT(s):void 0,h=Xa(n,f);if(!s){if(i||i===0)throw new Error(u?rD(e):tD(e));return i}const m=QT(o,s.props??{});return s.type!==y.Fragment&&(m.ref=n?h:f),y.cloneElement(s,m)});return t.displayName=`${e}.Slot`,t}var GT=Symbol.for("radix.slottable"),YT=(e,t)=>{if("child"in e.props){const r=e.props.child;return y.isValidElement(r)?y.cloneElement(r,void 0,e.props.children(r.props.children)):null}return y.isValidElement(t)?t:null};function QT(e,t){const r={...t};for(const n in t){const i=e[n],o=t[n];/^on[A-Z]/.test(n)?i&&o?r[n]=(...u)=>{const d=o(...u);return i(...u),d}:i&&(r[n]=i):n==="style"?r[n]={...i,...o}:n==="className"&&(r[n]=[i,o].filter(Boolean).join(" "))}return{...e,...r}}function XT(e){var n,i;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}function ZT(e){return y.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===GT}var JT=Symbol.for("react.lazy");function Q1(e){return e!=null&&typeof e=="object"&&"$$typeof"in e&&e.$$typeof===JT&&"_payload"in e&&eD(e._payload)}function eD(e){return typeof e=="object"&&e!==null&&"then"in e}var tD=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,rD=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,Qc=Cf[" use ".trim().toString()],nD=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Wt=nD.reduce((e,t)=>{const r=GP(`Primitive.${t}`),n=y.forwardRef((i,o)=>{const{asChild:s,...u}=i,d=s?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(d,{...u,ref:o})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function iD(e,t){e&&If.flushSync(()=>e.dispatchEvent(t))}function Qs(e){const t=y.useRef(e);return y.useEffect(()=>{t.current=e}),y.useMemo(()=>((...r)=>{var n;return(n=t.current)==null?void 0:n.call(t,...r)}),[])}function aD(e,t=globalThis==null?void 0:globalThis.document){const r=Qs(e);y.useEffect(()=>{const n=i=>{i.key==="Escape"&&r(i)};return t.addEventListener("keydown",n,{capture:!0}),()=>t.removeEventListener("keydown",n,{capture:!0})},[r,t])}var oD="DismissableLayer",_v="dismissableLayer.update",lD="dismissableLayer.pointerDownOutside",sD="dismissableLayer.focusOutside",X1,Vg=y.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),YP=y.forwardRef((e,t)=>{const{disableOutsidePointerEvents:r=!1,deferPointerDownOutside:n=!1,onEscapeKeyDown:i,onPointerDownOutside:o,onFocusOutside:s,onInteractOutside:u,onDismiss:d,...f}=e,h=y.useContext(Vg),[m,v]=y.useState(null),x=(m==null?void 0:m.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,k]=y.useState({}),S=Xa(t,F=>v(F)),E=Array.from(h.layers),[P]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),j=E.indexOf(P),_=m?E.indexOf(m):-1,O=h.layersWithOutsidePointerEventsDisabled.size>0,N=_>=j,C=y.useRef(!1),R=fD(F=>{const V=F.target;if(!(V instanceof Node))return;const Q=[...h.branches].some(B=>B.contains(V));!N||Q||(o==null||o(F),u==null||u(F),F.defaultPrevented||d==null||d())},{ownerDocument:x,deferPointerDownOutside:n,isDeferredPointerDownOutsideRef:C,dismissableSurfaces:h.dismissableSurfaces}),z=hD(F=>{if(n&&C.current)return;const V=F.target;[...h.branches].some(B=>B.contains(V))||(s==null||s(F),u==null||u(F),F.defaultPrevented||d==null||d())},x);return aD(F=>{_===h.layers.size-1&&(i==null||i(F),!F.defaultPrevented&&d&&(F.preventDefault(),d()))},x),y.useEffect(()=>{if(m)return r&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(X1=x.body.style.pointerEvents,x.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(m)),h.layers.add(m),Z1(),()=>{r&&(h.layersWithOutsidePointerEventsDisabled.delete(m),h.layersWithOutsidePointerEventsDisabled.size===0&&(x.body.style.pointerEvents=X1))}},[m,x,r,h]),y.useEffect(()=>()=>{m&&(h.layers.delete(m),h.layersWithOutsidePointerEventsDisabled.delete(m),Z1())},[m,h]),y.useEffect(()=>{const F=()=>k({});return document.addEventListener(_v,F),()=>document.removeEventListener(_v,F)},[]),b.jsx(Wt.div,{...f,ref:S,style:{pointerEvents:O?N?"auto":"none":void 0,...e.style},onFocusCapture:Qi(e.onFocusCapture,z.onFocusCapture),onBlurCapture:Qi(e.onBlurCapture,z.onBlurCapture),onPointerDownCapture:Qi(e.onPointerDownCapture,R.onPointerDownCapture)})});YP.displayName=oD;var uD="DismissableLayerBranch",cD=y.forwardRef((e,t)=>{const r=y.useContext(Vg),n=y.useRef(null),i=Xa(t,n);return y.useEffect(()=>{const o=n.current;if(o)return r.branches.add(o),()=>{r.branches.delete(o)}},[r.branches]),b.jsx(Wt.div,{...e,ref:i})});cD.displayName=uD;function dD(){const e=y.useContext(Vg),[t,r]=y.useState(null);return y.useEffect(()=>{if(t)return e.dismissableSurfaces.add(t),()=>{e.dismissableSurfaces.delete(t)}},[t,e.dismissableSurfaces]),r}function fD(e,t){const{ownerDocument:r=globalThis==null?void 0:globalThis.document,deferPointerDownOutside:n=!1,isDeferredPointerDownOutsideRef:i,dismissableSurfaces:o}=t,s=Qs(e),u=y.useRef(!1),d=y.useRef(!1),f=y.useRef(new Map),h=y.useRef(()=>{});return y.useEffect(()=>{function m(){d.current=!1,i.current=!1,f.current.clear()}function v(){return Array.from(f.current.values()).some(Boolean)}function x(j){if(!d.current)return;const _=j.target;_ instanceof Node&&[...o].some(N=>N.contains(_))||f.current.set(j.type,!0),j.type==="click"&&window.setTimeout(()=>{d.current&&h.current()},0)}function k(j){d.current&&f.current.set(j.type,!1)}const S=j=>{if(j.target&&!u.current){let _=function(){r.removeEventListener("click",h.current);const N=v();m(),N||QP(lD,s,O,{discrete:!0})};const O={originalEvent:j};d.current=!0,i.current=n&&j.button===0,f.current.clear(),!n||j.button!==0?_():(r.removeEventListener("click",h.current),h.current=_,r.addEventListener("click",h.current,{once:!0}))}else r.removeEventListener("click",h.current),m();u.current=!1},E=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const j of E)r.addEventListener(j,x,!0),r.addEventListener(j,k);const P=window.setTimeout(()=>{r.addEventListener("pointerdown",S)},0);return()=>{window.clearTimeout(P),r.removeEventListener("pointerdown",S),r.removeEventListener("click",h.current);for(const j of E)r.removeEventListener(j,x,!0),r.removeEventListener(j,k)}},[r,s,n,i,o]),{onPointerDownCapture:()=>u.current=!0}}function hD(e,t=globalThis==null?void 0:globalThis.document){const r=Qs(e),n=y.useRef(!1);return y.useEffect(()=>{const i=o=>{o.target&&!n.current&&QP(sD,r,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",i),()=>t.removeEventListener("focusin",i)},[t,r]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function Z1(){const e=new CustomEvent(_v);document.dispatchEvent(e)}function QP(e,t,r,{discrete:n}){const i=r.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:r});t&&i.addEventListener(e,t,{once:!0}),n?iD(i,o):i.dispatchEvent(o)}var Pm="focusScope.autoFocusOnMount",Am="focusScope.autoFocusOnUnmount",J1={bubbles:!1,cancelable:!0},pD="FocusScope",XP=y.forwardRef((e,t)=>{const{loop:r=!1,trapped:n=!1,onMountAutoFocus:i,onUnmountAutoFocus:o,...s}=e,[u,d]=y.useState(null),f=Qs(i),h=Qs(o),m=y.useRef(null),v=Xa(t,S=>d(S)),x=y.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;y.useEffect(()=>{if(n){let S=function(_){if(x.paused||!u)return;const O=_.target;u.contains(O)?m.current=O:Ri(m.current,{select:!0})},E=function(_){if(x.paused||!u)return;const O=_.relatedTarget;O!==null&&(u.contains(O)||Ri(m.current,{select:!0}))},P=function(_){if(document.activeElement===document.body)for(const N of _)N.removedNodes.length>0&&Ri(u)};document.addEventListener("focusin",S),document.addEventListener("focusout",E);const j=new MutationObserver(P);return u&&j.observe(u,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",S),document.removeEventListener("focusout",E),j.disconnect()}}},[n,u,x.paused]),y.useEffect(()=>{if(u){tw.add(x);const S=document.activeElement;if(!u.contains(S)){const P=new CustomEvent(Pm,J1);u.addEventListener(Pm,f),u.dispatchEvent(P),P.defaultPrevented||(mD(bD(ZP(u)),{select:!0}),document.activeElement===S&&Ri(u))}return()=>{u.removeEventListener(Pm,f),setTimeout(()=>{const P=new CustomEvent(Am,J1);u.addEventListener(Am,h),u.dispatchEvent(P),P.defaultPrevented||Ri(S??document.body,{select:!0}),u.removeEventListener(Am,h),tw.remove(x)},0)}}},[u,f,h,x]);const k=y.useCallback(S=>{if(!r&&!n||x.paused)return;const E=S.key==="Tab"&&!S.altKey&&!S.ctrlKey&&!S.metaKey,P=document.activeElement;if(E&&P){const j=S.currentTarget,[_,O]=vD(j);_&&O?!S.shiftKey&&P===O?(S.preventDefault(),r&&Ri(_,{select:!0})):S.shiftKey&&P===_&&(S.preventDefault(),r&&Ri(O,{select:!0})):P===j&&S.preventDefault()}},[r,n,x.paused]);return b.jsx(Wt.div,{tabIndex:-1,...s,ref:v,onKeyDown:k})});XP.displayName=pD;function mD(e,{select:t=!1}={}){const r=document.activeElement;for(const n of e)if(Ri(n,{select:t}),document.activeElement!==r)return}function vD(e){const t=ZP(e),r=ew(t,e),n=ew(t.reverse(),e);return[r,n]}function ZP(e){const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const i=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||i?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t}function ew(e,t){for(const r of e)if(!gD(r,{upTo:t}))return r}function gD(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function yD(e){return e instanceof HTMLInputElement&&"select"in e}function Ri(e,{select:t=!1}={}){if(e&&e.focus){const r=document.activeElement;e.focus({preventScroll:!0}),e!==r&&yD(e)&&t&&e.select()}}var tw=xD();function xD(){let e=[];return{add(t){const r=e[0];t!==r&&(r==null||r.pause()),e=rw(e,t),e.unshift(t)},remove(t){var r;e=rw(e,t),(r=e[0])==null||r.resume()}}}function rw(e,t){const r=[...e],n=r.indexOf(t);return n!==-1&&r.splice(n,1),r}function bD(e){return e.filter(t=>t.tagName!=="A")}var wD="Portal",JP=y.forwardRef((e,t)=>{var u;const{container:r,...n}=e,[i,o]=y.useState(!1);Ys(()=>o(!0),[]);const s=r||i&&((u=globalThis==null?void 0:globalThis.document)==null?void 0:u.body);return s?If.createPortal(b.jsx(Wt.div,{...n,ref:t}),s):null});JP.displayName=wD;function SD(e,t){return y.useReducer((r,n)=>t[r][n]??r,e)}var Mf=e=>{const{present:t,children:r}=e,n=kD(t),i=typeof r=="function"?r({present:n.isPresent}):y.Children.only(r),o=ED(n.ref,PD(i));return typeof r=="function"||n.isPresent?y.cloneElement(i,{ref:o}):null};Mf.displayName="Presence";function kD(e){const[t,r]=y.useState(),n=y.useRef(null),i=y.useRef(e),o=y.useRef("none"),s=e?"mounted":"unmounted",[u,d]=SD(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return y.useEffect(()=>{const f=Xc(n.current);o.current=u==="mounted"?f:"none"},[u]),Ys(()=>{const f=n.current,h=i.current;if(h!==e){const v=o.current,x=Xc(f);e?d("MOUNT"):x==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(h&&v!==x?"ANIMATION_OUT":"UNMOUNT"),i.current=e}},[e,d]),Ys(()=>{if(t){let f;const h=t.ownerDocument.defaultView??window,m=x=>{const S=Xc(n.current).includes(CSS.escape(x.animationName));if(x.target===t&&S&&(d("ANIMATION_END"),!i.current)){const E=t.style.animationFillMode;t.style.animationFillMode="forwards",f=h.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=E)})}},v=x=>{x.target===t&&(o.current=Xc(n.current))};return t.addEventListener("animationstart",v),t.addEventListener("animationcancel",m),t.addEventListener("animationend",m),()=>{h.clearTimeout(f),t.removeEventListener("animationstart",v),t.removeEventListener("animationcancel",m),t.removeEventListener("animationend",m)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(u),ref:y.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function nw(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function ED(...e){const t=y.useRef(e);return t.current=e,y.useCallback(r=>{const n=t.current;let i=!1;const o=n.map(s=>{const u=nw(s,r);return!i&&typeof u=="function"&&(i=!0),u});if(i)return()=>{for(let s=0;s{vn||(vn={start:iw(),end:iw()});const{start:e,end:t}=vn;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement("afterbegin",e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement("beforeend",t),Zc++,()=>{Zc===1&&(vn==null||vn.start.remove(),vn==null||vn.end.remove(),vn=null),Zc=Math.max(0,Zc-1)}},[])}function iw(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var kn=function(){return kn=Object.assign||function(t){for(var r,n=1,i=arguments.length;n"u")return WD;var t=HD(e),r=document.documentElement.clientWidth,n=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,n-r+t[2]-t[0])}},VD=nA(),Go="data-scroll-locked",qD=function(e,t,r,n){var i=e.left,o=e.top,s=e.right,u=e.gap;return r===void 0&&(r="margin"),` - .`.concat(CD,` { + */const bu=Pe("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),Vo=[{id:"dashboard",label:"Cockpit",hint:"Deine Box auf einen Blick",icon:lT,group:"Operativ"},{id:"ideen",label:"Ideen",hint:"Schreib hin, was entstehen soll",icon:uT,group:"Operativ"},{id:"auftraege",label:"Auftragsbuch",hint:"Vorschläge der Box — annehmen oder ablehnen",icon:By,group:"Operativ"},{id:"eigenleben",label:"Skills",hint:"Fähigkeiten der Box — aktiv/inaktiv, Herkunft & Vorschlags-Bilanz",icon:KP,group:"Operativ"},{id:"chronik",label:"Chronik",hint:"Was die Box von allein getan hat + Zeitmaschine",icon:aT,group:"Operativ"},{id:"memory",label:"Gedächtnis",hint:"Geteiltes Memory verwalten",icon:Fy,group:"Wissen"},{id:"wissen",label:"Wissen",hint:"Lucys Wissens-Vault (Traum-Notizen)",icon:sT,group:"Wissen"},{id:"connect",label:"Verbinden",hint:"IDE-/Agent-Configs erzeugen",icon:Uy,group:"Werkzeuge"},{id:"konsole",label:"Konsole",hint:"Direkte Box-Shell (SSH-artig)",icon:yT,group:"Werkzeuge"},{id:"guide",label:"Anleitung",hint:"Einrichten & Vibe-Coding",icon:UP,group:"Werkzeuge"},{id:"models",label:"Modelle",hint:"Speicher, laden & Rollen",icon:BP,group:"Wartung"},{id:"agent",label:"Hermes",hint:"Agent-Status & Verdrahtung",icon:_f,group:"Wartung"}];var V1=1,wT=.9,ST=.8,kT=.17,km=.1,Em=.999,ET=.9999,PT=.99,AT=/[\\\/_+.#"@\[\(\{&]/,OT=/[\\\/_+.#"@\[\(\{&]/g,CT=/[\s-]/,VP=/[\s-]/g;function _v(e,t,r,n,i,o,s){if(o===t.length)return i===e.length?V1:PT;var u=`${i},${o}`;if(s[u]!==void 0)return s[u];for(var d=n.charAt(o),f=r.indexOf(d,i),h=0,m,v,x,k;f>=0;)m=_v(e,t,r,n,f+1,o+1,s),m>h&&(f===i?m*=V1:AT.test(e.charAt(f-1))?(m*=ST,x=e.slice(i,f-1).match(OT),x&&i>0&&(m*=Math.pow(Em,x.length))):CT.test(e.charAt(f-1))?(m*=wT,k=e.slice(i,f-1).match(VP),k&&i>0&&(m*=Math.pow(Em,k.length))):(m*=kT,i>0&&(m*=Math.pow(Em,f-i))),e.charAt(f)!==t.charAt(o)&&(m*=ET)),(mm&&(m=v*km)),m>h&&(h=m),f=r.indexOf(d,f+1);return s[u]=h,h}function q1(e){return e.toLowerCase().replace(VP," ")}function _T(e,t,r){return e=r&&r.length>0?`${e+" "+r.join(" ")}`:e,_v(e,t,q1(e),q1(t),0,0,{})}function Qi(e,t,{checkForDefaultPrevented:r=!0}={}){return function(i){if(e==null||e(i),r===!1||!i.defaultPrevented)return t==null?void 0:t(i)}}function G1(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function dl(...e){return t=>{let r=!1;const n=e.map(i=>{const o=G1(i,t);return!r&&typeof o=="function"&&(r=!0),o});if(r)return()=>{for(let i=0;i{var P;const{scope:v,children:x,...k}=m,S=((P=v==null?void 0:v[e])==null?void 0:P[d])||u,E=g.useMemo(()=>k,Object.values(k));return w.jsx(S.Provider,{value:E,children:x})};f.displayName=o+"Provider";function h(m,v){var S;const x=((S=v==null?void 0:v[e])==null?void 0:S[d])||u,k=g.useContext(x);if(k)return k;if(s!==void 0)return s;throw new Error(`\`${m}\` must be used within \`${o}\``)}return[f,h]}const i=()=>{const o=r.map(s=>g.createContext(s));return function(u){const d=(u==null?void 0:u[e])||o;return g.useMemo(()=>({[`__scope${e}`]:{...u,[e]:d}}),[u,d])}};return i.scopeName=e,[n,NT(i,...t)]}function NT(...e){const t=e[0];if(e.length===1)return t;const r=()=>{const n=e.map(i=>({useScope:i(),scopeName:i.scopeName}));return function(o){const s=n.reduce((u,{useScope:d,scopeName:f})=>{const m=d(o)[`__scope${f}`];return{...u,...m}},{});return g.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return r.scopeName=t.scopeName,r}var Ys=globalThis!=null&&globalThis.document?g.useLayoutEffect:()=>{},IT=Cf[" useId ".trim().toString()]||(()=>{}),MT=0;function Zn(e){const[t,r]=g.useState(IT());return Ys(()=>{r(n=>n??String(MT++))},[e]),t?`radix-${t}`:""}var TT=Cf[" useInsertionEffect ".trim().toString()]||Ys;function DT({prop:e,defaultProp:t,onChange:r=()=>{},caller:n}){const[i,o,s]=RT({defaultProp:t,onChange:r}),u=e!==void 0,d=u?e:i;{const h=g.useRef(e!==void 0);g.useEffect(()=>{const m=h.current;m!==u&&console.warn(`${n} is changing from ${m?"controlled":"uncontrolled"} to ${u?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),h.current=u},[u,n])}const f=g.useCallback(h=>{var m;if(u){const v=$T(h)?h(e):h;v!==e&&((m=s.current)==null||m.call(s,v))}else o(h)},[u,e,o,s]);return[d,f]}function RT({defaultProp:e,onChange:t}){const[r,n]=g.useState(e),i=g.useRef(r),o=g.useRef(t);return TT(()=>{o.current=t},[t]),g.useEffect(()=>{var s;i.current!==r&&((s=o.current)==null||s.call(o,r),i.current=r)},[r,i]),[r,n,o]}function $T(e){return typeof e=="function"}var If=OP();function qP(e){const t=g.forwardRef((r,n)=>{let{children:i,...o}=r,s=null,u=!1;const d=[];Y1(i)&&typeof Qc=="function"&&(i=Qc(i._payload)),g.Children.forEach(i,v=>{var x;if(UT(v)){u=!0;const k=v;let S="child"in k.props?k.props.child:k.props.children;Y1(S)&&typeof Qc=="function"&&(S=Qc(S._payload)),s=zT(k,S),d.push((x=s==null?void 0:s.props)==null?void 0:x.children)}else d.push(v)}),s?s=g.cloneElement(s,void 0,d):!u&&g.Children.count(i)===1&&g.isValidElement(i)&&(s=i);const f=s?BT(s):void 0,h=Xa(n,f);if(!s){if(i||i===0)throw new Error(u?VT(e):KT(e));return i}const m=FT(o,s.props??{});return s.type!==g.Fragment&&(m.ref=n?h:f),g.cloneElement(s,m)});return t.displayName=`${e}.Slot`,t}var LT=Symbol.for("radix.slottable"),zT=(e,t)=>{if("child"in e.props){const r=e.props.child;return g.isValidElement(r)?g.cloneElement(r,void 0,e.props.children(r.props.children)):null}return g.isValidElement(t)?t:null};function FT(e,t){const r={...t};for(const n in t){const i=e[n],o=t[n];/^on[A-Z]/.test(n)?i&&o?r[n]=(...u)=>{const d=o(...u);return i(...u),d}:i&&(r[n]=i):n==="style"?r[n]={...i,...o}:n==="className"&&(r[n]=[i,o].filter(Boolean).join(" "))}return{...e,...r}}function BT(e){var n,i;let t=(n=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:n.get,r=t&&"isReactWarning"in t&&t.isReactWarning;return r?e.ref:(t=(i=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:i.get,r=t&&"isReactWarning"in t&&t.isReactWarning,r?e.props.ref:e.props.ref||e.ref)}function UT(e){return g.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===LT}var WT=Symbol.for("react.lazy");function Y1(e){return e!=null&&typeof e=="object"&&"$$typeof"in e&&e.$$typeof===WT&&"_payload"in e&&HT(e._payload)}function HT(e){return typeof e=="object"&&e!==null&&"then"in e}var KT=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,VT=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,Qc=Cf[" use ".trim().toString()],qT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Wt=qT.reduce((e,t)=>{const r=qP(`Primitive.${t}`),n=g.forwardRef((i,o)=>{const{asChild:s,...u}=i,d=s?r:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),w.jsx(d,{...u,ref:o})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function GT(e,t){e&&If.flushSync(()=>e.dispatchEvent(t))}function Qs(e){const t=g.useRef(e);return g.useEffect(()=>{t.current=e}),g.useMemo(()=>((...r)=>{var n;return(n=t.current)==null?void 0:n.call(t,...r)}),[])}function YT(e,t=globalThis==null?void 0:globalThis.document){const r=Qs(e);g.useEffect(()=>{const n=i=>{i.key==="Escape"&&r(i)};return t.addEventListener("keydown",n,{capture:!0}),()=>t.removeEventListener("keydown",n,{capture:!0})},[r,t])}var QT="DismissableLayer",jv="dismissableLayer.update",XT="dismissableLayer.pointerDownOutside",ZT="dismissableLayer.focusOutside",Q1,Ky=g.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),GP=g.forwardRef((e,t)=>{const{disableOutsidePointerEvents:r=!1,deferPointerDownOutside:n=!1,onEscapeKeyDown:i,onPointerDownOutside:o,onFocusOutside:s,onInteractOutside:u,onDismiss:d,...f}=e,h=g.useContext(Ky),[m,v]=g.useState(null),x=(m==null?void 0:m.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,k]=g.useState({}),S=Xa(t,F=>v(F)),E=Array.from(h.layers),[P]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),_=E.indexOf(P),j=m?E.indexOf(m):-1,O=h.layersWithOutsidePointerEventsDisabled.size>0,N=j>=_,C=g.useRef(!1),R=rD(F=>{const V=F.target;if(!(V instanceof Node))return;const Q=[...h.branches].some(B=>B.contains(V));!N||Q||(o==null||o(F),u==null||u(F),F.defaultPrevented||d==null||d())},{ownerDocument:x,deferPointerDownOutside:n,isDeferredPointerDownOutsideRef:C,dismissableSurfaces:h.dismissableSurfaces}),z=nD(F=>{if(n&&C.current)return;const V=F.target;[...h.branches].some(B=>B.contains(V))||(s==null||s(F),u==null||u(F),F.defaultPrevented||d==null||d())},x);return YT(F=>{j===h.layers.size-1&&(i==null||i(F),!F.defaultPrevented&&d&&(F.preventDefault(),d()))},x),g.useEffect(()=>{if(m)return r&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(Q1=x.body.style.pointerEvents,x.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(m)),h.layers.add(m),X1(),()=>{r&&(h.layersWithOutsidePointerEventsDisabled.delete(m),h.layersWithOutsidePointerEventsDisabled.size===0&&(x.body.style.pointerEvents=Q1))}},[m,x,r,h]),g.useEffect(()=>()=>{m&&(h.layers.delete(m),h.layersWithOutsidePointerEventsDisabled.delete(m),X1())},[m,h]),g.useEffect(()=>{const F=()=>k({});return document.addEventListener(jv,F),()=>document.removeEventListener(jv,F)},[]),w.jsx(Wt.div,{...f,ref:S,style:{pointerEvents:O?N?"auto":"none":void 0,...e.style},onFocusCapture:Qi(e.onFocusCapture,z.onFocusCapture),onBlurCapture:Qi(e.onBlurCapture,z.onBlurCapture),onPointerDownCapture:Qi(e.onPointerDownCapture,R.onPointerDownCapture)})});GP.displayName=QT;var JT="DismissableLayerBranch",eD=g.forwardRef((e,t)=>{const r=g.useContext(Ky),n=g.useRef(null),i=Xa(t,n);return g.useEffect(()=>{const o=n.current;if(o)return r.branches.add(o),()=>{r.branches.delete(o)}},[r.branches]),w.jsx(Wt.div,{...e,ref:i})});eD.displayName=JT;function tD(){const e=g.useContext(Ky),[t,r]=g.useState(null);return g.useEffect(()=>{if(t)return e.dismissableSurfaces.add(t),()=>{e.dismissableSurfaces.delete(t)}},[t,e.dismissableSurfaces]),r}function rD(e,t){const{ownerDocument:r=globalThis==null?void 0:globalThis.document,deferPointerDownOutside:n=!1,isDeferredPointerDownOutsideRef:i,dismissableSurfaces:o}=t,s=Qs(e),u=g.useRef(!1),d=g.useRef(!1),f=g.useRef(new Map),h=g.useRef(()=>{});return g.useEffect(()=>{function m(){d.current=!1,i.current=!1,f.current.clear()}function v(){return Array.from(f.current.values()).some(Boolean)}function x(_){if(!d.current)return;const j=_.target;j instanceof Node&&[...o].some(N=>N.contains(j))||f.current.set(_.type,!0),_.type==="click"&&window.setTimeout(()=>{d.current&&h.current()},0)}function k(_){d.current&&f.current.set(_.type,!1)}const S=_=>{if(_.target&&!u.current){let j=function(){r.removeEventListener("click",h.current);const N=v();m(),N||YP(XT,s,O,{discrete:!0})};const O={originalEvent:_};d.current=!0,i.current=n&&_.button===0,f.current.clear(),!n||_.button!==0?j():(r.removeEventListener("click",h.current),h.current=j,r.addEventListener("click",h.current,{once:!0}))}else r.removeEventListener("click",h.current),m();u.current=!1},E=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const _ of E)r.addEventListener(_,x,!0),r.addEventListener(_,k);const P=window.setTimeout(()=>{r.addEventListener("pointerdown",S)},0);return()=>{window.clearTimeout(P),r.removeEventListener("pointerdown",S),r.removeEventListener("click",h.current);for(const _ of E)r.removeEventListener(_,x,!0),r.removeEventListener(_,k)}},[r,s,n,i,o]),{onPointerDownCapture:()=>u.current=!0}}function nD(e,t=globalThis==null?void 0:globalThis.document){const r=Qs(e),n=g.useRef(!1);return g.useEffect(()=>{const i=o=>{o.target&&!n.current&&YP(ZT,r,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",i),()=>t.removeEventListener("focusin",i)},[t,r]),{onFocusCapture:()=>n.current=!0,onBlurCapture:()=>n.current=!1}}function X1(){const e=new CustomEvent(jv);document.dispatchEvent(e)}function YP(e,t,r,{discrete:n}){const i=r.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:r});t&&i.addEventListener(e,t,{once:!0}),n?GT(i,o):i.dispatchEvent(o)}var Pm="focusScope.autoFocusOnMount",Am="focusScope.autoFocusOnUnmount",Z1={bubbles:!1,cancelable:!0},iD="FocusScope",QP=g.forwardRef((e,t)=>{const{loop:r=!1,trapped:n=!1,onMountAutoFocus:i,onUnmountAutoFocus:o,...s}=e,[u,d]=g.useState(null),f=Qs(i),h=Qs(o),m=g.useRef(null),v=Xa(t,S=>d(S)),x=g.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;g.useEffect(()=>{if(n){let S=function(j){if(x.paused||!u)return;const O=j.target;u.contains(O)?m.current=O:Ri(m.current,{select:!0})},E=function(j){if(x.paused||!u)return;const O=j.relatedTarget;O!==null&&(u.contains(O)||Ri(m.current,{select:!0}))},P=function(j){if(document.activeElement===document.body)for(const N of j)N.removedNodes.length>0&&Ri(u)};document.addEventListener("focusin",S),document.addEventListener("focusout",E);const _=new MutationObserver(P);return u&&_.observe(u,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",S),document.removeEventListener("focusout",E),_.disconnect()}}},[n,u,x.paused]),g.useEffect(()=>{if(u){ew.add(x);const S=document.activeElement;if(!u.contains(S)){const P=new CustomEvent(Pm,Z1);u.addEventListener(Pm,f),u.dispatchEvent(P),P.defaultPrevented||(aD(cD(XP(u)),{select:!0}),document.activeElement===S&&Ri(u))}return()=>{u.removeEventListener(Pm,f),setTimeout(()=>{const P=new CustomEvent(Am,Z1);u.addEventListener(Am,h),u.dispatchEvent(P),P.defaultPrevented||Ri(S??document.body,{select:!0}),u.removeEventListener(Am,h),ew.remove(x)},0)}}},[u,f,h,x]);const k=g.useCallback(S=>{if(!r&&!n||x.paused)return;const E=S.key==="Tab"&&!S.altKey&&!S.ctrlKey&&!S.metaKey,P=document.activeElement;if(E&&P){const _=S.currentTarget,[j,O]=oD(_);j&&O?!S.shiftKey&&P===O?(S.preventDefault(),r&&Ri(j,{select:!0})):S.shiftKey&&P===j&&(S.preventDefault(),r&&Ri(O,{select:!0})):P===_&&S.preventDefault()}},[r,n,x.paused]);return w.jsx(Wt.div,{tabIndex:-1,...s,ref:v,onKeyDown:k})});QP.displayName=iD;function aD(e,{select:t=!1}={}){const r=document.activeElement;for(const n of e)if(Ri(n,{select:t}),document.activeElement!==r)return}function oD(e){const t=XP(e),r=J1(t,e),n=J1(t.reverse(),e);return[r,n]}function XP(e){const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const i=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||i?NodeFilter.FILTER_SKIP:n.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t}function J1(e,t){for(const r of e)if(!lD(r,{upTo:t}))return r}function lD(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function sD(e){return e instanceof HTMLInputElement&&"select"in e}function Ri(e,{select:t=!1}={}){if(e&&e.focus){const r=document.activeElement;e.focus({preventScroll:!0}),e!==r&&sD(e)&&t&&e.select()}}var ew=uD();function uD(){let e=[];return{add(t){const r=e[0];t!==r&&(r==null||r.pause()),e=tw(e,t),e.unshift(t)},remove(t){var r;e=tw(e,t),(r=e[0])==null||r.resume()}}}function tw(e,t){const r=[...e],n=r.indexOf(t);return n!==-1&&r.splice(n,1),r}function cD(e){return e.filter(t=>t.tagName!=="A")}var dD="Portal",ZP=g.forwardRef((e,t)=>{var u;const{container:r,...n}=e,[i,o]=g.useState(!1);Ys(()=>o(!0),[]);const s=r||i&&((u=globalThis==null?void 0:globalThis.document)==null?void 0:u.body);return s?If.createPortal(w.jsx(Wt.div,{...n,ref:t}),s):null});ZP.displayName=dD;function fD(e,t){return g.useReducer((r,n)=>t[r][n]??r,e)}var Mf=e=>{const{present:t,children:r}=e,n=hD(t),i=typeof r=="function"?r({present:n.isPresent}):g.Children.only(r),o=pD(n.ref,mD(i));return typeof r=="function"||n.isPresent?g.cloneElement(i,{ref:o}):null};Mf.displayName="Presence";function hD(e){const[t,r]=g.useState(),n=g.useRef(null),i=g.useRef(e),o=g.useRef("none"),s=e?"mounted":"unmounted",[u,d]=fD(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return g.useEffect(()=>{const f=Xc(n.current);o.current=u==="mounted"?f:"none"},[u]),Ys(()=>{const f=n.current,h=i.current;if(h!==e){const v=o.current,x=Xc(f);e?d("MOUNT"):x==="none"||(f==null?void 0:f.display)==="none"?d("UNMOUNT"):d(h&&v!==x?"ANIMATION_OUT":"UNMOUNT"),i.current=e}},[e,d]),Ys(()=>{if(t){let f;const h=t.ownerDocument.defaultView??window,m=x=>{const S=Xc(n.current).includes(CSS.escape(x.animationName));if(x.target===t&&S&&(d("ANIMATION_END"),!i.current)){const E=t.style.animationFillMode;t.style.animationFillMode="forwards",f=h.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=E)})}},v=x=>{x.target===t&&(o.current=Xc(n.current))};return t.addEventListener("animationstart",v),t.addEventListener("animationcancel",m),t.addEventListener("animationend",m),()=>{h.clearTimeout(f),t.removeEventListener("animationstart",v),t.removeEventListener("animationcancel",m),t.removeEventListener("animationend",m)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(u),ref:g.useCallback(f=>{n.current=f?getComputedStyle(f):null,r(f)},[])}}function rw(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function pD(...e){const t=g.useRef(e);return t.current=e,g.useCallback(r=>{const n=t.current;let i=!1;const o=n.map(s=>{const u=rw(s,r);return!i&&typeof u=="function"&&(i=!0),u});if(i)return()=>{for(let s=0;s{vn||(vn={start:nw(),end:nw()});const{start:e,end:t}=vn;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement("afterbegin",e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement("beforeend",t),Zc++,()=>{Zc===1&&(vn==null||vn.start.remove(),vn==null||vn.end.remove(),vn=null),Zc=Math.max(0,Zc-1)}},[])}function nw(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var kn=function(){return kn=Object.assign||function(t){for(var r,n=1,i=arguments.length;n"u")return MD;var t=TD(e),r=document.documentElement.clientWidth,n=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,n-r+t[2]-t[0])}},RD=rA(),qo="data-scroll-locked",$D=function(e,t,r,n){var i=e.left,o=e.top,s=e.right,u=e.gap;return r===void 0&&(r="margin"),` + .`.concat(gD,` { overflow: hidden `).concat(n,`; padding-right: `).concat(u,"px ").concat(n,`; } - body[`).concat(Go,`] { + body[`).concat(qo,`] { overflow: hidden `).concat(n,`; overscroll-behavior: contain; `).concat([t&&"position: relative ".concat(n,";"),r==="margin"&&` @@ -377,15 +362,14 @@ Error generating stack: `+w.message+` margin-right: 0 `).concat(n,`; } - body[`).concat(Go,`] { - `).concat(jD,": ").concat(u,`px; + body[`).concat(qo,`] { + `).concat(xD,": ").concat(u,`px; } -`)},ow=function(){var e=parseInt(document.body.getAttribute(Go)||"0",10);return isFinite(e)?e:0},GD=function(){y.useEffect(function(){return document.body.setAttribute(Go,(ow()+1).toString()),function(){var e=ow()-1;e<=0?document.body.removeAttribute(Go):document.body.setAttribute(Go,e.toString())}},[])},YD=function(e){var t=e.noRelative,r=e.noImportant,n=e.gapMode,i=n===void 0?"margin":n;GD();var o=y.useMemo(function(){return KD(i)},[i]);return y.createElement(VD,{styles:qD(o,!t,i,r?"":"!important")})},Nv=!1;if(typeof window<"u")try{var Jc=Object.defineProperty({},"passive",{get:function(){return Nv=!0,!0}});window.addEventListener("test",Jc,Jc),window.removeEventListener("test",Jc,Jc)}catch{Nv=!1}var Oo=Nv?{passive:!1}:!1,QD=function(e){return e.tagName==="TEXTAREA"},iA=function(e,t){if(!(e instanceof Element))return!1;var r=window.getComputedStyle(e);return r[t]!=="hidden"&&!(r.overflowY===r.overflowX&&!QD(e)&&r[t]==="visible")},XD=function(e){return iA(e,"overflowY")},ZD=function(e){return iA(e,"overflowX")},lw=function(e,t){var r=t.ownerDocument,n=t;do{typeof ShadowRoot<"u"&&n instanceof ShadowRoot&&(n=n.host);var i=aA(e,n);if(i){var o=oA(e,n),s=o[1],u=o[2];if(s>u)return!0}n=n.parentNode}while(n&&n!==r.body);return!1},JD=function(e){var t=e.scrollTop,r=e.scrollHeight,n=e.clientHeight;return[t,r,n]},eR=function(e){var t=e.scrollLeft,r=e.scrollWidth,n=e.clientWidth;return[t,r,n]},aA=function(e,t){return e==="v"?XD(t):ZD(t)},oA=function(e,t){return e==="v"?JD(t):eR(t)},tR=function(e,t){return e==="h"&&t==="rtl"?-1:1},rR=function(e,t,r,n,i){var o=tR(e,window.getComputedStyle(t).direction),s=o*n,u=r.target,d=t.contains(u),f=!1,h=s>0,m=0,v=0;do{if(!u)break;var x=oA(e,u),k=x[0],S=x[1],E=x[2],P=S-E-o*k;(k||P)&&aA(e,u)&&(m+=P,v+=k);var j=u.parentNode;u=j&&j.nodeType===Node.DOCUMENT_FRAGMENT_NODE?j.host:j}while(!d&&u!==document.body||d&&(t.contains(u)||t===u));return(h&&Math.abs(m)<1||!h&&Math.abs(v)<1)&&(f=!0),f},ed=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},sw=function(e){return[e.deltaX,e.deltaY]},uw=function(e){return e&&"current"in e?e.current:e},nR=function(e,t){return e[0]===t[0]&&e[1]===t[1]},iR=function(e){return` +`)},aw=function(){var e=parseInt(document.body.getAttribute(qo)||"0",10);return isFinite(e)?e:0},LD=function(){g.useEffect(function(){return document.body.setAttribute(qo,(aw()+1).toString()),function(){var e=aw()-1;e<=0?document.body.removeAttribute(qo):document.body.setAttribute(qo,e.toString())}},[])},zD=function(e){var t=e.noRelative,r=e.noImportant,n=e.gapMode,i=n===void 0?"margin":n;LD();var o=g.useMemo(function(){return DD(i)},[i]);return g.createElement(RD,{styles:$D(o,!t,i,r?"":"!important")})},Nv=!1;if(typeof window<"u")try{var Jc=Object.defineProperty({},"passive",{get:function(){return Nv=!0,!0}});window.addEventListener("test",Jc,Jc),window.removeEventListener("test",Jc,Jc)}catch{Nv=!1}var Oo=Nv?{passive:!1}:!1,FD=function(e){return e.tagName==="TEXTAREA"},nA=function(e,t){if(!(e instanceof Element))return!1;var r=window.getComputedStyle(e);return r[t]!=="hidden"&&!(r.overflowY===r.overflowX&&!FD(e)&&r[t]==="visible")},BD=function(e){return nA(e,"overflowY")},UD=function(e){return nA(e,"overflowX")},ow=function(e,t){var r=t.ownerDocument,n=t;do{typeof ShadowRoot<"u"&&n instanceof ShadowRoot&&(n=n.host);var i=iA(e,n);if(i){var o=aA(e,n),s=o[1],u=o[2];if(s>u)return!0}n=n.parentNode}while(n&&n!==r.body);return!1},WD=function(e){var t=e.scrollTop,r=e.scrollHeight,n=e.clientHeight;return[t,r,n]},HD=function(e){var t=e.scrollLeft,r=e.scrollWidth,n=e.clientWidth;return[t,r,n]},iA=function(e,t){return e==="v"?BD(t):UD(t)},aA=function(e,t){return e==="v"?WD(t):HD(t)},KD=function(e,t){return e==="h"&&t==="rtl"?-1:1},VD=function(e,t,r,n,i){var o=KD(e,window.getComputedStyle(t).direction),s=o*n,u=r.target,d=t.contains(u),f=!1,h=s>0,m=0,v=0;do{if(!u)break;var x=aA(e,u),k=x[0],S=x[1],E=x[2],P=S-E-o*k;(k||P)&&iA(e,u)&&(m+=P,v+=k);var _=u.parentNode;u=_&&_.nodeType===Node.DOCUMENT_FRAGMENT_NODE?_.host:_}while(!d&&u!==document.body||d&&(t.contains(u)||t===u));return(h&&Math.abs(m)<1||!h&&Math.abs(v)<1)&&(f=!0),f},ed=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},lw=function(e){return[e.deltaX,e.deltaY]},sw=function(e){return e&&"current"in e?e.current:e},qD=function(e,t){return e[0]===t[0]&&e[1]===t[1]},GD=function(e){return` .block-interactivity-`.concat(e,` {pointer-events: none;} .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},aR=0,Co=[];function oR(e){var t=y.useRef([]),r=y.useRef([0,0]),n=y.useRef(),i=y.useState(aR++)[0],o=y.useState(nA)[0],s=y.useRef(e);y.useEffect(function(){s.current=e},[e]),y.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var S=OD([e.lockRef.current],(e.shards||[]).map(uw),!0).filter(Boolean);return S.forEach(function(E){return E.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),S.forEach(function(E){return E.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var u=y.useCallback(function(S,E){if("touches"in S&&S.touches.length===2||S.type==="wheel"&&S.ctrlKey)return!s.current.allowPinchZoom;var P=ed(S),j=r.current,_="deltaX"in S?S.deltaX:j[0]-P[0],O="deltaY"in S?S.deltaY:j[1]-P[1],N,C=S.target,R=Math.abs(_)>Math.abs(O)?"h":"v";if("touches"in S&&R==="h"&&C.type==="range")return!1;var z=window.getSelection(),F=z&&z.anchorNode,V=F?F===C||F.contains(C):!1;if(V)return!1;var Q=lw(R,C);if(!Q)return!0;if(Q?N=R:(N=R==="v"?"h":"v",Q=lw(R,C)),!Q)return!1;if(!n.current&&"changedTouches"in S&&(_||O)&&(n.current=N),!N)return!0;var B=n.current||N;return rR(B,E,S,B==="h"?_:O)},[]),d=y.useCallback(function(S){var E=S;if(!(!Co.length||Co[Co.length-1]!==o)){var P="deltaY"in E?sw(E):ed(E),j=t.current.filter(function(N){return N.name===E.type&&(N.target===E.target||E.target===N.shadowParent)&&nR(N.delta,P)})[0];if(j&&j.should){E.cancelable&&E.preventDefault();return}if(!j){var _=(s.current.shards||[]).map(uw).filter(Boolean).filter(function(N){return N.contains(E.target)}),O=_.length>0?u(E,_[0]):!s.current.noIsolation;O&&E.cancelable&&E.preventDefault()}}},[]),f=y.useCallback(function(S,E,P,j){var _={name:S,delta:E,target:P,should:j,shadowParent:lR(P)};t.current.push(_),setTimeout(function(){t.current=t.current.filter(function(O){return O!==_})},1)},[]),h=y.useCallback(function(S){r.current=ed(S),n.current=void 0},[]),m=y.useCallback(function(S){f(S.type,sw(S),S.target,u(S,e.lockRef.current))},[]),v=y.useCallback(function(S){f(S.type,ed(S),S.target,u(S,e.lockRef.current))},[]);y.useEffect(function(){return Co.push(o),e.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:v}),document.addEventListener("wheel",d,Oo),document.addEventListener("touchmove",d,Oo),document.addEventListener("touchstart",h,Oo),function(){Co=Co.filter(function(S){return S!==o}),document.removeEventListener("wheel",d,Oo),document.removeEventListener("touchmove",d,Oo),document.removeEventListener("touchstart",h,Oo)}},[]);var x=e.removeScrollBar,k=e.inert;return y.createElement(y.Fragment,null,k?y.createElement(o,{styles:iR(i)}):null,x?y.createElement(YD,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function lR(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const sR=RD(rA,oR);var lA=y.forwardRef(function(e,t){return y.createElement(Tf,kn({},e,{ref:t,sideCar:sR}))});lA.classNames=Tf.classNames;var uR=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},jo=new WeakMap,td=new WeakMap,rd={},_m=0,sA=function(e){return e&&(e.host||sA(e.parentNode))},cR=function(e,t){return t.map(function(r){if(e.contains(r))return r;var n=sA(r);return n&&e.contains(n)?n:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},dR=function(e,t,r,n){var i=cR(t,Array.isArray(e)?e:[e]);rd[r]||(rd[r]=new WeakMap);var o=rd[r],s=[],u=new Set,d=new Set(i),f=function(m){!m||u.has(m)||(u.add(m),f(m.parentNode))};i.forEach(f);var h=function(m){!m||d.has(m)||Array.prototype.forEach.call(m.children,function(v){if(u.has(v))h(v);else try{var x=v.getAttribute(n),k=x!==null&&x!=="false",S=(jo.get(v)||0)+1,E=(o.get(v)||0)+1;jo.set(v,S),o.set(v,E),s.push(v),S===1&&k&&td.set(v,!0),E===1&&v.setAttribute(r,"true"),k||v.setAttribute(n,"true")}catch(P){console.error("aria-hidden: cannot operate on ",v,P)}})};return h(t),u.clear(),_m++,function(){s.forEach(function(m){var v=jo.get(m)-1,x=o.get(m)-1;jo.set(m,v),o.set(m,x),v||(td.has(m)||m.removeAttribute(n),td.delete(m)),x||m.removeAttribute(r)}),_m--,_m||(jo=new WeakMap,jo=new WeakMap,td=new WeakMap,rd={})}},fR=function(e,t,r){r===void 0&&(r="data-aria-hidden");var n=Array.from(Array.isArray(e)?e:[e]),i=uR(e);return i?(n.push.apply(n,Array.from(i.querySelectorAll("[aria-live], script"))),dR(n,i,r,"aria-hidden")):function(){return null}},Df="Dialog",[uA]=FT(Df),[hR,un]=uA(Df),cA=e=>{const{__scopeDialog:t,children:r,open:n,defaultOpen:i,onOpenChange:o,modal:s=!0}=e,u=y.useRef(null),d=y.useRef(null),[f,h]=KT({prop:n,defaultProp:i??!1,onChange:o,caller:Df});return b.jsx(hR,{scope:t,triggerRef:u,contentRef:d,contentId:Zn(),titleId:Zn(),descriptionId:Zn(),open:f,onOpenChange:h,onOpenToggle:y.useCallback(()=>h(m=>!m),[h]),modal:s,children:r})};cA.displayName=Df;var dA="DialogTrigger",pR=y.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(dA,r),o=Xa(t,i.triggerRef);return b.jsx(Wt.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Gg(i.open),...n,ref:o,onClick:Qi(e.onClick,i.onOpenToggle)})});pR.displayName=dA;var qg="DialogPortal",[mR,fA]=uA(qg,{forceMount:void 0}),hA=e=>{const{__scopeDialog:t,forceMount:r,children:n,container:i}=e,o=un(qg,t);return b.jsx(mR,{scope:t,forceMount:r,children:y.Children.map(n,s=>b.jsx(Mf,{present:r||o.open,children:b.jsx(JP,{asChild:!0,container:i,children:s})}))})};hA.displayName=qg;var Nd="DialogOverlay",pA=y.forwardRef((e,t)=>{const r=fA(Nd,e.__scopeDialog),{forceMount:n=r.forceMount,...i}=e,o=un(Nd,e.__scopeDialog);return o.modal?b.jsx(Mf,{present:n||o.open,children:b.jsx(gR,{...i,ref:t})}):null});pA.displayName=Nd;var vR=GP("DialogOverlay.RemoveScroll"),gR=y.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(Nd,r),o=dD(),s=Xa(t,o);return b.jsx(lA,{as:vR,allowPinchZoom:!0,shards:[i.contentRef],children:b.jsx(Wt.div,{"data-state":Gg(i.open),...n,ref:s,style:{pointerEvents:"auto",...n.style}})})}),hl="DialogContent",mA=y.forwardRef((e,t)=>{const r=fA(hl,e.__scopeDialog),{forceMount:n=r.forceMount,...i}=e,o=un(hl,e.__scopeDialog);return b.jsx(Mf,{present:n||o.open,children:o.modal?b.jsx(yR,{...i,ref:t}):b.jsx(xR,{...i,ref:t})})});mA.displayName=hl;var yR=y.forwardRef((e,t)=>{const r=un(hl,e.__scopeDialog),n=y.useRef(null),i=Xa(t,r.contentRef,n);return y.useEffect(()=>{const o=n.current;if(o)return fR(o)},[]),b.jsx(vA,{...e,ref:i,trapFocus:r.open,disableOutsidePointerEvents:r.open,onCloseAutoFocus:Qi(e.onCloseAutoFocus,o=>{var s;o.preventDefault(),(s=r.triggerRef.current)==null||s.focus()}),onPointerDownOutside:Qi(e.onPointerDownOutside,o=>{const s=o.detail.originalEvent,u=s.button===0&&s.ctrlKey===!0;(s.button===2||u)&&o.preventDefault()}),onFocusOutside:Qi(e.onFocusOutside,o=>o.preventDefault())})}),xR=y.forwardRef((e,t)=>{const r=un(hl,e.__scopeDialog),n=y.useRef(!1),i=y.useRef(!1);return b.jsx(vA,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var s,u;(s=e.onCloseAutoFocus)==null||s.call(e,o),o.defaultPrevented||(n.current||(u=r.triggerRef.current)==null||u.focus(),o.preventDefault()),n.current=!1,i.current=!1},onInteractOutside:o=>{var d,f;(d=e.onInteractOutside)==null||d.call(e,o),o.defaultPrevented||(n.current=!0,o.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const s=o.target;((f=r.triggerRef.current)==null?void 0:f.contains(s))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&i.current&&o.preventDefault()}})}),vA=y.forwardRef((e,t)=>{const{__scopeDialog:r,trapFocus:n,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=e,u=un(hl,r);return AD(),b.jsx(b.Fragment,{children:b.jsx(XP,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:i,onUnmountAutoFocus:o,children:b.jsx(YP,{role:"dialog",id:u.contentId,"aria-describedby":u.descriptionId,"aria-labelledby":u.titleId,"data-state":Gg(u.open),...s,ref:t,deferPointerDownOutside:!0,onDismiss:()=>u.onOpenChange(!1)})})})}),gA="DialogTitle",bR=y.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(gA,r);return b.jsx(Wt.h2,{id:i.titleId,...n,ref:t})});bR.displayName=gA;var yA="DialogDescription",wR=y.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(yA,r);return b.jsx(Wt.p,{id:i.descriptionId,...n,ref:t})});wR.displayName=yA;var xA="DialogClose",SR=y.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(xA,r);return b.jsx(Wt.button,{type:"button",...n,ref:t,onClick:Qi(e.onClick,()=>i.onOpenChange(!1))})});SR.displayName=xA;function Gg(e){return e?"open":"closed"}var ks='[cmdk-group=""]',Nm='[cmdk-group-items=""]',kR='[cmdk-group-heading=""]',bA='[cmdk-item=""]',cw=`${bA}:not([aria-disabled="true"])`,Iv="cmdk-item-select",Fo="data-value",ER=(e,t,r)=>zT(e,t,r),wA=y.createContext(void 0),wu=()=>y.useContext(wA),SA=y.createContext(void 0),Yg=()=>y.useContext(SA),kA=y.createContext(void 0),EA=y.forwardRef((e,t)=>{let r=Bo(()=>{var T,Z;return{search:"",value:(Z=(T=e.value)!=null?T:e.defaultValue)!=null?Z:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),n=Bo(()=>new Set),i=Bo(()=>new Map),o=Bo(()=>new Map),s=Bo(()=>new Set),u=PA(e),{label:d,children:f,value:h,onValueChange:m,filter:v,shouldFilter:x,loop:k,disablePointerSelection:S=!1,vimBindings:E=!0,...P}=e,j=Zn(),_=Zn(),O=Zn(),N=y.useRef(null),C=DR();Ua(()=>{if(h!==void 0){let T=h.trim();r.current.value=T,R.emit()}},[h]),Ua(()=>{C(6,ue)},[]);let R=y.useMemo(()=>({subscribe:T=>(s.current.add(T),()=>s.current.delete(T)),snapshot:()=>r.current,setState:(T,Z,se)=>{var te,ce,ge,_e;if(!Object.is(r.current[T],Z)){if(r.current[T]=Z,T==="search")B(),V(),C(1,Q);else if(T==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let J=document.getElementById(O);J?J.focus():(te=document.getElementById(j))==null||te.focus()}if(C(7,()=>{var J;r.current.selectedItemId=(J=G())==null?void 0:J.id,R.emit()}),se||C(5,ue),((ce=u.current)==null?void 0:ce.value)!==void 0){let J=Z??"";(_e=(ge=u.current).onValueChange)==null||_e.call(ge,J);return}}R.emit()}},emit:()=>{s.current.forEach(T=>T())}}),[]),z=y.useMemo(()=>({value:(T,Z,se)=>{var te;Z!==((te=o.current.get(T))==null?void 0:te.value)&&(o.current.set(T,{value:Z,keywords:se}),r.current.filtered.items.set(T,F(Z,se)),C(2,()=>{V(),R.emit()}))},item:(T,Z)=>(n.current.add(T),Z&&(i.current.has(Z)?i.current.get(Z).add(T):i.current.set(Z,new Set([T]))),C(3,()=>{B(),V(),r.current.value||Q(),R.emit()}),()=>{o.current.delete(T),n.current.delete(T),r.current.filtered.items.delete(T);let se=G();C(4,()=>{B(),(se==null?void 0:se.getAttribute("id"))===T&&Q(),R.emit()})}),group:T=>(i.current.has(T)||i.current.set(T,new Set),()=>{o.current.delete(T),i.current.delete(T)}),filter:()=>u.current.shouldFilter,label:d||e["aria-label"],getDisablePointerSelection:()=>u.current.disablePointerSelection,listId:j,inputId:O,labelId:_,listInnerRef:N}),[]);function F(T,Z){var se,te;let ce=(te=(se=u.current)==null?void 0:se.filter)!=null?te:ER;return T?ce(T,r.current.search,Z):0}function V(){if(!r.current.search||u.current.shouldFilter===!1)return;let T=r.current.filtered.items,Z=[];r.current.filtered.groups.forEach(te=>{let ce=i.current.get(te),ge=0;ce.forEach(_e=>{let J=T.get(_e);ge=Math.max(J,ge)}),Z.push([te,ge])});let se=N.current;le().sort((te,ce)=>{var ge,_e;let J=te.getAttribute("id"),we=ce.getAttribute("id");return((ge=T.get(we))!=null?ge:0)-((_e=T.get(J))!=null?_e:0)}).forEach(te=>{let ce=te.closest(Nm);ce?ce.appendChild(te.parentElement===ce?te:te.closest(`${Nm} > *`)):se.appendChild(te.parentElement===se?te:te.closest(`${Nm} > *`))}),Z.sort((te,ce)=>ce[1]-te[1]).forEach(te=>{var ce;let ge=(ce=N.current)==null?void 0:ce.querySelector(`${ks}[${Fo}="${encodeURIComponent(te[0])}"]`);ge==null||ge.parentElement.appendChild(ge)})}function Q(){let T=le().find(se=>se.getAttribute("aria-disabled")!=="true"),Z=T==null?void 0:T.getAttribute(Fo);R.setState("value",Z||void 0)}function B(){var T,Z,se,te;if(!r.current.search||u.current.shouldFilter===!1){r.current.filtered.count=n.current.size;return}r.current.filtered.groups=new Set;let ce=0;for(let ge of n.current){let _e=(Z=(T=o.current.get(ge))==null?void 0:T.value)!=null?Z:"",J=(te=(se=o.current.get(ge))==null?void 0:se.keywords)!=null?te:[],we=F(_e,J);r.current.filtered.items.set(ge,we),we>0&&ce++}for(let[ge,_e]of i.current)for(let J of _e)if(r.current.filtered.items.get(J)>0){r.current.filtered.groups.add(ge);break}r.current.filtered.count=ce}function ue(){var T,Z,se;let te=G();te&&(((T=te.parentElement)==null?void 0:T.firstChild)===te&&((se=(Z=te.closest(ks))==null?void 0:Z.querySelector(kR))==null||se.scrollIntoView({block:"nearest"})),te.scrollIntoView({block:"nearest"}))}function G(){var T;return(T=N.current)==null?void 0:T.querySelector(`${bA}[aria-selected="true"]`)}function le(){var T;return Array.from(((T=N.current)==null?void 0:T.querySelectorAll(cw))||[])}function fe(T){let Z=le()[T];Z&&R.setState("value",Z.getAttribute(Fo))}function de(T){var Z;let se=G(),te=le(),ce=te.findIndex(_e=>_e===se),ge=te[ce+T];(Z=u.current)!=null&&Z.loop&&(ge=ce+T<0?te[te.length-1]:ce+T===te.length?te[0]:te[ce+T]),ge&&R.setState("value",ge.getAttribute(Fo))}function Y(T){let Z=G(),se=Z==null?void 0:Z.closest(ks),te;for(;se&&!te;)se=T>0?MR(se,ks):TR(se,ks),te=se==null?void 0:se.querySelector(cw);te?R.setState("value",te.getAttribute(Fo)):de(T)}let ae=()=>fe(le().length-1),X=T=>{T.preventDefault(),T.metaKey?ae():T.altKey?Y(1):de(1)},M=T=>{T.preventDefault(),T.metaKey?fe(0):T.altKey?Y(-1):de(-1)};return y.createElement(Wt.div,{ref:t,tabIndex:-1,...P,"cmdk-root":"",onKeyDown:T=>{var Z;(Z=P.onKeyDown)==null||Z.call(P,T);let se=T.nativeEvent.isComposing||T.keyCode===229;if(!(T.defaultPrevented||se))switch(T.key){case"n":case"j":{E&&T.ctrlKey&&X(T);break}case"ArrowDown":{X(T);break}case"p":case"k":{E&&T.ctrlKey&&M(T);break}case"ArrowUp":{M(T);break}case"Home":{T.preventDefault(),fe(0);break}case"End":{T.preventDefault(),ae();break}case"Enter":{T.preventDefault();let te=G();if(te){let ce=new Event(Iv);te.dispatchEvent(ce)}}}}},y.createElement("label",{"cmdk-label":"",htmlFor:z.inputId,id:z.labelId,style:$R},d),Rf(e,T=>y.createElement(SA.Provider,{value:R},y.createElement(wA.Provider,{value:z},T))))}),PR=y.forwardRef((e,t)=>{var r,n;let i=Zn(),o=y.useRef(null),s=y.useContext(kA),u=wu(),d=PA(e),f=(n=(r=d.current)==null?void 0:r.forceMount)!=null?n:s==null?void 0:s.forceMount;Ua(()=>{if(!f)return u.item(i,s==null?void 0:s.id)},[f]);let h=AA(i,o,[e.value,e.children,o],e.keywords),m=Yg(),v=Ji(C=>C.value&&C.value===h.current),x=Ji(C=>f||u.filter()===!1?!0:C.search?C.filtered.items.get(i)>0:!0);y.useEffect(()=>{let C=o.current;if(!(!C||e.disabled))return C.addEventListener(Iv,k),()=>C.removeEventListener(Iv,k)},[x,e.onSelect,e.disabled]);function k(){var C,R;S(),(R=(C=d.current).onSelect)==null||R.call(C,h.current)}function S(){m.setState("value",h.current,!0)}if(!x)return null;let{disabled:E,value:P,onSelect:j,forceMount:_,keywords:O,...N}=e;return y.createElement(Wt.div,{ref:fl(o,t),...N,id:i,"cmdk-item":"",role:"option","aria-disabled":!!E,"aria-selected":!!v,"data-disabled":!!E,"data-selected":!!v,onPointerMove:E||u.getDisablePointerSelection()?void 0:S,onClick:E?void 0:k},e.children)}),AR=y.forwardRef((e,t)=>{let{heading:r,children:n,forceMount:i,...o}=e,s=Zn(),u=y.useRef(null),d=y.useRef(null),f=Zn(),h=wu(),m=Ji(x=>i||h.filter()===!1?!0:x.search?x.filtered.groups.has(s):!0);Ua(()=>h.group(s),[]),AA(s,u,[e.value,e.heading,d]);let v=y.useMemo(()=>({id:s,forceMount:i}),[i]);return y.createElement(Wt.div,{ref:fl(u,t),...o,"cmdk-group":"",role:"presentation",hidden:m?void 0:!0},r&&y.createElement("div",{ref:d,"cmdk-group-heading":"","aria-hidden":!0,id:f},r),Rf(e,x=>y.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?f:void 0},y.createElement(kA.Provider,{value:v},x))))}),OR=y.forwardRef((e,t)=>{let{alwaysRender:r,...n}=e,i=y.useRef(null),o=Ji(s=>!s.search);return!r&&!o?null:y.createElement(Wt.div,{ref:fl(i,t),...n,"cmdk-separator":"",role:"separator"})}),CR=y.forwardRef((e,t)=>{let{onValueChange:r,...n}=e,i=e.value!=null,o=Yg(),s=Ji(f=>f.search),u=Ji(f=>f.selectedItemId),d=wu();return y.useEffect(()=>{e.value!=null&&o.setState("search",e.value)},[e.value]),y.createElement(Wt.input,{ref:t,...n,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":d.listId,"aria-labelledby":d.labelId,"aria-activedescendant":u,id:d.inputId,type:"text",value:i?e.value:s,onChange:f=>{i||o.setState("search",f.target.value),r==null||r(f.target.value)}})}),jR=y.forwardRef((e,t)=>{let{children:r,label:n="Suggestions",...i}=e,o=y.useRef(null),s=y.useRef(null),u=Ji(f=>f.selectedItemId),d=wu();return y.useEffect(()=>{if(s.current&&o.current){let f=s.current,h=o.current,m,v=new ResizeObserver(()=>{m=requestAnimationFrame(()=>{let x=f.offsetHeight;h.style.setProperty("--cmdk-list-height",x.toFixed(1)+"px")})});return v.observe(f),()=>{cancelAnimationFrame(m),v.unobserve(f)}}},[]),y.createElement(Wt.div,{ref:fl(o,t),...i,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":u,"aria-label":n,id:d.listId},Rf(e,f=>y.createElement("div",{ref:fl(s,d.listInnerRef),"cmdk-list-sizer":""},f)))}),_R=y.forwardRef((e,t)=>{let{open:r,onOpenChange:n,overlayClassName:i,contentClassName:o,container:s,...u}=e;return y.createElement(cA,{open:r,onOpenChange:n},y.createElement(hA,{container:s},y.createElement(pA,{"cmdk-overlay":"",className:i}),y.createElement(mA,{"aria-label":e.label,"cmdk-dialog":"",className:o},y.createElement(EA,{ref:t,...u}))))}),NR=y.forwardRef((e,t)=>Ji(r=>r.filtered.count===0)?y.createElement(Wt.div,{ref:t,...e,"cmdk-empty":"",role:"presentation"}):null),IR=y.forwardRef((e,t)=>{let{progress:r,children:n,label:i="Loading...",...o}=e;return y.createElement(Wt.div,{ref:t,...o,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},Rf(e,s=>y.createElement("div",{"aria-hidden":!0},s)))}),_o=Object.assign(EA,{List:jR,Item:PR,Input:CR,Group:AR,Separator:OR,Dialog:_R,Empty:NR,Loading:IR});function MR(e,t){let r=e.nextElementSibling;for(;r;){if(r.matches(t))return r;r=r.nextElementSibling}}function TR(e,t){let r=e.previousElementSibling;for(;r;){if(r.matches(t))return r;r=r.previousElementSibling}}function PA(e){let t=y.useRef(e);return Ua(()=>{t.current=e}),t}var Ua=typeof window>"u"?y.useEffect:y.useLayoutEffect;function Bo(e){let t=y.useRef();return t.current===void 0&&(t.current=e()),t}function Ji(e){let t=Yg(),r=()=>e(t.snapshot());return y.useSyncExternalStore(t.subscribe,r,r)}function AA(e,t,r,n=[]){let i=y.useRef(),o=wu();return Ua(()=>{var s;let u=(()=>{var f;for(let h of r){if(typeof h=="string")return h.trim();if(typeof h=="object"&&"current"in h)return h.current?(f=h.current.textContent)==null?void 0:f.trim():i.current}})(),d=n.map(f=>f.trim());o.value(e,u,d),(s=t.current)==null||s.setAttribute(Fo,u),i.current=u}),i}var DR=()=>{let[e,t]=y.useState(),r=Bo(()=>new Map);return Ua(()=>{r.current.forEach(n=>n()),r.current=new Map},[e]),(n,i)=>{r.current.set(n,i),t({})}};function RR(e){let t=e.type;return typeof t=="function"?t(e.props):"render"in t?t.render(e.props):e}function Rf({asChild:e,children:t},r){return e&&y.isValidElement(t)?y.cloneElement(RR(t),{ref:t.ref},r(t.props.children)):r(t)}var $R={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function LR({onNavigate:e}){const[t,r]=y.useState(!1);return y.useEffect(()=>{const n=i=>{(i.metaKey||i.ctrlKey)&&i.key.toLowerCase()==="k"&&(i.preventDefault(),r(o=>!o))};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[]),b.jsx(_o.Dialog,{open:t,onOpenChange:r,label:"Befehlspalette",className:"fixed inset-0 z-50 flex items-start justify-center bg-black/50 p-4 pt-[12vh] overscroll-contain",onClick:()=>r(!1),children:b.jsxs("div",{className:"w-full max-w-lg overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-2xl",onClick:n=>n.stopPropagation(),children:[b.jsx(_o.Input,{autoFocus:!0,placeholder:"Springe zu… (Modelle, Routing, System …)",className:"w-full border-b border-border bg-transparent px-4 py-3 text-sm outline-none placeholder:text-muted-foreground"}),b.jsxs(_o.List,{className:"max-h-80 overflow-y-auto p-2",children:[b.jsx(_o.Empty,{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"Nichts gefunden."}),b.jsx(_o.Group,{heading:"Bereiche",className:"px-1 py-1 text-xs text-muted-foreground",children:qo.map(n=>b.jsxs(_o.Item,{value:`${n.label} ${n.hint}`,onSelect:()=>{e(n.id),r(!1)},className:"flex cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm text-foreground aria-selected:bg-accent aria-selected:text-accent-foreground",children:[b.jsx(n.icon,{className:"h-4 w-4 text-primary"}),b.jsx("span",{children:n.label}),b.jsx("span",{className:"ml-auto truncate text-xs text-muted-foreground",children:n.hint})]},n.id))})]})]})})}const OA="mc_expert_mode",Mv="mc-expert-mode-change",zR=()=>{try{return localStorage.getItem(OA)==="true"}catch{return!1}};function FR(e){return window.addEventListener(Mv,e),window.addEventListener("storage",e),()=>{window.removeEventListener(Mv,e),window.removeEventListener("storage",e)}}function dw(e){localStorage.setItem(OA,String(e)),window.dispatchEvent(new Event(Mv))}function BR(){return y.useSyncExternalStore(FR,zR,()=>!1)}function CA(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t{const t=HR(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:n}=e;return{getClassGroupId:s=>{const u=s.split(Qg);return u[0]===""&&u.length!==1&&u.shift(),jA(u,t)||WR(s)},getConflictingClassGroupIds:(s,u)=>{const d=r[s]||[];return u&&n[s]?[...d,...n[s]]:d}}},jA=(e,t)=>{var s;if(e.length===0)return t.classGroupId;const r=e[0],n=t.nextPart.get(r),i=n?jA(e.slice(1),n):void 0;if(i)return i;if(t.validators.length===0)return;const o=e.join(Qg);return(s=t.validators.find(({validator:u})=>u(o)))==null?void 0:s.classGroupId},fw=/^\[(.+)\]$/,WR=e=>{if(fw.test(e)){const t=fw.exec(e)[1],r=t==null?void 0:t.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},HR=e=>{const{theme:t,prefix:r}=e,n={nextPart:new Map,validators:[]};return VR(Object.entries(e.classGroups),r).forEach(([o,s])=>{Tv(s,n,o,t)}),n},Tv=(e,t,r,n)=>{e.forEach(i=>{if(typeof i=="string"){const o=i===""?t:hw(t,i);o.classGroupId=r;return}if(typeof i=="function"){if(KR(i)){Tv(i(n),t,r,n);return}t.validators.push({validator:i,classGroupId:r});return}Object.entries(i).forEach(([o,s])=>{Tv(s,hw(t,o),r,n)})})},hw=(e,t)=>{let r=e;return t.split(Qg).forEach(n=>{r.nextPart.has(n)||r.nextPart.set(n,{nextPart:new Map,validators:[]}),r=r.nextPart.get(n)}),r},KR=e=>e.isThemeGetter,VR=(e,t)=>t?e.map(([r,n])=>{const i=n.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([s,u])=>[t+s,u])):o);return[r,i]}):e,qR=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,n=new Map;const i=(o,s)=>{r.set(o,s),t++,t>e&&(t=0,n=r,r=new Map)};return{get(o){let s=r.get(o);if(s!==void 0)return s;if((s=n.get(o))!==void 0)return i(o,s),s},set(o,s){r.has(o)?r.set(o,s):i(o,s)}}},_A="!",GR=e=>{const{separator:t,experimentalParseClassName:r}=e,n=t.length===1,i=t[0],o=t.length,s=u=>{const d=[];let f=0,h=0,m;for(let E=0;Eh?m-h:void 0;return{modifiers:d,hasImportantModifier:x,baseClassName:k,maybePostfixModifierPosition:S}};return r?u=>r({className:u,parseClassName:s}):s},YR=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(n=>{n[0]==="["?(t.push(...r.sort(),n),r=[]):r.push(n)}),t.push(...r.sort()),t},QR=e=>({cache:qR(e.cacheSize),parseClassName:GR(e),...UR(e)}),XR=/\s+/,ZR=(e,t)=>{const{parseClassName:r,getClassGroupId:n,getConflictingClassGroupIds:i}=t,o=[],s=e.trim().split(XR);let u="";for(let d=s.length-1;d>=0;d-=1){const f=s[d],{modifiers:h,hasImportantModifier:m,baseClassName:v,maybePostfixModifierPosition:x}=r(f);let k=!!x,S=n(k?v.substring(0,x):v);if(!S){if(!k){u=f+(u.length>0?" "+u:u);continue}if(S=n(v),!S){u=f+(u.length>0?" "+u:u);continue}k=!1}const E=YR(h).join(":"),P=m?E+_A:E,j=P+S;if(o.includes(j))continue;o.push(j);const _=i(S,k);for(let O=0;O<_.length;++O){const N=_[O];o.push(P+N)}u=f+(u.length>0?" "+u:u)}return u};function JR(){let e=0,t,r,n="";for(;e{if(typeof e=="string")return e;let t,r="";for(let n=0;nm(h),e());return r=QR(f),n=r.cache.get,i=r.cache.set,o=u,u(d)}function u(d){const f=n(d);if(f)return f;const h=ZR(d,r);return i(d,h),h}return function(){return o(JR.apply(null,arguments))}}const tt=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},IA=/^\[(?:([a-z-]+):)?(.+)\]$/i,t3=/^\d+\/\d+$/,r3=new Set(["px","full","screen"]),n3=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,i3=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,a3=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,o3=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,l3=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Wn=e=>Yo(e)||r3.has(e)||t3.test(e),Ii=e=>El(e,"length",m3),Yo=e=>!!e&&!Number.isNaN(Number(e)),Im=e=>El(e,"number",Yo),Es=e=>!!e&&Number.isInteger(Number(e)),s3=e=>e.endsWith("%")&&Yo(e.slice(0,-1)),Te=e=>IA.test(e),Mi=e=>n3.test(e),u3=new Set(["length","size","percentage"]),c3=e=>El(e,u3,MA),d3=e=>El(e,"position",MA),f3=new Set(["image","url"]),h3=e=>El(e,f3,g3),p3=e=>El(e,"",v3),Ps=()=>!0,El=(e,t,r)=>{const n=IA.exec(e);return n?n[1]?typeof t=="string"?n[1]===t:t.has(n[1]):r(n[2]):!1},m3=e=>i3.test(e)&&!a3.test(e),MA=()=>!1,v3=e=>o3.test(e),g3=e=>l3.test(e),y3=()=>{const e=tt("colors"),t=tt("spacing"),r=tt("blur"),n=tt("brightness"),i=tt("borderColor"),o=tt("borderRadius"),s=tt("borderSpacing"),u=tt("borderWidth"),d=tt("contrast"),f=tt("grayscale"),h=tt("hueRotate"),m=tt("invert"),v=tt("gap"),x=tt("gradientColorStops"),k=tt("gradientColorStopPositions"),S=tt("inset"),E=tt("margin"),P=tt("opacity"),j=tt("padding"),_=tt("saturate"),O=tt("scale"),N=tt("sepia"),C=tt("skew"),R=tt("space"),z=tt("translate"),F=()=>["auto","contain","none"],V=()=>["auto","hidden","clip","visible","scroll"],Q=()=>["auto",Te,t],B=()=>[Te,t],ue=()=>["",Wn,Ii],G=()=>["auto",Yo,Te],le=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],fe=()=>["solid","dashed","dotted","double","none"],de=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],ae=()=>["","0",Te],X=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[Yo,Te];return{cacheSize:500,separator:":",theme:{colors:[Ps],spacing:[Wn,Ii],blur:["none","",Mi,Te],brightness:M(),borderColor:[e],borderRadius:["none","","full",Mi,Te],borderSpacing:B(),borderWidth:ue(),contrast:M(),grayscale:ae(),hueRotate:M(),invert:ae(),gap:B(),gradientColorStops:[e],gradientColorStopPositions:[s3,Ii],inset:Q(),margin:Q(),opacity:M(),padding:B(),saturate:M(),scale:M(),sepia:ae(),skew:M(),space:B(),translate:B()},classGroups:{aspect:[{aspect:["auto","square","video",Te]}],container:["container"],columns:[{columns:[Mi]}],"break-after":[{"break-after":X()}],"break-before":[{"break-before":X()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...le(),Te]}],overflow:[{overflow:V()}],"overflow-x":[{"overflow-x":V()}],"overflow-y":[{"overflow-y":V()}],overscroll:[{overscroll:F()}],"overscroll-x":[{"overscroll-x":F()}],"overscroll-y":[{"overscroll-y":F()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[S]}],"inset-x":[{"inset-x":[S]}],"inset-y":[{"inset-y":[S]}],start:[{start:[S]}],end:[{end:[S]}],top:[{top:[S]}],right:[{right:[S]}],bottom:[{bottom:[S]}],left:[{left:[S]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Es,Te]}],basis:[{basis:Q()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Te]}],grow:[{grow:ae()}],shrink:[{shrink:ae()}],order:[{order:["first","last","none",Es,Te]}],"grid-cols":[{"grid-cols":[Ps]}],"col-start-end":[{col:["auto",{span:["full",Es,Te]},Te]}],"col-start":[{"col-start":G()}],"col-end":[{"col-end":G()}],"grid-rows":[{"grid-rows":[Ps]}],"row-start-end":[{row:["auto",{span:[Es,Te]},Te]}],"row-start":[{"row-start":G()}],"row-end":[{"row-end":G()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Te]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Te]}],gap:[{gap:[v]}],"gap-x":[{"gap-x":[v]}],"gap-y":[{"gap-y":[v]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[j]}],px:[{px:[j]}],py:[{py:[j]}],ps:[{ps:[j]}],pe:[{pe:[j]}],pt:[{pt:[j]}],pr:[{pr:[j]}],pb:[{pb:[j]}],pl:[{pl:[j]}],m:[{m:[E]}],mx:[{mx:[E]}],my:[{my:[E]}],ms:[{ms:[E]}],me:[{me:[E]}],mt:[{mt:[E]}],mr:[{mr:[E]}],mb:[{mb:[E]}],ml:[{ml:[E]}],"space-x":[{"space-x":[R]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[R]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Te,t]}],"min-w":[{"min-w":[Te,t,"min","max","fit"]}],"max-w":[{"max-w":[Te,t,"none","full","min","max","fit","prose",{screen:[Mi]},Mi]}],h:[{h:[Te,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Te,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Te,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Te,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Mi,Ii]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Im]}],"font-family":[{font:[Ps]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Te]}],"line-clamp":[{"line-clamp":["none",Yo,Im]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Wn,Te]}],"list-image":[{"list-image":["none",Te]}],"list-style-type":[{list:["none","disc","decimal",Te]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[P]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[P]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...fe(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Wn,Ii]}],"underline-offset":[{"underline-offset":["auto",Wn,Te]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:B()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Te]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Te]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[P]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...le(),d3]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",c3]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},h3]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[k]}],"gradient-via-pos":[{via:[k]}],"gradient-to-pos":[{to:[k]}],"gradient-from":[{from:[x]}],"gradient-via":[{via:[x]}],"gradient-to":[{to:[x]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[u]}],"border-w-x":[{"border-x":[u]}],"border-w-y":[{"border-y":[u]}],"border-w-s":[{"border-s":[u]}],"border-w-e":[{"border-e":[u]}],"border-w-t":[{"border-t":[u]}],"border-w-r":[{"border-r":[u]}],"border-w-b":[{"border-b":[u]}],"border-w-l":[{"border-l":[u]}],"border-opacity":[{"border-opacity":[P]}],"border-style":[{border:[...fe(),"hidden"]}],"divide-x":[{"divide-x":[u]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[u]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[P]}],"divide-style":[{divide:fe()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...fe()]}],"outline-offset":[{"outline-offset":[Wn,Te]}],"outline-w":[{outline:[Wn,Ii]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:ue()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[P]}],"ring-offset-w":[{"ring-offset":[Wn,Ii]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Mi,p3]}],"shadow-color":[{shadow:[Ps]}],opacity:[{opacity:[P]}],"mix-blend":[{"mix-blend":[...de(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":de()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[n]}],contrast:[{contrast:[d]}],"drop-shadow":[{"drop-shadow":["","none",Mi,Te]}],grayscale:[{grayscale:[f]}],"hue-rotate":[{"hue-rotate":[h]}],invert:[{invert:[m]}],saturate:[{saturate:[_]}],sepia:[{sepia:[N]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[n]}],"backdrop-contrast":[{"backdrop-contrast":[d]}],"backdrop-grayscale":[{"backdrop-grayscale":[f]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[h]}],"backdrop-invert":[{"backdrop-invert":[m]}],"backdrop-opacity":[{"backdrop-opacity":[P]}],"backdrop-saturate":[{"backdrop-saturate":[_]}],"backdrop-sepia":[{"backdrop-sepia":[N]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Te]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",Te]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",Te]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[O]}],"scale-x":[{"scale-x":[O]}],"scale-y":[{"scale-y":[O]}],rotate:[{rotate:[Es,Te]}],"translate-x":[{"translate-x":[z]}],"translate-y":[{"translate-y":[z]}],"skew-x":[{"skew-x":[C]}],"skew-y":[{"skew-y":[C]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Te]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Te]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":B()}],"scroll-mx":[{"scroll-mx":B()}],"scroll-my":[{"scroll-my":B()}],"scroll-ms":[{"scroll-ms":B()}],"scroll-me":[{"scroll-me":B()}],"scroll-mt":[{"scroll-mt":B()}],"scroll-mr":[{"scroll-mr":B()}],"scroll-mb":[{"scroll-mb":B()}],"scroll-ml":[{"scroll-ml":B()}],"scroll-p":[{"scroll-p":B()}],"scroll-px":[{"scroll-px":B()}],"scroll-py":[{"scroll-py":B()}],"scroll-ps":[{"scroll-ps":B()}],"scroll-pe":[{"scroll-pe":B()}],"scroll-pt":[{"scroll-pt":B()}],"scroll-pr":[{"scroll-pr":B()}],"scroll-pb":[{"scroll-pb":B()}],"scroll-pl":[{"scroll-pl":B()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Te]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Wn,Ii,Im]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},x3=e3(y3);function Re(...e){return x3(Xe(e))}function BQ(e){return e?e.replace(/127\.0\.0\.1|localhost/g,"192.168.178.151"):""}function b3(){const e=BR();return b.jsxs("div",{className:"flex items-center rounded-md border border-border/40 bg-background/40 p-0.5",role:"group","aria-label":"Ansichtsmodus",title:"Einfach zeigt nur das Wichtigste. Experte zeigt alle technischen Details.",children:[b.jsxs("button",{onClick:()=>dw(!1),"aria-pressed":!e,className:Re("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",e?"text-muted-foreground hover:text-foreground":"bg-primary/15 text-primary shadow-sm"),children:[b.jsx(VP,{className:"h-3.5 w-3.5"})," Einfach"]}),b.jsxs("button",{onClick:()=>dw(!0),"aria-pressed":e,className:Re("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",e?"bg-primary/15 text-primary shadow-sm":"text-muted-foreground hover:text-foreground"),children:[b.jsx(AT,{className:"h-3.5 w-3.5"})," Experte"]})]})}async function Me(e,t){var d;const r={"Content-Type":"application/json",...t==null?void 0:t.headers},n=((d=t==null?void 0:t.method)==null?void 0:d.toUpperCase())||"GET",i=n==="GET"?null:localStorage.getItem("mc_sudo_password"),o=n==="GET"?null:localStorage.getItem("mc_hf_token");i&&(r["X-Sudo-Password"]=i);let s=t==null?void 0:t.body;if(n==="POST"){if(typeof s=="string")try{const f=JSON.parse(s);let h=!1;i&&!("sudo_password"in f)&&(f.sudo_password=i,h=!0),o&&!("hf_token"in f)&&(f.hf_token=o,h=!0),h&&(s=JSON.stringify(f))}catch{}else if(!s){const f={};i&&(f.sudo_password=i),o&&(f.hf_token=o),Object.keys(f).length>0&&(s=JSON.stringify(f))}}const u=await fetch(e,{...t,headers:r,body:s});if(!u.ok)throw new Error(`${u.status} ${u.statusText}`);return u.json()}const UQ=(e,t,r=!1,n=!0)=>Me("/api/groups",{method:"PUT",body:JSON.stringify({group:e,members:t,swap:r,persist:n})}),WQ=e=>Me("/api/routing/policy",{method:"PUT",body:JSON.stringify(e)});function w3({type:e,title:t,message:r,defaultValue:n,autoValue:i,autoLabel:o,onConfirm:s,onCancel:u}){const d=y.useRef(null);return b.jsx("div",{className:"fixed inset-0 z-[99] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":t,children:b.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[b.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:t}),b.jsx("button",{onClick:u||(()=>s()),"aria-label":"Schließen",className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:b.jsx(bu,{className:"h-4 w-4","aria-hidden":"true"})})]}),b.jsx("p",{className:"max-h-72 overflow-y-auto whitespace-pre-line text-xs text-muted-foreground leading-relaxed scrollbar-thin",children:r}),e==="prompt"&&b.jsxs("div",{className:"flex gap-2",children:[b.jsx("input",{ref:d,type:"text",defaultValue:n,"aria-label":t,className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground",autoFocus:!0,onKeyDown:f=>{var h;f.key==="Enter"&&s((h=d.current)==null?void 0:h.value)}}),i!==void 0&&b.jsx("button",{type:"button",onClick:()=>{d.current&&(d.current.value=i)},title:"Setup-bewussten Optimalwert eintragen",className:"h-9 px-3 shrink-0 text-xs font-semibold text-primary border border-primary/50 bg-primary/10 hover:bg-primary/20 rounded-lg transition-colors cursor-pointer",children:o||"Auto"})]}),b.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[(e==="confirm"||e==="prompt")&&b.jsx("button",{onClick:u,className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-muted-foreground border border-border/60 bg-background/20 hover:bg-accent rounded-lg transition-colors cursor-pointer",children:"Abbrechen"}),b.jsx("button",{onClick:()=>{var h;const f=e==="prompt"?(h=d.current)==null?void 0:h.value:void 0;s(f)},className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/95 rounded-lg transition-colors cursor-pointer",children:e==="confirm"?"Ja, fortfahren":e==="prompt"?"Übernehmen":"OK"})]})]})})}function Xg(){const[e,t]=y.useState(null),r=y.useCallback(()=>t(null),[]),n=y.useCallback((u,d,f)=>{t({type:"alert",title:u,message:d,onConfirm:()=>{t(null),f==null||f()}})},[]),i=y.useCallback((u,d,f,h)=>{t({type:"confirm",title:u,message:d,onConfirm:()=>{t(null),f()},onCancel:()=>{t(null),h==null||h()}})},[]),o=y.useCallback((u,d,f,h,m,v)=>{t({type:"prompt",title:u,message:d,defaultValue:f,autoValue:v==null?void 0:v.autoValue,autoLabel:v==null?void 0:v.autoLabel,onConfirm:x=>{t(null),h(x)},onCancel:()=>{t(null),m==null||m()}})},[]),s=e?b.jsx(w3,{...e}):null;return{showAlert:n,showConfirm:i,showPrompt:o,close:r,dialogElement:s}}let Sd=!1;const S3=()=>Sd;function k3(){const e=xu();y.useEffect(()=>{const t=new EventSource("/api/events");return t.onopen=()=>{Sd=!0},t.onerror=()=>{Sd=!1},t.addEventListener("invalidate",r=>{var n;try{const i=((n=JSON.parse(r.data))==null?void 0:n.keys)??[];for(const o of i)e.invalidateQueries({queryKey:[o]})}catch{}}),()=>{Sd=!1,t.close()}},[e])}const De={health:["health"],systemStatus:["system-status"],services:["services"],models:["models"],groups:["groups"],routing:["routing"],routingPolicy:["routing-policy"],jobs:["jobs"],tokenStats:["token-stats"],agentStatus:["agent-status"],hermesBrain:["hermes-brain"],updates:["updates"],discover:["discover"],drafts:e=>["drafts",e??""],connect:e=>["connect",e??""],connectHealth:["connect-health"],memory:(e,t)=>["memory",e??"",t??""],memoryGraph:["memory-graph"],voiceTrace:["voice-trace"],auftragsbuch:["auftragsbuch"],ideen:["ideen"],chronik:["chronik"],governor:["governor"],eigenleben:["eigenleben"],wissen:["wissen"],zeitmaschine:["zeitmaschine"],reminders:["reminders"]},Zt={graph:3e3,schnell:8e3,normal:1e4,gemuetlich:3e4,traege:6e4},Su=e=>()=>S3()?e*5:e,E3=(e=Zt.schnell)=>Ye({queryKey:De.auftragsbuch,queryFn:()=>Me("/api/auftragsbuch"),refetchInterval:Su(e)}),P3=(e=Zt.gemuetlich)=>Ye({queryKey:De.ideen,queryFn:()=>Me("/api/ideen"),refetchInterval:Su(e)}),HQ=(e,t=!1)=>Ye({queryKey:["ideen-log",e],queryFn:()=>Me(`/api/ideen/${e}/log`),enabled:t,refetchInterval:4e3,staleTime:0}),A3=(e=150,t=Zt.gemuetlich)=>Ye({queryKey:[...De.chronik,e],queryFn:()=>Me(`/api/chronik?limit=${e}`),refetchInterval:Su(t),select:r=>r.items??[]}),KQ=()=>Ye({queryKey:De.wissen,queryFn:()=>Me("/api/wissen")}),VQ=(e=Zt.traege)=>Ye({queryKey:De.eigenleben,queryFn:()=>Me("/api/eigenleben"),refetchInterval:e}),O3=(e=Zt.traege,t=!0)=>Ye({queryKey:De.zeitmaschine,queryFn:()=>Me("/api/zeitmaschine"),refetchInterval:e,enabled:t}),C3=(e=Zt.traege)=>Ye({queryKey:De.reminders,queryFn:()=>Me("/api/reminders"),refetchInterval:Su(e),select:t=>t.items??[]}),j3=(e=12,t=Zt.schnell)=>Ye({queryKey:De.voiceTrace,queryFn:()=>Me(`/api/voice/trace?limit=${e}`),refetchInterval:t,select:r=>r.turns??[]}),qQ=(e=!0)=>Ye({queryKey:De.memoryGraph,queryFn:()=>Me("/api/memory/graph"),enabled:e}),TA=()=>Ye({queryKey:De.health,queryFn:()=>Me("/api/health"),refetchInterval:Zt.normal}),$f=(e=Zt.graph)=>Ye({queryKey:De.systemStatus,queryFn:()=>Me("/api/system/status"),refetchInterval:e}),DA=(e,t=!0)=>Ye({queryKey:["metrics-history",e],queryFn:()=>Me(`/api/system/history?minutes=${e}`),enabled:t,refetchInterval:6e4}),Zg=(e=Zt.normal)=>Ye({queryKey:De.services,queryFn:()=>Me("/api/system/services"),refetchInterval:e}),RA=(e=Zt.schnell)=>Ye({queryKey:De.models,queryFn:()=>Me("/api/models"),refetchInterval:Su(e)}),GQ=(e=Zt.normal)=>Ye({queryKey:De.groups,queryFn:()=>Me("/api/groups"),refetchInterval:e}),YQ=()=>Ye({queryKey:De.routingPolicy,queryFn:()=>Me("/api/routing/policy")}),_3=(e=3e3,t=!0)=>Ye({queryKey:De.jobs,queryFn:()=>Me("/api/jobs"),refetchInterval:e,enabled:t,select:r=>r.jobs??[]}),$A=(e=Zt.graph)=>Ye({queryKey:De.tokenStats,queryFn:()=>Me("/api/system/token-stats"),refetchInterval:e}),N3=(e=Zt.normal)=>Ye({queryKey:De.agentStatus,queryFn:()=>Me("/api/agent/status"),refetchInterval:e}),QQ=(e=Zt.traege)=>Ye({queryKey:De.hermesBrain,queryFn:()=>Me("/api/agent/brain"),refetchInterval:e}),LA=(e=Zt.traege)=>Ye({queryKey:De.updates,queryFn:()=>Me("/api/maintenance/updates"),refetchInterval:e}),XQ=()=>Ye({queryKey:De.discover,queryFn:()=>Me("/api/discover")}),ZQ=e=>Ye({queryKey:De.drafts(e),queryFn:()=>Me(`/api/models/drafts?target=${encodeURIComponent(e??"")}`),enabled:!!e}),JQ=e=>Ye({queryKey:De.connect(e),queryFn:()=>Me(e?`/api/connect?${e}`:"/api/connect")}),I3=()=>Ye({queryKey:De.connectHealth,queryFn:()=>Me("/api/connect/health"),refetchInterval:15e3}),M3=e=>Ye({queryKey:De.memory(e==null?void 0:e.q,e==null?void 0:e.category),queryFn:()=>{const t=new URLSearchParams;return e!=null&&e.q&&t.set("q",e.q),e!=null&&e.category&&t.set("category",e.category),Me(`/api/memory?${t}`)},select:t=>e!=null&&e.limit?t.slice(0,e.limit):t});function As(e,...t){for(const r of t)e.invalidateQueries({queryKey:r})}function No(e){return(e/1024**3).toFixed(1)}function Mm(e){return e?e>1024**3?`${(e/1024**3).toFixed(1)} GB`:`${(e/1024**2).toFixed(0)} MB`:""}function eX(e){if(!e)return"—";const t=e/1024**3;return t>=1?`${t.toFixed(1)} GB`:`${(e/1024**2).toFixed(0)} MB`}function tX(e){if(!e)return"";const t=Math.floor(e/60);return t>0?`${t} min`:`${e} s`}function rX(e){return e?`${Math.round(e/1024)}k`:"—"}function nX(e){return e?new Date(e*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"—"}function Os({icon:e,iconClass:t,name:r,status:n,available:i,busy:o,actionLabel:s,onAction:u}){return b.jsxs("div",{className:Re("flex items-center gap-3 rounded-lg border px-3 py-2",i?"border-amber-500/30 bg-amber-500/5":"border-border/50 bg-background/20"),children:[b.jsx(e,{className:Re("h-4 w-4 shrink-0",t)}),b.jsxs("div",{className:"flex-1 min-w-0",children:[b.jsx("div",{className:"text-xs text-foreground truncate",children:r}),b.jsx("div",{className:Re("text-[10px] truncate",i?"text-amber-400/90":"text-muted-foreground"),children:n})]}),b.jsx("button",{onClick:u,disabled:!i||o,className:Re("text-[11px] font-semibold rounded-lg px-2.5 py-1 transition-colors shrink-0",i?"bg-primary text-primary-foreground hover:opacity-90 cursor-pointer":"border border-border/50 text-muted-foreground/40 cursor-default"),children:o?"…":s})]})}function T3({label:e,ok:t,system:r,busy:n,onRestart:i,onLogs:o}){return b.jsxs("div",{className:"flex items-center gap-2.5 rounded-lg border border-border/50 bg-background/20 px-3 py-2",children:[b.jsx("span",{className:Re("w-1.5 h-1.5 rounded-full shrink-0",t===!0?"bg-emerald-500":t===!1?"bg-red-500":"bg-muted-foreground/40")}),b.jsxs("span",{className:"flex-1 text-xs text-foreground truncate",children:[e,r&&b.jsx("span",{className:"text-[9px] text-muted-foreground",children:" (root)"})]}),b.jsx("button",{onClick:i,disabled:n,title:"Neu starten",className:"text-muted-foreground hover:text-primary transition-colors disabled:opacity-50",children:b.jsx(Vo,{className:Re("h-3.5 w-3.5",n&&"animate-spin")})}),b.jsx("button",{onClick:o,title:"Logs ansehen",className:"text-muted-foreground hover:text-primary transition-colors",children:b.jsx(uT,{className:"h-3.5 w-3.5"})})]})}const D3=/\b(error|fehler|fail(ed|ure)?|fatal|critical|crit|panic|traceback|exception|denied|refused|unable|emerg|alert|oom|killed)\b/i,R3=/\b(warn(ing)?|deprecat\w*|retry(ing)?|timeout|timed out|degraded|missing|not found|nicht gefunden)\b/i;function $3(e){return D3.test(e)?"error":R3.test(e)?"warn":"info"}const L3={error:"text-red-400",warn:"text-amber-300",info:"text-cyan-300/80"};function z3({service:e,text:t,loading:r,logStatus:n,onRefresh:i,onOpenSettings:o}){const[s,u]=y.useState(!1),[d,f]=y.useState(""),h=y.useRef(null),m=y.useMemo(()=>t?t.split(` -`).map(E=>({t:E,level:$3(E)})):[],[t]),v=y.useMemo(()=>m.filter(E=>E.level!=="info").length,[m]),x=d.trim().toLowerCase(),k=m.filter(E=>(!s||E.level!=="info")&&(!x||E.t.toLowerCase().includes(x))),S=n==="password_required"||n==="incorrect_password";return b.jsxs("div",{className:"flex-1 flex flex-col min-h-[300px] border border-border/60 bg-black/50 rounded-xl overflow-hidden shadow-inner",children:[b.jsxs("div",{className:"flex h-10 items-center justify-between gap-2 px-3 border-b border-border/40 bg-black/30 shrink-0",children:[b.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground shrink-0",children:[b.jsx(CT,{className:"h-3 w-3 text-primary"}),b.jsx("span",{className:"hidden sm:inline",children:"stdout/stderr —"})," ",e]}),b.jsxs("div",{className:"flex items-center gap-1.5",children:[b.jsxs("div",{className:"relative",children:[b.jsx(ET,{className:"pointer-events-none absolute left-2 top-1/2 h-3 w-3 -translate-y-1/2 text-muted-foreground"}),b.jsx("input",{value:d,onChange:E=>f(E.target.value),placeholder:"filtern…",className:"h-7 w-24 sm:w-36 rounded-md border border-border/50 bg-background/40 pl-6 pr-2 text-[10px] text-foreground outline-none focus:border-primary/50"})]}),b.jsxs("button",{onClick:()=>u(E=>!E),title:"Nur Fehler und Warnungen zeigen",className:Re("flex h-7 items-center gap-1 rounded-md border px-2 text-[10px] font-semibold transition-colors",s?"border-amber-500/50 bg-amber-500/15 text-amber-300":"border-border/50 bg-background/20 text-muted-foreground hover:text-foreground"),children:[b.jsx(Gs,{className:"h-3 w-3"}),"Nur Probleme",v>0?` (${v})`:""]}),b.jsx("button",{onClick:i,disabled:r,title:"Neu laden",className:"flex h-7 w-7 items-center justify-center rounded-md border border-border/50 bg-background/20 text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50",children:b.jsx(Vo,{className:Re("h-3 w-3",r&&"animate-spin")})})]})]}),b.jsx("div",{ref:h,className:"flex-1 overflow-y-auto p-3 text-[10px] font-mono leading-relaxed scrollbar-thin select-text",children:S?b.jsxs("div",{className:"flex h-full flex-col items-center justify-center space-y-3 p-6 text-center",children:[b.jsx(Gs,{className:"h-8 w-8 text-amber-400 animate-pulse animate-duration-1000"}),b.jsx("div",{className:"text-xs font-semibold text-amber-300",children:n==="incorrect_password"?"Falsches Sudo-Passwort hinterlegt.":"Sudo-Passwort für systemd-Dienste erforderlich."}),b.jsxs("p",{className:"max-w-xs text-[10px] leading-normal text-muted-foreground",children:["Für das Auslesen der systemd-Logs von ",e," werden Root-Rechte benötigt. Hinterlege dein Passwort in den Einstellungen."]}),b.jsx("button",{onClick:o,className:"mt-2 rounded-md bg-primary px-3 py-1.5 text-[10px] font-semibold text-primary-foreground transition-colors hover:bg-primary/95",children:"Sudo-Passwort eintragen"})]}):r&&!t?b.jsx("span",{className:"text-muted-foreground",children:"Lade Logs…"}):m.length===0?b.jsx("span",{className:"text-muted-foreground",children:"Keine Logeinträge vorhanden."}):k.length===0?b.jsx("span",{className:"text-muted-foreground",children:s?"Keine Fehler oder Warnungen — der Dienst läuft sauber. ✓":"Kein Treffer für den Filter."}):k.map((E,P)=>b.jsx("div",{className:Re("whitespace-pre-wrap",L3[E.level]),children:E.t||" "},P))})]})}function F3({open:e,showAlert:t}){const[r,n]=y.useState(""),[i,o]=y.useState(""),[s,u]=y.useState(!1),[d,f]=y.useState(!1);return y.useEffect(()=>{e&&(n(localStorage.getItem("mc_sudo_password")||""),o(localStorage.getItem("mc_hf_token")||""))},[e]),b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"space-y-2",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Zugangsdaten & Schlüssel"}),b.jsx("p",{className:"text-[10px] text-muted-foreground leading-normal",children:"Diese Daten werden ausschließlich lokal in deinem Browser (localStorage) gespeichert und bei Bedarf an das Backend übertragen."})]}),b.jsxs("div",{className:"space-y-2",children:[b.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[b.jsx(Kg,{className:"h-4 w-4 text-amber-400"}),"Host Sudo-Passwort"]}),b.jsxs("div",{className:"relative",children:[b.jsx("input",{type:s?"text":"password",value:r,onChange:h=>n(h.target.value),"aria-label":"Host Sudo-Passwort",name:"sudo-password",autoComplete:"off",spellCheck:!1,placeholder:"Sudo-Passwort für System-Operationen",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),b.jsx("button",{type:"button",onClick:()=>u(!s),"aria-label":s?"Passwort verbergen":"Passwort anzeigen",className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:s?b.jsx(H1,{className:"h-4 w-4","aria-hidden":"true"}):b.jsx(Cv,{className:"h-4 w-4","aria-hidden":"true"})})]}),b.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Wird benötigt für systemd-Dienste (Llama Swap logs/restart), OS-Update (apt) und Reboot."})]}),b.jsxs("div",{className:"space-y-2",children:[b.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[b.jsx(mT,{className:"h-4 w-4 text-violet-400"}),"HuggingFace API Token"]}),b.jsxs("div",{className:"relative",children:[b.jsx("input",{type:d?"text":"password",value:i,onChange:h=>o(h.target.value),"aria-label":"HuggingFace API Token",name:"hf-token",autoComplete:"off",spellCheck:!1,placeholder:"hf_…",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),b.jsx("button",{type:"button",onClick:()=>f(!d),"aria-label":d?"Token verbergen":"Token anzeigen",className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:d?b.jsx(H1,{className:"h-4 w-4","aria-hidden":"true"}):b.jsx(Cv,{className:"h-4 w-4","aria-hidden":"true"})})]}),b.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Erlaubt das Herunterladen von geschützten oder Gate-restricted Modellen direkt über Mission Control."})]}),b.jsxs("div",{className:"flex gap-3 pt-2",children:[b.jsx("button",{onClick:()=>{localStorage.setItem("mc_sudo_password",r),localStorage.setItem("mc_hf_token",i),t("Erfolgreich","Einstellungen erfolgreich lokal gespeichert.")},className:"flex-1 h-9 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/90 rounded-lg transition-colors shadow shadow-primary/10 cursor-pointer",children:"Speichern"}),b.jsx("button",{onClick:()=>{n(""),o(""),localStorage.removeItem("mc_sudo_password"),localStorage.removeItem("mc_hf_token"),t("Gelöscht","Zugangsdaten gelöscht.")},className:"h-9 px-4 flex items-center justify-center text-xs font-semibold text-muted-foreground border border-border/60 bg-background/20 hover:bg-accent rounded-lg transition-colors cursor-pointer",children:"Zurücksetzen"})]})]})}function B3({detail:e,maintenanceJob:t,onClose:r,onApply:n}){var d,f;const i=e.data,o={os:{icon:Kg,cls:"text-cyan-400",title:"OS-Pakete (apt)"},engine:{icon:Nf,cls:"text-violet-400",title:"Inferenz-Engine (llama.cpp)"},swap:{icon:KP,cls:"text-fuchsia-400",title:"Router (llama-swap)"},hermes:{icon:jf,cls:"text-amber-400",title:"Hermes-Agent"}}[e.kind],s=o.icon,u=i?e.kind==="os"?(i.count??0)===0:e.kind==="hermes"?(i.behind??0)===0:i.installed_build!=null&&i.latest_build!=null&&i.latest_build<=i.installed_build:!0;return b.jsxs("div",{className:"fixed inset-0 z-[60] flex items-center justify-center p-4",children:[b.jsx("div",{className:"absolute inset-0 bg-black/70 backdrop-blur-sm",onClick:r}),b.jsxs("div",{className:"relative w-full max-w-lg max-h-[80vh] flex flex-col rounded-2xl border border-border/60 bg-card shadow-2xl font-sans text-foreground",children:[b.jsxs("div",{className:"flex h-14 shrink-0 items-center justify-between border-b border-border/40 px-5",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(s,{className:Re("h-4.5 w-4.5",o.cls)}),b.jsx("h3",{className:"text-sm font-semibold",children:o.title})]}),b.jsx("button",{onClick:r,className:"flex h-7 w-7 items-center justify-center rounded-lg border border-border/40 text-muted-foreground hover:bg-accent transition-colors",children:b.jsx(bu,{className:"h-4 w-4"})})]}),b.jsx("div",{className:"flex-1 overflow-y-auto p-5 text-xs space-y-3 scrollbar-thin",children:e.loading?b.jsxs("div",{className:"flex h-24 items-center justify-center gap-2 text-muted-foreground",children:[b.jsx(Vo,{className:"h-4 w-4 animate-spin"})," Details werden geladen…"]}):i!=null&&i.error?b.jsx("div",{className:"rounded-lg border border-red-500/30 bg-red-500/5 p-3 text-red-400",children:i.error}):b.jsxs(b.Fragment,{children:[(i==null?void 0:i.action_needed)!=null&&b.jsxs("div",{className:Re("flex items-start gap-2 rounded-lg border p-3",i.action_needed?"border-amber-500/40 bg-amber-500/10":"border-emerald-500/40 bg-emerald-500/10"),children:[i.action_needed?b.jsx(Gs,{className:"h-4 w-4 text-amber-400 shrink-0 mt-0.5"}):b.jsx(iT,{className:"h-4 w-4 text-emerald-400 shrink-0 mt-0.5"}),b.jsxs("div",{className:"min-w-0",children:[b.jsxs("div",{className:Re("text-xs font-semibold",i.action_needed?"text-amber-300":"text-emerald-300"),children:["Musst du etwas tun? ",i.action_needed?"Ja":"Nein — die Box regelt das (Fangnetz)"]}),i.action_needed&&i.action_text&&b.jsx("div",{className:"mt-0.5 text-[11px] text-foreground/90",children:i.action_text})]})]}),(i==null?void 0:i.summary)&&b.jsxs("div",{className:"rounded-lg border border-primary/25 bg-primary/5 p-3 space-y-1",children:[b.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-primary",children:"Was dieses Update bedeutet (Zusammenfassung der Box)"}),b.jsx("pre",{className:"whitespace-pre-wrap text-[11px] leading-relaxed text-foreground/90 font-sans",children:i.summary})]}),e.kind==="os"?b.jsxs(b.Fragment,{children:[((i==null?void 0:i.count)??0)===0?b.jsx("div",{className:"text-muted-foreground",children:"Keine Pakete zu aktualisieren — System ist aktuell."}):b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"text-muted-foreground",children:[i.count," Paket(e) werden aktualisiert:"]}),b.jsx("div",{className:"space-y-1",children:i.packages.map(h=>b.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-md border border-border/40 bg-background/30 px-2.5 py-1.5",children:[b.jsxs("span",{className:"flex items-center gap-1.5 font-mono text-[11px] truncate",children:[b.jsx(K1,{className:"h-3 w-3 text-cyan-400 shrink-0"}),h.name]}),b.jsxs("span",{className:"flex items-center gap-1 font-mono text-[10px] text-muted-foreground shrink-0",children:[b.jsx("span",{children:h.current}),b.jsx(W1,{className:"h-3 w-3"}),b.jsx("span",{className:"text-emerald-400",children:h.candidate})]})]},h.name))})]}),(((d=i==null?void 0:i.held_back)==null?void 0:d.length)??0)>0&&b.jsxs("div",{className:"space-y-1.5 rounded-lg border border-border/40 bg-background/20 p-3",children:[b.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground",children:[b.jsx(aT,{className:"h-3.5 w-3.5"})," Vom Hersteller zurückgestellt — kein Handeln nötig"]}),b.jsx("p",{className:"text-[10px] text-muted-foreground leading-normal",children:"Diese Pakete gäbe es bereits, Ubuntu spielt sie aber gestaffelt aus (Phasen-Rollout) bzw. hält sie kurz zurück. Sie kommen bei einem der nächsten automatischen Läufe von selbst — das ist kein Fehler und nichts hängt fest."}),b.jsx("div",{className:"space-y-1",children:i.held_back.map(h=>b.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-md border border-border/30 bg-background/30 px-2.5 py-1.5",children:[b.jsxs("span",{className:"flex items-center gap-1.5 font-mono text-[11px] truncate",children:[b.jsx(K1,{className:"h-3 w-3 text-muted-foreground shrink-0"}),h.name]}),b.jsx("span",{className:"text-[9px] text-muted-foreground shrink-0",children:h.reason==="phasing"?"Phasen-Rollout":"vorerst zurückgehalten"})]},h.name))})]})]}):e.kind==="engine"||e.kind==="swap"?b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"flex items-center gap-2 font-mono text-[11px]",children:[b.jsxs("span",{className:"rounded-md border border-border/40 bg-background/30 px-2 py-1",children:["Build ",(i==null?void 0:i.installed_build)??"?"]}),b.jsx(W1,{className:"h-3.5 w-3.5 text-muted-foreground"}),b.jsxs("span",{className:"rounded-md border border-emerald-500/30 bg-emerald-500/5 px-2 py-1 text-emerald-400",children:["Build ",(i==null?void 0:i.latest_build)??"?"]})]}),((i==null?void 0:i.name)||(i==null?void 0:i.latest_tag))&&b.jsxs("div",{className:"text-muted-foreground",children:["Release: ",b.jsx("span",{className:"text-foreground",children:i==null?void 0:i.name}),i!=null&&i.latest_tag?` (${i.latest_tag})`:""]}),(i==null?void 0:i.url)&&b.jsxs("a",{href:i.url,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 text-primary hover:underline",children:["Original-Release-Notes auf GitHub ",b.jsx(sT,{className:"h-3 w-3"})]}),(i==null?void 0:i.body)&&b.jsxs("details",{className:"group",children:[b.jsx("summary",{className:"cursor-pointer text-[10px] text-muted-foreground hover:text-foreground",children:"Original-Notizen (englisch) anzeigen"}),b.jsx("pre",{className:"mt-1.5 whitespace-pre-wrap rounded-lg border border-border/40 bg-background/30 p-3 text-[10px] leading-relaxed text-muted-foreground max-h-60 overflow-y-auto scrollbar-thin",children:i.body})]})]}):(((f=i==null?void 0:i.commits)==null?void 0:f.length)??0)===0?b.jsx("div",{className:"text-muted-foreground",children:"Keine neuen Commits — Hermes-Agent ist bereits aktuell."}):b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"text-muted-foreground",children:[i.behind," neue Commit(s) auf ",b.jsxs("span",{className:"font-mono text-foreground",children:["origin/",i.branch]}),":"]}),b.jsx("div",{className:"space-y-1",children:i.commits.map(h=>b.jsxs("div",{className:"flex items-start gap-2 rounded-md border border-border/40 bg-background/30 px-2.5 py-1.5",children:[b.jsx(dT,{className:"h-3.5 w-3.5 text-primary shrink-0 mt-0.5"}),b.jsxs("div",{className:"min-w-0",children:[b.jsx("div",{className:"text-[11px] truncate",children:h.subject}),b.jsxs("div",{className:"font-mono text-[9px] text-muted-foreground",children:[h.hash," · ",h.when]})]})]},h.hash))})]}),e.kind!=="os"&&!u&&b.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border/40 bg-background/20 p-2.5",children:[b.jsx(PT,{className:"h-3.5 w-3.5 text-emerald-400 shrink-0 mt-0.5"}),b.jsxs("p",{className:"text-[10px] text-muted-foreground leading-normal",children:["Vor dem Update sichert die Box automatisch den alten Stand. Danach prüft sie den ganzen Stack per echter Anfrage — läuft etwas nicht, rollt sie von selbst zurück",e.kind==="hermes"?" und startet den Gateway neu":"","."]})]})]})}),b.jsxs("div",{className:"flex gap-3 border-t border-border/40 p-4 shrink-0",children:[b.jsx("button",{onClick:r,className:"h-9 flex-1 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold text-muted-foreground hover:bg-accent transition-colors cursor-pointer",children:"Schließen"}),b.jsx("button",{onClick:n,disabled:e.loading||u||!!t,title:t?`Update läuft bereits: ${t.label}`:void 0,className:"h-9 flex-1 rounded-lg bg-primary text-xs font-semibold text-primary-foreground hover:opacity-90 transition-all cursor-pointer disabled:opacity-40 disabled:cursor-default",children:t?"Update läuft…":"Jetzt aktualisieren"})]})]})]})}function U3({open:e,onClose:t,defaultTab:r="maintenance"}){var lr,fi;const n=xu(),{showAlert:i,showConfirm:o,dialogElement:s}=Xg(),{data:u}=LA(),{data:d}=Zg(),f=_3(3e3,e).data??[],{data:h}=O3(void 0,e),[m,v]=y.useState("llama-swap"),[x,k]=y.useState(""),[S,E]=y.useState(!1),[P,j]=y.useState(null),[_,O]=y.useState({}),[N,C]=y.useState("maintenance"),[R,z]=y.useState(!1),[F,V]=y.useState(""),[Q,B]=y.useState(!1),[ue,G]=y.useState(!1),[le,fe]=y.useState(null),de=(d==null?void 0:d.services)??[],Y=()=>As(n,De.jobs);function ae(q){return q?new Date(q*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"Nie"}y.useEffect(()=>{e&&r&&C(r)},[e,r]),y.useEffect(()=>{e&&As(n,De.updates,De.services,De.jobs,De.zeitmaschine)},[e]);function X(q){E(!0),j(null),Me(`/api/maintenance/logs?service=${q}&lines=150`).then(Ie=>{Ie.ok?k(Ie.text):(k(`Fehler beim Laden der Logs: ${Ie.err||"Unbekannter Fehler"}`),(Ie.status==="incorrect_password"||Ie.status==="password_required")&&j(Ie.status))}).catch(Ie=>k(`Fehler: ${Ie.message}`)).finally(()=>E(!1))}y.useEffect(()=>{!e||N!=="logs"||X(m)},[e,N,m]);function M(q){return(q==null?void 0:q.status)==="busy"?(i("Update läuft bereits",`Es läuft gerade „${q.running}". Bitte warte, bis es fertig ist.`),Y(),!0):!1}function T(q){return(q==null?void 0:q.status)==="password_required"||(q==null?void 0:q.status)==="incorrect_password"?(i("Box-Passwort nötig",(q.status==="incorrect_password"?"Das gespeicherte Box-Passwort stimmt nicht. ":"Für dieses Update braucht die Box dein Passwort. ")+"Bitte oben im Reiter „Einstellungen“ setzen bzw. korrigieren."),!0):q&&q.ok===!1?(i("Update fehlgeschlagen",q.err||"Unbekannter Fehler."),!0):!1}async function Z(q){const Ie={os:"os-update",engine:"engine-update",swap:"swap-update"}[q];try{const Ze=await Me(`/api/maintenance/${Ie}`,{method:"POST"});if(M(Ze)||T(Ze))return;Y(),C("maintenance")}catch(Ze){i("Fehler",`Update konnte nicht starten: ${Ze.message}`)}}async function se(){G(!0);try{const q=await Me("/api/maintenance/hermes-update",{method:"POST"});if(M(q))return;Y()}catch(q){i("Fehler",`Hermes-Update fehlgeschlagen: ${q.message}`)}finally{G(!1)}}async function te(q){fe({kind:q,loading:!0,data:null});try{const Ie=await Me(`/api/maintenance/update-details?kind=${q}`);fe({kind:q,loading:!1,data:Ie})}catch(Ie){fe({kind:q,loading:!1,data:{kind:q,error:Ie.message}})}}function ce(){const q=le==null?void 0:le.kind;fe(null),q==="os"||q==="engine"||q==="swap"?Z(q):q==="hermes"&&se()}function ge(){var Ie;const q=[u!=null&&u.engine?"Engine":null,u!=null&&u.swap?"Router":null,(Ie=u==null?void 0:u.components)!=null&&Ie.some(Ze=>Ze.update===!0)?"Hermes-Agent":null,u!=null&&u.os?`OS (${u.os} Pakete)`:null].filter(Boolean);o("Alle Updates einspielen?",`Nacheinander in einem Job: ${q.join(" → ")}. Jeder Schritt sichert und prüft sich selbst; schlägt einer fehl, stoppt der Rest. (OS braucht das Box-Passwort aus den Einstellungen — fehlt es, wird OS übersprungen.)`,async()=>{try{const Ze=await Me("/api/maintenance/update-all",{method:"POST"});if(M(Ze)||T(Ze))return;if((Ze==null?void 0:Ze.status)==="nothing"){i("Nichts zu tun","Es stehen keine Updates aus.");return}Y(),C("maintenance")}catch(Ze){i("Fehler",`„Alle aktualisieren" konnte nicht starten: ${Ze.message}`)}})}async function _e(){z(!0);try{await Me("/api/maintenance/check-updates",{method:"POST"}),As(n,De.jobs,De.updates),C("maintenance")}catch(q){i("Fehler",`Fehler bei der Update-Suche: ${q.message}`)}finally{z(!1)}}async function J(q,Ie){try{await Me("/api/models/install",{method:"POST",body:JSON.stringify({repo:q,role:Ie})}),i("Gestartet",`Modell-Upgrade für '${Ie}' (${q}) gestartet.`),Y(),C("maintenance")}catch(Ze){i("Fehler",`Fehler beim Starten des Modell-Upgrades: ${Ze.message}`)}}async function we(){o("Reboot bestätigen","Bist du sicher, dass du das gesamte Host-System neu starten willst?",async()=>{try{await Me("/api/maintenance/reboot",{method:"POST"}),i("Reboot","Reboot ausgelöst. System startet neu...",()=>t())}catch(q){i("Fehler",`Fehler beim Reboot: ${q.message}`)}})}async function Ae(){B(!0),V("Snapshot wird erzeugt...");try{const q=await Me("/api/system/backup",{method:"POST"});V(q.ok?`Snapshot erzeugt: ${q.snapshot} (${q.files.length} Komponenten)`:"Backup fehlgeschlagen."),As(n,De.zeitmaschine)}catch(q){V(`Fehler: ${q.message}`)}finally{B(!1)}}async function ne(q){O(Ie=>({...Ie,[q]:!0}));try{const Ie=await Me("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:q})});Ie.ok?(i("Dienst neu gestartet",`Dienst ${q} wurde erfolgreich neu gestartet.`,()=>{N==="logs"&&m===q&&X(q)}),As(n,De.services,De.health,De.models)):i("Fehler",`Fehler beim Neustart: ${Ie.err||"Unbekannter Fehler"}`)}catch(Ie){i("Fehler",`Fehler beim Neustart: ${Ie.message}`)}finally{O(Ie=>({...Ie,[q]:!1}))}}async function lt(q){try{await Me(`/api/jobs/${q}/cancel`,{method:"POST"}),Y()}catch(Ie){i("Fehler",`Fehler beim Abbrechen: ${Ie.message}`)}}const $e=f.find(q=>(q.state==="running"||q.state==="queued")&&q.group==="maintenance"),Pe=(u?(u.os>0?1:0)+(u.engine?1:0)+(u.swap?1:0):0)+(((lr=u==null?void 0:u.components)==null?void 0:lr.filter(q=>q.update===!0).length)??0),vt=(h==null?void 0:h.backups)??[];return b.jsxs(b.Fragment,{children:[b.jsx("div",{className:Re("fixed inset-0 bg-black/60 backdrop-blur-sm z-50 transition-opacity duration-300",e?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:t}),b.jsxs("div",{className:Re("fixed inset-y-0 right-0 w-full sm:w-[640px] bg-card/85 backdrop-blur-xl border-l border-border/60 shadow-2xl z-50 flex flex-col transform transition-transform duration-300 ease-in-out font-sans text-foreground",e?"translate-x-0":"translate-x-full"),children:[b.jsxs("div",{className:"flex h-16 shrink-0 items-center justify-between border-b border-border/40 px-6",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(HP,{className:"h-4.5 w-4.5 text-primary"}),b.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase font-space",children:"OS-Zentrale & Pflege"})]}),b.jsx("button",{onClick:t,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-border/40 text-muted-foreground hover:bg-accent transition-colors",children:b.jsx(bu,{className:"h-4 w-4"})})]}),b.jsx("div",{className:"flex border-b border-border/40 px-6",children:["maintenance","logs","settings"].map(q=>b.jsx("button",{onClick:()=>C(q),className:Re("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",N===q?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:q==="maintenance"?"System-Wartung":q==="logs"?"System-Logs":"Einstellungen"},q))}),b.jsxs("div",{className:"flex-1 overflow-y-auto p-6 space-y-6",children:[N==="maintenance"&&b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:"space-y-2.5",children:[b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Updates"}),b.jsxs("div",{className:"flex items-center gap-3",children:[Pe>0&&b.jsxs("button",{onClick:ge,disabled:!!$e,className:"flex items-center gap-1 rounded-md border border-primary/40 bg-primary/10 px-2 py-1 text-[10px] font-bold text-primary transition-colors hover:bg-primary/20 disabled:opacity-50",children:[b.jsx(oT,{className:"h-3 w-3"})," Alle aktualisieren (",Pe,")"]}),b.jsxs("button",{onClick:_e,disabled:R||!!$e,className:"flex items-center gap-1 text-[10px] font-semibold text-primary hover:text-primary/80 transition-colors disabled:opacity-50",children:[b.jsx(Vo,{className:Re("h-3 w-3",R&&"animate-spin")})," Nach Updates suchen"]})]})]}),(u==null?void 0:u.last_check)&&b.jsxs("div",{className:"text-[9px] text-muted-foreground -mt-1",children:["Zuletzt gesucht: ",ae(u.last_check)]}),$e&&b.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-[11px] text-amber-300",children:[b.jsx(Vo,{className:"h-3.5 w-3.5 shrink-0 animate-spin"}),b.jsxs("span",{children:["Update läuft: ",b.jsx("span",{className:"font-semibold",children:$e.label})," — bitte warten. Weitere Updates sind solange gesperrt."]})]}),b.jsxs("div",{className:"space-y-1.5",children:[b.jsx(Os,{icon:Kg,iconClass:"text-cyan-400",name:"OS-Pakete (apt)",available:!!(u!=null&&u.os),status:u!=null&&u.os?`${u.os} verfügbar`:"aktuell",actionLabel:"Anzeigen",onAction:()=>te("os")}),b.jsx(Os,{icon:Nf,iconClass:"text-violet-400",name:"Inferenz-Engine (llama.cpp)",available:!!(u!=null&&u.engine),status:u!=null&&u.engine?"Update verfügbar":"aktuell",actionLabel:"Anzeigen",onAction:()=>te("engine")}),b.jsx(Os,{icon:KP,iconClass:"text-fuchsia-400",name:"Router (llama-swap)",available:!!(u!=null&&u.swap),status:u!=null&&u.swap?"Update verfügbar":"aktuell",actionLabel:"Anzeigen",onAction:()=>te("swap")}),(()=>{var Ie;const q=(Ie=u==null?void 0:u.components)==null?void 0:Ie.find(Ze=>Ze.key==="hermes_agent");return b.jsx(Os,{icon:jf,iconClass:"text-amber-400",name:"Hermes-Agent",available:(q==null?void 0:q.update)===!0,busy:ue,status:(q==null?void 0:q.update)===!0?`Update: ${q.latest}`:(q==null?void 0:q.reachable)===!1?"offline":"aktuell",actionLabel:"Anzeigen",onAction:()=>te("hermes")})})(),(fi=u==null?void 0:u.model_list)==null?void 0:fi.map(q=>b.jsx(Os,{icon:JM,iconClass:"text-emerald-400",name:`Modell · ${q.role}`,available:!0,status:q.title,actionLabel:"Upgrade",onAction:()=>J(q.repo,q.role)},q.role))]})]}),b.jsxs("div",{className:"space-y-2.5",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Dienste"}),b.jsxs("div",{className:"space-y-1.5",children:[de.length===0&&b.jsx("div",{className:"rounded-lg border border-dashed border-border/50 p-4 text-center text-xs text-muted-foreground",children:"Dienste-Liste wird geladen …"}),de.map(q=>b.jsx(T3,{label:q.name,system:q.scope==="system",ok:q.ok,busy:_[q.unit],onRestart:()=>ne(q.unit),onLogs:()=>{v(q.unit),C("logs")}},q.unit))]})]}),b.jsxs("div",{className:"space-y-2.5",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Backup"}),b.jsxs("div",{className:"rounded-lg border border-border/50 bg-background/20 px-3 py-2.5 flex items-center gap-3",children:[b.jsxs("div",{className:"flex-1 min-w-0",children:[b.jsx("div",{className:"text-xs text-foreground truncate",children:vt[0]?`Letztes: ${vt[0].snapshot}`:"Noch kein Backup"}),b.jsxs("div",{className:"text-[10px] text-muted-foreground",children:[vt.length," Snapshots · Wiederherstellen: Chronik → Zeitmaschine"]})]}),b.jsxs("button",{onClick:Ae,disabled:Q,className:"flex items-center gap-1.5 text-[11px] font-semibold rounded-lg px-2.5 py-1 bg-primary text-primary-foreground hover:opacity-90 transition-all cursor-pointer disabled:opacity-50 shrink-0",children:[b.jsx(eT,{className:Re("h-3.5 w-3.5",Q&&"animate-pulse")})," Snapshot"]})]}),F&&b.jsx("div",{className:"text-[10px] font-mono text-primary bg-primary/5 p-2 rounded-lg border border-primary/20 break-all leading-normal",children:F})]}),b.jsxs("div",{className:"space-y-2.5",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-red-400/80",children:"Gefahrenzone"}),b.jsxs("button",{onClick:we,className:"flex w-full items-center gap-3 p-3 rounded-lg border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 text-red-400 transition-all text-left text-xs font-semibold",children:[b.jsx(ST,{className:"h-4.5 w-4.5"}),b.jsxs("div",{children:[b.jsx("div",{children:"Host-System neu starten"}),b.jsx("div",{className:"text-[10px] text-red-400/80 font-normal",children:"Startet die ganze Box neu"})]})]})]}),b.jsxs("div",{className:"space-y-3",children:[b.jsxs("div",{className:"flex items-center justify-between",children:[b.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Hintergrund-Aufgaben"}),b.jsxs("span",{className:"text-[10px] font-mono bg-primary/10 text-primary px-1.5 py-0.5 rounded-full",children:[f.filter(q=>q.state==="running"||q.state==="queued").length," Aktiv"]})]}),b.jsx("div",{className:"space-y-3",children:f.length===0?b.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-xl p-6 text-center",children:"Aktuell keine aktiven Hintergrund-Jobs."}):f.map(q=>{const Ie=q.state==="running"||q.state==="queued";return b.jsxs("div",{className:Re("p-3 rounded-xl border transition-all duration-300",Ie?"border-primary/40 bg-primary/5 shadow-md shadow-primary/5":"border-border/40 bg-background/20 opacity-80"),children:[b.jsxs("div",{className:"flex items-start justify-between gap-3",children:[b.jsxs("div",{className:"space-y-1",children:[b.jsxs("div",{className:"text-xs font-semibold flex items-center gap-1.5",children:[Ie&&b.jsxs("span",{className:"flex h-2 w-2 relative",children:[b.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"}),b.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-primary"})]}),q.label]}),b.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground uppercase flex items-center gap-2",children:[b.jsxs("span",{children:["ID: ",q.id]}),b.jsx("span",{children:"•"}),b.jsx("span",{className:Re(q.state==="done"&&"text-emerald-400",q.state==="failed"&&"text-red-400",q.state==="running"&&"text-primary",q.state==="queued"&&"text-amber-400",q.state==="canceled"&&"text-muted-foreground"),children:q.state})]})]}),Ie&&b.jsx("button",{onClick:()=>lt(q.id),className:"text-[10px] font-semibold text-red-400 hover:text-red-300 border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 px-2 py-0.5 rounded transition-colors",children:"Abbrechen"})]}),q.state==="running"&&b.jsxs("div",{className:"mt-3 space-y-1",children:[b.jsx("div",{className:"w-full h-1.5 bg-muted rounded-full overflow-hidden",children:b.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${q.progress??0}%`}})}),b.jsxs("div",{className:"flex justify-between items-center text-[9px] font-mono text-muted-foreground",children:[b.jsxs("span",{children:[q.progress??0,"%"]}),q.done_bytes!=null&&q.total_bytes!=null&&b.jsxs("span",{children:[Mm(q.done_bytes)," / ",Mm(q.total_bytes),q.rate_bps!=null&&` (${Mm(q.rate_bps)}/s)`]}),q.eta_s!=null&&b.jsxs("span",{children:["ETA: ",q.eta_s,"s"]})]})]})]},q.id)})})]})]}),N==="logs"&&b.jsxs("div",{className:"flex flex-col h-full space-y-4",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("select",{value:m,onChange:q=>v(q.target.value),className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none text-foreground font-semibold",children:de.map(q=>b.jsxs("option",{value:q.unit,children:[q.name," (",q.scope==="system"?"systemd-root":"user",")"]},q.unit))}),b.jsxs("button",{onClick:()=>ne(m),disabled:_[m],className:"flex h-9 px-3 items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50",title:"Dienst neu starten",children:[b.jsx(Vo,{className:Re("h-3.5 w-3.5",_[m]&&"animate-spin")}),"Restart"]})]}),b.jsx(z3,{service:m,text:x,loading:S,logStatus:P,onRefresh:()=>X(m),onOpenSettings:()=>C("settings")})]}),N==="settings"&&b.jsx(F3,{open:e,showAlert:i})]})]}),le&&b.jsx(B3,{detail:le,maintenanceJob:$e,onClose:()=>fe(null),onApply:ce}),s]})}let Dv=[],Rv=[];const $v=new Set,zA=()=>$v.forEach(e=>e());function FA(e){return $v.add(e),()=>{$v.delete(e)}}function W3(e){Dv=[...Dv,e].slice(-40),zA()}function H3(e){Rv=[...Rv,e].slice(-40),zA()}const K3=()=>y.useSyncExternalStore(FA,()=>Dv),V3=()=>y.useSyncExternalStore(FA,()=>Rv);function q3(){const{data:e,dataUpdatedAt:t}=$f(),{data:r,dataUpdatedAt:n}=$A(),i=y.useRef(null);y.useEffect(()=>{var o,s,u,d;e&&W3({t:Date.now(),cpu:((o=e.cpu)==null?void 0:o.percent)??0,ram:((s=e.ram)==null?void 0:s.percent)??0,gpu:((u=e.gpu)==null?void 0:u.busy_percent)??null,disk:((d=e.disk)==null?void 0:d.percent)??null})},[t]),y.useEffect(()=>{if(!r)return;const o=Date.now(),s=r.prompt_tokens,u=r.completion_tokens;if(i.current){const d=Math.max((o-i.current.t)/1e3,.001);H3({t:o,prompt:Math.max(0,(s-i.current.p)/d),completion:Math.max(0,(u-i.current.c)/d)})}i.current={p:s,c:u,t:o}},[n])}function G3(){var z,F,V,Q,B,ue;const{data:e,isError:t}=TA(),{data:r,isError:n}=Zg(),{data:i}=RA(),{data:o}=$f(),s=t||n,u=!!e&&!!r,d=G=>{var le;return(le=r==null?void 0:r.services.find(fe=>fe.unit===G))==null?void 0:le.ok},f=G=>!!(r!=null&&r.services.some(le=>le.unit===G)),h=e==null?void 0:e.engine_reachable,m=(z=e==null?void 0:e.brain)==null?void 0:z.ready,v=((F=e==null?void 0:e.brain)==null?void 0:F.model)||((V=i==null?void 0:i.models.find(G=>G.role==="hermes"))==null?void 0:V.name)||"",x=[];s&&x.push({id:"mc2",label:"Steuerpult (MC2)",icon:Nf,critical:!0,status:"down",detail:"Die Zentrale antwortet nicht — alle Anzeigen hier können veraltet sein. Läuft die Box? Deploy aktiv?"}),x.push((()=>{const G={id:"brain",label:"Lucys Hirn",icon:Bg,critical:!0};return u?h===!1?{...G,status:"down",detail:"Die Motor-Maschine (Engine) läuft nicht — Lucy kann gerade gar nicht denken.",repair:{kind:"restart",service:"llama-swap",label:"Motor neu starten",needsSudo:!0}}:m===!1?{...G,status:"down",detail:"Lucys Hirn ist gerade eingeschlafen — einmal aufwecken.",repair:v?{kind:"loadModel",model:v,label:"Hirn aufwecken"}:void 0}:{...G,status:"ok",detail:"Wach und ansprechbar."}:{...G,status:"loading",detail:"Wird geprüft …"}})()),x.push((()=>{const G={id:"vision",label:"Lucys Augen",icon:Cv,critical:!1};if(!u||!i)return{...G,status:"loading",detail:"Wird geprüft …"};const le=i.models.find(de=>de.role==="vision");return le?(i.running??[]).includes(le.name)?{...G,status:"ok",detail:"Sieht gerade zu (geladen, solange Lucy sie nutzt)."}:{...G,status:"ok",detail:"Augen ruhen — sie laden von selbst, sobald Lucy startet oder ein Bild kommt.",repair:{kind:"loadModel",model:le.name,label:"Augen wecken"}}:{...G,status:"warn",detail:"Kein Augen-Modell eingerichtet — Lucy kann keine Bilder ansehen."}})()),x.push((()=>{const G={id:"memory",label:"Lucys Gedächtnis",icon:ZM,critical:!0},le=d("mem0-service");return!u||le===void 0?{...G,status:"loading",detail:"Wird geprüft …"}:le?{...G,status:"ok",detail:"Merkt sich Neues und findet Altes wieder."}:{...G,status:"down",detail:"Lucy kann sich gerade nichts merken — das Gedächtnis antwortet nicht.",repair:{kind:"restart",service:"mem0-service",label:"Gedächtnis neu starten"}}})()),x.push((()=>{const G={id:"gateway",label:"Verbindung (Gateway)",icon:Wg,critical:!0},le=e?e.gateway_reachable:d("mc2-gateway");if(!u||le===void 0)return{...G,status:"loading",detail:"Wird geprüft …"};const fe=f("mc2-gateway")?"mc2-gateway":"mission-control-2";return le?{...G,status:"ok",detail:"Apps und IDEs können Lucy erreichen."}:{...G,status:"down",detail:"Der Modell-Gateway antwortet nicht — Lucy und die IDEs erreichen kein Modell.",repair:{kind:"restart",service:fe,label:"Gateway neu starten"}}})()),x.push((()=>{const G={id:"steward",label:"Wächter (Steward)",icon:Hg,critical:!1};return u?f("mc2-steward")?d("mc2-steward")?{...G,status:"ok",detail:"Wacht über Warm-Set, Dienste und Gedächtnis."}:{...G,status:"warn",detail:"Der Wächter schläft — niemand meldet gerade Ausfälle oder wärmt Modelle nach.",repair:{kind:"restart",service:"mc2-steward",label:"Wächter neu starten"}}:{...G,status:"ok",detail:"Auf dieser Installation nicht eingerichtet."}:{...G,status:"loading",detail:"Wird geprüft …"}})()),x.push((()=>{const G={id:"agent",label:"Lucys Agent (Hermes)",icon:jf,critical:!0},le=d("hermes-gateway");return!u||le===void 0?{...G,status:"loading",detail:"Wird geprüft …"}:le?{...G,status:"ok",detail:"Lucy ist bereit zu reden und zu handeln."}:{...G,status:"down",detail:"Lucys Agent ist offline — sie reagiert gerade nicht.",repair:{kind:"restart",service:"hermes-gateway",label:"Agent neu starten"}}})()),x.push((()=>{const G={id:"voice",label:"Lucys Stimme",icon:bT,critical:!1},le=d("voice-service");return!u||le===void 0?{...G,status:"loading",detail:"Wird geprüft …"}:le?{...G,status:"ok",detail:"Lucy kann hören und sprechen."}:{...G,status:"warn",detail:"Sprechen ist gerade aus — Tippen geht weiter normal.",repair:{kind:"restart",service:"voice-service",label:"Stimme neu starten"}}})());const k=((Q=o==null?void 0:o.ram)==null?void 0:Q.total)??0,S=((B=o==null?void 0:o.ram)==null?void 0:B.used)??0,E=((ue=o==null?void 0:o.ram)==null?void 0:ue.percent)??(k>0?Math.min(100,S/k*100):0),P=1024**3,j=k?E>=93?{status:"full",usedGb:S/P,totalGb:k/P,pct:E,text:"Speicher fast voll — Lucy könnte langsamer werden."}:E>=85?{status:"warn",usedGb:S/P,totalGb:k/P,pct:E,text:"Speicher gut gefüllt — noch okay."}:{status:"ok",usedGb:S/P,totalGb:k/P,pct:E,text:"Genug Speicher frei."}:{status:"unknown",usedGb:0,totalGb:0,pct:0,text:"Speicher-Auslastung unbekannt."},_=x.some(G=>G.status==="loading"),O=x.filter(G=>G.critical&&G.status==="down"),N=x.filter(G=>G.status==="warn"||!G.critical&&G.status==="down"),C=j.status==="full";return{verdict:_&&!O.length?"loading":O.length?"problem":N.length||C?"warn":"gut",checks:x,memory:j,problems:O,warns:N,unreachable:s}}const Y3={ok:"bg-emerald-500",warn:"bg-amber-500",alert:"bg-red-500",muted:"bg-muted-foreground/40",loading:"bg-muted-foreground/40 animate-pulse"},Q3={ok:"hover:border-emerald-500/40",warn:"hover:border-amber-500/50",alert:"hover:border-red-500/50",muted:"hover:border-primary/40",loading:"hover:border-border/60"};function Io({icon:e,title:t,value:r,unit:n,tone:i="muted",hint:o,onClick:s}){return b.jsxs("button",{onClick:s,className:Re("group relative flex flex-col items-start mc-card p-5 text-left cursor-pointer",Q3[i]),children:[b.jsxs("div",{className:"mb-4 flex w-full items-center justify-between",children:[b.jsx("span",{className:"flex h-10 w-10 items-center justify-center rounded-xl border border-border/40 bg-background/30 text-foreground/80 transition-colors group-hover:text-primary",children:b.jsx(e,{className:"h-5 w-5"})}),b.jsx("span",{className:Re("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",Y3[i]),title:o})]}),b.jsxs("div",{className:"flex items-baseline gap-1.5",children:[b.jsx("span",{className:"text-2xl font-bold tracking-tight text-foreground font-space tabular-nums",children:r}),n&&b.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:n})]}),b.jsxs("div",{className:"mt-1 flex w-full items-center justify-between",children:[b.jsx("span",{className:"text-sm font-semibold text-foreground/90",children:t}),b.jsx(Ko,{className:"h-4 w-4 text-muted-foreground/40 transition-all group-hover:translate-x-0.5 group-hover:text-primary"})]}),o&&b.jsx("span",{className:"mt-0.5 text-[11px] text-muted-foreground",children:o})]})}function X3(){var s;const{data:e=[]}=A3(),[t,r]=y.useState(!1),n=e.find(u=>u.source==="chef-gutachter");if(!n)return null;const i=new Date(n.ts*1e3).toLocaleString("de-DE",{weekday:"long",day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}),o=(s=n.text.split(` -`).find(u=>u.trim().startsWith("VERDIKT:")))==null?void 0:s.replace(/^\s*VERDIKT:\s*/,"");return b.jsxs("div",{className:"rounded-2xl border border-violet-500/25 bg-violet-500/[0.05] p-4 shadow-lg shadow-black/15 backdrop-blur-md",children:[b.jsxs("button",{onClick:()=>r(u=>!u),className:"flex w-full items-center gap-3 text-left cursor-pointer",children:[b.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-xl border border-violet-500/30 bg-background/30 text-violet-300",children:b.jsx(wT,{className:"h-4.5 w-4.5"})}),b.jsxs("span",{className:"min-w-0 flex-1",children:[b.jsx("span",{className:"block text-sm font-bold text-foreground",children:"Morgenlage"}),b.jsx("span",{className:"block truncate text-xs text-muted-foreground",children:o||n.subject||"Nächtliches Gutachten über die autonome Arbeit"})]}),b.jsx("span",{className:"shrink-0 text-[10px] text-muted-foreground/60",children:i}),t?b.jsx(rT,{className:"h-4 w-4 shrink-0 text-muted-foreground"}):b.jsx(Ko,{className:"h-4 w-4 shrink-0 text-muted-foreground"})]}),t&&b.jsxs("div",{className:"mt-3 border-t border-violet-500/15 pt-3",children:[n.subject&&b.jsx("p",{className:"mb-1 text-[10px] font-semibold uppercase tracking-wider text-violet-300/80",children:n.subject}),b.jsx("p",{className:"whitespace-pre-wrap text-xs leading-relaxed text-foreground/85",children:n.text})]})]})}const pw={"":"einmalig",daily:"täglich",weekdays:"werktags",weekly:"wöchentlich"};function Z3(){const{data:e=[],isLoading:t}=C3(),r=xu(),{showAlert:n,showConfirm:i,dialogElement:o}=Xg(),[s,u]=y.useState(!1),[d,f]=y.useState(""),[h,m]=y.useState(""),[v,x]=y.useState(""),[k,S]=y.useState(!1),E=()=>r.invalidateQueries({queryKey:De.reminders});async function P(){if(!(!d.trim()||!h)){S(!0);try{await Me("/api/reminders",{method:"POST",body:JSON.stringify({text:d,when:h,repeat:v})}),f(""),m(""),x(""),u(!1),E()}catch(O){n("Anlegen fehlgeschlagen",String((O==null?void 0:O.message)||O))}finally{S(!1)}}}function j(O,N){i("Erinnerung löschen?",`„${N}" wird entfernt.`,async()=>{try{await Me(`/api/reminders/${O}`,{method:"DELETE"}),E()}catch(C){n("Fehler",String((C==null?void 0:C.message)||C))}})}const _=[...e].sort((O,N)=>O.next_ts-N.next_ts);return b.jsxs("div",{className:"mc-card p-4",children:[b.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[b.jsxs("span",{className:"flex items-center gap-2 text-sm font-bold text-foreground",children:[b.jsx("span",{className:"flex h-8 w-8 items-center justify-center rounded-lg border border-border/40 bg-background/30 text-amber-300",children:b.jsx(XM,{className:"h-4 w-4"})}),"Anstehendes"]}),b.jsxs("button",{onClick:()=>u(O=>!O),className:"flex h-8 items-center gap-1 rounded-lg border border-border/60 bg-background/30 px-2.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer",children:[s?b.jsx(bu,{className:"h-3.5 w-3.5"}):b.jsx(V1,{className:"h-3.5 w-3.5"})," ",s?"Abbrechen":"Neu"]})]}),s&&b.jsxs("div",{className:"mb-3 space-y-2 rounded-xl border border-border/50 bg-background/30 p-3",children:[b.jsx("input",{value:d,onChange:O=>f(O.target.value),placeholder:"Woran soll Lucy erinnern?","aria-label":"Erinnerungstext",className:"h-9 w-full rounded-lg border border-border/60 bg-card/45 px-3 text-xs text-foreground outline-none focus:ring-1 focus:ring-primary/50"}),b.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[b.jsx("input",{type:"datetime-local",value:h,onChange:O=>m(O.target.value),"aria-label":"Zeitpunkt",className:"h-9 rounded-lg border border-border/60 bg-card/45 px-2 text-xs text-foreground outline-none focus:ring-1 focus:ring-primary/50 [color-scheme:dark]"}),b.jsx("select",{value:v,onChange:O=>x(O.target.value),"aria-label":"Wiederholung",className:"h-9 cursor-pointer rounded-lg border border-border/60 bg-card/45 px-2 text-xs font-semibold text-foreground outline-none",children:Object.entries(pw).map(([O,N])=>b.jsx("option",{value:O,className:"bg-popover",children:N},O))}),b.jsxs("button",{onClick:P,disabled:k||!d.trim()||!h,className:"ml-auto flex h-9 items-center gap-1.5 rounded-lg bg-primary px-3 text-xs font-semibold text-primary-foreground hover:opacity-90 transition-all cursor-pointer disabled:opacity-50",children:[k?b.jsx(_f,{className:"h-3.5 w-3.5 animate-spin"}):b.jsx(V1,{className:"h-3.5 w-3.5"})," Anlegen"]})]})]}),t?b.jsx("p",{className:"text-xs text-muted-foreground",children:"Wird geladen …"}):_.length===0?b.jsx("p",{className:"text-xs text-muted-foreground",children:"Keine Erinnerungen. Lucy sagt dir hier (und per Stimme) Bescheid, wenn etwas ansteht."}):b.jsxs("div",{className:"space-y-1.5",children:[_.slice(0,6).map(O=>{const N=O.next_ts*1e3j(O.id,O.text),"aria-label":"Erinnerung löschen",className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border border-border/40 text-muted-foreground opacity-0 transition-all hover:bg-red-500/5 hover:text-red-400 group-hover:opacity-100 cursor-pointer",children:b.jsx(jT,{className:"h-3.5 w-3.5"})})]},O.id)}),_.length>6&&b.jsxs("p",{className:"text-[10px] text-muted-foreground/60",children:["+",_.length-6," weitere"]})]}),o]})}function J3(){const{data:e,error:t}=$f(),r=K3();return{sys:e,hist:r,error:t}}var e5=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function Jg(e){if(typeof e!="string")return!1;var t=e5;return t.includes(e)}var t5=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],r5=new Set(t5);function BA(e){return typeof e!="string"?!1:r5.has(e)}function UA(e){return typeof e=="string"&&e.startsWith("data-")}function on(e){if(typeof e!="object"||e===null)return{};var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(BA(r)||UA(r))&&(t[r]=e[r]);return t}function Lf(e){if(e==null)return null;if(y.isValidElement(e)&&typeof e.props=="object"&&e.props!==null){var t=e.props;return on(t)}return typeof e=="object"&&!Array.isArray(e)?on(e):null}function Br(e){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(BA(r)||UA(r)||Jg(r))&&(t[r]=e[r]);return t}function n5(e){return e==null?null:y.isValidElement(e)?Br(e.props):typeof e=="object"&&!Array.isArray(e)?Br(e):null}var i5=["children","width","height","viewBox","className","style","title","desc"];function Lv(){return Lv=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.width,i=e.height,o=e.viewBox,s=e.className,u=e.style,d=e.title,f=e.desc,h=a5(e,i5),m=o||{width:n,height:i,x:0,y:0},v=Xe("recharts-surface",s);return y.createElement("svg",Lv({},Br(h),{className:v,width:n,height:i,style:u,viewBox:"".concat(m.x," ").concat(m.y," ").concat(m.width," ").concat(m.height),ref:t}),y.createElement("title",null,d),y.createElement("desc",null,f),r)}),l5=["children","className"];function zv(){return zv=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.className,i=s5(e,l5),o=Xe("recharts-layer",n);return y.createElement("g",zv({className:o},Br(i),{ref:t}),r)}),c5=y.createContext(null);function ft(e){return function(){return e}}const Fv=Math.PI,Bv=2*Fv,ba=1e-6,d5=Bv-ba;function HA(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return HA;const r=10**t;return function(n){this._+=n[0];for(let i=1,o=n.length;iba)if(!(Math.abs(m*d-f*h)>ba)||!o)this._append`L${this._x1=t},${this._y1=r}`;else{let x=n-s,k=i-u,S=d*d+f*f,E=x*x+k*k,P=Math.sqrt(S),j=Math.sqrt(v),_=o*Math.tan((Fv-Math.acos((S+v-E)/(2*P*j)))/2),O=_/j,N=_/P;Math.abs(O-1)>ba&&this._append`L${t+O*h},${r+O*m}`,this._append`A${o},${o},0,0,${+(m*x>h*k)},${this._x1=t+N*d},${this._y1=r+N*f}`}}arc(t,r,n,i,o,s){if(t=+t,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),d=n*Math.sin(i),f=t+u,h=r+d,m=1^s,v=s?i-o:o-i;this._x1===null?this._append`M${f},${h}`:(Math.abs(this._x1-f)>ba||Math.abs(this._y1-h)>ba)&&this._append`L${f},${h}`,n&&(v<0&&(v=v%Bv+Bv),v>d5?this._append`A${n},${n},0,1,${m},${t-u},${r-d}A${n},${n},0,1,${m},${this._x1=f},${this._y1=h}`:v>ba&&this._append`A${n},${n},0,${+(v>=Fv)},${m},${this._x1=t+n*Math.cos(o)},${this._y1=r+n*Math.sin(o)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function KA(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new h5(t)}function ey(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function VA(e){this._context=e}VA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function zf(e){return new VA(e)}function qA(e){return e[0]}function GA(e){return e[1]}function YA(e,t){var r=ft(!0),n=null,i=zf,o=null,s=KA(u);e=typeof e=="function"?e:e===void 0?qA:ft(e),t=typeof t=="function"?t:t===void 0?GA:ft(t);function u(d){var f,h=(d=ey(d)).length,m,v=!1,x;for(n==null&&(o=i(x=s())),f=0;f<=h;++f)!(f=x;--k)u.point(_[k],O[k]);u.lineEnd(),u.areaEnd()}P&&(_[v]=+e(E,v,m),O[v]=+t(E,v,m),u.point(n?+n(E,v,m):_[v],r?+r(E,v,m):O[v]))}if(j)return u=null,j+""||null}function h(){return YA().defined(i).curve(s).context(o)}return f.x=function(m){return arguments.length?(e=typeof m=="function"?m:ft(+m),n=null,f):e},f.x0=function(m){return arguments.length?(e=typeof m=="function"?m:ft(+m),f):e},f.x1=function(m){return arguments.length?(n=m==null?null:typeof m=="function"?m:ft(+m),f):n},f.y=function(m){return arguments.length?(t=typeof m=="function"?m:ft(+m),r=null,f):t},f.y0=function(m){return arguments.length?(t=typeof m=="function"?m:ft(+m),f):t},f.y1=function(m){return arguments.length?(r=m==null?null:typeof m=="function"?m:ft(+m),f):r},f.lineX0=f.lineY0=function(){return h().x(e).y(t)},f.lineY1=function(){return h().x(e).y(r)},f.lineX1=function(){return h().x(n).y(t)},f.defined=function(m){return arguments.length?(i=typeof m=="function"?m:ft(!!m),f):i},f.curve=function(m){return arguments.length?(s=m,o!=null&&(u=s(o)),f):s},f.context=function(m){return arguments.length?(m==null?o=u=null:u=s(o=m),f):o},f}class QA{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function p5(e){return new QA(e,!0)}function m5(e){return new QA(e,!1)}function Id(){}function Md(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function XA(e){this._context=e}XA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Md(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Md(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function v5(e){return new XA(e)}function ZA(e){this._context=e}ZA.prototype={areaStart:Id,areaEnd:Id,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Md(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function g5(e){return new ZA(e)}function JA(e){this._context=e}JA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Md(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function y5(e){return new JA(e)}function e2(e){this._context=e}e2.prototype={areaStart:Id,areaEnd:Id,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function x5(e){return new e2(e)}function mw(e){return e<0?-1:1}function vw(e,t,r){var n=e._x1-e._x0,i=t-e._x1,o=(e._y1-e._y0)/(n||i<0&&-0),s=(r-e._y1)/(i||n<0&&-0),u=(o*i+s*n)/(n+i);return(mw(o)+mw(s))*Math.min(Math.abs(o),Math.abs(s),.5*Math.abs(u))||0}function gw(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function Tm(e,t,r){var n=e._x0,i=e._y0,o=e._x1,s=e._y1,u=(o-n)/3;e._context.bezierCurveTo(n+u,i+u*t,o-u,s-u*r,o,s)}function Td(e){this._context=e}Td.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Tm(this,this._t0,gw(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Tm(this,gw(this,r=vw(this,e,t)),r);break;default:Tm(this,this._t0,r=vw(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function t2(e){this._context=new r2(e)}(t2.prototype=Object.create(Td.prototype)).point=function(e,t){Td.prototype.point.call(this,t,e)};function r2(e){this._context=e}r2.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,o){this._context.bezierCurveTo(t,e,n,r,o,i)}};function b5(e){return new Td(e)}function w5(e){return new t2(e)}function n2(e){this._context=e}n2.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=yw(e),i=yw(t),o=0,s=1;s=0;--t)i[t]=(s[t]-i[t+1])/o[t];for(o[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function k5(e){return new Ff(e,.5)}function E5(e){return new Ff(e,0)}function P5(e){return new Ff(e,1)}function Wa(e,t){if((s=e.length)>1)for(var r=1,n,i,o=e[t[0]],s,u=o.length;r=0;)r[t]=t;return r}function A5(e,t){return e[t]}function O5(e){const t=[];return t.key=e,t}function C5(){var e=ft([]),t=Uv,r=Wa,n=A5;function i(o){var s=Array.from(e.apply(this,arguments),O5),u,d=s.length,f=-1,h;for(const m of o)for(u=0,++f;u0){for(var r,n,i=0,o=e[0].length,s;i0){for(var r=0,n=e[t[0]],i,o=n.length;r0)||!((o=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,o,s;n1&&arguments[1]!==void 0?arguments[1]:M5,r=10**t,n=Math.round(e*r)/r;return Object.is(n,-0)?0:n}function Lt(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{var u=r[s-1];return typeof u=="string"?i+u+o:u!==void 0?i+Gi(u)+o:i+o},"")}var Lr=e=>e===0?0:e>0?1:-1,Cn=e=>typeof e=="number"&&e!=+e,Ha=e=>typeof e=="string"&&e.length>1&&e.indexOf("%")===e.length-1,be=e=>(typeof e=="number"||e instanceof Number)&&!Cn(e),jn=e=>be(e)||typeof e=="string",T5=0,Xs=e=>{var t=++T5;return"".concat(e||"").concat(t)},ea=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!be(t)&&typeof t!="string")return n;var o;if(Ha(t)){if(r==null)return n;var s=t.indexOf("%");o=r*parseFloat(t.slice(0,s))/100}else o=+t;return Cn(o)&&(o=n),i&&r!=null&&o>r&&(o=r),o},o2=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nn&&(typeof t=="function"?t(n):Za(n,t))===r)}var Ut=e=>e===null||typeof e>"u",ny=e=>Ut(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1));function vr(e){return e!=null}function Pl(){}var s2=e=>"radius"in e&&"startAngle"in e&&"endAngle"in e,iy=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(y.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Jg(i)&&typeof r[i]=="function"&&(n[i]=(o=>r[i](r,o)))}),n},D5=(e,t,r)=>n=>(e(t,r,n),null),R5=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var o=e[i];Jg(i)&&typeof o=="function"&&(n||(n={}),n[i]=D5(o,t,r))}),n};function xw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $5(e){for(var t=1;t(s[u]===void 0&&n[u]!==void 0&&(s[u]=n[u]),s),r);return o}function B5(e,t){const r=new Map;for(let n=0;nObject.prototype.propertyIsEnumerable.call(e,t))}function ay(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const V5="[object RegExp]",c2="[object String]",d2="[object Number]",f2="[object Boolean]",h2="[object Arguments]",q5="[object Symbol]",G5="[object Date]",Y5="[object Map]",Q5="[object Set]",X5="[object Array]",Z5="[object ArrayBuffer]",J5="[object Object]",e$="[object DataView]",t$="[object Uint8Array]",r$="[object Uint8ClampedArray]",n$="[object Uint16Array]",i$="[object Uint32Array]",a$="[object Int8Array]",o$="[object Int16Array]",l$="[object Int32Array]",s$="[object Float32Array]",u$="[object Float64Array]",bw=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})();function c$(e){return typeof bw.Buffer<"u"&&bw.Buffer.isBuffer(e)}function d$(e,t){return Ea(e,void 0,e,new Map,t)}function Ea(e,t,r,n=new Map,i=void 0){const o=i==null?void 0:i(e,t,r,n);if(o!==void 0)return o;if(Hv(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const s=new Array(e.length);n.set(e,s);for(let u=0;u{}):Kv(e,t,function n(i,o,s,u,d,f){const h=r(i,o,s,u,d,f);return h!==void 0?!!h:Kv(i,o,n,f,!1)},new Map,!0)}function Kv(e,t,r,n,i=!1){if(t===e)return!0;switch(typeof t){case"object":return p$(e,t,r,n);case"function":return Object.keys(t).length>0?Kv(e,{...t},r,n,i):kd(e,t);default:return p2(e)&&i?typeof t=="string"?t==="":!0:kd(e,t)}}function p$(e,t,r,n){if(t==null)return!0;if(Array.isArray(t))return v2(e,t,r,n);if(t instanceof Map)return m$(e,t,r,n);if(t instanceof Set)return v$(e,t,r,n);const i=Object.keys(t);if(e==null||Hv(e))return i.length===0;if(i.length===0)return!0;if(n!=null&&n.has(t))return n.get(t)===e;n==null||n.set(t,e);try{for(let o=0;o{})}function g$(e){return e=h$(e),t=>g2(t,e)}function y$(e,t){return d$(e,(r,n,i,o)=>{if(typeof e=="object"){if(ay(e)==="[object Object]"&&typeof e.constructor!="function"){const s={};return o.set(e,s),en(s,e,i,o),s}switch(Object.prototype.toString.call(e)){case d2:case c2:case f2:{const s=new e.constructor(e==null?void 0:e.valueOf());return en(s,e),s}case h2:{const s={};return en(s,e),s.length=e.length,s[Symbol.iterator]=e[Symbol.iterator],s}default:return}}})}function x$(e){return y$(e)}const b$=/^(?:0|[1-9]\d*)$/;function y2(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e=0}function x2(e){return e!=null&&typeof e!="function"&&P$(e.length)}function A$(e){return typeof e=="object"&&e!==null}function O$(e){return A$(e)&&x2(e)}function ww(e,t=u2){return O$(e)?B5(Array.from(e),U5(E$(t),1)):[]}function C$(e,t,r){return t===!0?ww(e,r):typeof t=="function"?ww(e,t):e}var Dm={exports:{}},Rm={},$m={exports:{}},Lm={};/** +`)},YD=0,Co=[];function QD(e){var t=g.useRef([]),r=g.useRef([0,0]),n=g.useRef(),i=g.useState(YD++)[0],o=g.useState(rA)[0],s=g.useRef(e);g.useEffect(function(){s.current=e},[e]),g.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(i));var S=yD([e.lockRef.current],(e.shards||[]).map(sw),!0).filter(Boolean);return S.forEach(function(E){return E.classList.add("allow-interactivity-".concat(i))}),function(){document.body.classList.remove("block-interactivity-".concat(i)),S.forEach(function(E){return E.classList.remove("allow-interactivity-".concat(i))})}}},[e.inert,e.lockRef.current,e.shards]);var u=g.useCallback(function(S,E){if("touches"in S&&S.touches.length===2||S.type==="wheel"&&S.ctrlKey)return!s.current.allowPinchZoom;var P=ed(S),_=r.current,j="deltaX"in S?S.deltaX:_[0]-P[0],O="deltaY"in S?S.deltaY:_[1]-P[1],N,C=S.target,R=Math.abs(j)>Math.abs(O)?"h":"v";if("touches"in S&&R==="h"&&C.type==="range")return!1;var z=window.getSelection(),F=z&&z.anchorNode,V=F?F===C||F.contains(C):!1;if(V)return!1;var Q=ow(R,C);if(!Q)return!0;if(Q?N=R:(N=R==="v"?"h":"v",Q=ow(R,C)),!Q)return!1;if(!n.current&&"changedTouches"in S&&(j||O)&&(n.current=N),!N)return!0;var B=n.current||N;return VD(B,E,S,B==="h"?j:O)},[]),d=g.useCallback(function(S){var E=S;if(!(!Co.length||Co[Co.length-1]!==o)){var P="deltaY"in E?lw(E):ed(E),_=t.current.filter(function(N){return N.name===E.type&&(N.target===E.target||E.target===N.shadowParent)&&qD(N.delta,P)})[0];if(_&&_.should){E.cancelable&&E.preventDefault();return}if(!_){var j=(s.current.shards||[]).map(sw).filter(Boolean).filter(function(N){return N.contains(E.target)}),O=j.length>0?u(E,j[0]):!s.current.noIsolation;O&&E.cancelable&&E.preventDefault()}}},[]),f=g.useCallback(function(S,E,P,_){var j={name:S,delta:E,target:P,should:_,shadowParent:XD(P)};t.current.push(j),setTimeout(function(){t.current=t.current.filter(function(O){return O!==j})},1)},[]),h=g.useCallback(function(S){r.current=ed(S),n.current=void 0},[]),m=g.useCallback(function(S){f(S.type,lw(S),S.target,u(S,e.lockRef.current))},[]),v=g.useCallback(function(S){f(S.type,ed(S),S.target,u(S,e.lockRef.current))},[]);g.useEffect(function(){return Co.push(o),e.setCallbacks({onScrollCapture:m,onWheelCapture:m,onTouchMoveCapture:v}),document.addEventListener("wheel",d,Oo),document.addEventListener("touchmove",d,Oo),document.addEventListener("touchstart",h,Oo),function(){Co=Co.filter(function(S){return S!==o}),document.removeEventListener("wheel",d,Oo),document.removeEventListener("touchmove",d,Oo),document.removeEventListener("touchstart",h,Oo)}},[]);var x=e.removeScrollBar,k=e.inert;return g.createElement(g.Fragment,null,k?g.createElement(o,{styles:GD(i)}):null,x?g.createElement(zD,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function XD(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const ZD=AD(tA,QD);var oA=g.forwardRef(function(e,t){return g.createElement(Tf,kn({},e,{ref:t,sideCar:ZD}))});oA.classNames=Tf.classNames;var JD=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},_o=new WeakMap,td=new WeakMap,rd={},jm=0,lA=function(e){return e&&(e.host||lA(e.parentNode))},eR=function(e,t){return t.map(function(r){if(e.contains(r))return r;var n=lA(r);return n&&e.contains(n)?n:(console.error("aria-hidden",r,"in not contained inside",e,". Doing nothing"),null)}).filter(function(r){return!!r})},tR=function(e,t,r,n){var i=eR(t,Array.isArray(e)?e:[e]);rd[r]||(rd[r]=new WeakMap);var o=rd[r],s=[],u=new Set,d=new Set(i),f=function(m){!m||u.has(m)||(u.add(m),f(m.parentNode))};i.forEach(f);var h=function(m){!m||d.has(m)||Array.prototype.forEach.call(m.children,function(v){if(u.has(v))h(v);else try{var x=v.getAttribute(n),k=x!==null&&x!=="false",S=(_o.get(v)||0)+1,E=(o.get(v)||0)+1;_o.set(v,S),o.set(v,E),s.push(v),S===1&&k&&td.set(v,!0),E===1&&v.setAttribute(r,"true"),k||v.setAttribute(n,"true")}catch(P){console.error("aria-hidden: cannot operate on ",v,P)}})};return h(t),u.clear(),jm++,function(){s.forEach(function(m){var v=_o.get(m)-1,x=o.get(m)-1;_o.set(m,v),o.set(m,x),v||(td.has(m)||m.removeAttribute(n),td.delete(m)),x||m.removeAttribute(r)}),jm--,jm||(_o=new WeakMap,_o=new WeakMap,td=new WeakMap,rd={})}},rR=function(e,t,r){r===void 0&&(r="data-aria-hidden");var n=Array.from(Array.isArray(e)?e:[e]),i=JD(e);return i?(n.push.apply(n,Array.from(i.querySelectorAll("[aria-live], script"))),tR(n,i,r,"aria-hidden")):function(){return null}},Df="Dialog",[sA]=jT(Df),[nR,un]=sA(Df),uA=e=>{const{__scopeDialog:t,children:r,open:n,defaultOpen:i,onOpenChange:o,modal:s=!0}=e,u=g.useRef(null),d=g.useRef(null),[f,h]=DT({prop:n,defaultProp:i??!1,onChange:o,caller:Df});return w.jsx(nR,{scope:t,triggerRef:u,contentRef:d,contentId:Zn(),titleId:Zn(),descriptionId:Zn(),open:f,onOpenChange:h,onOpenToggle:g.useCallback(()=>h(m=>!m),[h]),modal:s,children:r})};uA.displayName=Df;var cA="DialogTrigger",iR=g.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(cA,r),o=Xa(t,i.triggerRef);return w.jsx(Wt.button,{type:"button","aria-haspopup":"dialog","aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":qy(i.open),...n,ref:o,onClick:Qi(e.onClick,i.onOpenToggle)})});iR.displayName=cA;var Vy="DialogPortal",[aR,dA]=sA(Vy,{forceMount:void 0}),fA=e=>{const{__scopeDialog:t,forceMount:r,children:n,container:i}=e,o=un(Vy,t);return w.jsx(aR,{scope:t,forceMount:r,children:g.Children.map(n,s=>w.jsx(Mf,{present:r||o.open,children:w.jsx(ZP,{asChild:!0,container:i,children:s})}))})};fA.displayName=Vy;var Nd="DialogOverlay",hA=g.forwardRef((e,t)=>{const r=dA(Nd,e.__scopeDialog),{forceMount:n=r.forceMount,...i}=e,o=un(Nd,e.__scopeDialog);return o.modal?w.jsx(Mf,{present:n||o.open,children:w.jsx(lR,{...i,ref:t})}):null});hA.displayName=Nd;var oR=qP("DialogOverlay.RemoveScroll"),lR=g.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(Nd,r),o=tD(),s=Xa(t,o);return w.jsx(oA,{as:oR,allowPinchZoom:!0,shards:[i.contentRef],children:w.jsx(Wt.div,{"data-state":qy(i.open),...n,ref:s,style:{pointerEvents:"auto",...n.style}})})}),fl="DialogContent",pA=g.forwardRef((e,t)=>{const r=dA(fl,e.__scopeDialog),{forceMount:n=r.forceMount,...i}=e,o=un(fl,e.__scopeDialog);return w.jsx(Mf,{present:n||o.open,children:o.modal?w.jsx(sR,{...i,ref:t}):w.jsx(uR,{...i,ref:t})})});pA.displayName=fl;var sR=g.forwardRef((e,t)=>{const r=un(fl,e.__scopeDialog),n=g.useRef(null),i=Xa(t,r.contentRef,n);return g.useEffect(()=>{const o=n.current;if(o)return rR(o)},[]),w.jsx(mA,{...e,ref:i,trapFocus:r.open,disableOutsidePointerEvents:r.open,onCloseAutoFocus:Qi(e.onCloseAutoFocus,o=>{var s;o.preventDefault(),(s=r.triggerRef.current)==null||s.focus()}),onPointerDownOutside:Qi(e.onPointerDownOutside,o=>{const s=o.detail.originalEvent,u=s.button===0&&s.ctrlKey===!0;(s.button===2||u)&&o.preventDefault()}),onFocusOutside:Qi(e.onFocusOutside,o=>o.preventDefault())})}),uR=g.forwardRef((e,t)=>{const r=un(fl,e.__scopeDialog),n=g.useRef(!1),i=g.useRef(!1);return w.jsx(mA,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{var s,u;(s=e.onCloseAutoFocus)==null||s.call(e,o),o.defaultPrevented||(n.current||(u=r.triggerRef.current)==null||u.focus(),o.preventDefault()),n.current=!1,i.current=!1},onInteractOutside:o=>{var d,f;(d=e.onInteractOutside)==null||d.call(e,o),o.defaultPrevented||(n.current=!0,o.detail.originalEvent.type==="pointerdown"&&(i.current=!0));const s=o.target;((f=r.triggerRef.current)==null?void 0:f.contains(s))&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&i.current&&o.preventDefault()}})}),mA=g.forwardRef((e,t)=>{const{__scopeDialog:r,trapFocus:n,onOpenAutoFocus:i,onCloseAutoFocus:o,...s}=e,u=un(fl,r);return vD(),w.jsx(w.Fragment,{children:w.jsx(QP,{asChild:!0,loop:!0,trapped:n,onMountAutoFocus:i,onUnmountAutoFocus:o,children:w.jsx(GP,{role:"dialog",id:u.contentId,"aria-describedby":u.descriptionId,"aria-labelledby":u.titleId,"data-state":qy(u.open),...s,ref:t,deferPointerDownOutside:!0,onDismiss:()=>u.onOpenChange(!1)})})})}),vA="DialogTitle",cR=g.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(vA,r);return w.jsx(Wt.h2,{id:i.titleId,...n,ref:t})});cR.displayName=vA;var yA="DialogDescription",dR=g.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(yA,r);return w.jsx(Wt.p,{id:i.descriptionId,...n,ref:t})});dR.displayName=yA;var gA="DialogClose",fR=g.forwardRef((e,t)=>{const{__scopeDialog:r,...n}=e,i=un(gA,r);return w.jsx(Wt.button,{type:"button",...n,ref:t,onClick:Qi(e.onClick,()=>i.onOpenChange(!1))})});fR.displayName=gA;function qy(e){return e?"open":"closed"}var Ss='[cmdk-group=""]',Nm='[cmdk-group-items=""]',hR='[cmdk-group-heading=""]',xA='[cmdk-item=""]',uw=`${xA}:not([aria-disabled="true"])`,Iv="cmdk-item-select",Fo="data-value",pR=(e,t,r)=>_T(e,t,r),bA=g.createContext(void 0),wu=()=>g.useContext(bA),wA=g.createContext(void 0),Gy=()=>g.useContext(wA),SA=g.createContext(void 0),kA=g.forwardRef((e,t)=>{let r=Bo(()=>{var T,Z;return{search:"",value:(Z=(T=e.value)!=null?T:e.defaultValue)!=null?Z:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),n=Bo(()=>new Set),i=Bo(()=>new Map),o=Bo(()=>new Map),s=Bo(()=>new Set),u=EA(e),{label:d,children:f,value:h,onValueChange:m,filter:v,shouldFilter:x,loop:k,disablePointerSelection:S=!1,vimBindings:E=!0,...P}=e,_=Zn(),j=Zn(),O=Zn(),N=g.useRef(null),C=PR();Ua(()=>{if(h!==void 0){let T=h.trim();r.current.value=T,R.emit()}},[h]),Ua(()=>{C(6,ue)},[]);let R=g.useMemo(()=>({subscribe:T=>(s.current.add(T),()=>s.current.delete(T)),snapshot:()=>r.current,setState:(T,Z,se)=>{var te,ce,ye,je;if(!Object.is(r.current[T],Z)){if(r.current[T]=Z,T==="search")B(),V(),C(1,Q);else if(T==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let J=document.getElementById(O);J?J.focus():(te=document.getElementById(_))==null||te.focus()}if(C(7,()=>{var J;r.current.selectedItemId=(J=G())==null?void 0:J.id,R.emit()}),se||C(5,ue),((ce=u.current)==null?void 0:ce.value)!==void 0){let J=Z??"";(je=(ye=u.current).onValueChange)==null||je.call(ye,J);return}}R.emit()}},emit:()=>{s.current.forEach(T=>T())}}),[]),z=g.useMemo(()=>({value:(T,Z,se)=>{var te;Z!==((te=o.current.get(T))==null?void 0:te.value)&&(o.current.set(T,{value:Z,keywords:se}),r.current.filtered.items.set(T,F(Z,se)),C(2,()=>{V(),R.emit()}))},item:(T,Z)=>(n.current.add(T),Z&&(i.current.has(Z)?i.current.get(Z).add(T):i.current.set(Z,new Set([T]))),C(3,()=>{B(),V(),r.current.value||Q(),R.emit()}),()=>{o.current.delete(T),n.current.delete(T),r.current.filtered.items.delete(T);let se=G();C(4,()=>{B(),(se==null?void 0:se.getAttribute("id"))===T&&Q(),R.emit()})}),group:T=>(i.current.has(T)||i.current.set(T,new Set),()=>{o.current.delete(T),i.current.delete(T)}),filter:()=>u.current.shouldFilter,label:d||e["aria-label"],getDisablePointerSelection:()=>u.current.disablePointerSelection,listId:_,inputId:O,labelId:j,listInnerRef:N}),[]);function F(T,Z){var se,te;let ce=(te=(se=u.current)==null?void 0:se.filter)!=null?te:pR;return T?ce(T,r.current.search,Z):0}function V(){if(!r.current.search||u.current.shouldFilter===!1)return;let T=r.current.filtered.items,Z=[];r.current.filtered.groups.forEach(te=>{let ce=i.current.get(te),ye=0;ce.forEach(je=>{let J=T.get(je);ye=Math.max(J,ye)}),Z.push([te,ye])});let se=N.current;le().sort((te,ce)=>{var ye,je;let J=te.getAttribute("id"),we=ce.getAttribute("id");return((ye=T.get(we))!=null?ye:0)-((je=T.get(J))!=null?je:0)}).forEach(te=>{let ce=te.closest(Nm);ce?ce.appendChild(te.parentElement===ce?te:te.closest(`${Nm} > *`)):se.appendChild(te.parentElement===se?te:te.closest(`${Nm} > *`))}),Z.sort((te,ce)=>ce[1]-te[1]).forEach(te=>{var ce;let ye=(ce=N.current)==null?void 0:ce.querySelector(`${Ss}[${Fo}="${encodeURIComponent(te[0])}"]`);ye==null||ye.parentElement.appendChild(ye)})}function Q(){let T=le().find(se=>se.getAttribute("aria-disabled")!=="true"),Z=T==null?void 0:T.getAttribute(Fo);R.setState("value",Z||void 0)}function B(){var T,Z,se,te;if(!r.current.search||u.current.shouldFilter===!1){r.current.filtered.count=n.current.size;return}r.current.filtered.groups=new Set;let ce=0;for(let ye of n.current){let je=(Z=(T=o.current.get(ye))==null?void 0:T.value)!=null?Z:"",J=(te=(se=o.current.get(ye))==null?void 0:se.keywords)!=null?te:[],we=F(je,J);r.current.filtered.items.set(ye,we),we>0&&ce++}for(let[ye,je]of i.current)for(let J of je)if(r.current.filtered.items.get(J)>0){r.current.filtered.groups.add(ye);break}r.current.filtered.count=ce}function ue(){var T,Z,se;let te=G();te&&(((T=te.parentElement)==null?void 0:T.firstChild)===te&&((se=(Z=te.closest(Ss))==null?void 0:Z.querySelector(hR))==null||se.scrollIntoView({block:"nearest"})),te.scrollIntoView({block:"nearest"}))}function G(){var T;return(T=N.current)==null?void 0:T.querySelector(`${xA}[aria-selected="true"]`)}function le(){var T;return Array.from(((T=N.current)==null?void 0:T.querySelectorAll(uw))||[])}function fe(T){let Z=le()[T];Z&&R.setState("value",Z.getAttribute(Fo))}function de(T){var Z;let se=G(),te=le(),ce=te.findIndex(je=>je===se),ye=te[ce+T];(Z=u.current)!=null&&Z.loop&&(ye=ce+T<0?te[te.length-1]:ce+T===te.length?te[0]:te[ce+T]),ye&&R.setState("value",ye.getAttribute(Fo))}function Y(T){let Z=G(),se=Z==null?void 0:Z.closest(Ss),te;for(;se&&!te;)se=T>0?kR(se,Ss):ER(se,Ss),te=se==null?void 0:se.querySelector(uw);te?R.setState("value",te.getAttribute(Fo)):de(T)}let ae=()=>fe(le().length-1),X=T=>{T.preventDefault(),T.metaKey?ae():T.altKey?Y(1):de(1)},M=T=>{T.preventDefault(),T.metaKey?fe(0):T.altKey?Y(-1):de(-1)};return g.createElement(Wt.div,{ref:t,tabIndex:-1,...P,"cmdk-root":"",onKeyDown:T=>{var Z;(Z=P.onKeyDown)==null||Z.call(P,T);let se=T.nativeEvent.isComposing||T.keyCode===229;if(!(T.defaultPrevented||se))switch(T.key){case"n":case"j":{E&&T.ctrlKey&&X(T);break}case"ArrowDown":{X(T);break}case"p":case"k":{E&&T.ctrlKey&&M(T);break}case"ArrowUp":{M(T);break}case"Home":{T.preventDefault(),fe(0);break}case"End":{T.preventDefault(),ae();break}case"Enter":{T.preventDefault();let te=G();if(te){let ce=new Event(Iv);te.dispatchEvent(ce)}}}}},g.createElement("label",{"cmdk-label":"",htmlFor:z.inputId,id:z.labelId,style:OR},d),Rf(e,T=>g.createElement(wA.Provider,{value:R},g.createElement(bA.Provider,{value:z},T))))}),mR=g.forwardRef((e,t)=>{var r,n;let i=Zn(),o=g.useRef(null),s=g.useContext(SA),u=wu(),d=EA(e),f=(n=(r=d.current)==null?void 0:r.forceMount)!=null?n:s==null?void 0:s.forceMount;Ua(()=>{if(!f)return u.item(i,s==null?void 0:s.id)},[f]);let h=PA(i,o,[e.value,e.children,o],e.keywords),m=Gy(),v=Ji(C=>C.value&&C.value===h.current),x=Ji(C=>f||u.filter()===!1?!0:C.search?C.filtered.items.get(i)>0:!0);g.useEffect(()=>{let C=o.current;if(!(!C||e.disabled))return C.addEventListener(Iv,k),()=>C.removeEventListener(Iv,k)},[x,e.onSelect,e.disabled]);function k(){var C,R;S(),(R=(C=d.current).onSelect)==null||R.call(C,h.current)}function S(){m.setState("value",h.current,!0)}if(!x)return null;let{disabled:E,value:P,onSelect:_,forceMount:j,keywords:O,...N}=e;return g.createElement(Wt.div,{ref:dl(o,t),...N,id:i,"cmdk-item":"",role:"option","aria-disabled":!!E,"aria-selected":!!v,"data-disabled":!!E,"data-selected":!!v,onPointerMove:E||u.getDisablePointerSelection()?void 0:S,onClick:E?void 0:k},e.children)}),vR=g.forwardRef((e,t)=>{let{heading:r,children:n,forceMount:i,...o}=e,s=Zn(),u=g.useRef(null),d=g.useRef(null),f=Zn(),h=wu(),m=Ji(x=>i||h.filter()===!1?!0:x.search?x.filtered.groups.has(s):!0);Ua(()=>h.group(s),[]),PA(s,u,[e.value,e.heading,d]);let v=g.useMemo(()=>({id:s,forceMount:i}),[i]);return g.createElement(Wt.div,{ref:dl(u,t),...o,"cmdk-group":"",role:"presentation",hidden:m?void 0:!0},r&&g.createElement("div",{ref:d,"cmdk-group-heading":"","aria-hidden":!0,id:f},r),Rf(e,x=>g.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?f:void 0},g.createElement(SA.Provider,{value:v},x))))}),yR=g.forwardRef((e,t)=>{let{alwaysRender:r,...n}=e,i=g.useRef(null),o=Ji(s=>!s.search);return!r&&!o?null:g.createElement(Wt.div,{ref:dl(i,t),...n,"cmdk-separator":"",role:"separator"})}),gR=g.forwardRef((e,t)=>{let{onValueChange:r,...n}=e,i=e.value!=null,o=Gy(),s=Ji(f=>f.search),u=Ji(f=>f.selectedItemId),d=wu();return g.useEffect(()=>{e.value!=null&&o.setState("search",e.value)},[e.value]),g.createElement(Wt.input,{ref:t,...n,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":d.listId,"aria-labelledby":d.labelId,"aria-activedescendant":u,id:d.inputId,type:"text",value:i?e.value:s,onChange:f=>{i||o.setState("search",f.target.value),r==null||r(f.target.value)}})}),xR=g.forwardRef((e,t)=>{let{children:r,label:n="Suggestions",...i}=e,o=g.useRef(null),s=g.useRef(null),u=Ji(f=>f.selectedItemId),d=wu();return g.useEffect(()=>{if(s.current&&o.current){let f=s.current,h=o.current,m,v=new ResizeObserver(()=>{m=requestAnimationFrame(()=>{let x=f.offsetHeight;h.style.setProperty("--cmdk-list-height",x.toFixed(1)+"px")})});return v.observe(f),()=>{cancelAnimationFrame(m),v.unobserve(f)}}},[]),g.createElement(Wt.div,{ref:dl(o,t),...i,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":u,"aria-label":n,id:d.listId},Rf(e,f=>g.createElement("div",{ref:dl(s,d.listInnerRef),"cmdk-list-sizer":""},f)))}),bR=g.forwardRef((e,t)=>{let{open:r,onOpenChange:n,overlayClassName:i,contentClassName:o,container:s,...u}=e;return g.createElement(uA,{open:r,onOpenChange:n},g.createElement(fA,{container:s},g.createElement(hA,{"cmdk-overlay":"",className:i}),g.createElement(pA,{"aria-label":e.label,"cmdk-dialog":"",className:o},g.createElement(kA,{ref:t,...u}))))}),wR=g.forwardRef((e,t)=>Ji(r=>r.filtered.count===0)?g.createElement(Wt.div,{ref:t,...e,"cmdk-empty":"",role:"presentation"}):null),SR=g.forwardRef((e,t)=>{let{progress:r,children:n,label:i="Loading...",...o}=e;return g.createElement(Wt.div,{ref:t,...o,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},Rf(e,s=>g.createElement("div",{"aria-hidden":!0},s)))}),jo=Object.assign(kA,{List:xR,Item:mR,Input:gR,Group:vR,Separator:yR,Dialog:bR,Empty:wR,Loading:SR});function kR(e,t){let r=e.nextElementSibling;for(;r;){if(r.matches(t))return r;r=r.nextElementSibling}}function ER(e,t){let r=e.previousElementSibling;for(;r;){if(r.matches(t))return r;r=r.previousElementSibling}}function EA(e){let t=g.useRef(e);return Ua(()=>{t.current=e}),t}var Ua=typeof window>"u"?g.useEffect:g.useLayoutEffect;function Bo(e){let t=g.useRef();return t.current===void 0&&(t.current=e()),t}function Ji(e){let t=Gy(),r=()=>e(t.snapshot());return g.useSyncExternalStore(t.subscribe,r,r)}function PA(e,t,r,n=[]){let i=g.useRef(),o=wu();return Ua(()=>{var s;let u=(()=>{var f;for(let h of r){if(typeof h=="string")return h.trim();if(typeof h=="object"&&"current"in h)return h.current?(f=h.current.textContent)==null?void 0:f.trim():i.current}})(),d=n.map(f=>f.trim());o.value(e,u,d),(s=t.current)==null||s.setAttribute(Fo,u),i.current=u}),i}var PR=()=>{let[e,t]=g.useState(),r=Bo(()=>new Map);return Ua(()=>{r.current.forEach(n=>n()),r.current=new Map},[e]),(n,i)=>{r.current.set(n,i),t({})}};function AR(e){let t=e.type;return typeof t=="function"?t(e.props):"render"in t?t.render(e.props):e}function Rf({asChild:e,children:t},r){return e&&g.isValidElement(t)?g.cloneElement(AR(t),{ref:t.ref},r(t.props.children)):r(t)}var OR={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};function CR({onNavigate:e}){const[t,r]=g.useState(!1);return g.useEffect(()=>{const n=i=>{(i.metaKey||i.ctrlKey)&&i.key.toLowerCase()==="k"&&(i.preventDefault(),r(o=>!o))};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[]),w.jsx(jo.Dialog,{open:t,onOpenChange:r,label:"Befehlspalette",className:"fixed inset-0 z-50 flex items-start justify-center bg-black/50 p-4 pt-[12vh] overscroll-contain",onClick:()=>r(!1),children:w.jsxs("div",{className:"w-full max-w-lg overflow-hidden rounded-xl border border-border bg-popover text-popover-foreground shadow-2xl",onClick:n=>n.stopPropagation(),children:[w.jsx(jo.Input,{autoFocus:!0,placeholder:"Springe zu… (Modelle, Routing, System …)",className:"w-full border-b border-border bg-transparent px-4 py-3 text-sm outline-none placeholder:text-muted-foreground"}),w.jsxs(jo.List,{className:"max-h-80 overflow-y-auto p-2",children:[w.jsx(jo.Empty,{className:"px-3 py-6 text-center text-sm text-muted-foreground",children:"Nichts gefunden."}),w.jsx(jo.Group,{heading:"Bereiche",className:"px-1 py-1 text-xs text-muted-foreground",children:Vo.map(n=>w.jsxs(jo.Item,{value:`${n.label} ${n.hint}`,onSelect:()=>{e(n.id),r(!1)},className:"flex cursor-pointer items-center gap-3 rounded-md px-3 py-2 text-sm text-foreground aria-selected:bg-accent aria-selected:text-accent-foreground",children:[w.jsx(n.icon,{className:"h-4 w-4 text-primary"}),w.jsx("span",{children:n.label}),w.jsx("span",{className:"ml-auto truncate text-xs text-muted-foreground",children:n.hint})]},n.id))})]})]})})}const AA="mc_expert_mode",Mv="mc-expert-mode-change",_R=()=>{try{return localStorage.getItem(AA)==="true"}catch{return!1}};function jR(e){return window.addEventListener(Mv,e),window.addEventListener("storage",e),()=>{window.removeEventListener(Mv,e),window.removeEventListener("storage",e)}}function cw(e){localStorage.setItem(AA,String(e)),window.dispatchEvent(new Event(Mv))}function NR(){return g.useSyncExternalStore(jR,_R,()=>!1)}function OA(e){var t,r,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var i=e.length;for(t=0;t{const t=TR(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:n}=e;return{getClassGroupId:s=>{const u=s.split(Yy);return u[0]===""&&u.length!==1&&u.shift(),CA(u,t)||MR(s)},getConflictingClassGroupIds:(s,u)=>{const d=r[s]||[];return u&&n[s]?[...d,...n[s]]:d}}},CA=(e,t)=>{var s;if(e.length===0)return t.classGroupId;const r=e[0],n=t.nextPart.get(r),i=n?CA(e.slice(1),n):void 0;if(i)return i;if(t.validators.length===0)return;const o=e.join(Yy);return(s=t.validators.find(({validator:u})=>u(o)))==null?void 0:s.classGroupId},dw=/^\[(.+)\]$/,MR=e=>{if(dw.test(e)){const t=dw.exec(e)[1],r=t==null?void 0:t.substring(0,t.indexOf(":"));if(r)return"arbitrary.."+r}},TR=e=>{const{theme:t,prefix:r}=e,n={nextPart:new Map,validators:[]};return RR(Object.entries(e.classGroups),r).forEach(([o,s])=>{Tv(s,n,o,t)}),n},Tv=(e,t,r,n)=>{e.forEach(i=>{if(typeof i=="string"){const o=i===""?t:fw(t,i);o.classGroupId=r;return}if(typeof i=="function"){if(DR(i)){Tv(i(n),t,r,n);return}t.validators.push({validator:i,classGroupId:r});return}Object.entries(i).forEach(([o,s])=>{Tv(s,fw(t,o),r,n)})})},fw=(e,t)=>{let r=e;return t.split(Yy).forEach(n=>{r.nextPart.has(n)||r.nextPart.set(n,{nextPart:new Map,validators:[]}),r=r.nextPart.get(n)}),r},DR=e=>e.isThemeGetter,RR=(e,t)=>t?e.map(([r,n])=>{const i=n.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([s,u])=>[t+s,u])):o);return[r,i]}):e,$R=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=new Map,n=new Map;const i=(o,s)=>{r.set(o,s),t++,t>e&&(t=0,n=r,r=new Map)};return{get(o){let s=r.get(o);if(s!==void 0)return s;if((s=n.get(o))!==void 0)return i(o,s),s},set(o,s){r.has(o)?r.set(o,s):i(o,s)}}},_A="!",LR=e=>{const{separator:t,experimentalParseClassName:r}=e,n=t.length===1,i=t[0],o=t.length,s=u=>{const d=[];let f=0,h=0,m;for(let E=0;Eh?m-h:void 0;return{modifiers:d,hasImportantModifier:x,baseClassName:k,maybePostfixModifierPosition:S}};return r?u=>r({className:u,parseClassName:s}):s},zR=e=>{if(e.length<=1)return e;const t=[];let r=[];return e.forEach(n=>{n[0]==="["?(t.push(...r.sort(),n),r=[]):r.push(n)}),t.push(...r.sort()),t},FR=e=>({cache:$R(e.cacheSize),parseClassName:LR(e),...IR(e)}),BR=/\s+/,UR=(e,t)=>{const{parseClassName:r,getClassGroupId:n,getConflictingClassGroupIds:i}=t,o=[],s=e.trim().split(BR);let u="";for(let d=s.length-1;d>=0;d-=1){const f=s[d],{modifiers:h,hasImportantModifier:m,baseClassName:v,maybePostfixModifierPosition:x}=r(f);let k=!!x,S=n(k?v.substring(0,x):v);if(!S){if(!k){u=f+(u.length>0?" "+u:u);continue}if(S=n(v),!S){u=f+(u.length>0?" "+u:u);continue}k=!1}const E=zR(h).join(":"),P=m?E+_A:E,_=P+S;if(o.includes(_))continue;o.push(_);const j=i(S,k);for(let O=0;O0?" "+u:u)}return u};function WR(){let e=0,t,r,n="";for(;e{if(typeof e=="string")return e;let t,r="";for(let n=0;nm(h),e());return r=FR(f),n=r.cache.get,i=r.cache.set,o=u,u(d)}function u(d){const f=n(d);if(f)return f;const h=UR(d,r);return i(d,h),h}return function(){return o(WR.apply(null,arguments))}}const tt=e=>{const t=r=>r[e]||[];return t.isThemeGetter=!0,t},NA=/^\[(?:([a-z-]+):)?(.+)\]$/i,KR=/^\d+\/\d+$/,VR=new Set(["px","full","screen"]),qR=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,GR=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,YR=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,QR=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,XR=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Wn=e=>Go(e)||VR.has(e)||KR.test(e),Ii=e=>kl(e,"length",a3),Go=e=>!!e&&!Number.isNaN(Number(e)),Im=e=>kl(e,"number",Go),ks=e=>!!e&&Number.isInteger(Number(e)),ZR=e=>e.endsWith("%")&&Go(e.slice(0,-1)),Te=e=>NA.test(e),Mi=e=>qR.test(e),JR=new Set(["length","size","percentage"]),e3=e=>kl(e,JR,IA),t3=e=>kl(e,"position",IA),r3=new Set(["image","url"]),n3=e=>kl(e,r3,l3),i3=e=>kl(e,"",o3),Es=()=>!0,kl=(e,t,r)=>{const n=NA.exec(e);return n?n[1]?typeof t=="string"?n[1]===t:t.has(n[1]):r(n[2]):!1},a3=e=>GR.test(e)&&!YR.test(e),IA=()=>!1,o3=e=>QR.test(e),l3=e=>XR.test(e),s3=()=>{const e=tt("colors"),t=tt("spacing"),r=tt("blur"),n=tt("brightness"),i=tt("borderColor"),o=tt("borderRadius"),s=tt("borderSpacing"),u=tt("borderWidth"),d=tt("contrast"),f=tt("grayscale"),h=tt("hueRotate"),m=tt("invert"),v=tt("gap"),x=tt("gradientColorStops"),k=tt("gradientColorStopPositions"),S=tt("inset"),E=tt("margin"),P=tt("opacity"),_=tt("padding"),j=tt("saturate"),O=tt("scale"),N=tt("sepia"),C=tt("skew"),R=tt("space"),z=tt("translate"),F=()=>["auto","contain","none"],V=()=>["auto","hidden","clip","visible","scroll"],Q=()=>["auto",Te,t],B=()=>[Te,t],ue=()=>["",Wn,Ii],G=()=>["auto",Go,Te],le=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],fe=()=>["solid","dashed","dotted","double","none"],de=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],ae=()=>["","0",Te],X=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>[Go,Te];return{cacheSize:500,separator:":",theme:{colors:[Es],spacing:[Wn,Ii],blur:["none","",Mi,Te],brightness:M(),borderColor:[e],borderRadius:["none","","full",Mi,Te],borderSpacing:B(),borderWidth:ue(),contrast:M(),grayscale:ae(),hueRotate:M(),invert:ae(),gap:B(),gradientColorStops:[e],gradientColorStopPositions:[ZR,Ii],inset:Q(),margin:Q(),opacity:M(),padding:B(),saturate:M(),scale:M(),sepia:ae(),skew:M(),space:B(),translate:B()},classGroups:{aspect:[{aspect:["auto","square","video",Te]}],container:["container"],columns:[{columns:[Mi]}],"break-after":[{"break-after":X()}],"break-before":[{"break-before":X()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...le(),Te]}],overflow:[{overflow:V()}],"overflow-x":[{"overflow-x":V()}],"overflow-y":[{"overflow-y":V()}],overscroll:[{overscroll:F()}],"overscroll-x":[{"overscroll-x":F()}],"overscroll-y":[{"overscroll-y":F()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[S]}],"inset-x":[{"inset-x":[S]}],"inset-y":[{"inset-y":[S]}],start:[{start:[S]}],end:[{end:[S]}],top:[{top:[S]}],right:[{right:[S]}],bottom:[{bottom:[S]}],left:[{left:[S]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",ks,Te]}],basis:[{basis:Q()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",Te]}],grow:[{grow:ae()}],shrink:[{shrink:ae()}],order:[{order:["first","last","none",ks,Te]}],"grid-cols":[{"grid-cols":[Es]}],"col-start-end":[{col:["auto",{span:["full",ks,Te]},Te]}],"col-start":[{"col-start":G()}],"col-end":[{"col-end":G()}],"grid-rows":[{"grid-rows":[Es]}],"row-start-end":[{row:["auto",{span:[ks,Te]},Te]}],"row-start":[{"row-start":G()}],"row-end":[{"row-end":G()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",Te]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",Te]}],gap:[{gap:[v]}],"gap-x":[{"gap-x":[v]}],"gap-y":[{"gap-y":[v]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[_]}],px:[{px:[_]}],py:[{py:[_]}],ps:[{ps:[_]}],pe:[{pe:[_]}],pt:[{pt:[_]}],pr:[{pr:[_]}],pb:[{pb:[_]}],pl:[{pl:[_]}],m:[{m:[E]}],mx:[{mx:[E]}],my:[{my:[E]}],ms:[{ms:[E]}],me:[{me:[E]}],mt:[{mt:[E]}],mr:[{mr:[E]}],mb:[{mb:[E]}],ml:[{ml:[E]}],"space-x":[{"space-x":[R]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[R]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",Te,t]}],"min-w":[{"min-w":[Te,t,"min","max","fit"]}],"max-w":[{"max-w":[Te,t,"none","full","min","max","fit","prose",{screen:[Mi]},Mi]}],h:[{h:[Te,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[Te,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[Te,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[Te,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Mi,Ii]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Im]}],"font-family":[{font:[Es]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",Te]}],"line-clamp":[{"line-clamp":["none",Go,Im]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Wn,Te]}],"list-image":[{"list-image":["none",Te]}],"list-style-type":[{list:["none","disc","decimal",Te]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[P]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[P]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...fe(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Wn,Ii]}],"underline-offset":[{"underline-offset":["auto",Wn,Te]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:B()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Te]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Te]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[P]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...le(),t3]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",e3]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},n3]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[k]}],"gradient-via-pos":[{via:[k]}],"gradient-to-pos":[{to:[k]}],"gradient-from":[{from:[x]}],"gradient-via":[{via:[x]}],"gradient-to":[{to:[x]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[u]}],"border-w-x":[{"border-x":[u]}],"border-w-y":[{"border-y":[u]}],"border-w-s":[{"border-s":[u]}],"border-w-e":[{"border-e":[u]}],"border-w-t":[{"border-t":[u]}],"border-w-r":[{"border-r":[u]}],"border-w-b":[{"border-b":[u]}],"border-w-l":[{"border-l":[u]}],"border-opacity":[{"border-opacity":[P]}],"border-style":[{border:[...fe(),"hidden"]}],"divide-x":[{"divide-x":[u]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[u]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[P]}],"divide-style":[{divide:fe()}],"border-color":[{border:[i]}],"border-color-x":[{"border-x":[i]}],"border-color-y":[{"border-y":[i]}],"border-color-s":[{"border-s":[i]}],"border-color-e":[{"border-e":[i]}],"border-color-t":[{"border-t":[i]}],"border-color-r":[{"border-r":[i]}],"border-color-b":[{"border-b":[i]}],"border-color-l":[{"border-l":[i]}],"divide-color":[{divide:[i]}],"outline-style":[{outline:["",...fe()]}],"outline-offset":[{"outline-offset":[Wn,Te]}],"outline-w":[{outline:[Wn,Ii]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:ue()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[P]}],"ring-offset-w":[{"ring-offset":[Wn,Ii]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Mi,i3]}],"shadow-color":[{shadow:[Es]}],opacity:[{opacity:[P]}],"mix-blend":[{"mix-blend":[...de(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":de()}],filter:[{filter:["","none"]}],blur:[{blur:[r]}],brightness:[{brightness:[n]}],contrast:[{contrast:[d]}],"drop-shadow":[{"drop-shadow":["","none",Mi,Te]}],grayscale:[{grayscale:[f]}],"hue-rotate":[{"hue-rotate":[h]}],invert:[{invert:[m]}],saturate:[{saturate:[j]}],sepia:[{sepia:[N]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[r]}],"backdrop-brightness":[{"backdrop-brightness":[n]}],"backdrop-contrast":[{"backdrop-contrast":[d]}],"backdrop-grayscale":[{"backdrop-grayscale":[f]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[h]}],"backdrop-invert":[{"backdrop-invert":[m]}],"backdrop-opacity":[{"backdrop-opacity":[P]}],"backdrop-saturate":[{"backdrop-saturate":[j]}],"backdrop-sepia":[{"backdrop-sepia":[N]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",Te]}],duration:[{duration:M()}],ease:[{ease:["linear","in","out","in-out",Te]}],delay:[{delay:M()}],animate:[{animate:["none","spin","ping","pulse","bounce",Te]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[O]}],"scale-x":[{"scale-x":[O]}],"scale-y":[{"scale-y":[O]}],rotate:[{rotate:[ks,Te]}],"translate-x":[{"translate-x":[z]}],"translate-y":[{"translate-y":[z]}],"skew-x":[{"skew-x":[C]}],"skew-y":[{"skew-y":[C]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",Te]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Te]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":B()}],"scroll-mx":[{"scroll-mx":B()}],"scroll-my":[{"scroll-my":B()}],"scroll-ms":[{"scroll-ms":B()}],"scroll-me":[{"scroll-me":B()}],"scroll-mt":[{"scroll-mt":B()}],"scroll-mr":[{"scroll-mr":B()}],"scroll-mb":[{"scroll-mb":B()}],"scroll-ml":[{"scroll-ml":B()}],"scroll-p":[{"scroll-p":B()}],"scroll-px":[{"scroll-px":B()}],"scroll-py":[{"scroll-py":B()}],"scroll-ps":[{"scroll-ps":B()}],"scroll-pe":[{"scroll-pe":B()}],"scroll-pt":[{"scroll-pt":B()}],"scroll-pr":[{"scroll-pr":B()}],"scroll-pb":[{"scroll-pb":B()}],"scroll-pl":[{"scroll-pl":B()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Te]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Wn,Ii,Im]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},u3=HR(s3);function Re(...e){return u3(Xe(e))}function MQ(e){return e?e.replace(/127\.0\.0\.1|localhost/g,"192.168.178.151"):""}function c3(){const e=NR();return w.jsxs("div",{className:"flex items-center rounded-md border border-border/40 bg-background/40 p-0.5",role:"group","aria-label":"Ansichtsmodus",title:"Einfach zeigt nur das Wichtigste. Experte zeigt alle technischen Details.",children:[w.jsxs("button",{onClick:()=>cw(!1),"aria-pressed":!e,className:Re("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",e?"text-muted-foreground hover:text-foreground":"bg-primary/15 text-primary shadow-sm"),children:[w.jsx(KP,{className:"h-3.5 w-3.5"})," Einfach"]}),w.jsxs("button",{onClick:()=>cw(!0),"aria-pressed":e,className:Re("flex items-center gap-1 rounded px-2 py-1 text-xs font-semibold transition-all cursor-pointer",e?"bg-primary/15 text-primary shadow-sm":"text-muted-foreground hover:text-foreground"),children:[w.jsx(vT,{className:"h-3.5 w-3.5"})," Experte"]})]})}async function Me(e,t){var d;const r={"Content-Type":"application/json",...t==null?void 0:t.headers},n=((d=t==null?void 0:t.method)==null?void 0:d.toUpperCase())||"GET",i=n==="GET"?null:localStorage.getItem("mc_sudo_password"),o=n==="GET"?null:localStorage.getItem("mc_hf_token");i&&(r["X-Sudo-Password"]=i);let s=t==null?void 0:t.body;if(n==="POST"){if(typeof s=="string")try{const f=JSON.parse(s);let h=!1;i&&!("sudo_password"in f)&&(f.sudo_password=i,h=!0),o&&!("hf_token"in f)&&(f.hf_token=o,h=!0),h&&(s=JSON.stringify(f))}catch{}else if(!s){const f={};i&&(f.sudo_password=i),o&&(f.hf_token=o),Object.keys(f).length>0&&(s=JSON.stringify(f))}}const u=await fetch(e,{...t,headers:r,body:s});if(!u.ok)throw new Error(`${u.status} ${u.statusText}`);return u.json()}const TQ=(e,t,r=!1,n=!0)=>Me("/api/groups",{method:"PUT",body:JSON.stringify({group:e,members:t,swap:r,persist:n})}),DQ=e=>Me("/api/routing/policy",{method:"PUT",body:JSON.stringify(e)});function d3({type:e,title:t,message:r,defaultValue:n,autoValue:i,autoLabel:o,onConfirm:s,onCancel:u}){const d=g.useRef(null);return w.jsx("div",{className:"fixed inset-0 z-[99] bg-black/60 backdrop-blur-sm flex items-center justify-center p-4 overscroll-contain",role:"dialog","aria-modal":"true","aria-label":t,children:w.jsxs("div",{className:"w-full max-w-sm rounded-2xl border border-border/80 bg-card p-6 shadow-2xl space-y-4 animate-in fade-in zoom-in-95 duration-200",children:[w.jsxs("div",{className:"flex items-center justify-between border-b border-border/20 pb-2",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-primary",children:t}),w.jsx("button",{onClick:u||(()=>s()),"aria-label":"Schließen",className:"p-1 rounded hover:bg-accent text-muted-foreground hover:text-foreground cursor-pointer",children:w.jsx(bu,{className:"h-4 w-4","aria-hidden":"true"})})]}),w.jsx("p",{className:"max-h-72 overflow-y-auto whitespace-pre-line text-xs text-muted-foreground leading-relaxed scrollbar-thin",children:r}),e==="prompt"&&w.jsxs("div",{className:"flex gap-2",children:[w.jsx("input",{ref:d,type:"text",defaultValue:n,"aria-label":t,className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground",autoFocus:!0,onKeyDown:f=>{var h;f.key==="Enter"&&s((h=d.current)==null?void 0:h.value)}}),i!==void 0&&w.jsx("button",{type:"button",onClick:()=>{d.current&&(d.current.value=i)},title:"Setup-bewussten Optimalwert eintragen",className:"h-9 px-3 shrink-0 text-xs font-semibold text-primary border border-primary/50 bg-primary/10 hover:bg-primary/20 rounded-lg transition-colors cursor-pointer",children:o||"Auto"})]}),w.jsxs("div",{className:"flex justify-end gap-3 pt-2",children:[(e==="confirm"||e==="prompt")&&w.jsx("button",{onClick:u,className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-muted-foreground border border-border/60 bg-background/20 hover:bg-accent rounded-lg transition-colors cursor-pointer",children:"Abbrechen"}),w.jsx("button",{onClick:()=>{var h;const f=e==="prompt"?(h=d.current)==null?void 0:h.value:void 0;s(f)},className:"h-8 px-4 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/95 rounded-lg transition-colors cursor-pointer",children:e==="confirm"?"Ja, fortfahren":e==="prompt"?"Übernehmen":"OK"})]})]})})}function Qy(){const[e,t]=g.useState(null),r=g.useCallback(()=>t(null),[]),n=g.useCallback((u,d,f)=>{t({type:"alert",title:u,message:d,onConfirm:()=>{t(null),f==null||f()}})},[]),i=g.useCallback((u,d,f,h)=>{t({type:"confirm",title:u,message:d,onConfirm:()=>{t(null),f()},onCancel:()=>{t(null),h==null||h()}})},[]),o=g.useCallback((u,d,f,h,m,v)=>{t({type:"prompt",title:u,message:d,defaultValue:f,autoValue:v==null?void 0:v.autoValue,autoLabel:v==null?void 0:v.autoLabel,onConfirm:x=>{t(null),h(x)},onCancel:()=>{t(null),m==null||m()}})},[]),s=e?w.jsx(d3,{...e}):null;return{showAlert:n,showConfirm:i,showPrompt:o,close:r,dialogElement:s}}let Sd=!1;const f3=()=>Sd;function h3(){const e=xu();g.useEffect(()=>{const t=new EventSource("/api/events");return t.onopen=()=>{Sd=!0},t.onerror=()=>{Sd=!1},t.addEventListener("invalidate",r=>{var n;try{const i=((n=JSON.parse(r.data))==null?void 0:n.keys)??[];for(const o of i)e.invalidateQueries({queryKey:[o]})}catch{}}),()=>{Sd=!1,t.close()}},[e])}const De={health:["health"],systemStatus:["system-status"],services:["services"],models:["models"],groups:["groups"],routing:["routing"],routingPolicy:["routing-policy"],jobs:["jobs"],tokenStats:["token-stats"],agentStatus:["agent-status"],hermesBrain:["hermes-brain"],updates:["updates"],discover:["discover"],drafts:e=>["drafts",e??""],connect:e=>["connect",e??""],connectHealth:["connect-health"],memory:(e,t)=>["memory",e??"",t??""],memoryGraph:["memory-graph"],voiceTrace:["voice-trace"],auftragsbuch:["auftragsbuch"],ideen:["ideen"],chronik:["chronik"],governor:["governor"],eigenleben:["eigenleben"],wissen:["wissen"],zeitmaschine:["zeitmaschine"],reminders:["reminders"]},Zt={graph:3e3,schnell:8e3,normal:1e4,gemuetlich:3e4,traege:6e4},Su=e=>()=>f3()?e*5:e,p3=(e=Zt.schnell)=>Ye({queryKey:De.auftragsbuch,queryFn:()=>Me("/api/auftragsbuch"),refetchInterval:Su(e)}),m3=(e=Zt.gemuetlich)=>Ye({queryKey:De.ideen,queryFn:()=>Me("/api/ideen"),refetchInterval:Su(e)}),RQ=(e,t=!1)=>Ye({queryKey:["ideen-log",e],queryFn:()=>Me(`/api/ideen/${e}/log`),enabled:t,refetchInterval:4e3,staleTime:0}),$Q=(e=150,t=Zt.gemuetlich)=>Ye({queryKey:[...De.chronik,e],queryFn:()=>Me(`/api/chronik?limit=${e}`),refetchInterval:Su(t),select:r=>r.items??[]}),LQ=()=>Ye({queryKey:De.wissen,queryFn:()=>Me("/api/wissen")}),zQ=(e=Zt.traege)=>Ye({queryKey:De.eigenleben,queryFn:()=>Me("/api/eigenleben"),refetchInterval:e}),v3=(e=Zt.traege,t=!0)=>Ye({queryKey:De.zeitmaschine,queryFn:()=>Me("/api/zeitmaschine"),refetchInterval:e,enabled:t}),y3=(e=Zt.traege)=>Ye({queryKey:De.reminders,queryFn:()=>Me("/api/reminders"),refetchInterval:Su(e),select:t=>t.items??[]}),g3=(e=12,t=Zt.schnell)=>Ye({queryKey:De.voiceTrace,queryFn:()=>Me(`/api/voice/trace?limit=${e}`),refetchInterval:t,select:r=>r.turns??[]}),FQ=(e=!0)=>Ye({queryKey:De.memoryGraph,queryFn:()=>Me("/api/memory/graph"),enabled:e}),MA=()=>Ye({queryKey:De.health,queryFn:()=>Me("/api/health"),refetchInterval:Zt.normal}),$f=(e=Zt.graph)=>Ye({queryKey:De.systemStatus,queryFn:()=>Me("/api/system/status"),refetchInterval:e}),x3=(e,t=!0)=>Ye({queryKey:["metrics-history",e],queryFn:()=>Me(`/api/system/history?minutes=${e}`),enabled:t,refetchInterval:6e4}),Xy=(e=Zt.normal)=>Ye({queryKey:De.services,queryFn:()=>Me("/api/system/services"),refetchInterval:e}),TA=(e=Zt.schnell)=>Ye({queryKey:De.models,queryFn:()=>Me("/api/models"),refetchInterval:Su(e)}),BQ=(e=Zt.normal)=>Ye({queryKey:De.groups,queryFn:()=>Me("/api/groups"),refetchInterval:e}),UQ=()=>Ye({queryKey:De.routingPolicy,queryFn:()=>Me("/api/routing/policy")}),b3=(e=3e3,t=!0)=>Ye({queryKey:De.jobs,queryFn:()=>Me("/api/jobs"),refetchInterval:e,enabled:t,select:r=>r.jobs??[]}),w3=(e=Zt.graph)=>Ye({queryKey:De.tokenStats,queryFn:()=>Me("/api/system/token-stats"),refetchInterval:e}),S3=(e=Zt.normal)=>Ye({queryKey:De.agentStatus,queryFn:()=>Me("/api/agent/status"),refetchInterval:e}),WQ=(e=Zt.traege)=>Ye({queryKey:De.hermesBrain,queryFn:()=>Me("/api/agent/brain"),refetchInterval:e}),DA=(e=Zt.traege)=>Ye({queryKey:De.updates,queryFn:()=>Me("/api/maintenance/updates"),refetchInterval:e}),HQ=()=>Ye({queryKey:De.discover,queryFn:()=>Me("/api/discover")}),KQ=e=>Ye({queryKey:De.drafts(e),queryFn:()=>Me(`/api/models/drafts?target=${encodeURIComponent(e??"")}`),enabled:!!e}),VQ=e=>Ye({queryKey:De.connect(e),queryFn:()=>Me(e?`/api/connect?${e}`:"/api/connect")}),k3=()=>Ye({queryKey:De.connectHealth,queryFn:()=>Me("/api/connect/health"),refetchInterval:15e3}),E3=e=>Ye({queryKey:De.memory(e==null?void 0:e.q,e==null?void 0:e.category),queryFn:()=>{const t=new URLSearchParams;return e!=null&&e.q&&t.set("q",e.q),e!=null&&e.category&&t.set("category",e.category),Me(`/api/memory?${t}`)},select:t=>e!=null&&e.limit?t.slice(0,e.limit):t});function Ps(e,...t){for(const r of t)e.invalidateQueries({queryKey:r})}function No(e){return(e/1024**3).toFixed(1)}function Mm(e){return e?e>1024**3?`${(e/1024**3).toFixed(1)} GB`:`${(e/1024**2).toFixed(0)} MB`:""}function qQ(e){if(!e)return"—";const t=e/1024**3;return t>=1?`${t.toFixed(1)} GB`:`${(e/1024**2).toFixed(0)} MB`}function GQ(e){if(!e)return"";const t=Math.floor(e/60);return t>0?`${t} min`:`${e} s`}function YQ(e){return e?`${Math.round(e/1024)}k`:"—"}function QQ(e){return e?new Date(e*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit"}):"—"}function As({icon:e,iconClass:t,name:r,status:n,available:i,busy:o,actionLabel:s,onAction:u}){return w.jsxs("div",{className:Re("flex items-center gap-3 rounded-lg border px-3 py-2",i?"border-amber-500/30 bg-amber-500/5":"border-border/50 bg-background/20"),children:[w.jsx(e,{className:Re("h-4 w-4 shrink-0",t)}),w.jsxs("div",{className:"flex-1 min-w-0",children:[w.jsx("div",{className:"text-xs text-foreground truncate",children:r}),w.jsx("div",{className:Re("text-[10px] truncate",i?"text-amber-400/90":"text-muted-foreground"),children:n})]}),w.jsx("button",{onClick:u,disabled:!i||o,className:Re("text-[11px] font-semibold rounded-lg px-2.5 py-1 transition-colors shrink-0",i?"bg-primary text-primary-foreground hover:opacity-90 cursor-pointer":"border border-border/50 text-muted-foreground/40 cursor-default"),children:o?"…":s})]})}function P3({label:e,ok:t,system:r,busy:n,onRestart:i,onLogs:o}){return w.jsxs("div",{className:"flex items-center gap-2.5 rounded-lg border border-border/50 bg-background/20 px-3 py-2",children:[w.jsx("span",{className:Re("w-1.5 h-1.5 rounded-full shrink-0",t===!0?"bg-emerald-500":t===!1?"bg-red-500":"bg-muted-foreground/40")}),w.jsxs("span",{className:"flex-1 text-xs text-foreground truncate",children:[e,r&&w.jsx("span",{className:"text-[9px] text-muted-foreground",children:" (root)"})]}),w.jsx("button",{onClick:i,disabled:n,title:"Neu starten",className:"text-muted-foreground hover:text-primary transition-colors disabled:opacity-50",children:w.jsx(Ko,{className:Re("h-3.5 w-3.5",n&&"animate-spin")})}),w.jsx("button",{onClick:o,title:"Logs ansehen",className:"text-muted-foreground hover:text-primary transition-colors",children:w.jsx(eT,{className:"h-3.5 w-3.5"})})]})}const A3=/\b(error|fehler|fail(ed|ure)?|fatal|critical|crit|panic|traceback|exception|denied|refused|unable|emerg|alert|oom|killed)\b/i,O3=/\b(warn(ing)?|deprecat\w*|retry(ing)?|timeout|timed out|degraded|missing|not found|nicht gefunden)\b/i;function C3(e){return A3.test(e)?"error":O3.test(e)?"warn":"info"}const _3={error:"text-red-400",warn:"text-amber-300",info:"text-cyan-300/80"};function j3({service:e,text:t,loading:r,logStatus:n,onRefresh:i,onOpenSettings:o}){const[s,u]=g.useState(!1),[d,f]=g.useState(""),h=g.useRef(null),m=g.useMemo(()=>t?t.split(` +`).map(E=>({t:E,level:C3(E)})):[],[t]),v=g.useMemo(()=>m.filter(E=>E.level!=="info").length,[m]),x=d.trim().toLowerCase(),k=m.filter(E=>(!s||E.level!=="info")&&(!x||E.t.toLowerCase().includes(x))),S=n==="password_required"||n==="incorrect_password";return w.jsxs("div",{className:"flex-1 flex flex-col min-h-[300px] border border-border/60 bg-black/50 rounded-xl overflow-hidden shadow-inner",children:[w.jsxs("div",{className:"flex h-10 items-center justify-between gap-2 px-3 border-b border-border/40 bg-black/30 shrink-0",children:[w.jsxs("div",{className:"flex items-center gap-1.5 text-[10px] font-mono text-muted-foreground shrink-0",children:[w.jsx(gT,{className:"h-3 w-3 text-primary"}),w.jsx("span",{className:"hidden sm:inline",children:"stdout/stderr —"})," ",e]}),w.jsxs("div",{className:"flex items-center gap-1.5",children:[w.jsxs("div",{className:"relative",children:[w.jsx(pT,{className:"pointer-events-none absolute left-2 top-1/2 h-3 w-3 -translate-y-1/2 text-muted-foreground"}),w.jsx("input",{value:d,onChange:E=>f(E.target.value),placeholder:"filtern…",className:"h-7 w-24 sm:w-36 rounded-md border border-border/50 bg-background/40 pl-6 pr-2 text-[10px] text-foreground outline-none focus:border-primary/50"})]}),w.jsxs("button",{onClick:()=>u(E=>!E),title:"Nur Fehler und Warnungen zeigen",className:Re("flex h-7 items-center gap-1 rounded-md border px-2 text-[10px] font-semibold transition-colors",s?"border-amber-500/50 bg-amber-500/15 text-amber-300":"border-border/50 bg-background/20 text-muted-foreground hover:text-foreground"),children:[w.jsx(Gs,{className:"h-3 w-3"}),"Nur Probleme",v>0?` (${v})`:""]}),w.jsx("button",{onClick:i,disabled:r,title:"Neu laden",className:"flex h-7 w-7 items-center justify-center rounded-md border border-border/50 bg-background/20 text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50",children:w.jsx(Ko,{className:Re("h-3 w-3",r&&"animate-spin")})})]})]}),w.jsx("div",{ref:h,className:"flex-1 overflow-y-auto p-3 text-[10px] font-mono leading-relaxed scrollbar-thin select-text",children:S?w.jsxs("div",{className:"flex h-full flex-col items-center justify-center space-y-3 p-6 text-center",children:[w.jsx(Gs,{className:"h-8 w-8 text-amber-400 animate-pulse animate-duration-1000"}),w.jsx("div",{className:"text-xs font-semibold text-amber-300",children:n==="incorrect_password"?"Falsches Sudo-Passwort hinterlegt.":"Sudo-Passwort für systemd-Dienste erforderlich."}),w.jsxs("p",{className:"max-w-xs text-[10px] leading-normal text-muted-foreground",children:["Für das Auslesen der systemd-Logs von ",e," werden Root-Rechte benötigt. Hinterlege dein Passwort in den Einstellungen."]}),w.jsx("button",{onClick:o,className:"mt-2 rounded-md bg-primary px-3 py-1.5 text-[10px] font-semibold text-primary-foreground transition-colors hover:bg-primary/95",children:"Sudo-Passwort eintragen"})]}):r&&!t?w.jsx("span",{className:"text-muted-foreground",children:"Lade Logs…"}):m.length===0?w.jsx("span",{className:"text-muted-foreground",children:"Keine Logeinträge vorhanden."}):k.length===0?w.jsx("span",{className:"text-muted-foreground",children:s?"Keine Fehler oder Warnungen — der Dienst läuft sauber. ✓":"Kein Treffer für den Filter."}):k.map((E,P)=>w.jsx("div",{className:Re("whitespace-pre-wrap",_3[E.level]),children:E.t||" "},P))})]})}function N3({open:e,showAlert:t}){const[r,n]=g.useState(""),[i,o]=g.useState(""),[s,u]=g.useState(!1),[d,f]=g.useState(!1);return g.useEffect(()=>{e&&(n(localStorage.getItem("mc_sudo_password")||""),o(localStorage.getItem("mc_hf_token")||""))},[e]),w.jsxs("div",{className:"space-y-6",children:[w.jsxs("div",{className:"space-y-2",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Zugangsdaten & Schlüssel"}),w.jsx("p",{className:"text-[10px] text-muted-foreground leading-normal",children:"Diese Daten werden ausschließlich lokal in deinem Browser (localStorage) gespeichert und bei Bedarf an das Backend übertragen."})]}),w.jsxs("div",{className:"space-y-2",children:[w.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[w.jsx(Hy,{className:"h-4 w-4 text-amber-400"}),"Host Sudo-Passwort"]}),w.jsxs("div",{className:"relative",children:[w.jsx("input",{type:s?"text":"password",value:r,onChange:h=>n(h.target.value),"aria-label":"Host Sudo-Passwort",name:"sudo-password",autoComplete:"off",spellCheck:!1,placeholder:"Sudo-Passwort für System-Operationen",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),w.jsx("button",{type:"button",onClick:()=>u(!s),"aria-label":s?"Passwort verbergen":"Passwort anzeigen",className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:s?w.jsx(W1,{className:"h-4 w-4","aria-hidden":"true"}):w.jsx(Cv,{className:"h-4 w-4","aria-hidden":"true"})})]}),w.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Wird benötigt für systemd-Dienste (Llama Swap logs/restart), OS-Update (apt) und Reboot."})]}),w.jsxs("div",{className:"space-y-2",children:[w.jsxs("label",{className:"text-xs font-semibold flex items-center gap-1.5",children:[w.jsx(oT,{className:"h-4 w-4 text-violet-400"}),"HuggingFace API Token"]}),w.jsxs("div",{className:"relative",children:[w.jsx("input",{type:d?"text":"password",value:i,onChange:h=>o(h.target.value),"aria-label":"HuggingFace API Token",name:"hf-token",autoComplete:"off",spellCheck:!1,placeholder:"hf_…",className:"w-full h-10 pl-3 pr-10 text-xs bg-background/40 border border-border/60 rounded-lg outline-none focus:border-primary transition-colors text-foreground"}),w.jsx("button",{type:"button",onClick:()=>f(!d),"aria-label":d?"Token verbergen":"Token anzeigen",className:"absolute inset-y-0 right-0 flex items-center pr-3 text-muted-foreground hover:text-foreground transition-colors",children:d?w.jsx(W1,{className:"h-4 w-4","aria-hidden":"true"}):w.jsx(Cv,{className:"h-4 w-4","aria-hidden":"true"})})]}),w.jsx("p",{className:"text-[9px] text-muted-foreground leading-normal",children:"Erlaubt das Herunterladen von geschützten oder Gate-restricted Modellen direkt über Mission Control."})]}),w.jsxs("div",{className:"flex gap-3 pt-2",children:[w.jsx("button",{onClick:()=>{localStorage.setItem("mc_sudo_password",r),localStorage.setItem("mc_hf_token",i),t("Erfolgreich","Einstellungen erfolgreich lokal gespeichert.")},className:"flex-1 h-9 flex items-center justify-center text-xs font-semibold text-primary-foreground bg-primary hover:bg-primary/90 rounded-lg transition-colors shadow shadow-primary/10 cursor-pointer",children:"Speichern"}),w.jsx("button",{onClick:()=>{n(""),o(""),localStorage.removeItem("mc_sudo_password"),localStorage.removeItem("mc_hf_token"),t("Gelöscht","Zugangsdaten gelöscht.")},className:"h-9 px-4 flex items-center justify-center text-xs font-semibold text-muted-foreground border border-border/60 bg-background/20 hover:bg-accent rounded-lg transition-colors cursor-pointer",children:"Zurücksetzen"})]})]})}function I3({detail:e,maintenanceJob:t,onClose:r,onApply:n}){var d,f;const i=e.data,o={os:{icon:Hy,cls:"text-cyan-400",title:"OS-Pakete (apt)"},engine:{icon:Nf,cls:"text-violet-400",title:"Inferenz-Engine (llama.cpp)"},swap:{icon:HP,cls:"text-fuchsia-400",title:"Router (llama-swap)"},hermes:{icon:_f,cls:"text-amber-400",title:"Hermes-Agent"}}[e.kind],s=o.icon,u=i?e.kind==="os"?(i.count??0)===0:e.kind==="hermes"?(i.behind??0)===0:i.installed_build!=null&&i.latest_build!=null&&i.latest_build<=i.installed_build:!0;return w.jsxs("div",{className:"fixed inset-0 z-[60] flex items-center justify-center p-4",children:[w.jsx("div",{className:"absolute inset-0 bg-black/70 backdrop-blur-sm",onClick:r}),w.jsxs("div",{className:"relative w-full max-w-lg max-h-[80vh] flex flex-col rounded-2xl border border-border/60 bg-card shadow-2xl font-sans text-foreground",children:[w.jsxs("div",{className:"flex h-14 shrink-0 items-center justify-between border-b border-border/40 px-5",children:[w.jsxs("div",{className:"flex items-center gap-2",children:[w.jsx(s,{className:Re("h-4.5 w-4.5",o.cls)}),w.jsx("h3",{className:"text-sm font-semibold",children:o.title})]}),w.jsx("button",{onClick:r,className:"flex h-7 w-7 items-center justify-center rounded-lg border border-border/40 text-muted-foreground hover:bg-accent transition-colors",children:w.jsx(bu,{className:"h-4 w-4"})})]}),w.jsx("div",{className:"flex-1 overflow-y-auto p-5 text-xs space-y-3 scrollbar-thin",children:e.loading?w.jsxs("div",{className:"flex h-24 items-center justify-center gap-2 text-muted-foreground",children:[w.jsx(Ko,{className:"h-4 w-4 animate-spin"})," Details werden geladen…"]}):i!=null&&i.error?w.jsx("div",{className:"rounded-lg border border-red-500/30 bg-red-500/5 p-3 text-red-400",children:i.error}):w.jsxs(w.Fragment,{children:[(i==null?void 0:i.action_needed)!=null&&w.jsxs("div",{className:Re("flex items-start gap-2 rounded-lg border p-3",i.action_needed?"border-amber-500/40 bg-amber-500/10":"border-emerald-500/40 bg-emerald-500/10"),children:[i.action_needed?w.jsx(Gs,{className:"h-4 w-4 text-amber-400 shrink-0 mt-0.5"}):w.jsx(YM,{className:"h-4 w-4 text-emerald-400 shrink-0 mt-0.5"}),w.jsxs("div",{className:"min-w-0",children:[w.jsxs("div",{className:Re("text-xs font-semibold",i.action_needed?"text-amber-300":"text-emerald-300"),children:["Musst du etwas tun? ",i.action_needed?"Ja":"Nein — die Box regelt das (Fangnetz)"]}),i.action_needed&&i.action_text&&w.jsx("div",{className:"mt-0.5 text-[11px] text-foreground/90",children:i.action_text})]})]}),(i==null?void 0:i.summary)&&w.jsxs("div",{className:"rounded-lg border border-primary/25 bg-primary/5 p-3 space-y-1",children:[w.jsx("div",{className:"text-[10px] font-bold uppercase tracking-wider text-primary",children:"Was dieses Update bedeutet (Zusammenfassung der Box)"}),w.jsx("pre",{className:"whitespace-pre-wrap text-[11px] leading-relaxed text-foreground/90 font-sans",children:i.summary})]}),e.kind==="os"?w.jsxs(w.Fragment,{children:[((i==null?void 0:i.count)??0)===0?w.jsx("div",{className:"text-muted-foreground",children:"Keine Pakete zu aktualisieren — System ist aktuell."}):w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:"text-muted-foreground",children:[i.count," Paket(e) werden aktualisiert:"]}),w.jsx("div",{className:"space-y-1",children:i.packages.map(h=>w.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-md border border-border/40 bg-background/30 px-2.5 py-1.5",children:[w.jsxs("span",{className:"flex items-center gap-1.5 font-mono text-[11px] truncate",children:[w.jsx(H1,{className:"h-3 w-3 text-cyan-400 shrink-0"}),h.name]}),w.jsxs("span",{className:"flex items-center gap-1 font-mono text-[10px] text-muted-foreground shrink-0",children:[w.jsx("span",{children:h.current}),w.jsx(U1,{className:"h-3 w-3"}),w.jsx("span",{className:"text-emerald-400",children:h.candidate})]})]},h.name))})]}),(((d=i==null?void 0:i.held_back)==null?void 0:d.length)??0)>0&&w.jsxs("div",{className:"space-y-1.5 rounded-lg border border-border/40 bg-background/20 p-3",children:[w.jsxs("div",{className:"flex items-center gap-1.5 text-[11px] font-semibold text-muted-foreground",children:[w.jsx(QM,{className:"h-3.5 w-3.5"})," Vom Hersteller zurückgestellt — kein Handeln nötig"]}),w.jsx("p",{className:"text-[10px] text-muted-foreground leading-normal",children:"Diese Pakete gäbe es bereits, Ubuntu spielt sie aber gestaffelt aus (Phasen-Rollout) bzw. hält sie kurz zurück. Sie kommen bei einem der nächsten automatischen Läufe von selbst — das ist kein Fehler und nichts hängt fest."}),w.jsx("div",{className:"space-y-1",children:i.held_back.map(h=>w.jsxs("div",{className:"flex items-center justify-between gap-2 rounded-md border border-border/30 bg-background/30 px-2.5 py-1.5",children:[w.jsxs("span",{className:"flex items-center gap-1.5 font-mono text-[11px] truncate",children:[w.jsx(H1,{className:"h-3 w-3 text-muted-foreground shrink-0"}),h.name]}),w.jsx("span",{className:"text-[9px] text-muted-foreground shrink-0",children:h.reason==="phasing"?"Phasen-Rollout":"vorerst zurückgehalten"})]},h.name))})]})]}):e.kind==="engine"||e.kind==="swap"?w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:"flex items-center gap-2 font-mono text-[11px]",children:[w.jsxs("span",{className:"rounded-md border border-border/40 bg-background/30 px-2 py-1",children:["Build ",(i==null?void 0:i.installed_build)??"?"]}),w.jsx(U1,{className:"h-3.5 w-3.5 text-muted-foreground"}),w.jsxs("span",{className:"rounded-md border border-emerald-500/30 bg-emerald-500/5 px-2 py-1 text-emerald-400",children:["Build ",(i==null?void 0:i.latest_build)??"?"]})]}),((i==null?void 0:i.name)||(i==null?void 0:i.latest_tag))&&w.jsxs("div",{className:"text-muted-foreground",children:["Release: ",w.jsx("span",{className:"text-foreground",children:i==null?void 0:i.name}),i!=null&&i.latest_tag?` (${i.latest_tag})`:""]}),(i==null?void 0:i.url)&&w.jsxs("a",{href:i.url,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 text-primary hover:underline",children:["Original-Release-Notes auf GitHub ",w.jsx(JM,{className:"h-3 w-3"})]}),(i==null?void 0:i.body)&&w.jsxs("details",{className:"group",children:[w.jsx("summary",{className:"cursor-pointer text-[10px] text-muted-foreground hover:text-foreground",children:"Original-Notizen (englisch) anzeigen"}),w.jsx("pre",{className:"mt-1.5 whitespace-pre-wrap rounded-lg border border-border/40 bg-background/30 p-3 text-[10px] leading-relaxed text-muted-foreground max-h-60 overflow-y-auto scrollbar-thin",children:i.body})]})]}):(((f=i==null?void 0:i.commits)==null?void 0:f.length)??0)===0?w.jsx("div",{className:"text-muted-foreground",children:"Keine neuen Commits — Hermes-Agent ist bereits aktuell."}):w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:"text-muted-foreground",children:[i.behind," neue Commit(s) auf ",w.jsxs("span",{className:"font-mono text-foreground",children:["origin/",i.branch]}),":"]}),w.jsx("div",{className:"space-y-1",children:i.commits.map(h=>w.jsxs("div",{className:"flex items-start gap-2 rounded-md border border-border/40 bg-background/30 px-2.5 py-1.5",children:[w.jsx(rT,{className:"h-3.5 w-3.5 text-primary shrink-0 mt-0.5"}),w.jsxs("div",{className:"min-w-0",children:[w.jsx("div",{className:"text-[11px] truncate",children:h.subject}),w.jsxs("div",{className:"font-mono text-[9px] text-muted-foreground",children:[h.hash," · ",h.when]})]})]},h.hash))})]}),e.kind!=="os"&&!u&&w.jsxs("div",{className:"flex items-start gap-2 rounded-lg border border-border/40 bg-background/20 p-2.5",children:[w.jsx(mT,{className:"h-3.5 w-3.5 text-emerald-400 shrink-0 mt-0.5"}),w.jsxs("p",{className:"text-[10px] text-muted-foreground leading-normal",children:["Vor dem Update sichert die Box automatisch den alten Stand. Danach prüft sie den ganzen Stack per echter Anfrage — läuft etwas nicht, rollt sie von selbst zurück",e.kind==="hermes"?" und startet den Gateway neu":"","."]})]})]})}),w.jsxs("div",{className:"flex gap-3 border-t border-border/40 p-4 shrink-0",children:[w.jsx("button",{onClick:r,className:"h-9 flex-1 rounded-lg border border-border/60 bg-background/20 text-xs font-semibold text-muted-foreground hover:bg-accent transition-colors cursor-pointer",children:"Schließen"}),w.jsx("button",{onClick:n,disabled:e.loading||u||!!t,title:t?`Update läuft bereits: ${t.label}`:void 0,className:"h-9 flex-1 rounded-lg bg-primary text-xs font-semibold text-primary-foreground hover:opacity-90 transition-all cursor-pointer disabled:opacity-40 disabled:cursor-default",children:t?"Update läuft…":"Jetzt aktualisieren"})]})]})]})}function M3({open:e,onClose:t,defaultTab:r="maintenance"}){var lr,fi;const n=xu(),{showAlert:i,showConfirm:o,dialogElement:s}=Qy(),{data:u}=DA(),{data:d}=Xy(),f=b3(3e3,e).data??[],{data:h}=v3(void 0,e),[m,v]=g.useState("llama-swap"),[x,k]=g.useState(""),[S,E]=g.useState(!1),[P,_]=g.useState(null),[j,O]=g.useState({}),[N,C]=g.useState("maintenance"),[R,z]=g.useState(!1),[F,V]=g.useState(""),[Q,B]=g.useState(!1),[ue,G]=g.useState(!1),[le,fe]=g.useState(null),de=(d==null?void 0:d.services)??[],Y=()=>Ps(n,De.jobs);function ae(q){return q?new Date(q*1e3).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"Nie"}g.useEffect(()=>{e&&r&&C(r)},[e,r]),g.useEffect(()=>{e&&Ps(n,De.updates,De.services,De.jobs,De.zeitmaschine)},[e]);function X(q){E(!0),_(null),Me(`/api/maintenance/logs?service=${q}&lines=150`).then(Ie=>{Ie.ok?k(Ie.text):(k(`Fehler beim Laden der Logs: ${Ie.err||"Unbekannter Fehler"}`),(Ie.status==="incorrect_password"||Ie.status==="password_required")&&_(Ie.status))}).catch(Ie=>k(`Fehler: ${Ie.message}`)).finally(()=>E(!1))}g.useEffect(()=>{!e||N!=="logs"||X(m)},[e,N,m]);function M(q){return(q==null?void 0:q.status)==="busy"?(i("Update läuft bereits",`Es läuft gerade „${q.running}". Bitte warte, bis es fertig ist.`),Y(),!0):!1}function T(q){return(q==null?void 0:q.status)==="password_required"||(q==null?void 0:q.status)==="incorrect_password"?(i("Box-Passwort nötig",(q.status==="incorrect_password"?"Das gespeicherte Box-Passwort stimmt nicht. ":"Für dieses Update braucht die Box dein Passwort. ")+"Bitte oben im Reiter „Einstellungen“ setzen bzw. korrigieren."),!0):q&&q.ok===!1?(i("Update fehlgeschlagen",q.err||"Unbekannter Fehler."),!0):!1}async function Z(q){const Ie={os:"os-update",engine:"engine-update",swap:"swap-update"}[q];try{const Ze=await Me(`/api/maintenance/${Ie}`,{method:"POST"});if(M(Ze)||T(Ze))return;Y(),C("maintenance")}catch(Ze){i("Fehler",`Update konnte nicht starten: ${Ze.message}`)}}async function se(){G(!0);try{const q=await Me("/api/maintenance/hermes-update",{method:"POST"});if(M(q))return;Y()}catch(q){i("Fehler",`Hermes-Update fehlgeschlagen: ${q.message}`)}finally{G(!1)}}async function te(q){fe({kind:q,loading:!0,data:null});try{const Ie=await Me(`/api/maintenance/update-details?kind=${q}`);fe({kind:q,loading:!1,data:Ie})}catch(Ie){fe({kind:q,loading:!1,data:{kind:q,error:Ie.message}})}}function ce(){const q=le==null?void 0:le.kind;fe(null),q==="os"||q==="engine"||q==="swap"?Z(q):q==="hermes"&&se()}function ye(){var Ie;const q=[u!=null&&u.engine?"Engine":null,u!=null&&u.swap?"Router":null,(Ie=u==null?void 0:u.components)!=null&&Ie.some(Ze=>Ze.update===!0)?"Hermes-Agent":null,u!=null&&u.os?`OS (${u.os} Pakete)`:null].filter(Boolean);o("Alle Updates einspielen?",`Nacheinander in einem Job: ${q.join(" → ")}. Jeder Schritt sichert und prüft sich selbst; schlägt einer fehl, stoppt der Rest. (OS braucht das Box-Passwort aus den Einstellungen — fehlt es, wird OS übersprungen.)`,async()=>{try{const Ze=await Me("/api/maintenance/update-all",{method:"POST"});if(M(Ze)||T(Ze))return;if((Ze==null?void 0:Ze.status)==="nothing"){i("Nichts zu tun","Es stehen keine Updates aus.");return}Y(),C("maintenance")}catch(Ze){i("Fehler",`„Alle aktualisieren" konnte nicht starten: ${Ze.message}`)}})}async function je(){z(!0);try{await Me("/api/maintenance/check-updates",{method:"POST"}),Ps(n,De.jobs,De.updates),C("maintenance")}catch(q){i("Fehler",`Fehler bei der Update-Suche: ${q.message}`)}finally{z(!1)}}async function J(q,Ie){try{await Me("/api/models/install",{method:"POST",body:JSON.stringify({repo:q,role:Ie})}),i("Gestartet",`Modell-Upgrade für '${Ie}' (${q}) gestartet.`),Y(),C("maintenance")}catch(Ze){i("Fehler",`Fehler beim Starten des Modell-Upgrades: ${Ze.message}`)}}async function we(){o("Reboot bestätigen","Bist du sicher, dass du das gesamte Host-System neu starten willst?",async()=>{try{await Me("/api/maintenance/reboot",{method:"POST"}),i("Reboot","Reboot ausgelöst. System startet neu...",()=>t())}catch(q){i("Fehler",`Fehler beim Reboot: ${q.message}`)}})}async function Ae(){B(!0),V("Snapshot wird erzeugt...");try{const q=await Me("/api/system/backup",{method:"POST"});V(q.ok?`Snapshot erzeugt: ${q.snapshot} (${q.files.length} Komponenten)`:"Backup fehlgeschlagen."),Ps(n,De.zeitmaschine)}catch(q){V(`Fehler: ${q.message}`)}finally{B(!1)}}async function ne(q){O(Ie=>({...Ie,[q]:!0}));try{const Ie=await Me("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:q})});Ie.ok?(i("Dienst neu gestartet",`Dienst ${q} wurde erfolgreich neu gestartet.`,()=>{N==="logs"&&m===q&&X(q)}),Ps(n,De.services,De.health,De.models)):i("Fehler",`Fehler beim Neustart: ${Ie.err||"Unbekannter Fehler"}`)}catch(Ie){i("Fehler",`Fehler beim Neustart: ${Ie.message}`)}finally{O(Ie=>({...Ie,[q]:!1}))}}async function lt(q){try{await Me(`/api/jobs/${q}/cancel`,{method:"POST"}),Y()}catch(Ie){i("Fehler",`Fehler beim Abbrechen: ${Ie.message}`)}}const $e=f.find(q=>(q.state==="running"||q.state==="queued")&&q.group==="maintenance"),Ee=(u?(u.os>0?1:0)+(u.engine?1:0)+(u.swap?1:0):0)+(((lr=u==null?void 0:u.components)==null?void 0:lr.filter(q=>q.update===!0).length)??0),vt=(h==null?void 0:h.backups)??[];return w.jsxs(w.Fragment,{children:[w.jsx("div",{className:Re("fixed inset-0 bg-black/60 backdrop-blur-sm z-50 transition-opacity duration-300",e?"opacity-100 pointer-events-auto":"opacity-0 pointer-events-none"),onClick:t}),w.jsxs("div",{className:Re("fixed inset-y-0 right-0 w-full sm:w-[640px] bg-card/85 backdrop-blur-xl border-l border-border/60 shadow-2xl z-50 flex flex-col transform transition-transform duration-300 ease-in-out font-sans text-foreground",e?"translate-x-0":"translate-x-full"),children:[w.jsxs("div",{className:"flex h-16 shrink-0 items-center justify-between border-b border-border/40 px-6",children:[w.jsxs("div",{className:"flex items-center gap-2",children:[w.jsx(WP,{className:"h-4.5 w-4.5 text-primary"}),w.jsx("h2",{className:"text-sm font-semibold tracking-wide uppercase font-space",children:"OS-Zentrale & Pflege"})]}),w.jsx("button",{onClick:t,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-border/40 text-muted-foreground hover:bg-accent transition-colors",children:w.jsx(bu,{className:"h-4 w-4"})})]}),w.jsx("div",{className:"flex border-b border-border/40 px-6",children:["maintenance","logs","settings"].map(q=>w.jsx("button",{onClick:()=>C(q),className:Re("flex-1 py-3 text-xs font-semibold uppercase tracking-wider border-b-2 text-center transition-all",N===q?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"),children:q==="maintenance"?"System-Wartung":q==="logs"?"System-Logs":"Einstellungen"},q))}),w.jsxs("div",{className:"flex-1 overflow-y-auto p-6 space-y-6",children:[N==="maintenance"&&w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:"space-y-2.5",children:[w.jsxs("div",{className:"flex items-center justify-between",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Updates"}),w.jsxs("div",{className:"flex items-center gap-3",children:[Ee>0&&w.jsxs("button",{onClick:ye,disabled:!!$e,className:"flex items-center gap-1 rounded-md border border-primary/40 bg-primary/10 px-2 py-1 text-[10px] font-bold text-primary transition-colors hover:bg-primary/20 disabled:opacity-50",children:[w.jsx(XM,{className:"h-3 w-3"})," Alle aktualisieren (",Ee,")"]}),w.jsxs("button",{onClick:je,disabled:R||!!$e,className:"flex items-center gap-1 text-[10px] font-semibold text-primary hover:text-primary/80 transition-colors disabled:opacity-50",children:[w.jsx(Ko,{className:Re("h-3 w-3",R&&"animate-spin")})," Nach Updates suchen"]})]})]}),(u==null?void 0:u.last_check)&&w.jsxs("div",{className:"text-[9px] text-muted-foreground -mt-1",children:["Zuletzt gesucht: ",ae(u.last_check)]}),$e&&w.jsxs("div",{className:"flex items-center gap-2 rounded-lg border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-[11px] text-amber-300",children:[w.jsx(Ko,{className:"h-3.5 w-3.5 shrink-0 animate-spin"}),w.jsxs("span",{children:["Update läuft: ",w.jsx("span",{className:"font-semibold",children:$e.label})," — bitte warten. Weitere Updates sind solange gesperrt."]})]}),w.jsxs("div",{className:"space-y-1.5",children:[w.jsx(As,{icon:Hy,iconClass:"text-cyan-400",name:"OS-Pakete (apt)",available:!!(u!=null&&u.os),status:u!=null&&u.os?`${u.os} verfügbar`:"aktuell",actionLabel:"Anzeigen",onAction:()=>te("os")}),w.jsx(As,{icon:Nf,iconClass:"text-violet-400",name:"Inferenz-Engine (llama.cpp)",available:!!(u!=null&&u.engine),status:u!=null&&u.engine?"Update verfügbar":"aktuell",actionLabel:"Anzeigen",onAction:()=>te("engine")}),w.jsx(As,{icon:HP,iconClass:"text-fuchsia-400",name:"Router (llama-swap)",available:!!(u!=null&&u.swap),status:u!=null&&u.swap?"Update verfügbar":"aktuell",actionLabel:"Anzeigen",onAction:()=>te("swap")}),(()=>{var Ie;const q=(Ie=u==null?void 0:u.components)==null?void 0:Ie.find(Ze=>Ze.key==="hermes_agent");return w.jsx(As,{icon:_f,iconClass:"text-amber-400",name:"Hermes-Agent",available:(q==null?void 0:q.update)===!0,busy:ue,status:(q==null?void 0:q.update)===!0?`Update: ${q.latest}`:(q==null?void 0:q.reachable)===!1?"offline":"aktuell",actionLabel:"Anzeigen",onAction:()=>te("hermes")})})(),(fi=u==null?void 0:u.model_list)==null?void 0:fi.map(q=>w.jsx(As,{icon:KM,iconClass:"text-emerald-400",name:`Modell · ${q.role}`,available:!0,status:q.title,actionLabel:"Upgrade",onAction:()=>J(q.repo,q.role)},q.role))]})]}),w.jsxs("div",{className:"space-y-2.5",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Dienste"}),w.jsxs("div",{className:"space-y-1.5",children:[de.length===0&&w.jsx("div",{className:"rounded-lg border border-dashed border-border/50 p-4 text-center text-xs text-muted-foreground",children:"Dienste-Liste wird geladen …"}),de.map(q=>w.jsx(P3,{label:q.name,system:q.scope==="system",ok:q.ok,busy:j[q.unit],onRestart:()=>ne(q.unit),onLogs:()=>{v(q.unit),C("logs")}},q.unit))]})]}),w.jsxs("div",{className:"space-y-2.5",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Backup"}),w.jsxs("div",{className:"rounded-lg border border-border/50 bg-background/20 px-3 py-2.5 flex items-center gap-3",children:[w.jsxs("div",{className:"flex-1 min-w-0",children:[w.jsx("div",{className:"text-xs text-foreground truncate",children:vt[0]?`Letztes: ${vt[0].snapshot}`:"Noch kein Backup"}),w.jsxs("div",{className:"text-[10px] text-muted-foreground",children:[vt.length," Snapshots · Wiederherstellen: Chronik → Zeitmaschine"]})]}),w.jsxs("button",{onClick:Ae,disabled:Q,className:"flex items-center gap-1.5 text-[11px] font-semibold rounded-lg px-2.5 py-1 bg-primary text-primary-foreground hover:opacity-90 transition-all cursor-pointer disabled:opacity-50 shrink-0",children:[w.jsx(VM,{className:Re("h-3.5 w-3.5",Q&&"animate-pulse")})," Snapshot"]})]}),F&&w.jsx("div",{className:"text-[10px] font-mono text-primary bg-primary/5 p-2 rounded-lg border border-primary/20 break-all leading-normal",children:F})]}),w.jsxs("div",{className:"space-y-2.5",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-red-400/80",children:"Gefahrenzone"}),w.jsxs("button",{onClick:we,className:"flex w-full items-center gap-3 p-3 rounded-lg border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 text-red-400 transition-all text-left text-xs font-semibold",children:[w.jsx(fT,{className:"h-4.5 w-4.5"}),w.jsxs("div",{children:[w.jsx("div",{children:"Host-System neu starten"}),w.jsx("div",{className:"text-[10px] text-red-400/80 font-normal",children:"Startet die ganze Box neu"})]})]})]}),w.jsxs("div",{className:"space-y-3",children:[w.jsxs("div",{className:"flex items-center justify-between",children:[w.jsx("h3",{className:"text-xs font-bold uppercase tracking-wider text-muted-foreground",children:"Hintergrund-Aufgaben"}),w.jsxs("span",{className:"text-[10px] font-mono bg-primary/10 text-primary px-1.5 py-0.5 rounded-full",children:[f.filter(q=>q.state==="running"||q.state==="queued").length," Aktiv"]})]}),w.jsx("div",{className:"space-y-3",children:f.length===0?w.jsx("div",{className:"text-xs text-muted-foreground border border-dashed border-border/60 rounded-xl p-6 text-center",children:"Aktuell keine aktiven Hintergrund-Jobs."}):f.map(q=>{const Ie=q.state==="running"||q.state==="queued";return w.jsxs("div",{className:Re("p-3 rounded-xl border transition-all duration-300",Ie?"border-primary/40 bg-primary/5 shadow-md shadow-primary/5":"border-border/40 bg-background/20 opacity-80"),children:[w.jsxs("div",{className:"flex items-start justify-between gap-3",children:[w.jsxs("div",{className:"space-y-1",children:[w.jsxs("div",{className:"text-xs font-semibold flex items-center gap-1.5",children:[Ie&&w.jsxs("span",{className:"flex h-2 w-2 relative",children:[w.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"}),w.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-primary"})]}),q.label]}),w.jsxs("div",{className:"text-[10px] font-mono text-muted-foreground uppercase flex items-center gap-2",children:[w.jsxs("span",{children:["ID: ",q.id]}),w.jsx("span",{children:"•"}),w.jsx("span",{className:Re(q.state==="done"&&"text-emerald-400",q.state==="failed"&&"text-red-400",q.state==="running"&&"text-primary",q.state==="queued"&&"text-amber-400",q.state==="canceled"&&"text-muted-foreground"),children:q.state})]})]}),Ie&&w.jsx("button",{onClick:()=>lt(q.id),className:"text-[10px] font-semibold text-red-400 hover:text-red-300 border border-red-500/20 bg-red-500/5 hover:bg-red-500/10 px-2 py-0.5 rounded transition-colors",children:"Abbrechen"})]}),q.state==="running"&&w.jsxs("div",{className:"mt-3 space-y-1",children:[w.jsx("div",{className:"w-full h-1.5 bg-muted rounded-full overflow-hidden",children:w.jsx("div",{className:"h-full bg-primary transition-all duration-500",style:{width:`${q.progress??0}%`}})}),w.jsxs("div",{className:"flex justify-between items-center text-[9px] font-mono text-muted-foreground",children:[w.jsxs("span",{children:[q.progress??0,"%"]}),q.done_bytes!=null&&q.total_bytes!=null&&w.jsxs("span",{children:[Mm(q.done_bytes)," / ",Mm(q.total_bytes),q.rate_bps!=null&&` (${Mm(q.rate_bps)}/s)`]}),q.eta_s!=null&&w.jsxs("span",{children:["ETA: ",q.eta_s,"s"]})]})]})]},q.id)})})]})]}),N==="logs"&&w.jsxs("div",{className:"flex flex-col h-full space-y-4",children:[w.jsxs("div",{className:"flex items-center gap-2",children:[w.jsx("select",{value:m,onChange:q=>v(q.target.value),className:"flex-1 h-9 px-3 text-xs bg-background/40 border border-border/60 rounded-lg outline-none text-foreground font-semibold",children:de.map(q=>w.jsxs("option",{value:q.unit,children:[q.name," (",q.scope==="system"?"systemd-root":"user",")"]},q.unit))}),w.jsxs("button",{onClick:()=>ne(m),disabled:j[m],className:"flex h-9 px-3 items-center gap-1.5 text-xs font-semibold rounded-lg border border-border/60 bg-background/20 hover:border-primary/50 transition-colors disabled:opacity-50",title:"Dienst neu starten",children:[w.jsx(Ko,{className:Re("h-3.5 w-3.5",j[m]&&"animate-spin")}),"Restart"]})]}),w.jsx(j3,{service:m,text:x,loading:S,logStatus:P,onRefresh:()=>X(m),onOpenSettings:()=>C("settings")})]}),N==="settings"&&w.jsx(N3,{open:e,showAlert:i})]})]}),le&&w.jsx(I3,{detail:le,maintenanceJob:$e,onClose:()=>fe(null),onApply:ce}),s]})}let Dv=[],hw=[];const Rv=new Set,RA=()=>Rv.forEach(e=>e());function T3(e){return Rv.add(e),()=>{Rv.delete(e)}}function D3(e){Dv=[...Dv,e].slice(-40),RA()}function R3(e){hw=[...hw,e].slice(-40),RA()}const $3=()=>g.useSyncExternalStore(T3,()=>Dv);function L3(){const{data:e,dataUpdatedAt:t}=$f(),{data:r,dataUpdatedAt:n}=w3(),i=g.useRef(null);g.useEffect(()=>{var o,s,u,d;e&&D3({t:Date.now(),cpu:((o=e.cpu)==null?void 0:o.percent)??0,ram:((s=e.ram)==null?void 0:s.percent)??0,gpu:((u=e.gpu)==null?void 0:u.busy_percent)??null,disk:((d=e.disk)==null?void 0:d.percent)??null})},[t]),g.useEffect(()=>{if(!r)return;const o=Date.now(),s=r.prompt_tokens,u=r.completion_tokens;if(i.current){const d=Math.max((o-i.current.t)/1e3,.001);R3({t:o,prompt:Math.max(0,(s-i.current.p)/d),completion:Math.max(0,(u-i.current.c)/d)})}i.current={p:s,c:u,t:o}},[n])}function z3(){var z,F,V,Q,B,ue;const{data:e,isError:t}=MA(),{data:r,isError:n}=Xy(),{data:i}=TA(),{data:o}=$f(),s=t||n,u=!!e&&!!r,d=G=>{var le;return(le=r==null?void 0:r.services.find(fe=>fe.unit===G))==null?void 0:le.ok},f=G=>!!(r!=null&&r.services.some(le=>le.unit===G)),h=e==null?void 0:e.engine_reachable,m=(z=e==null?void 0:e.brain)==null?void 0:z.ready,v=((F=e==null?void 0:e.brain)==null?void 0:F.model)||((V=i==null?void 0:i.models.find(G=>G.role==="hermes"))==null?void 0:V.name)||"",x=[];s&&x.push({id:"mc2",label:"Steuerpult (MC2)",icon:Nf,critical:!0,status:"down",detail:"Die Zentrale antwortet nicht — alle Anzeigen hier können veraltet sein. Läuft die Box? Deploy aktiv?"}),x.push((()=>{const G={id:"brain",label:"Lucys Hirn",icon:Fy,critical:!0};return u?h===!1?{...G,status:"down",detail:"Die Motor-Maschine (Engine) läuft nicht — Lucy kann gerade gar nicht denken.",repair:{kind:"restart",service:"llama-swap",label:"Motor neu starten",needsSudo:!0}}:m===!1?{...G,status:"down",detail:"Lucys Hirn ist gerade eingeschlafen — einmal aufwecken.",repair:v?{kind:"loadModel",model:v,label:"Hirn aufwecken"}:void 0}:{...G,status:"ok",detail:"Wach und ansprechbar."}:{...G,status:"loading",detail:"Wird geprüft …"}})()),x.push((()=>{const G={id:"vision",label:"Lucys Augen",icon:Cv,critical:!1};if(!u||!i)return{...G,status:"loading",detail:"Wird geprüft …"};const le=i.models.find(de=>de.role==="vision");return le?(i.running??[]).includes(le.name)?{...G,status:"ok",detail:"Sieht gerade zu (geladen, solange Lucy sie nutzt)."}:{...G,status:"ok",detail:"Augen ruhen — sie laden von selbst, sobald Lucy startet oder ein Bild kommt.",repair:{kind:"loadModel",model:le.name,label:"Augen wecken"}}:{...G,status:"warn",detail:"Kein Augen-Modell eingerichtet — Lucy kann keine Bilder ansehen."}})()),x.push((()=>{const G={id:"memory",label:"Lucys Gedächtnis",icon:HM,critical:!0},le=d("mem0-service");return!u||le===void 0?{...G,status:"loading",detail:"Wird geprüft …"}:le?{...G,status:"ok",detail:"Merkt sich Neues und findet Altes wieder."}:{...G,status:"down",detail:"Lucy kann sich gerade nichts merken — das Gedächtnis antwortet nicht.",repair:{kind:"restart",service:"mem0-service",label:"Gedächtnis neu starten"}}})()),x.push((()=>{const G={id:"gateway",label:"Verbindung (Gateway)",icon:Uy,critical:!0},le=e?e.gateway_reachable:d("mc2-gateway");if(!u||le===void 0)return{...G,status:"loading",detail:"Wird geprüft …"};const fe=f("mc2-gateway")?"mc2-gateway":"mission-control-2";return le?{...G,status:"ok",detail:"Apps und IDEs können Lucy erreichen."}:{...G,status:"down",detail:"Der Modell-Gateway antwortet nicht — Lucy und die IDEs erreichen kein Modell.",repair:{kind:"restart",service:fe,label:"Gateway neu starten"}}})()),x.push((()=>{const G={id:"steward",label:"Wächter (Steward)",icon:Wy,critical:!1};return u?f("mc2-steward")?d("mc2-steward")?{...G,status:"ok",detail:"Wacht über Warm-Set, Dienste und Gedächtnis."}:{...G,status:"warn",detail:"Der Wächter schläft — niemand meldet gerade Ausfälle oder wärmt Modelle nach.",repair:{kind:"restart",service:"mc2-steward",label:"Wächter neu starten"}}:{...G,status:"ok",detail:"Auf dieser Installation nicht eingerichtet."}:{...G,status:"loading",detail:"Wird geprüft …"}})()),x.push((()=>{const G={id:"agent",label:"Lucys Agent (Hermes)",icon:_f,critical:!0},le=d("hermes-gateway");return!u||le===void 0?{...G,status:"loading",detail:"Wird geprüft …"}:le?{...G,status:"ok",detail:"Lucy ist bereit zu reden und zu handeln."}:{...G,status:"down",detail:"Lucys Agent ist offline — sie reagiert gerade nicht.",repair:{kind:"restart",service:"hermes-gateway",label:"Agent neu starten"}}})()),x.push((()=>{const G={id:"voice",label:"Lucys Stimme",icon:dT,critical:!1},le=d("voice-service");return!u||le===void 0?{...G,status:"loading",detail:"Wird geprüft …"}:le?{...G,status:"ok",detail:"Lucy kann hören und sprechen."}:{...G,status:"warn",detail:"Sprechen ist gerade aus — Tippen geht weiter normal.",repair:{kind:"restart",service:"voice-service",label:"Stimme neu starten"}}})());const k=((Q=o==null?void 0:o.ram)==null?void 0:Q.total)??0,S=((B=o==null?void 0:o.ram)==null?void 0:B.used)??0,E=((ue=o==null?void 0:o.ram)==null?void 0:ue.percent)??(k>0?Math.min(100,S/k*100):0),P=1024**3,_=k?E>=93?{status:"full",usedGb:S/P,totalGb:k/P,pct:E,text:"Speicher fast voll — Lucy könnte langsamer werden."}:E>=85?{status:"warn",usedGb:S/P,totalGb:k/P,pct:E,text:"Speicher gut gefüllt — noch okay."}:{status:"ok",usedGb:S/P,totalGb:k/P,pct:E,text:"Genug Speicher frei."}:{status:"unknown",usedGb:0,totalGb:0,pct:0,text:"Speicher-Auslastung unbekannt."},j=x.some(G=>G.status==="loading"),O=x.filter(G=>G.critical&&G.status==="down"),N=x.filter(G=>G.status==="warn"||!G.critical&&G.status==="down"),C=_.status==="full";return{verdict:j&&!O.length?"loading":O.length?"problem":N.length||C?"warn":"gut",checks:x,memory:_,problems:O,warns:N,unreachable:s}}const F3={ok:"bg-emerald-500",warn:"bg-amber-500",alert:"bg-red-500",muted:"bg-muted-foreground/40",loading:"bg-muted-foreground/40 animate-pulse"},B3={ok:"hover:border-emerald-500/40",warn:"hover:border-amber-500/50",alert:"hover:border-red-500/50",muted:"hover:border-primary/40",loading:"hover:border-border/60"};function Io({icon:e,title:t,value:r,unit:n,tone:i="muted",hint:o,onClick:s}){return w.jsxs("button",{onClick:s,className:Re("group relative flex flex-col items-start mc-card p-5 text-left cursor-pointer",B3[i]),children:[w.jsxs("div",{className:"mb-4 flex w-full items-center justify-between",children:[w.jsx("span",{className:"flex h-10 w-10 items-center justify-center rounded-xl border border-border/40 bg-background/30 text-foreground/80 transition-colors group-hover:text-primary",children:w.jsx(e,{className:"h-5 w-5"})}),w.jsx("span",{className:Re("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",F3[i]),title:o})]}),w.jsxs("div",{className:"flex items-baseline gap-1.5",children:[w.jsx("span",{className:"text-2xl font-bold tracking-tight text-foreground font-space tabular-nums",children:r}),n&&w.jsx("span",{className:"text-xs font-medium text-muted-foreground",children:n})]}),w.jsxs("div",{className:"mt-1 flex w-full items-center justify-between",children:[w.jsx("span",{className:"text-sm font-semibold text-foreground/90",children:t}),w.jsx(Bs,{className:"h-4 w-4 text-muted-foreground/40 transition-all group-hover:translate-x-0.5 group-hover:text-primary"})]}),o&&w.jsx("span",{className:"mt-0.5 text-[11px] text-muted-foreground",children:o})]})}const pw={"":"einmalig",daily:"täglich",weekdays:"werktags",weekly:"wöchentlich"};function U3(){const{data:e=[],isLoading:t}=y3(),r=xu(),{showAlert:n,showConfirm:i,dialogElement:o}=Qy(),[s,u]=g.useState(!1),[d,f]=g.useState(""),[h,m]=g.useState(""),[v,x]=g.useState(""),[k,S]=g.useState(!1),E=()=>r.invalidateQueries({queryKey:De.reminders});async function P(){if(!(!d.trim()||!h)){S(!0);try{await Me("/api/reminders",{method:"POST",body:JSON.stringify({text:d,when:h,repeat:v})}),f(""),m(""),x(""),u(!1),E()}catch(O){n("Anlegen fehlgeschlagen",String((O==null?void 0:O.message)||O))}finally{S(!1)}}}function _(O,N){i("Erinnerung löschen?",`„${N}" wird entfernt.`,async()=>{try{await Me(`/api/reminders/${O}`,{method:"DELETE"}),E()}catch(C){n("Fehler",String((C==null?void 0:C.message)||C))}})}const j=[...e].sort((O,N)=>O.next_ts-N.next_ts);return w.jsxs("div",{className:"mc-card p-4",children:[w.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[w.jsxs("span",{className:"flex items-center gap-2 text-sm font-bold text-foreground",children:[w.jsx("span",{className:"flex h-8 w-8 items-center justify-center rounded-lg border border-border/40 bg-background/30 text-amber-300",children:w.jsx(WM,{className:"h-4 w-4"})}),"Anstehendes"]}),w.jsxs("button",{onClick:()=>u(O=>!O),className:"flex h-8 items-center gap-1 rounded-lg border border-border/60 bg-background/30 px-2.5 text-[11px] font-semibold text-muted-foreground hover:text-foreground hover:border-primary/40 transition-all cursor-pointer",children:[s?w.jsx(bu,{className:"h-3.5 w-3.5"}):w.jsx(K1,{className:"h-3.5 w-3.5"})," ",s?"Abbrechen":"Neu"]})]}),s&&w.jsxs("div",{className:"mb-3 space-y-2 rounded-xl border border-border/50 bg-background/30 p-3",children:[w.jsx("input",{value:d,onChange:O=>f(O.target.value),placeholder:"Woran soll Lucy erinnern?","aria-label":"Erinnerungstext",className:"h-9 w-full rounded-lg border border-border/60 bg-card/45 px-3 text-xs text-foreground outline-none focus:ring-1 focus:ring-primary/50"}),w.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[w.jsx("input",{type:"datetime-local",value:h,onChange:O=>m(O.target.value),"aria-label":"Zeitpunkt",className:"h-9 rounded-lg border border-border/60 bg-card/45 px-2 text-xs text-foreground outline-none focus:ring-1 focus:ring-primary/50 [color-scheme:dark]"}),w.jsx("select",{value:v,onChange:O=>x(O.target.value),"aria-label":"Wiederholung",className:"h-9 cursor-pointer rounded-lg border border-border/60 bg-card/45 px-2 text-xs font-semibold text-foreground outline-none",children:Object.entries(pw).map(([O,N])=>w.jsx("option",{value:O,className:"bg-popover",children:N},O))}),w.jsxs("button",{onClick:P,disabled:k||!d.trim()||!h,className:"ml-auto flex h-9 items-center gap-1.5 rounded-lg bg-primary px-3 text-xs font-semibold text-primary-foreground hover:opacity-90 transition-all cursor-pointer disabled:opacity-50",children:[k?w.jsx(jf,{className:"h-3.5 w-3.5 animate-spin"}):w.jsx(K1,{className:"h-3.5 w-3.5"})," Anlegen"]})]})]}),t?w.jsx("p",{className:"text-xs text-muted-foreground",children:"Wird geladen …"}):j.length===0?w.jsx("p",{className:"text-xs text-muted-foreground",children:"Keine Erinnerungen. Lucy sagt dir hier (und per Stimme) Bescheid, wenn etwas ansteht."}):w.jsxs("div",{className:"space-y-1.5",children:[j.slice(0,6).map(O=>{const N=O.next_ts*1e3_(O.id,O.text),"aria-label":"Erinnerung löschen",className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-lg border border-border/40 text-muted-foreground opacity-0 transition-all hover:bg-red-500/5 hover:text-red-400 group-hover:opacity-100 cursor-pointer",children:w.jsx(xT,{className:"h-3.5 w-3.5"})})]},O.id)}),j.length>6&&w.jsxs("p",{className:"text-[10px] text-muted-foreground/60",children:["+",j.length-6," weitere"]})]}),o]})}function W3(){const{data:e,error:t}=$f(),r=$3();return{sys:e,hist:r,error:t}}var H3=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onFocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"];function Zy(e){if(typeof e!="string")return!1;var t=H3;return t.includes(e)}var K3=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],V3=new Set(K3);function $A(e){return typeof e!="string"?!1:V3.has(e)}function LA(e){return typeof e=="string"&&e.startsWith("data-")}function on(e){if(typeof e!="object"||e===null)return{};var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&($A(r)||LA(r))&&(t[r]=e[r]);return t}function Lf(e){if(e==null)return null;if(g.isValidElement(e)&&typeof e.props=="object"&&e.props!==null){var t=e.props;return on(t)}return typeof e=="object"&&!Array.isArray(e)?on(e):null}function Br(e){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&($A(r)||LA(r)||Zy(r))&&(t[r]=e[r]);return t}function q3(e){return e==null?null:g.isValidElement(e)?Br(e.props):typeof e=="object"&&!Array.isArray(e)?Br(e):null}var G3=["children","width","height","viewBox","className","style","title","desc"];function $v(){return $v=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.width,i=e.height,o=e.viewBox,s=e.className,u=e.style,d=e.title,f=e.desc,h=Y3(e,G3),m=o||{width:n,height:i,x:0,y:0},v=Xe("recharts-surface",s);return g.createElement("svg",$v({},Br(h),{className:v,width:n,height:i,style:u,viewBox:"".concat(m.x," ").concat(m.y," ").concat(m.width," ").concat(m.height),ref:t}),g.createElement("title",null,d),g.createElement("desc",null,f),r)}),X3=["children","className"];function Lv(){return Lv=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=e.children,n=e.className,i=Z3(e,X3),o=Xe("recharts-layer",n);return g.createElement("g",Lv({className:o},Br(i),{ref:t}),r)}),e$=g.createContext(null);function ft(e){return function(){return e}}const zv=Math.PI,Fv=2*zv,ba=1e-6,t$=Fv-ba;function FA(e){this._+=e[0];for(let t=1,r=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return FA;const r=10**t;return function(n){this._+=n[0];for(let i=1,o=n.length;iba)if(!(Math.abs(m*d-f*h)>ba)||!o)this._append`L${this._x1=t},${this._y1=r}`;else{let x=n-s,k=i-u,S=d*d+f*f,E=x*x+k*k,P=Math.sqrt(S),_=Math.sqrt(v),j=o*Math.tan((zv-Math.acos((S+v-E)/(2*P*_)))/2),O=j/_,N=j/P;Math.abs(O-1)>ba&&this._append`L${t+O*h},${r+O*m}`,this._append`A${o},${o},0,0,${+(m*x>h*k)},${this._x1=t+N*d},${this._y1=r+N*f}`}}arc(t,r,n,i,o,s){if(t=+t,r=+r,n=+n,s=!!s,n<0)throw new Error(`negative radius: ${n}`);let u=n*Math.cos(i),d=n*Math.sin(i),f=t+u,h=r+d,m=1^s,v=s?i-o:o-i;this._x1===null?this._append`M${f},${h}`:(Math.abs(this._x1-f)>ba||Math.abs(this._y1-h)>ba)&&this._append`L${f},${h}`,n&&(v<0&&(v=v%Fv+Fv),v>t$?this._append`A${n},${n},0,1,${m},${t-u},${r-d}A${n},${n},0,1,${m},${this._x1=f},${this._y1=h}`:v>ba&&this._append`A${n},${n},0,${+(v>=zv)},${m},${this._x1=t+n*Math.cos(o)},${this._y1=r+n*Math.sin(o)}`)}rect(t,r,n,i){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+r}h${n=+n}v${+i}h${-n}Z`}toString(){return this._}}function BA(e){let t=3;return e.digits=function(r){if(!arguments.length)return t;if(r==null)t=null;else{const n=Math.floor(r);if(!(n>=0))throw new RangeError(`invalid digits: ${r}`);t=n}return e},()=>new n$(t)}function Jy(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function UA(e){this._context=e}UA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function zf(e){return new UA(e)}function WA(e){return e[0]}function HA(e){return e[1]}function KA(e,t){var r=ft(!0),n=null,i=zf,o=null,s=BA(u);e=typeof e=="function"?e:e===void 0?WA:ft(e),t=typeof t=="function"?t:t===void 0?HA:ft(t);function u(d){var f,h=(d=Jy(d)).length,m,v=!1,x;for(n==null&&(o=i(x=s())),f=0;f<=h;++f)!(f=x;--k)u.point(j[k],O[k]);u.lineEnd(),u.areaEnd()}P&&(j[v]=+e(E,v,m),O[v]=+t(E,v,m),u.point(n?+n(E,v,m):j[v],r?+r(E,v,m):O[v]))}if(_)return u=null,_+""||null}function h(){return KA().defined(i).curve(s).context(o)}return f.x=function(m){return arguments.length?(e=typeof m=="function"?m:ft(+m),n=null,f):e},f.x0=function(m){return arguments.length?(e=typeof m=="function"?m:ft(+m),f):e},f.x1=function(m){return arguments.length?(n=m==null?null:typeof m=="function"?m:ft(+m),f):n},f.y=function(m){return arguments.length?(t=typeof m=="function"?m:ft(+m),r=null,f):t},f.y0=function(m){return arguments.length?(t=typeof m=="function"?m:ft(+m),f):t},f.y1=function(m){return arguments.length?(r=m==null?null:typeof m=="function"?m:ft(+m),f):r},f.lineX0=f.lineY0=function(){return h().x(e).y(t)},f.lineY1=function(){return h().x(e).y(r)},f.lineX1=function(){return h().x(n).y(t)},f.defined=function(m){return arguments.length?(i=typeof m=="function"?m:ft(!!m),f):i},f.curve=function(m){return arguments.length?(s=m,o!=null&&(u=s(o)),f):s},f.context=function(m){return arguments.length?(m==null?o=u=null:u=s(o=m),f):o},f}class VA{constructor(t,r){this._context=t,this._x=r}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,r){switch(t=+t,r=+r,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,r):this._context.moveTo(t,r);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,r,t,r):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+r)/2,t,this._y0,t,r);break}}this._x0=t,this._y0=r}}function i$(e){return new VA(e,!0)}function a$(e){return new VA(e,!1)}function Id(){}function Md(e,t,r){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+r)/6)}function qA(e){this._context=e}qA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Md(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Md(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function o$(e){return new qA(e)}function GA(e){this._context=e}GA.prototype={areaStart:Id,areaEnd:Id,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Md(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function l$(e){return new GA(e)}function YA(e){this._context=e}YA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+e)/6,n=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:Md(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function s$(e){return new YA(e)}function QA(e){this._context=e}QA.prototype={areaStart:Id,areaEnd:Id,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function u$(e){return new QA(e)}function mw(e){return e<0?-1:1}function vw(e,t,r){var n=e._x1-e._x0,i=t-e._x1,o=(e._y1-e._y0)/(n||i<0&&-0),s=(r-e._y1)/(i||n<0&&-0),u=(o*i+s*n)/(n+i);return(mw(o)+mw(s))*Math.min(Math.abs(o),Math.abs(s),.5*Math.abs(u))||0}function yw(e,t){var r=e._x1-e._x0;return r?(3*(e._y1-e._y0)/r-t)/2:t}function Tm(e,t,r){var n=e._x0,i=e._y0,o=e._x1,s=e._y1,u=(o-n)/3;e._context.bezierCurveTo(n+u,i+u*t,o-u,s-u*r,o,s)}function Td(e){this._context=e}Td.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Tm(this,this._t0,yw(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var r=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Tm(this,yw(this,r=vw(this,e,t)),r);break;default:Tm(this,this._t0,r=vw(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=r}}};function XA(e){this._context=new ZA(e)}(XA.prototype=Object.create(Td.prototype)).point=function(e,t){Td.prototype.point.call(this,t,e)};function ZA(e){this._context=e}ZA.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,r,n,i,o){this._context.bezierCurveTo(t,e,n,r,o,i)}};function c$(e){return new Td(e)}function d$(e){return new XA(e)}function JA(e){this._context=e}JA.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,r=e.length;if(r)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),r===2)this._context.lineTo(e[1],t[1]);else for(var n=gw(e),i=gw(t),o=0,s=1;s=0;--t)i[t]=(s[t]-i[t+1])/o[t];for(o[r-1]=(e[r]+i[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var r=this._x*(1-this._t)+e*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,t)}break}}this._x=e,this._y=t}};function h$(e){return new Ff(e,.5)}function p$(e){return new Ff(e,0)}function m$(e){return new Ff(e,1)}function Wa(e,t){if((s=e.length)>1)for(var r=1,n,i,o=e[t[0]],s,u=o.length;r=0;)r[t]=t;return r}function v$(e,t){return e[t]}function y$(e){const t=[];return t.key=e,t}function g$(){var e=ft([]),t=Bv,r=Wa,n=v$;function i(o){var s=Array.from(e.apply(this,arguments),y$),u,d=s.length,f=-1,h;for(const m of o)for(u=0,++f;u0){for(var r,n,i=0,o=e[0].length,s;i0){for(var r=0,n=e[t[0]],i,o=n.length;r0)||!((o=(i=e[t[0]]).length)>0))){for(var r=0,n=1,i,o,s;n1&&arguments[1]!==void 0?arguments[1]:k$,r=10**t,n=Math.round(e*r)/r;return Object.is(n,-0)?0:n}function Lt(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n{var u=r[s-1];return typeof u=="string"?i+u+o:u!==void 0?i+Gi(u)+o:i+o},"")}var Lr=e=>e===0?0:e>0?1:-1,Cn=e=>typeof e=="number"&&e!=+e,Ha=e=>typeof e=="string"&&e.length>1&&e.indexOf("%")===e.length-1,be=e=>(typeof e=="number"||e instanceof Number)&&!Cn(e),_n=e=>be(e)||typeof e=="string",E$=0,Xs=e=>{var t=++E$;return"".concat(e||"").concat(t)},ea=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!be(t)&&typeof t!="string")return n;var o;if(Ha(t)){if(r==null)return n;var s=t.indexOf("%");o=r*parseFloat(t.slice(0,s))/100}else o=+t;return Cn(o)&&(o=n),i&&r!=null&&o>r&&(o=r),o},rO=e=>{if(!Array.isArray(e))return!1;for(var t=e.length,r={},n=0;nn&&(typeof t=="function"?t(n):Za(n,t))===r)}var Ut=e=>e===null||typeof e>"u",rg=e=>Ut(e)?e:"".concat(e.charAt(0).toUpperCase()).concat(e.slice(1));function vr(e){return e!=null}function El(){}var iO=e=>"radius"in e&&"startAngle"in e&&"endAngle"in e,ng=(e,t)=>{if(!e||typeof e=="function"||typeof e=="boolean")return null;var r=e;if(g.isValidElement(e)&&(r=e.props),typeof r!="object"&&typeof r!="function")return null;var n={};return Object.keys(r).forEach(i=>{Zy(i)&&typeof r[i]=="function"&&(n[i]=(o=>r[i](r,o)))}),n},P$=(e,t,r)=>n=>(e(t,r,n),null),A$=(e,t,r)=>{if(e===null||typeof e!="object"&&typeof e!="function")return null;var n=null;return Object.keys(e).forEach(i=>{var o=e[i];Zy(i)&&typeof o=="function"&&(n||(n={}),n[i]=P$(o,t,r))}),n};function xw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function O$(e){for(var t=1;t(s[u]===void 0&&n[u]!==void 0&&(s[u]=n[u]),s),r);return o}function N$(e,t){const r=new Map;for(let n=0;nObject.prototype.propertyIsEnumerable.call(e,t))}function ig(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const R$="[object RegExp]",oO="[object String]",lO="[object Number]",sO="[object Boolean]",uO="[object Arguments]",$$="[object Symbol]",L$="[object Date]",z$="[object Map]",F$="[object Set]",B$="[object Array]",U$="[object ArrayBuffer]",W$="[object Object]",H$="[object DataView]",K$="[object Uint8Array]",V$="[object Uint8ClampedArray]",q$="[object Uint16Array]",G$="[object Uint32Array]",Y$="[object Int8Array]",Q$="[object Int16Array]",X$="[object Int32Array]",Z$="[object Float32Array]",J$="[object Float64Array]",bw=typeof globalThis=="object"&&globalThis||typeof window=="object"&&window||typeof self=="object"&&self||typeof global=="object"&&global||(function(){return this})();function e5(e){return typeof bw.Buffer<"u"&&bw.Buffer.isBuffer(e)}function t5(e,t){return Ea(e,void 0,e,new Map,t)}function Ea(e,t,r,n=new Map,i=void 0){const o=i==null?void 0:i(e,t,r,n);if(o!==void 0)return o;if(Wv(e))return e;if(n.has(e))return n.get(e);if(Array.isArray(e)){const s=new Array(e.length);n.set(e,s);for(let u=0;u{}):Hv(e,t,function n(i,o,s,u,d,f){const h=r(i,o,s,u,d,f);return h!==void 0?!!h:Hv(i,o,n,f,!1)},new Map,!0)}function Hv(e,t,r,n,i=!1){if(t===e)return!0;switch(typeof t){case"object":return i5(e,t,r,n);case"function":return Object.keys(t).length>0?Hv(e,{...t},r,n,i):kd(e,t);default:return cO(e)&&i?typeof t=="string"?t==="":!0:kd(e,t)}}function i5(e,t,r,n){if(t==null)return!0;if(Array.isArray(t))return fO(e,t,r,n);if(t instanceof Map)return a5(e,t,r,n);if(t instanceof Set)return o5(e,t,r,n);const i=Object.keys(t);if(e==null||Wv(e))return i.length===0;if(i.length===0)return!0;if(n!=null&&n.has(t))return n.get(t)===e;n==null||n.set(t,e);try{for(let o=0;o{})}function l5(e){return e=n5(e),t=>hO(t,e)}function s5(e,t){return t5(e,(r,n,i,o)=>{if(typeof e=="object"){if(ig(e)==="[object Object]"&&typeof e.constructor!="function"){const s={};return o.set(e,s),en(s,e,i,o),s}switch(Object.prototype.toString.call(e)){case lO:case oO:case sO:{const s=new e.constructor(e==null?void 0:e.valueOf());return en(s,e),s}case uO:{const s={};return en(s,e),s.length=e.length,s[Symbol.iterator]=e[Symbol.iterator],s}default:return}}})}function u5(e){return s5(e)}const c5=/^(?:0|[1-9]\d*)$/;function pO(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e=0}function mO(e){return e!=null&&typeof e!="function"&&m5(e.length)}function v5(e){return typeof e=="object"&&e!==null}function y5(e){return v5(e)&&mO(e)}function ww(e,t=aO){return y5(e)?N$(Array.from(e),I$(p5(t),1)):[]}function g5(e,t,r){return t===!0?ww(e,r):typeof t=="function"?ww(e,t):e}var Dm={exports:{}},Rm={},$m={exports:{}},Lm={};/** * @license React * use-sync-external-store-shim.production.js * @@ -393,7 +377,7 @@ Error generating stack: `+w.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Sw;function j$(){if(Sw)return Lm;Sw=1;var e=kl();function t(m,v){return m===v&&(m!==0||1/m===1/v)||m!==m&&v!==v}var r=typeof Object.is=="function"?Object.is:t,n=e.useState,i=e.useEffect,o=e.useLayoutEffect,s=e.useDebugValue;function u(m,v){var x=v(),k=n({inst:{value:x,getSnapshot:v}}),S=k[0].inst,E=k[1];return o(function(){S.value=x,S.getSnapshot=v,d(S)&&E({inst:S})},[m,x,v]),i(function(){return d(S)&&E({inst:S}),m(function(){d(S)&&E({inst:S})})},[m]),s(x),x}function d(m){var v=m.getSnapshot;m=m.value;try{var x=v();return!r(m,x)}catch{return!0}}function f(m,v){return v()}var h=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?f:u;return Lm.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:h,Lm}var kw;function _$(){return kw||(kw=1,$m.exports=j$()),$m.exports}/** + */var Sw;function x5(){if(Sw)return Lm;Sw=1;var e=Sl();function t(m,v){return m===v&&(m!==0||1/m===1/v)||m!==m&&v!==v}var r=typeof Object.is=="function"?Object.is:t,n=e.useState,i=e.useEffect,o=e.useLayoutEffect,s=e.useDebugValue;function u(m,v){var x=v(),k=n({inst:{value:x,getSnapshot:v}}),S=k[0].inst,E=k[1];return o(function(){S.value=x,S.getSnapshot=v,d(S)&&E({inst:S})},[m,x,v]),i(function(){return d(S)&&E({inst:S}),m(function(){d(S)&&E({inst:S})})},[m]),s(x),x}function d(m){var v=m.getSnapshot;m=m.value;try{var x=v();return!r(m,x)}catch{return!0}}function f(m,v){return v()}var h=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?f:u;return Lm.useSyncExternalStore=e.useSyncExternalStore!==void 0?e.useSyncExternalStore:h,Lm}var kw;function b5(){return kw||(kw=1,$m.exports=x5()),$m.exports}/** * @license React * use-sync-external-store-shim/with-selector.production.js * @@ -401,12 +385,12 @@ Error generating stack: `+w.message+` * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Ew;function N$(){if(Ew)return Rm;Ew=1;var e=kl(),t=_$();function r(f,h){return f===h&&(f!==0||1/f===1/h)||f!==f&&h!==h}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,o=e.useRef,s=e.useEffect,u=e.useMemo,d=e.useDebugValue;return Rm.useSyncExternalStoreWithSelector=function(f,h,m,v,x){var k=o(null);if(k.current===null){var S={hasValue:!1,value:null};k.current=S}else S=k.current;k=u(function(){function P(C){if(!j){if(j=!0,_=C,C=v(C),x!==void 0&&S.hasValue){var R=S.value;if(x(R,C))return O=R}return O=C}if(R=O,n(_,C))return R;var z=v(C);return x!==void 0&&x(R,z)?(_=C,R):(_=C,O=z)}var j=!1,_,O,N=m===void 0?null:m;return[function(){return P(h())},N===null?void 0:function(){return P(N())}]},[h,m,v,x]);var E=i(f,k[0],k[1]);return s(function(){S.hasValue=!0,S.value=E},[E]),d(E),E},Rm}var Pw;function I$(){return Pw||(Pw=1,Dm.exports=N$()),Dm.exports}var M$=I$(),oy=y.createContext(null),T$=e=>e,xt=()=>{var e=y.useContext(oy);return e?e.store.dispatch:T$},Ed=()=>{},D$=()=>Ed,R$=(e,t)=>e===t;function Ee(e){var t=y.useContext(oy),r=y.useMemo(()=>t?n=>{if(n!=null)return e(n)}:Ed,[t,e]);return M$.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:D$,t?t.store.getState:Ed,t?t.store.getState:Ed,r,R$)}function $$(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function L$(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Aw=e=>Array.isArray(e)?e:[e];function z$(e){const t=Array.isArray(e[0])?e[0]:e;return L$(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function F$(e,t){const r=[],{length:n}=e;for(let i=0;itypeof WeakRef>"u"?B$:WeakRef,b2=U$(),W$=0,Ow=1;function id(){return{s:W$,v:void 0,o:null,p:null}}function H$(e){return e instanceof b2?e.deref():e}function w2(e,t={}){let r=id();const{resultEqualityCheck:n}=t;let i,o=0;function s(){let u=r;const{length:d}=arguments;for(let m=0,v=d;m{r=id(),s.resetResultsCount()},s.resultsCount=()=>o,s.resetResultsCount=()=>{o=0},s}function K$(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let o=0,s=0,u,d={},f=i.pop();typeof f=="object"&&(d=f,f=i.pop()),$$(f,`createSelector expects an output function after the inputs, but received: [${typeof f}]`);const h={...r,...d},{memoize:m,memoizeOptions:v=[],argsMemoize:x=w2,argsMemoizeOptions:k=[]}=h,S=Aw(v),E=Aw(k),P=z$(i),j=m(function(){return o++,f.apply(null,arguments)},...S),_=x(function(){s++;const N=F$(P,arguments);return u=j.apply(null,N),u},...E);return Object.assign(_,{resultFunc:f,memoizedResultFunc:j,dependencies:P,dependencyRecomputations:()=>s,resetDependencyRecomputations:()=>{s=0},lastResult:()=>u,recomputations:()=>o,resetRecomputations:()=>{o=0},memoize:m,argsMemoize:x})};return Object.assign(n,{withTypes:()=>n}),n}var H=K$(w2);function V$(e,t=1){const r=[],n=Math.floor(t),i=(o,s)=>{for(let u=0;u{if(e!==t){const n=Cw(e),i=Cw(t);if(n===i&&n===0){if(et)return r==="desc"?-1:1}return r==="desc"?i-n:n-i}return 0};function S2(e){return typeof e=="symbol"||e instanceof Symbol}const G$=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Y$=/^\w*$/;function Q$(e,t){return Array.isArray(e)?!1:typeof e=="number"||typeof e=="boolean"||e==null||S2(e)?!0:typeof e=="string"&&(Y$.test(e)||!G$.test(e))||t!=null}function X$(e,t,r,n){if(e==null)return[];r=r,Array.isArray(e)||(e=Object.values(e)),Array.isArray(t)||(t=t==null?[null]:[t]),t.length===0&&(t=[null]),Array.isArray(r)||(r=r==null?[]:[r]),r=r.map(u=>String(u));const i=(u,d)=>{let f=u;for(let h=0;hd==null||u==null?d:typeof u=="object"&&"key"in u?Object.hasOwn(d,u.key)?d[u.key]:i(d,u.path):typeof u=="function"?u(d):Array.isArray(u)?i(d,u):typeof d=="object"?d[u]:d,s=t.map(u=>(Array.isArray(u)&&u.length===1&&(u=u[0]),u==null||typeof u=="function"||Array.isArray(u)||Q$(u)?u:{key:u,path:ry(u)}));return e.map(u=>({original:u,criteria:s.map(d=>o(d,u))})).slice().sort((u,d)=>{for(let f=0;fu.original)}function Bf(e,...t){const r=t.length;return r>1&&Vv(e,t[0],t[1])?t=[]:r>2&&Vv(t[0],t[1],t[2])&&(t=[t[0]]),X$(e,V$(t),["asc"])}var k2=e=>e.legend.settings,Z$=e=>e.legend.size,J$=e=>e.legend.payload;H([J$,k2],(e,t)=>{var r=t.itemSorter,n=e.flat(1);return r?Bf(n,r):n});function e4(e,t){return i4(e)||n4(e,t)||r4(e,t)||t4()}function t4(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function r4(e,t){if(e){if(typeof e=="string")return jw(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?jw(e,t):void 0}}function jw(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rad||Math.abs(e.left-t.left)>ad||Math.abs(e.top-t.top)>ad||Math.abs(e.width-t.width)>ad}function Nw(e){var t=e.getBoundingClientRect();return{height:t.height,left:t.left,top:t.top,width:t.width}}function a4(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=y.useState({height:0,left:0,top:0,width:0}),r=e4(t,2),n=r[0],i=r[1],o=y.useRef(null),s=y.useRef(n);s.current=n;var u=y.useCallback(d=>{if(o.current!=null&&(o.current.disconnect(),o.current=null),d!=null){var f=Nw(d);if(_w(f,s.current)&&i(f),typeof ResizeObserver<"u"){var h=new ResizeObserver(()=>{var m=Nw(d);_w(m,s.current)&&i(m)});h.observe(d),o.current=h}}},[...e]);return y.useEffect(()=>()=>{var d;(d=o.current)===null||d===void 0||d.disconnect()},[]),[n,u]}function $t(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var o4=typeof Symbol=="function"&&Symbol.observable||"@@observable",Iw=o4,zm=()=>Math.random().toString(36).substring(7).split("").join("."),l4={INIT:`@@redux/INIT${zm()}`,REPLACE:`@@redux/REPLACE${zm()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${zm()}`},Dd=l4;function ly(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function E2(e,t,r){if(typeof e!="function")throw new Error($t(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error($t(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error($t(1));return r(E2)(e,t)}let n=e,i=t,o=new Map,s=o,u=0,d=!1;function f(){s===o&&(s=new Map,o.forEach((E,P)=>{s.set(P,E)}))}function h(){if(d)throw new Error($t(3));return i}function m(E){if(typeof E!="function")throw new Error($t(4));if(d)throw new Error($t(5));let P=!0;f();const j=u++;return s.set(j,E),function(){if(P){if(d)throw new Error($t(6));P=!1,f(),s.delete(j),o=null}}}function v(E){if(!ly(E))throw new Error($t(7));if(typeof E.type>"u")throw new Error($t(8));if(typeof E.type!="string")throw new Error($t(17));if(d)throw new Error($t(9));try{d=!0,i=n(i,E)}finally{d=!1}return(o=s).forEach(j=>{j()}),E}function x(E){if(typeof E!="function")throw new Error($t(10));n=E,v({type:Dd.REPLACE})}function k(){const E=m;return{subscribe(P){if(typeof P!="object"||P===null)throw new Error($t(11));function j(){const O=P;O.next&&O.next(h())}return j(),{unsubscribe:E(j)}},[Iw](){return this}}}return v({type:Dd.INIT}),{dispatch:v,subscribe:m,getState:h,replaceReducer:x,[Iw]:k}}function s4(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Dd.INIT})>"u")throw new Error($t(12));if(typeof r(void 0,{type:Dd.PROBE_UNKNOWN_ACTION()})>"u")throw new Error($t(13))})}function P2(e){const t=Object.keys(e),r={};for(let o=0;o"u")throw u&&u.type,new Error($t(14));f[m]=k,d=d||k!==x}return d=d||n.length!==Object.keys(s).length,d?f:s}}function Rd(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function u4(...e){return t=>(r,n)=>{const i=t(r,n);let o=()=>{throw new Error($t(15))};const s={getState:i.getState,dispatch:(d,...f)=>o(d,...f)},u=e.map(d=>d(s));return o=Rd(...u)(i.dispatch),{...i,dispatch:o}}}function A2(e){return ly(e)&&"type"in e&&typeof e.type=="string"}var O2=Symbol.for("immer-nothing"),Mw=Symbol.for("immer-draftable"),ar=Symbol.for("immer-state");function rn(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Ar=Object,pl=Ar.getPrototypeOf,$d="constructor",Uf="prototype",qv="configurable",Ld="enumerable",Pd="writable",Zs="value",ti=e=>!!e&&!!e[ar];function ln(e){var t;return e?C2(e)||Hf(e)||!!e[Mw]||!!((t=e[$d])!=null&&t[Mw])||Kf(e)||Vf(e):!1}var c4=Ar[Uf][$d].toString(),Tw=new WeakMap;function C2(e){if(!e||!sy(e))return!1;const t=pl(e);if(t===null||t===Ar[Uf])return!0;const r=Ar.hasOwnProperty.call(t,$d)&&t[$d];if(r===Object)return!0;if(!Uo(r))return!1;let n=Tw.get(r);return n===void 0&&(n=Function.toString.call(r),Tw.set(r,n)),n===c4}function Wf(e,t,r=!0){ku(e)===0?(r?Reflect.ownKeys(e):Ar.keys(e)).forEach(i=>{t(i,e[i],e)}):e.forEach((n,i)=>t(i,n,e))}function ku(e){const t=e[ar];return t?t.type_:Hf(e)?1:Kf(e)?2:Vf(e)?3:0}var Dw=(e,t,r=ku(e))=>r===2?e.has(t):Ar[Uf].hasOwnProperty.call(e,t),Gv=(e,t,r=ku(e))=>r===2?e.get(t):e[t],zd=(e,t,r,n=ku(e))=>{n===2?e.set(t,r):n===3?e.add(r):e[t]=r};function d4(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var Hf=Array.isArray,Kf=e=>e instanceof Map,Vf=e=>e instanceof Set,sy=e=>typeof e=="object",Uo=e=>typeof e=="function",Fm=e=>typeof e=="boolean";function f4(e){const t=+e;return Number.isInteger(t)&&String(t)===e}var Kn=e=>e.copy_||e.base_,uy=e=>e.modified_?e.copy_:e.base_;function Yv(e,t){if(Kf(e))return new Map(e);if(Vf(e))return new Set(e);if(Hf(e))return Array[Uf].slice.call(e);const r=C2(e);if(t===!0||t==="class_only"&&!r){const n=Ar.getOwnPropertyDescriptors(e);delete n[ar];let i=Reflect.ownKeys(n);for(let o=0;o1&&Ar.defineProperties(e,{set:od,add:od,clear:od,delete:od}),Ar.freeze(e),t&&Wf(e,(r,n)=>{cy(n,!0)},!1)),e}function h4(){rn(2)}var od={[Zs]:h4};function qf(e){return e===null||!sy(e)?!0:Ar.isFrozen(e)}var Fd="MapSet",Qv="Patches",Rw="ArrayMethods",j2={};function Ka(e){const t=j2[e];return t||rn(0,e),t}var $w=e=>!!j2[e],Js,_2=()=>Js,p4=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:$w(Fd)?Ka(Fd):void 0,arrayMethodsPlugin_:$w(Rw)?Ka(Rw):void 0});function Lw(e,t){t&&(e.patchPlugin_=Ka(Qv),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Xv(e){Zv(e),e.drafts_.forEach(m4),e.drafts_=null}function Zv(e){e===Js&&(Js=e.parent_)}var zw=e=>Js=p4(Js,e);function m4(e){const t=e[ar];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Fw(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];if(e!==void 0&&e!==r){r[ar].modified_&&(Xv(t),rn(4)),ln(e)&&(e=Bw(t,e));const{patchPlugin_:i}=t;i&&i.generateReplacementPatches_(r[ar].base_,e,t)}else e=Bw(t,r);return v4(t,e,!0),Xv(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==O2?e:void 0}function Bw(e,t){if(qf(t))return t;const r=t[ar];if(!r)return Bd(t,e.handledSet_,e);if(!Gf(r,e))return t;if(!r.modified_)return r.base_;if(!r.finalized_){const{callbacks_:n}=r;if(n)for(;n.length>0;)n.pop()(e);M2(r,e)}return r.copy_}function v4(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&cy(t,r)}function N2(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Gf=(e,t)=>e.scope_===t,g4=[];function I2(e,t,r,n){const i=Kn(e),o=e.type_;if(n!==void 0&&Gv(i,n,o)===t){zd(i,n,r,o);return}if(!e.draftLocations_){const u=e.draftLocations_=new Map;Wf(i,(d,f)=>{if(ti(f)){const h=u.get(f)||[];h.push(d),u.set(f,h)}})}const s=e.draftLocations_.get(t)??g4;for(const u of s)zd(i,u,r,o)}function y4(e,t,r){e.callbacks_.push(function(i){var u;const o=t;if(!o||!Gf(o,i))return;(u=i.mapSetPlugin_)==null||u.fixSetContents(o);const s=uy(o);I2(e,o.draft_??o,s,r),M2(o,i)})}function M2(e,t){var n;if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(((n=e.assigned_)==null?void 0:n.size)??0)>0)){const{patchPlugin_:i}=t;if(i){const o=i.getPath(e);o&&i.generatePatches_(e,o,t)}N2(e)}}function x4(e,t,r){const{scope_:n}=e;if(ti(r)){const i=r[ar];Gf(i,n)&&i.callbacks_.push(function(){Ad(e);const s=uy(i);I2(e,r,s,t)})}else ln(r)&&e.callbacks_.push(function(){const o=Kn(e);e.type_===3?o.has(r)&&Bd(r,n.handledSet_,n):Gv(o,t,e.type_)===r&&n.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Bd(Gv(e.copy_,t,e.type_),n.handledSet_,n)})}function Bd(e,t,r){return!r.immer_.autoFreeze_&&r.unfinalizedDrafts_<1||ti(e)||t.has(e)||!ln(e)||qf(e)||(t.add(e),Wf(e,(n,i)=>{if(ti(i)){const o=i[ar];if(Gf(o,r)){const s=uy(o);zd(e,n,s,e.type_),N2(o)}}else ln(i)&&Bd(i,t,r)})),e}function b4(e,t){const r=Hf(e),n={type_:r?1:0,scope_:t?t.scope_:_2(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0};let i=n,o=Ud;r&&(i=[n],o=eu);const{revoke:s,proxy:u}=Proxy.revocable(i,o);return n.draft_=u,n.revoke_=s,[u,n]}var Ud={get(e,t){if(t===ar)return e;let r=e.scope_.arrayMethodsPlugin_;const n=e.type_===1&&typeof t=="string";if(n&&r!=null&&r.isArrayOperationMethod(t))return r.createMethodInterceptor(e,t);const i=Kn(e);if(!Dw(i,t,e.type_))return w4(e,i,t);const o=i[t];if(e.finalized_||!ln(o)||n&&e.operationMethod&&(r!=null&&r.isMutatingArrayMethod(e.operationMethod))&&f4(t))return o;if(o===Bm(e.base_,t)){Ad(e);const s=e.type_===1?+t:t,u=eg(e.scope_,o,e,s);return e.copy_[s]=u}return o},has(e,t){return t in Kn(e)},ownKeys(e){return Reflect.ownKeys(Kn(e))},set(e,t,r){const n=T2(Kn(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=Bm(Kn(e),t),o=i==null?void 0:i[ar];if(o&&o.base_===r)return e.copy_[t]=r,e.assigned_.set(t,!1),!0;if(d4(r,i)&&(r!==void 0||Dw(e.base_,t,e.type_)))return!0;Ad(e),Jv(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_.set(t,!0),x4(e,t,r)),!0},deleteProperty(e,t){return Ad(e),Bm(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),Jv(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Kn(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{[Pd]:!0,[qv]:e.type_!==1||t!=="length",[Ld]:n[Ld],[Zs]:r[t]}},defineProperty(){rn(11)},getPrototypeOf(e){return pl(e.base_)},setPrototypeOf(){rn(12)}},eu={};for(let e in Ud){let t=Ud[e];eu[e]=function(){const r=arguments;return r[0]=r[0][0],t.apply(this,r)}}eu.deleteProperty=function(e,t){return eu.set.call(this,e,t,void 0)};eu.set=function(e,t,r){return Ud.set.call(this,e[0],t,r,e[0])};function Bm(e,t){const r=e[ar];return(r?Kn(r):e)[t]}function w4(e,t,r){var i;const n=T2(t,r);return n?Zs in n?n[Zs]:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function T2(e,t){if(!(t in e))return;let r=pl(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=pl(r)}}function Jv(e){e.modified_||(e.modified_=!0,e.parent_&&Jv(e.parent_))}function Ad(e){e.copy_||(e.assigned_=new Map,e.copy_=Yv(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var S4=class{constructor(t){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(r,n,i)=>{if(Uo(r)&&!Uo(n)){const s=n;n=r;const u=this;return function(f=s,...h){return u.produce(f,m=>n.call(this,m,...h))}}Uo(n)||rn(6),i!==void 0&&!Uo(i)&&rn(7);let o;if(ln(r)){const s=zw(this),u=eg(s,r,void 0);let d=!0;try{o=n(u),d=!1}finally{d?Xv(s):Zv(s)}return Lw(s,i),Fw(o,s)}else if(!r||!sy(r)){if(o=n(r),o===void 0&&(o=r),o===O2&&(o=void 0),this.autoFreeze_&&cy(o,!0),i){const s=[],u=[];Ka(Qv).generateReplacementPatches_(r,o,{patches_:s,inversePatches_:u}),i(s,u)}return o}else rn(1,r)},this.produceWithPatches=(r,n)=>{if(Uo(r))return(u,...d)=>this.produceWithPatches(u,f=>r(f,...d));let i,o;return[this.produce(r,n,(u,d)=>{i=u,o=d}),i,o]},Fm(t==null?void 0:t.autoFreeze)&&this.setAutoFreeze(t.autoFreeze),Fm(t==null?void 0:t.useStrictShallowCopy)&&this.setUseStrictShallowCopy(t.useStrictShallowCopy),Fm(t==null?void 0:t.useStrictIteration)&&this.setUseStrictIteration(t.useStrictIteration)}createDraft(t){ln(t)||rn(8),ti(t)&&(t=zr(t));const r=zw(this),n=eg(r,t,void 0);return n[ar].isManual_=!0,Zv(r),n}finishDraft(t,r){const n=t&&t[ar];(!n||!n.isManual_)&&rn(9);const{scope_:i}=n;return Lw(i,r),Fw(void 0,i)}setAutoFreeze(t){this.autoFreeze_=t}setUseStrictShallowCopy(t){this.useStrictShallowCopy_=t}setUseStrictIteration(t){this.useStrictIteration_=t}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(t,r){let n;for(n=r.length-1;n>=0;n--){const o=r[n];if(o.path.length===0&&o.op==="replace"){t=o.value;break}}n>-1&&(r=r.slice(n+1));const i=Ka(Qv).applyPatches_;return ti(t)?i(t,r):this.produce(t,o=>i(o,r))}};function eg(e,t,r,n){const[i,o]=Kf(t)?Ka(Fd).proxyMap_(t,r):Vf(t)?Ka(Fd).proxySet_(t,r):b4(t,r);return((r==null?void 0:r.scope_)??_2()).drafts_.push(i),o.callbacks_=(r==null?void 0:r.callbacks_)??[],o.key_=n,r&&n!==void 0?y4(r,o,n):o.callbacks_.push(function(d){var h;(h=d.mapSetPlugin_)==null||h.fixSetContents(o);const{patchPlugin_:f}=d;o.modified_&&f&&f.generatePatches_(o,[],d)}),i}function zr(e){return ti(e)||rn(10,e),D2(e)}function D2(e){if(!ln(e)||qf(e))return e;const t=e[ar];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Yv(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Yv(e,!0);return Wf(r,(i,o)=>{zd(r,i,D2(o))},n),t&&(t.finalized_=!1),r}var k4=new S4,R2=k4.produce;function $2(e){return({dispatch:r,getState:n})=>i=>o=>typeof o=="function"?o(r,n,e):i(o)}var E4=$2(),P4=$2,A4=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Rd:Rd.apply(null,arguments)};function Cr(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Or(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>A2(n)&&n.type===e,r}var L2=class zs extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,zs.prototype)}static get[Symbol.species](){return zs}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new zs(...t[0].concat(this)):new zs(...t.concat(this))}};function Uw(e){return ln(e)?R2(e,()=>{}):e}function ld(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function O4(e){return typeof e=="boolean"}var C4=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:o=!0}=t??{};let s=new L2;return r&&(O4(r)?s.push(E4):s.push(P4(r.extraArgument))),s},z2="RTK_autoBatch",rt=()=>e=>({payload:e,meta:{[z2]:!0}}),Ww=e=>t=>{setTimeout(t,e)},j4=(e,t)=>r=>{let n=!1;const i=()=>{n||(n=!0,cancelAnimationFrame(o),clearTimeout(s),r())},o=e(i),s=setTimeout(i,t)},F2=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,o=!1,s=!1;const u=new Set,d=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?j4(window.requestAnimationFrame,100):Ww(10):e.type==="callback"?e.queueNotification:Ww(e.timeout),f=()=>{s=!1,o&&(o=!1,u.forEach(h=>h()))};return Object.assign({},n,{subscribe(h){const m=()=>i&&h(),v=n.subscribe(m);return u.add(h),()=>{v(),u.delete(h)}},dispatch(h){var m;try{return i=!((m=h==null?void 0:h.meta)!=null&&m[z2]),o=!i,o&&(s||(s=!0,d(f))),n.dispatch(h)}finally{i=!0}}})},_4=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new L2(e);return n&&i.push(F2(typeof n=="object"?n:void 0)),i};function N4(e){const t=C4(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(ly(r))u=P2(r);else throw new Error(Or(1));let d;typeof n=="function"?d=n(t):d=t();let f=Rd;i&&(f=A4({trace:!1,...typeof i=="object"&&i}));const h=u4(...d),m=_4(h);let v=typeof s=="function"?s(m):m();const x=f(...v);return E2(u,o,x)}function B2(e){const t={},r=[];let n;const i={addCase(o,s){const u=typeof o=="string"?o:o.type;if(!u)throw new Error(Or(28));if(u in t)throw new Error(Or(29));return t[u]=s,i},addAsyncThunk(o,s){return s.pending&&(t[o.pending.type]=s.pending),s.rejected&&(t[o.rejected.type]=s.rejected),s.fulfilled&&(t[o.fulfilled.type]=s.fulfilled),s.settled&&r.push({matcher:o.settled,reducer:s.settled}),i},addMatcher(o,s){return r.push({matcher:o,reducer:s}),i},addDefaultCase(o){return n=o,i}};return e(i),[t,r,n]}function I4(e){return typeof e=="function"}function M4(e,t){let[r,n,i]=B2(t),o;if(I4(e))o=()=>Uw(e());else{const u=Uw(e);o=()=>u}function s(u=o(),d){let f=[r[d.type],...n.filter(({matcher:h})=>h(d)).map(({reducer:h})=>h)];return f.filter(h=>!!h).length===0&&(f=[i]),f.reduce((h,m)=>{if(m)if(ti(h)){const x=m(h,d);return x===void 0?h:x}else{if(ln(h))return R2(h,v=>m(v,d));{const v=m(h,d);if(v===void 0){if(h===null)return h;throw Error("A case reducer on a non-draftable value must not return undefined")}return v}}return h},u)}return s.getInitialState=o,s}var T4="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",D4=(e=21)=>{let t="",r=e;for(;r--;)t+=T4[Math.random()*64|0];return t},R4=Symbol.for("rtk-slice-createasyncthunk");function $4(e,t){return`${e}/${t}`}function L4({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[R4];return function(i){const{name:o,reducerPath:s=o}=i;if(!o)throw new Error(Or(11));const u=(typeof i.reducers=="function"?i.reducers(F4()):i.reducers)||{},d=Object.keys(u),f={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},h={addCase(O,N){const C=typeof O=="string"?O:O.type;if(!C)throw new Error(Or(12));if(C in f.sliceCaseReducersByType)throw new Error(Or(13));return f.sliceCaseReducersByType[C]=N,h},addMatcher(O,N){return f.sliceMatchers.push({matcher:O,reducer:N}),h},exposeAction(O,N){return f.actionCreators[O]=N,h},exposeCaseReducer(O,N){return f.sliceCaseReducersByName[O]=N,h}};d.forEach(O=>{const N=u[O],C={reducerName:O,type:$4(o,O),createNotation:typeof i.reducers=="function"};U4(N)?H4(C,N,h,t):B4(C,N,h)});function m(){const[O={},N=[],C=void 0]=typeof i.extraReducers=="function"?B2(i.extraReducers):[i.extraReducers],R={...O,...f.sliceCaseReducersByType};return M4(i.initialState,z=>{for(let F in R)z.addCase(F,R[F]);for(let F of f.sliceMatchers)z.addMatcher(F.matcher,F.reducer);for(let F of N)z.addMatcher(F.matcher,F.reducer);C&&z.addDefaultCase(C)})}const v=O=>O,x=new Map,k=new WeakMap;let S;function E(O,N){return S||(S=m()),S(O,N)}function P(){return S||(S=m()),S.getInitialState()}function j(O,N=!1){function C(z){let F=z[O];return typeof F>"u"&&N&&(F=ld(k,C,P)),F}function R(z=v){const F=ld(x,N,()=>new WeakMap);return ld(F,z,()=>{const V={};for(const[Q,B]of Object.entries(i.selectors??{}))V[Q]=z4(B,z,()=>ld(k,z,P),N);return V})}return{reducerPath:O,getSelectors:R,get selectors(){return R(C)},selectSlice:C}}const _={name:o,reducer:E,actions:f.actionCreators,caseReducers:f.sliceCaseReducersByName,getInitialState:P,...j(s),injectInto(O,{reducerPath:N,...C}={}){const R=N??s;return O.inject({reducerPath:R,reducer:E},C),{..._,...j(R,!0)}}};return _}}function z4(e,t,r,n){function i(o,...s){let u=t(o);return typeof u>"u"&&n&&(u=r()),e(u,...s)}return i.unwrapped=e,i}var Jt=L4();function F4(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function B4({type:e,reducerName:t,createNotation:r},n,i){let o,s;if("reducer"in n){if(r&&!W4(n))throw new Error(Or(17));o=n.reducer,s=n.prepare}else o=n;i.addCase(e,o).exposeCaseReducer(t,o).exposeAction(t,s?Cr(e,s):Cr(e))}function U4(e){return e._reducerDefinitionType==="asyncThunk"}function W4(e){return e._reducerDefinitionType==="reducerWithPrepare"}function H4({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Or(18));const{payloadCreator:o,fulfilled:s,pending:u,rejected:d,settled:f,options:h}=r,m=i(e,o,h);n.exposeAction(t,m),s&&n.addCase(m.fulfilled,s),u&&n.addCase(m.pending,u),d&&n.addCase(m.rejected,d),f&&n.addMatcher(m.settled,f),n.exposeCaseReducer(t,{fulfilled:s||sd,pending:u||sd,rejected:d||sd,settled:f||sd})}function sd(){}var K4="task",U2="listener",W2="completed",dy="cancelled",V4=`task-${dy}`,q4=`task-${W2}`,tg=`${U2}-${dy}`,G4=`${U2}-${W2}`,Yf=class{constructor(e){ws(this,"code");ws(this,"name","TaskAbortError");ws(this,"message");this.code=e,this.message=`${K4} ${dy} (reason: ${e})`}},fy=(e,t)=>{if(typeof e!="function")throw new TypeError(Or(32))},Wd=()=>{},H2=(e,t=Wd)=>(e.catch(t),e),K2=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),za=e=>{if(e.aborted)throw new Yf(e.reason)};function V2(e,t){let r=Wd;return new Promise((n,i)=>{const o=()=>i(new Yf(e.reason));if(e.aborted){o();return}r=K2(e,o),t.finally(()=>r()).then(n,i)}).finally(()=>{r=Wd})}var Y4=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Yf?"cancelled":"rejected",error:r}}finally{t==null||t()}},Hd=e=>t=>H2(V2(e,t).then(r=>(za(e),r))),q2=e=>{const t=Hd(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Qo}=Object,Hw={},Qf="listenerMiddleware",Q4=(e,t)=>{const r=n=>K2(e,()=>n.abort(e.reason));return(n,i)=>{fy(n);const o=new AbortController;r(o);const s=Y4(async()=>{za(e),za(o.signal);const u=await n({pause:Hd(o.signal),delay:q2(o.signal),signal:o.signal});return za(o.signal),u},()=>o.abort(q4));return i!=null&&i.autoJoin&&t.push(s.catch(Wd)),{result:Hd(e)(s),cancel(){o.abort(V4)}}}},X4=(e,t)=>{const r=async(n,i)=>{za(t);let o=()=>{};const u=[new Promise((d,f)=>{let h=e({predicate:n,effect:(m,v)=>{v.unsubscribe(),d([m,v.getState(),v.getOriginalState()])}});o=()=>{h(),f()}})];i!=null&&u.push(new Promise(d=>setTimeout(d,i,null)));try{const d=await V2(t,Promise.race(u));return za(t),d}finally{o()}};return((n,i)=>H2(r(n,i)))},G2=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:o}=e;if(t)i=Cr(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Or(21));return fy(o),{predicate:i,type:t,effect:o}},Y2=Qo(e=>{const{type:t,predicate:r,effect:n}=G2(e);return{id:D4(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Or(22))}}},{withTypes:()=>Y2}),Kw=(e,t)=>{const{type:r,effect:n,predicate:i}=G2(t);return Array.from(e.values()).find(o=>(typeof r=="string"?o.type===r:o.predicate===i)&&o.effect===n)},rg=e=>{e.pending.forEach(t=>{t.abort(tg)})},Z4=(e,t)=>()=>{for(const r of t.keys())rg(r);e.clear()},Vw=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},Q2=Qo(Cr(`${Qf}/add`),{withTypes:()=>Q2}),J4=Cr(`${Qf}/removeAll`),X2=Qo(Cr(`${Qf}/remove`),{withTypes:()=>X2}),eL=(...e)=>{console.error(`${Qf}/error`,...e)},Eu=(e={})=>{const t=new Map,r=new Map,n=x=>{const k=r.get(x)??0;r.set(x,k+1)},i=x=>{const k=r.get(x)??1;k===1?r.delete(x):r.set(x,k-1)},{extra:o,onError:s=eL}=e;fy(s);const u=x=>(x.unsubscribe=()=>t.delete(x.id),t.set(x.id,x),k=>{x.unsubscribe(),k!=null&&k.cancelActive&&rg(x)}),d=(x=>{const k=Kw(t,x)??Y2(x);return u(k)});Qo(d,{withTypes:()=>d});const f=x=>{const k=Kw(t,x);return k&&(k.unsubscribe(),x.cancelActive&&rg(k)),!!k};Qo(f,{withTypes:()=>f});const h=async(x,k,S,E)=>{const P=new AbortController,j=X4(d,P.signal),_=[];try{x.pending.add(P),n(x),await Promise.resolve(x.effect(k,Qo({},S,{getOriginalState:E,condition:(O,N)=>j(O,N).then(Boolean),take:j,delay:q2(P.signal),pause:Hd(P.signal),extra:o,signal:P.signal,fork:Q4(P.signal,_),unsubscribe:x.unsubscribe,subscribe:()=>{t.set(x.id,x)},cancelActiveListeners:()=>{x.pending.forEach((O,N,C)=>{O!==P&&(O.abort(tg),C.delete(O))})},cancel:()=>{P.abort(tg),x.pending.delete(P)},throwIfCancelled:()=>{za(P.signal)}})))}catch(O){O instanceof Yf||Vw(s,O,{raisedBy:"effect"})}finally{await Promise.all(_),P.abort(G4),i(x),x.pending.delete(P)}},m=Z4(t,r);return{middleware:x=>k=>S=>{if(!A2(S))return k(S);if(Q2.match(S))return d(S.payload);if(J4.match(S)){m();return}if(X2.match(S))return f(S.payload);let E=x.getState();const P=()=>{if(E===Hw)throw new Error(Or(23));return E};let j;try{if(j=k(S),t.size>0){const _=x.getState(),O=Array.from(t.values());for(const N of O){let C=!1;try{C=N.predicate(S,_,E)}catch(R){C=!1,Vw(s,R,{raisedBy:"predicate"})}C&&h(N,S,x,P)}}}finally{E=Hw}return j},startListening:d,stopListening:f,clearListeners:m}};function Or(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var tL={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},Z2=Jt({name:"chartLayout",initialState:tL,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){var r,n,i,o;e.margin.top=(r=t.payload.top)!==null&&r!==void 0?r:0,e.margin.right=(n=t.payload.right)!==null&&n!==void 0?n:0,e.margin.bottom=(i=t.payload.bottom)!==null&&i!==void 0?i:0,e.margin.left=(o=t.payload.left)!==null&&o!==void 0?o:0},setScale(e,t){e.scale=t.payload}}}),Xf=Z2.actions,rL=Xf.setMargin,nL=Xf.setLayout,iL=Xf.setChartSize,aL=Xf.setScale,oL=Z2.reducer;function J2(e,t,r){return Array.isArray(e)&&e&&t+r!==0?e.slice(t,r+1):e}function Fe(e){return Number.isFinite(e)}function _n(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function qw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Wo(e){for(var t=1;t{if(t&&r){var n=r.width,i=r.height,o=t.align,s=t.verticalAlign,u=t.layout;if((u==="vertical"||u==="horizontal"&&s==="middle")&&o!=="center"&&be(e[o]))return Wo(Wo({},e),{},{[o]:e[o]+(n||0)});if((u==="horizontal"||u==="vertical"&&o==="center")&&s!=="middle"&&be(e[s]))return Wo(Wo({},e),{},{[s]:e[s]+(i||0)})}return e},Mn=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",eO=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,o,s=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(o=!0),u.coordinate));return i||s.push(t),o||s.push(r),s},tO=(e,t,r)=>{if(!e)return null;var n=e.duplicateDomain,i=e.type,o=e.range,s=e.scale,u=e.realScaleType,d=e.isCategorical,f=e.categoricalDomain,h=e.tickCount,m=e.ticks,v=e.niceTicks,x=e.axisType;if(!s)return null;var k=u==="scaleBand"&&s.bandwidth?s.bandwidth()/2:2,S=i==="category"&&s.bandwidth?s.bandwidth()/k:0;if(S=x==="angleAxis"&&o&&o.length>=2?Lr(o[0]-o[1])*2*S:S,m||v){var E=(m||v||[]).map((P,j)=>{var _=n?n.indexOf(P):P,O=s.map(_);return Fe(O)?{coordinate:O+S,value:P,offset:S,index:j}:null}).filter(vr);return E}return d&&f?f.map((P,j)=>{var _=s.map(P);return Fe(_)?{coordinate:_+S,value:P,index:j,offset:S}:null}).filter(vr):s.ticks&&h!=null?s.ticks(h).map((P,j)=>{var _=s.map(P);return Fe(_)?{coordinate:_+S,value:P,index:j,offset:S}:null}).filter(vr):s.domain().map((P,j)=>{var _=s.map(P);return Fe(_)?{coordinate:_+S,value:n?n[P]:P,index:j,offset:S}:null}).filter(vr)},dL=e=>{var t,r=e.length;if(!(r<=0)){var n=(t=e[0])===null||t===void 0?void 0:t.length;if(!(n==null||n<=0))for(var i=0;i=0?(f[0]=o,o+=v,f[1]=o):(f[0]=s,s+=v,f[1]=s)}}}},fL=e=>{var t,r=e.length;if(!(r<=0)){var n=(t=e[0])===null||t===void 0?void 0:t.length;if(!(n==null||n<=0))for(var i=0;i=0?(d[0]=o,o+=f,d[1]=o):(d[0]=0,d[1]=0)}}}},hL={sign:dL,expand:j5,none:Wa,silhouette:_5,wiggle:N5,positive:fL},pL=(e,t,r)=>{var n,i=(n=hL[r])!==null&&n!==void 0?n:Wa,o=C5().keys(t).value((u,d)=>Number(Nt(u,d,0))).order(Uv).offset(i),s=o(e);return s.forEach((u,d)=>{u.forEach((f,h)=>{var m=Nt(e[h],t[d],0);Array.isArray(m)&&m.length===2&&be(m[0])&&be(m[1])&&(f[0]=m[0],f[1]=m[1])})}),s};function mL(e){return e==null?void 0:String(e)}function Gw(e){var t=e.axis,r=e.ticks,n=e.bandSize,i=e.entry,o=e.index,s=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!Ut(i[t.dataKey])){var u=l2(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r!=null&&r[o]?r[o].coordinate+n/2:null}var d=Nt(i,Ut(s)?t.dataKey:s),f=t.scale.map(d);return be(f)?f:null}var vL=e=>{var t=e.flat(2).filter(be);return[Math.min(...t),Math.max(...t)]},gL=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],yL=(e,t,r)=>{if(!(e==null||Object.keys(e).length===0))return gL(Object.keys(e).reduce((n,i)=>{var o=e[i];if(!o)return n;var s=o.stackedData,u=s.reduce((d,f)=>{var h=J2(f,t,r),m=vL(h);return!Fe(m[0])||!Fe(m[1])?d:[Math.min(d[0],m[0]),Math.max(d[1],m[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},Yw=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Qw=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Kd=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=Bf(t,h=>h.coordinate),o=1/0,s=1,u=i.length;s{if(t==="horizontal")return e.relativeX;if(t==="vertical")return e.relativeY},bL=(e,t)=>t==="centric"?e.angle:e.radius,ai=e=>e.layout.width,oi=e=>e.layout.height,wL=e=>e.layout.scale,nO=e=>e.layout.margin,Zf=H(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),Jf=H(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),SL="data-recharts-item-index",kL="data-recharts-item-id",Pu=60;function Zw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ud(e){for(var t=1;te.brush.height;function CL(e){var t=Jf(e);return t.reduce((r,n)=>{if(n.orientation==="left"&&!n.mirror&&!n.hide){var i=typeof n.width=="number"?n.width:Pu;return r+i}return r},0)}function jL(e){var t=Jf(e);return t.reduce((r,n)=>{if(n.orientation==="right"&&!n.mirror&&!n.hide){var i=typeof n.width=="number"?n.width:Pu;return r+i}return r},0)}function _L(e){var t=Zf(e);return t.reduce((r,n)=>n.orientation==="top"&&!n.mirror&&!n.hide?r+n.height:r,0)}function NL(e){var t=Zf(e);return t.reduce((r,n)=>n.orientation==="bottom"&&!n.mirror&&!n.hide?r+n.height:r,0)}var Ht=H([ai,oi,nO,OL,CL,jL,_L,NL,k2,Z$],(e,t,r,n,i,o,s,u,d,f)=>{var h={left:(r.left||0)+i,right:(r.right||0)+o},m={top:(r.top||0)+s,bottom:(r.bottom||0)+u},v=ud(ud({},m),h),x=v.bottom;v.bottom+=n,v=cL(v,d,f);var k=e-v.left-v.right,S=t-v.top-v.bottom;return ud(ud({brushBottom:x},v),{},{width:Math.max(k,0),height:Math.max(S,0)})}),IL=H(Ht,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),iO=H(ai,oi,(e,t)=>({x:0,y:0,width:e,height:t})),ML=y.createContext(null),yr=()=>y.useContext(ML)!=null,eh=e=>e.brush,th=H([eh,Ht,nO],(e,t,r)=>({height:e.height,x:be(e.x)?e.x:t.left,y:be(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:be(e.width)?e.width:t.width}));function TL(e,t,{signal:r,edges:n}={}){let i,o=null;const s=n!=null&&n.includes("leading"),u=n==null||n.includes("trailing"),d=()=>{o!==null&&(e.apply(i,o),i=void 0,o=null)},f=()=>{u&&d(),x()};let h=null;const m=()=>{h!=null&&clearTimeout(h),h=setTimeout(()=>{h=null,f()},t)},v=()=>{h!==null&&(clearTimeout(h),h=null)},x=()=>{v(),i=void 0,o=null},k=()=>{d()},S=function(...E){if(r!=null&&r.aborted)return;i=this,o=E;const P=h==null;m(),s&&P&&d()};return S.schedule=m,S.cancel=x,S.flush=k,r==null||r.addEventListener("abort",x,{once:!0}),S}function DL(e,t=0,r={}){typeof r!="object"&&(r={});const{leading:n=!1,trailing:i=!0,maxWait:o}=r,s=Array(2);n&&(s[0]="leading"),i&&(s[1]="trailing");let u,d=null;const f=TL(function(...v){u=e.apply(this,v),d=null},t,{edges:s}),h=function(...v){return o!=null&&(d===null&&(d=Date.now()),Date.now()-d>=o)?(u=e.apply(this,v),d=Date.now(),f.cancel(),f.schedule(),u):(f.apply(this,v),u)},m=()=>(f.flush(),u);return h.cancel=f.cancel,h.flush=m,h}function RL(e,t=0,r={}){const{leading:n=!0,trailing:i=!0}=r;return DL(e,t,{leading:n,maxWait:t,trailing:i})}var Vd=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),o=2;oi[s++]))}},En={width:"100%",height:"100%",debounce:0,minWidth:0,initialDimension:{width:-1,height:-1}},aO=(e,t,r)=>{var n=r.width,i=n===void 0?En.width:n,o=r.height,s=o===void 0?En.height:o,u=r.aspect,d=r.maxHeight,f=Ha(i)?e:Number(i),h=Ha(s)?t:Number(s);return u&&u>0&&(f?h=f/u:h&&(f=h*u),d&&h!=null&&h>d&&(h=d)),{calculatedWidth:f,calculatedHeight:h}},$L={width:0,height:0,overflow:"visible"},LL={width:0,overflowX:"visible"},zL={height:0,overflowY:"visible"},FL={},BL=e=>{var t=e.width,r=e.height,n=Ha(t),i=Ha(r);return n&&i?$L:n?LL:i?zL:FL};function UL(e){var t=e.width,r=e.height,n=e.aspect,i=t,o=r;return i===void 0&&o===void 0?(i=En.width,o=En.height):i===void 0?i=n&&n>0?void 0:En.width:o===void 0&&(o=n&&n>0?void 0:En.height),{width:i,height:o}}var WL=["aspect","initialDimension","width","height","minWidth","minHeight","maxHeight","children","debounce","id","className","onResize","style"];function qd(){return qd=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r({width:r,height:n}),[r,n]);return ez(i)?y.createElement(oO.Provider,{value:i},t):null}var hy=()=>y.useContext(oO),tz=y.forwardRef((e,t)=>{var r=e.aspect,n=e.initialDimension,i=n===void 0?En.initialDimension:n,o=e.width,s=e.height,u=e.minWidth,d=u===void 0?En.minWidth:u,f=e.minHeight,h=e.maxHeight,m=e.children,v=e.debounce,x=v===void 0?En.debounce:v,k=e.id,S=e.className,E=e.onResize,P=e.style,j=P===void 0?{}:P,_=ZL(e,WL),O=y.useRef(null),N=y.useRef();N.current=E,y.useImperativeHandle(t,()=>O.current);var C=y.useState({containerWidth:i.width,containerHeight:i.height}),R=qL(C,2),z=R[0],F=R[1],V=y.useCallback((fe,de)=>{F(Y=>{var ae=Math.round(fe),X=Math.round(de);return Y.containerWidth===ae&&Y.containerHeight===X?Y:{containerWidth:ae,containerHeight:X}})},[]);y.useEffect(()=>{if(O.current==null||typeof ResizeObserver>"u")return Pl;var fe=M=>{var T,Z=M[0];if(Z!=null){var se=Z.contentRect,te=se.width,ce=se.height;V(te,ce),(T=N.current)===null||T===void 0||T.call(N,te,ce)}};x>0&&(fe=RL(fe,x,{trailing:!0,leading:!1}));var de=new ResizeObserver(fe),Y=O.current.getBoundingClientRect(),ae=Y.width,X=Y.height;return V(ae,X),de.observe(O.current),()=>{de.disconnect()}},[V,x]);var Q=z.containerWidth,B=z.containerHeight;Vd(!r||r>0,"The aspect(%s) must be greater than zero.",r);var ue=aO(Q,B,{width:o,height:s,aspect:r,maxHeight:h}),G=ue.calculatedWidth,le=ue.calculatedHeight;return Vd(Q<0||B<0||G!=null&&G>0||le!=null&&le>0,`The width(%s) and height(%s) of chart should be greater than 0, + */var Ew;function w5(){if(Ew)return Rm;Ew=1;var e=Sl(),t=b5();function r(f,h){return f===h&&(f!==0||1/f===1/h)||f!==f&&h!==h}var n=typeof Object.is=="function"?Object.is:r,i=t.useSyncExternalStore,o=e.useRef,s=e.useEffect,u=e.useMemo,d=e.useDebugValue;return Rm.useSyncExternalStoreWithSelector=function(f,h,m,v,x){var k=o(null);if(k.current===null){var S={hasValue:!1,value:null};k.current=S}else S=k.current;k=u(function(){function P(C){if(!_){if(_=!0,j=C,C=v(C),x!==void 0&&S.hasValue){var R=S.value;if(x(R,C))return O=R}return O=C}if(R=O,n(j,C))return R;var z=v(C);return x!==void 0&&x(R,z)?(j=C,R):(j=C,O=z)}var _=!1,j,O,N=m===void 0?null:m;return[function(){return P(h())},N===null?void 0:function(){return P(N())}]},[h,m,v,x]);var E=i(f,k[0],k[1]);return s(function(){S.hasValue=!0,S.value=E},[E]),d(E),E},Rm}var Pw;function S5(){return Pw||(Pw=1,Dm.exports=w5()),Dm.exports}var k5=S5(),ag=g.createContext(null),E5=e=>e,xt=()=>{var e=g.useContext(ag);return e?e.store.dispatch:E5},Ed=()=>{},P5=()=>Ed,A5=(e,t)=>e===t;function ke(e){var t=g.useContext(ag),r=g.useMemo(()=>t?n=>{if(n!=null)return e(n)}:Ed,[t,e]);return k5.useSyncExternalStoreWithSelector(t?t.subscription.addNestedSub:P5,t?t.store.getState:Ed,t?t.store.getState:Ed,r,A5)}function O5(e,t=`expected a function, instead received ${typeof e}`){if(typeof e!="function")throw new TypeError(t)}function C5(e,t="expected all items to be functions, instead received the following types: "){if(!e.every(r=>typeof r=="function")){const r=e.map(n=>typeof n=="function"?`function ${n.name||"unnamed"}()`:typeof n).join(", ");throw new TypeError(`${t}[${r}]`)}}var Aw=e=>Array.isArray(e)?e:[e];function _5(e){const t=Array.isArray(e[0])?e[0]:e;return C5(t,"createSelector expects all input-selectors to be functions, but received the following types: "),t}function j5(e,t){const r=[],{length:n}=e;for(let i=0;itypeof WeakRef>"u"?N5:WeakRef,vO=I5(),M5=0,Ow=1;function id(){return{s:M5,v:void 0,o:null,p:null}}function T5(e){return e instanceof vO?e.deref():e}function yO(e,t={}){let r=id();const{resultEqualityCheck:n}=t;let i,o=0;function s(){let u=r;const{length:d}=arguments;for(let m=0,v=d;m{r=id(),s.resetResultsCount()},s.resultsCount=()=>o,s.resetResultsCount=()=>{o=0},s}function D5(e,...t){const r=typeof e=="function"?{memoize:e,memoizeOptions:t}:e,n=(...i)=>{let o=0,s=0,u,d={},f=i.pop();typeof f=="object"&&(d=f,f=i.pop()),O5(f,`createSelector expects an output function after the inputs, but received: [${typeof f}]`);const h={...r,...d},{memoize:m,memoizeOptions:v=[],argsMemoize:x=yO,argsMemoizeOptions:k=[]}=h,S=Aw(v),E=Aw(k),P=_5(i),_=m(function(){return o++,f.apply(null,arguments)},...S),j=x(function(){s++;const N=j5(P,arguments);return u=_.apply(null,N),u},...E);return Object.assign(j,{resultFunc:f,memoizedResultFunc:_,dependencies:P,dependencyRecomputations:()=>s,resetDependencyRecomputations:()=>{s=0},lastResult:()=>u,recomputations:()=>o,resetRecomputations:()=>{o=0},memoize:m,argsMemoize:x})};return Object.assign(n,{withTypes:()=>n}),n}var H=D5(yO);function R5(e,t=1){const r=[],n=Math.floor(t),i=(o,s)=>{for(let u=0;u{if(e!==t){const n=Cw(e),i=Cw(t);if(n===i&&n===0){if(et)return r==="desc"?-1:1}return r==="desc"?i-n:n-i}return 0};function gO(e){return typeof e=="symbol"||e instanceof Symbol}const L5=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,z5=/^\w*$/;function F5(e,t){return Array.isArray(e)?!1:typeof e=="number"||typeof e=="boolean"||e==null||gO(e)?!0:typeof e=="string"&&(z5.test(e)||!L5.test(e))||t!=null}function B5(e,t,r,n){if(e==null)return[];r=r,Array.isArray(e)||(e=Object.values(e)),Array.isArray(t)||(t=t==null?[null]:[t]),t.length===0&&(t=[null]),Array.isArray(r)||(r=r==null?[]:[r]),r=r.map(u=>String(u));const i=(u,d)=>{let f=u;for(let h=0;hd==null||u==null?d:typeof u=="object"&&"key"in u?Object.hasOwn(d,u.key)?d[u.key]:i(d,u.path):typeof u=="function"?u(d):Array.isArray(u)?i(d,u):typeof d=="object"?d[u]:d,s=t.map(u=>(Array.isArray(u)&&u.length===1&&(u=u[0]),u==null||typeof u=="function"||Array.isArray(u)||F5(u)?u:{key:u,path:tg(u)}));return e.map(u=>({original:u,criteria:s.map(d=>o(d,u))})).slice().sort((u,d)=>{for(let f=0;fu.original)}function Bf(e,...t){const r=t.length;return r>1&&Kv(e,t[0],t[1])?t=[]:r>2&&Kv(t[0],t[1],t[2])&&(t=[t[0]]),B5(e,R5(t),["asc"])}var xO=e=>e.legend.settings,U5=e=>e.legend.size,W5=e=>e.legend.payload;H([W5,xO],(e,t)=>{var r=t.itemSorter,n=e.flat(1);return r?Bf(n,r):n});function H5(e,t){return G5(e)||q5(e,t)||V5(e,t)||K5()}function K5(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function V5(e,t){if(e){if(typeof e=="string")return _w(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_w(e,t):void 0}}function _w(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rad||Math.abs(e.left-t.left)>ad||Math.abs(e.top-t.top)>ad||Math.abs(e.width-t.width)>ad}function Nw(e){var t=e.getBoundingClientRect();return{height:t.height,left:t.left,top:t.top,width:t.width}}function Y5(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],t=g.useState({height:0,left:0,top:0,width:0}),r=H5(t,2),n=r[0],i=r[1],o=g.useRef(null),s=g.useRef(n);s.current=n;var u=g.useCallback(d=>{if(o.current!=null&&(o.current.disconnect(),o.current=null),d!=null){var f=Nw(d);if(jw(f,s.current)&&i(f),typeof ResizeObserver<"u"){var h=new ResizeObserver(()=>{var m=Nw(d);jw(m,s.current)&&i(m)});h.observe(d),o.current=h}}},[...e]);return g.useEffect(()=>()=>{var d;(d=o.current)===null||d===void 0||d.disconnect()},[]),[n,u]}function $t(e){return`Minified Redux error #${e}; visit https://redux.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var Q5=typeof Symbol=="function"&&Symbol.observable||"@@observable",Iw=Q5,zm=()=>Math.random().toString(36).substring(7).split("").join("."),X5={INIT:`@@redux/INIT${zm()}`,REPLACE:`@@redux/REPLACE${zm()}`,PROBE_UNKNOWN_ACTION:()=>`@@redux/PROBE_UNKNOWN_ACTION${zm()}`},Dd=X5;function og(e){if(typeof e!="object"||e===null)return!1;let t=e;for(;Object.getPrototypeOf(t)!==null;)t=Object.getPrototypeOf(t);return Object.getPrototypeOf(e)===t||Object.getPrototypeOf(e)===null}function bO(e,t,r){if(typeof e!="function")throw new Error($t(2));if(typeof t=="function"&&typeof r=="function"||typeof r=="function"&&typeof arguments[3]=="function")throw new Error($t(0));if(typeof t=="function"&&typeof r>"u"&&(r=t,t=void 0),typeof r<"u"){if(typeof r!="function")throw new Error($t(1));return r(bO)(e,t)}let n=e,i=t,o=new Map,s=o,u=0,d=!1;function f(){s===o&&(s=new Map,o.forEach((E,P)=>{s.set(P,E)}))}function h(){if(d)throw new Error($t(3));return i}function m(E){if(typeof E!="function")throw new Error($t(4));if(d)throw new Error($t(5));let P=!0;f();const _=u++;return s.set(_,E),function(){if(P){if(d)throw new Error($t(6));P=!1,f(),s.delete(_),o=null}}}function v(E){if(!og(E))throw new Error($t(7));if(typeof E.type>"u")throw new Error($t(8));if(typeof E.type!="string")throw new Error($t(17));if(d)throw new Error($t(9));try{d=!0,i=n(i,E)}finally{d=!1}return(o=s).forEach(_=>{_()}),E}function x(E){if(typeof E!="function")throw new Error($t(10));n=E,v({type:Dd.REPLACE})}function k(){const E=m;return{subscribe(P){if(typeof P!="object"||P===null)throw new Error($t(11));function _(){const O=P;O.next&&O.next(h())}return _(),{unsubscribe:E(_)}},[Iw](){return this}}}return v({type:Dd.INIT}),{dispatch:v,subscribe:m,getState:h,replaceReducer:x,[Iw]:k}}function Z5(e){Object.keys(e).forEach(t=>{const r=e[t];if(typeof r(void 0,{type:Dd.INIT})>"u")throw new Error($t(12));if(typeof r(void 0,{type:Dd.PROBE_UNKNOWN_ACTION()})>"u")throw new Error($t(13))})}function wO(e){const t=Object.keys(e),r={};for(let o=0;o"u")throw u&&u.type,new Error($t(14));f[m]=k,d=d||k!==x}return d=d||n.length!==Object.keys(s).length,d?f:s}}function Rd(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function J5(...e){return t=>(r,n)=>{const i=t(r,n);let o=()=>{throw new Error($t(15))};const s={getState:i.getState,dispatch:(d,...f)=>o(d,...f)},u=e.map(d=>d(s));return o=Rd(...u)(i.dispatch),{...i,dispatch:o}}}function SO(e){return og(e)&&"type"in e&&typeof e.type=="string"}var kO=Symbol.for("immer-nothing"),Mw=Symbol.for("immer-draftable"),ar=Symbol.for("immer-state");function rn(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var Ar=Object,hl=Ar.getPrototypeOf,$d="constructor",Uf="prototype",Vv="configurable",Ld="enumerable",Pd="writable",Zs="value",ti=e=>!!e&&!!e[ar];function ln(e){var t;return e?EO(e)||Hf(e)||!!e[Mw]||!!((t=e[$d])!=null&&t[Mw])||Kf(e)||Vf(e):!1}var eL=Ar[Uf][$d].toString(),Tw=new WeakMap;function EO(e){if(!e||!lg(e))return!1;const t=hl(e);if(t===null||t===Ar[Uf])return!0;const r=Ar.hasOwnProperty.call(t,$d)&&t[$d];if(r===Object)return!0;if(!Uo(r))return!1;let n=Tw.get(r);return n===void 0&&(n=Function.toString.call(r),Tw.set(r,n)),n===eL}function Wf(e,t,r=!0){ku(e)===0?(r?Reflect.ownKeys(e):Ar.keys(e)).forEach(i=>{t(i,e[i],e)}):e.forEach((n,i)=>t(i,n,e))}function ku(e){const t=e[ar];return t?t.type_:Hf(e)?1:Kf(e)?2:Vf(e)?3:0}var Dw=(e,t,r=ku(e))=>r===2?e.has(t):Ar[Uf].hasOwnProperty.call(e,t),qv=(e,t,r=ku(e))=>r===2?e.get(t):e[t],zd=(e,t,r,n=ku(e))=>{n===2?e.set(t,r):n===3?e.add(r):e[t]=r};function tL(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}var Hf=Array.isArray,Kf=e=>e instanceof Map,Vf=e=>e instanceof Set,lg=e=>typeof e=="object",Uo=e=>typeof e=="function",Fm=e=>typeof e=="boolean";function rL(e){const t=+e;return Number.isInteger(t)&&String(t)===e}var Kn=e=>e.copy_||e.base_,sg=e=>e.modified_?e.copy_:e.base_;function Gv(e,t){if(Kf(e))return new Map(e);if(Vf(e))return new Set(e);if(Hf(e))return Array[Uf].slice.call(e);const r=EO(e);if(t===!0||t==="class_only"&&!r){const n=Ar.getOwnPropertyDescriptors(e);delete n[ar];let i=Reflect.ownKeys(n);for(let o=0;o1&&Ar.defineProperties(e,{set:od,add:od,clear:od,delete:od}),Ar.freeze(e),t&&Wf(e,(r,n)=>{ug(n,!0)},!1)),e}function nL(){rn(2)}var od={[Zs]:nL};function qf(e){return e===null||!lg(e)?!0:Ar.isFrozen(e)}var Fd="MapSet",Yv="Patches",Rw="ArrayMethods",PO={};function Ka(e){const t=PO[e];return t||rn(0,e),t}var $w=e=>!!PO[e],Js,AO=()=>Js,iL=(e,t)=>({drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0,handledSet_:new Set,processedForPatches_:new Set,mapSetPlugin_:$w(Fd)?Ka(Fd):void 0,arrayMethodsPlugin_:$w(Rw)?Ka(Rw):void 0});function Lw(e,t){t&&(e.patchPlugin_=Ka(Yv),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function Qv(e){Xv(e),e.drafts_.forEach(aL),e.drafts_=null}function Xv(e){e===Js&&(Js=e.parent_)}var zw=e=>Js=iL(Js,e);function aL(e){const t=e[ar];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function Fw(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];if(e!==void 0&&e!==r){r[ar].modified_&&(Qv(t),rn(4)),ln(e)&&(e=Bw(t,e));const{patchPlugin_:i}=t;i&&i.generateReplacementPatches_(r[ar].base_,e,t)}else e=Bw(t,r);return oL(t,e,!0),Qv(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==kO?e:void 0}function Bw(e,t){if(qf(t))return t;const r=t[ar];if(!r)return Bd(t,e.handledSet_,e);if(!Gf(r,e))return t;if(!r.modified_)return r.base_;if(!r.finalized_){const{callbacks_:n}=r;if(n)for(;n.length>0;)n.pop()(e);_O(r,e)}return r.copy_}function oL(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&ug(t,r)}function OO(e){e.finalized_=!0,e.scope_.unfinalizedDrafts_--}var Gf=(e,t)=>e.scope_===t,lL=[];function CO(e,t,r,n){const i=Kn(e),o=e.type_;if(n!==void 0&&qv(i,n,o)===t){zd(i,n,r,o);return}if(!e.draftLocations_){const u=e.draftLocations_=new Map;Wf(i,(d,f)=>{if(ti(f)){const h=u.get(f)||[];h.push(d),u.set(f,h)}})}const s=e.draftLocations_.get(t)??lL;for(const u of s)zd(i,u,r,o)}function sL(e,t,r){e.callbacks_.push(function(i){var u;const o=t;if(!o||!Gf(o,i))return;(u=i.mapSetPlugin_)==null||u.fixSetContents(o);const s=sg(o);CO(e,o.draft_??o,s,r),_O(o,i)})}function _O(e,t){var n;if(e.modified_&&!e.finalized_&&(e.type_===3||e.type_===1&&e.allIndicesReassigned_||(((n=e.assigned_)==null?void 0:n.size)??0)>0)){const{patchPlugin_:i}=t;if(i){const o=i.getPath(e);o&&i.generatePatches_(e,o,t)}OO(e)}}function uL(e,t,r){const{scope_:n}=e;if(ti(r)){const i=r[ar];Gf(i,n)&&i.callbacks_.push(function(){Ad(e);const s=sg(i);CO(e,r,s,t)})}else ln(r)&&e.callbacks_.push(function(){const o=Kn(e);e.type_===3?o.has(r)&&Bd(r,n.handledSet_,n):qv(o,t,e.type_)===r&&n.drafts_.length>1&&(e.assigned_.get(t)??!1)===!0&&e.copy_&&Bd(qv(e.copy_,t,e.type_),n.handledSet_,n)})}function Bd(e,t,r){return!r.immer_.autoFreeze_&&r.unfinalizedDrafts_<1||ti(e)||t.has(e)||!ln(e)||qf(e)||(t.add(e),Wf(e,(n,i)=>{if(ti(i)){const o=i[ar];if(Gf(o,r)){const s=sg(o);zd(e,n,s,e.type_),OO(o)}}else ln(i)&&Bd(i,t,r)})),e}function cL(e,t){const r=Hf(e),n={type_:r?1:0,scope_:t?t.scope_:AO(),modified_:!1,finalized_:!1,assigned_:void 0,parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1,callbacks_:void 0};let i=n,o=Ud;r&&(i=[n],o=eu);const{revoke:s,proxy:u}=Proxy.revocable(i,o);return n.draft_=u,n.revoke_=s,[u,n]}var Ud={get(e,t){if(t===ar)return e;let r=e.scope_.arrayMethodsPlugin_;const n=e.type_===1&&typeof t=="string";if(n&&r!=null&&r.isArrayOperationMethod(t))return r.createMethodInterceptor(e,t);const i=Kn(e);if(!Dw(i,t,e.type_))return dL(e,i,t);const o=i[t];if(e.finalized_||!ln(o)||n&&e.operationMethod&&(r!=null&&r.isMutatingArrayMethod(e.operationMethod))&&rL(t))return o;if(o===Bm(e.base_,t)){Ad(e);const s=e.type_===1?+t:t,u=Jv(e.scope_,o,e,s);return e.copy_[s]=u}return o},has(e,t){return t in Kn(e)},ownKeys(e){return Reflect.ownKeys(Kn(e))},set(e,t,r){const n=jO(Kn(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=Bm(Kn(e),t),o=i==null?void 0:i[ar];if(o&&o.base_===r)return e.copy_[t]=r,e.assigned_.set(t,!1),!0;if(tL(r,i)&&(r!==void 0||Dw(e.base_,t,e.type_)))return!0;Ad(e),Zv(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_.set(t,!0),uL(e,t,r)),!0},deleteProperty(e,t){return Ad(e),Bm(e.base_,t)!==void 0||t in e.base_?(e.assigned_.set(t,!1),Zv(e)):e.assigned_.delete(t),e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=Kn(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{[Pd]:!0,[Vv]:e.type_!==1||t!=="length",[Ld]:n[Ld],[Zs]:r[t]}},defineProperty(){rn(11)},getPrototypeOf(e){return hl(e.base_)},setPrototypeOf(){rn(12)}},eu={};for(let e in Ud){let t=Ud[e];eu[e]=function(){const r=arguments;return r[0]=r[0][0],t.apply(this,r)}}eu.deleteProperty=function(e,t){return eu.set.call(this,e,t,void 0)};eu.set=function(e,t,r){return Ud.set.call(this,e[0],t,r,e[0])};function Bm(e,t){const r=e[ar];return(r?Kn(r):e)[t]}function dL(e,t,r){var i;const n=jO(t,r);return n?Zs in n?n[Zs]:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function jO(e,t){if(!(t in e))return;let r=hl(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=hl(r)}}function Zv(e){e.modified_||(e.modified_=!0,e.parent_&&Zv(e.parent_))}function Ad(e){e.copy_||(e.assigned_=new Map,e.copy_=Gv(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var fL=class{constructor(t){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!1,this.produce=(r,n,i)=>{if(Uo(r)&&!Uo(n)){const s=n;n=r;const u=this;return function(f=s,...h){return u.produce(f,m=>n.call(this,m,...h))}}Uo(n)||rn(6),i!==void 0&&!Uo(i)&&rn(7);let o;if(ln(r)){const s=zw(this),u=Jv(s,r,void 0);let d=!0;try{o=n(u),d=!1}finally{d?Qv(s):Xv(s)}return Lw(s,i),Fw(o,s)}else if(!r||!lg(r)){if(o=n(r),o===void 0&&(o=r),o===kO&&(o=void 0),this.autoFreeze_&&ug(o,!0),i){const s=[],u=[];Ka(Yv).generateReplacementPatches_(r,o,{patches_:s,inversePatches_:u}),i(s,u)}return o}else rn(1,r)},this.produceWithPatches=(r,n)=>{if(Uo(r))return(u,...d)=>this.produceWithPatches(u,f=>r(f,...d));let i,o;return[this.produce(r,n,(u,d)=>{i=u,o=d}),i,o]},Fm(t==null?void 0:t.autoFreeze)&&this.setAutoFreeze(t.autoFreeze),Fm(t==null?void 0:t.useStrictShallowCopy)&&this.setUseStrictShallowCopy(t.useStrictShallowCopy),Fm(t==null?void 0:t.useStrictIteration)&&this.setUseStrictIteration(t.useStrictIteration)}createDraft(t){ln(t)||rn(8),ti(t)&&(t=zr(t));const r=zw(this),n=Jv(r,t,void 0);return n[ar].isManual_=!0,Xv(r),n}finishDraft(t,r){const n=t&&t[ar];(!n||!n.isManual_)&&rn(9);const{scope_:i}=n;return Lw(i,r),Fw(void 0,i)}setAutoFreeze(t){this.autoFreeze_=t}setUseStrictShallowCopy(t){this.useStrictShallowCopy_=t}setUseStrictIteration(t){this.useStrictIteration_=t}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(t,r){let n;for(n=r.length-1;n>=0;n--){const o=r[n];if(o.path.length===0&&o.op==="replace"){t=o.value;break}}n>-1&&(r=r.slice(n+1));const i=Ka(Yv).applyPatches_;return ti(t)?i(t,r):this.produce(t,o=>i(o,r))}};function Jv(e,t,r,n){const[i,o]=Kf(t)?Ka(Fd).proxyMap_(t,r):Vf(t)?Ka(Fd).proxySet_(t,r):cL(t,r);return((r==null?void 0:r.scope_)??AO()).drafts_.push(i),o.callbacks_=(r==null?void 0:r.callbacks_)??[],o.key_=n,r&&n!==void 0?sL(r,o,n):o.callbacks_.push(function(d){var h;(h=d.mapSetPlugin_)==null||h.fixSetContents(o);const{patchPlugin_:f}=d;o.modified_&&f&&f.generatePatches_(o,[],d)}),i}function zr(e){return ti(e)||rn(10,e),NO(e)}function NO(e){if(!ln(e)||qf(e))return e;const t=e[ar];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=Gv(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=Gv(e,!0);return Wf(r,(i,o)=>{zd(r,i,NO(o))},n),t&&(t.finalized_=!1),r}var hL=new fL,IO=hL.produce;function MO(e){return({dispatch:r,getState:n})=>i=>o=>typeof o=="function"?o(r,n,e):i(o)}var pL=MO(),mL=MO,vL=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Rd:Rd.apply(null,arguments)};function Cr(e,t){function r(...n){if(t){let i=t(...n);if(!i)throw new Error(Or(0));return{type:e,payload:i.payload,..."meta"in i&&{meta:i.meta},..."error"in i&&{error:i.error}}}return{type:e,payload:n[0]}}return r.toString=()=>`${e}`,r.type=e,r.match=n=>SO(n)&&n.type===e,r}var TO=class Ls extends Array{constructor(...t){super(...t),Object.setPrototypeOf(this,Ls.prototype)}static get[Symbol.species](){return Ls}concat(...t){return super.concat.apply(this,t)}prepend(...t){return t.length===1&&Array.isArray(t[0])?new Ls(...t[0].concat(this)):new Ls(...t.concat(this))}};function Uw(e){return ln(e)?IO(e,()=>{}):e}function ld(e,t,r){return e.has(t)?e.get(t):e.set(t,r(t)).get(t)}function yL(e){return typeof e=="boolean"}var gL=()=>function(t){const{thunk:r=!0,immutableCheck:n=!0,serializableCheck:i=!0,actionCreatorCheck:o=!0}=t??{};let s=new TO;return r&&(yL(r)?s.push(pL):s.push(mL(r.extraArgument))),s},DO="RTK_autoBatch",rt=()=>e=>({payload:e,meta:{[DO]:!0}}),Ww=e=>t=>{setTimeout(t,e)},xL=(e,t)=>r=>{let n=!1;const i=()=>{n||(n=!0,cancelAnimationFrame(o),clearTimeout(s),r())},o=e(i),s=setTimeout(i,t)},RO=(e={type:"raf"})=>t=>(...r)=>{const n=t(...r);let i=!0,o=!1,s=!1;const u=new Set,d=e.type==="tick"?queueMicrotask:e.type==="raf"?typeof window<"u"&&window.requestAnimationFrame?xL(window.requestAnimationFrame,100):Ww(10):e.type==="callback"?e.queueNotification:Ww(e.timeout),f=()=>{s=!1,o&&(o=!1,u.forEach(h=>h()))};return Object.assign({},n,{subscribe(h){const m=()=>i&&h(),v=n.subscribe(m);return u.add(h),()=>{v(),u.delete(h)}},dispatch(h){var m;try{return i=!((m=h==null?void 0:h.meta)!=null&&m[DO]),o=!i,o&&(s||(s=!0,d(f))),n.dispatch(h)}finally{i=!0}}})},bL=e=>function(r){const{autoBatch:n=!0}=r??{};let i=new TO(e);return n&&i.push(RO(typeof n=="object"?n:void 0)),i};function wL(e){const t=gL(),{reducer:r=void 0,middleware:n,devTools:i=!0,preloadedState:o=void 0,enhancers:s=void 0}=e||{};let u;if(typeof r=="function")u=r;else if(og(r))u=wO(r);else throw new Error(Or(1));let d;typeof n=="function"?d=n(t):d=t();let f=Rd;i&&(f=vL({trace:!1,...typeof i=="object"&&i}));const h=J5(...d),m=bL(h);let v=typeof s=="function"?s(m):m();const x=f(...v);return bO(u,o,x)}function $O(e){const t={},r=[];let n;const i={addCase(o,s){const u=typeof o=="string"?o:o.type;if(!u)throw new Error(Or(28));if(u in t)throw new Error(Or(29));return t[u]=s,i},addAsyncThunk(o,s){return s.pending&&(t[o.pending.type]=s.pending),s.rejected&&(t[o.rejected.type]=s.rejected),s.fulfilled&&(t[o.fulfilled.type]=s.fulfilled),s.settled&&r.push({matcher:o.settled,reducer:s.settled}),i},addMatcher(o,s){return r.push({matcher:o,reducer:s}),i},addDefaultCase(o){return n=o,i}};return e(i),[t,r,n]}function SL(e){return typeof e=="function"}function kL(e,t){let[r,n,i]=$O(t),o;if(SL(e))o=()=>Uw(e());else{const u=Uw(e);o=()=>u}function s(u=o(),d){let f=[r[d.type],...n.filter(({matcher:h})=>h(d)).map(({reducer:h})=>h)];return f.filter(h=>!!h).length===0&&(f=[i]),f.reduce((h,m)=>{if(m)if(ti(h)){const x=m(h,d);return x===void 0?h:x}else{if(ln(h))return IO(h,v=>m(v,d));{const v=m(h,d);if(v===void 0){if(h===null)return h;throw Error("A case reducer on a non-draftable value must not return undefined")}return v}}return h},u)}return s.getInitialState=o,s}var EL="ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW",PL=(e=21)=>{let t="",r=e;for(;r--;)t+=EL[Math.random()*64|0];return t},AL=Symbol.for("rtk-slice-createasyncthunk");function OL(e,t){return`${e}/${t}`}function CL({creators:e}={}){var r;const t=(r=e==null?void 0:e.asyncThunk)==null?void 0:r[AL];return function(i){const{name:o,reducerPath:s=o}=i;if(!o)throw new Error(Or(11));const u=(typeof i.reducers=="function"?i.reducers(jL()):i.reducers)||{},d=Object.keys(u),f={sliceCaseReducersByName:{},sliceCaseReducersByType:{},actionCreators:{},sliceMatchers:[]},h={addCase(O,N){const C=typeof O=="string"?O:O.type;if(!C)throw new Error(Or(12));if(C in f.sliceCaseReducersByType)throw new Error(Or(13));return f.sliceCaseReducersByType[C]=N,h},addMatcher(O,N){return f.sliceMatchers.push({matcher:O,reducer:N}),h},exposeAction(O,N){return f.actionCreators[O]=N,h},exposeCaseReducer(O,N){return f.sliceCaseReducersByName[O]=N,h}};d.forEach(O=>{const N=u[O],C={reducerName:O,type:OL(o,O),createNotation:typeof i.reducers=="function"};IL(N)?TL(C,N,h,t):NL(C,N,h)});function m(){const[O={},N=[],C=void 0]=typeof i.extraReducers=="function"?$O(i.extraReducers):[i.extraReducers],R={...O,...f.sliceCaseReducersByType};return kL(i.initialState,z=>{for(let F in R)z.addCase(F,R[F]);for(let F of f.sliceMatchers)z.addMatcher(F.matcher,F.reducer);for(let F of N)z.addMatcher(F.matcher,F.reducer);C&&z.addDefaultCase(C)})}const v=O=>O,x=new Map,k=new WeakMap;let S;function E(O,N){return S||(S=m()),S(O,N)}function P(){return S||(S=m()),S.getInitialState()}function _(O,N=!1){function C(z){let F=z[O];return typeof F>"u"&&N&&(F=ld(k,C,P)),F}function R(z=v){const F=ld(x,N,()=>new WeakMap);return ld(F,z,()=>{const V={};for(const[Q,B]of Object.entries(i.selectors??{}))V[Q]=_L(B,z,()=>ld(k,z,P),N);return V})}return{reducerPath:O,getSelectors:R,get selectors(){return R(C)},selectSlice:C}}const j={name:o,reducer:E,actions:f.actionCreators,caseReducers:f.sliceCaseReducersByName,getInitialState:P,..._(s),injectInto(O,{reducerPath:N,...C}={}){const R=N??s;return O.inject({reducerPath:R,reducer:E},C),{...j,..._(R,!0)}}};return j}}function _L(e,t,r,n){function i(o,...s){let u=t(o);return typeof u>"u"&&n&&(u=r()),e(u,...s)}return i.unwrapped=e,i}var Jt=CL();function jL(){function e(t,r){return{_reducerDefinitionType:"asyncThunk",payloadCreator:t,...r}}return e.withTypes=()=>e,{reducer(t){return Object.assign({[t.name](...r){return t(...r)}}[t.name],{_reducerDefinitionType:"reducer"})},preparedReducer(t,r){return{_reducerDefinitionType:"reducerWithPrepare",prepare:t,reducer:r}},asyncThunk:e}}function NL({type:e,reducerName:t,createNotation:r},n,i){let o,s;if("reducer"in n){if(r&&!ML(n))throw new Error(Or(17));o=n.reducer,s=n.prepare}else o=n;i.addCase(e,o).exposeCaseReducer(t,o).exposeAction(t,s?Cr(e,s):Cr(e))}function IL(e){return e._reducerDefinitionType==="asyncThunk"}function ML(e){return e._reducerDefinitionType==="reducerWithPrepare"}function TL({type:e,reducerName:t},r,n,i){if(!i)throw new Error(Or(18));const{payloadCreator:o,fulfilled:s,pending:u,rejected:d,settled:f,options:h}=r,m=i(e,o,h);n.exposeAction(t,m),s&&n.addCase(m.fulfilled,s),u&&n.addCase(m.pending,u),d&&n.addCase(m.rejected,d),f&&n.addMatcher(m.settled,f),n.exposeCaseReducer(t,{fulfilled:s||sd,pending:u||sd,rejected:d||sd,settled:f||sd})}function sd(){}var DL="task",LO="listener",zO="completed",cg="cancelled",RL=`task-${cg}`,$L=`task-${zO}`,ey=`${LO}-${cg}`,LL=`${LO}-${zO}`,Yf=class{constructor(e){bs(this,"code");bs(this,"name","TaskAbortError");bs(this,"message");this.code=e,this.message=`${DL} ${cg} (reason: ${e})`}},dg=(e,t)=>{if(typeof e!="function")throw new TypeError(Or(32))},Wd=()=>{},FO=(e,t=Wd)=>(e.catch(t),e),BO=(e,t)=>(e.addEventListener("abort",t,{once:!0}),()=>e.removeEventListener("abort",t)),za=e=>{if(e.aborted)throw new Yf(e.reason)};function UO(e,t){let r=Wd;return new Promise((n,i)=>{const o=()=>i(new Yf(e.reason));if(e.aborted){o();return}r=BO(e,o),t.finally(()=>r()).then(n,i)}).finally(()=>{r=Wd})}var zL=async(e,t)=>{try{return await Promise.resolve(),{status:"ok",value:await e()}}catch(r){return{status:r instanceof Yf?"cancelled":"rejected",error:r}}finally{t==null||t()}},Hd=e=>t=>FO(UO(e,t).then(r=>(za(e),r))),WO=e=>{const t=Hd(e);return r=>t(new Promise(n=>setTimeout(n,r)))},{assign:Yo}=Object,Hw={},Qf="listenerMiddleware",FL=(e,t)=>{const r=n=>BO(e,()=>n.abort(e.reason));return(n,i)=>{dg(n);const o=new AbortController;r(o);const s=zL(async()=>{za(e),za(o.signal);const u=await n({pause:Hd(o.signal),delay:WO(o.signal),signal:o.signal});return za(o.signal),u},()=>o.abort($L));return i!=null&&i.autoJoin&&t.push(s.catch(Wd)),{result:Hd(e)(s),cancel(){o.abort(RL)}}}},BL=(e,t)=>{const r=async(n,i)=>{za(t);let o=()=>{};const u=[new Promise((d,f)=>{let h=e({predicate:n,effect:(m,v)=>{v.unsubscribe(),d([m,v.getState(),v.getOriginalState()])}});o=()=>{h(),f()}})];i!=null&&u.push(new Promise(d=>setTimeout(d,i,null)));try{const d=await UO(t,Promise.race(u));return za(t),d}finally{o()}};return((n,i)=>FO(r(n,i)))},HO=e=>{let{type:t,actionCreator:r,matcher:n,predicate:i,effect:o}=e;if(t)i=Cr(t).match;else if(r)t=r.type,i=r.match;else if(n)i=n;else if(!i)throw new Error(Or(21));return dg(o),{predicate:i,type:t,effect:o}},KO=Yo(e=>{const{type:t,predicate:r,effect:n}=HO(e);return{id:PL(),effect:n,type:t,predicate:r,pending:new Set,unsubscribe:()=>{throw new Error(Or(22))}}},{withTypes:()=>KO}),Kw=(e,t)=>{const{type:r,effect:n,predicate:i}=HO(t);return Array.from(e.values()).find(o=>(typeof r=="string"?o.type===r:o.predicate===i)&&o.effect===n)},ty=e=>{e.pending.forEach(t=>{t.abort(ey)})},UL=(e,t)=>()=>{for(const r of t.keys())ty(r);e.clear()},Vw=(e,t,r)=>{try{e(t,r)}catch(n){setTimeout(()=>{throw n},0)}},VO=Yo(Cr(`${Qf}/add`),{withTypes:()=>VO}),WL=Cr(`${Qf}/removeAll`),qO=Yo(Cr(`${Qf}/remove`),{withTypes:()=>qO}),HL=(...e)=>{console.error(`${Qf}/error`,...e)},Eu=(e={})=>{const t=new Map,r=new Map,n=x=>{const k=r.get(x)??0;r.set(x,k+1)},i=x=>{const k=r.get(x)??1;k===1?r.delete(x):r.set(x,k-1)},{extra:o,onError:s=HL}=e;dg(s);const u=x=>(x.unsubscribe=()=>t.delete(x.id),t.set(x.id,x),k=>{x.unsubscribe(),k!=null&&k.cancelActive&&ty(x)}),d=(x=>{const k=Kw(t,x)??KO(x);return u(k)});Yo(d,{withTypes:()=>d});const f=x=>{const k=Kw(t,x);return k&&(k.unsubscribe(),x.cancelActive&&ty(k)),!!k};Yo(f,{withTypes:()=>f});const h=async(x,k,S,E)=>{const P=new AbortController,_=BL(d,P.signal),j=[];try{x.pending.add(P),n(x),await Promise.resolve(x.effect(k,Yo({},S,{getOriginalState:E,condition:(O,N)=>_(O,N).then(Boolean),take:_,delay:WO(P.signal),pause:Hd(P.signal),extra:o,signal:P.signal,fork:FL(P.signal,j),unsubscribe:x.unsubscribe,subscribe:()=>{t.set(x.id,x)},cancelActiveListeners:()=>{x.pending.forEach((O,N,C)=>{O!==P&&(O.abort(ey),C.delete(O))})},cancel:()=>{P.abort(ey),x.pending.delete(P)},throwIfCancelled:()=>{za(P.signal)}})))}catch(O){O instanceof Yf||Vw(s,O,{raisedBy:"effect"})}finally{await Promise.all(j),P.abort(LL),i(x),x.pending.delete(P)}},m=UL(t,r);return{middleware:x=>k=>S=>{if(!SO(S))return k(S);if(VO.match(S))return d(S.payload);if(WL.match(S)){m();return}if(qO.match(S))return f(S.payload);let E=x.getState();const P=()=>{if(E===Hw)throw new Error(Or(23));return E};let _;try{if(_=k(S),t.size>0){const j=x.getState(),O=Array.from(t.values());for(const N of O){let C=!1;try{C=N.predicate(S,j,E)}catch(R){C=!1,Vw(s,R,{raisedBy:"predicate"})}C&&h(N,S,x,P)}}}finally{E=Hw}return _},startListening:d,stopListening:f,clearListeners:m}};function Or(e){return`Minified Redux Toolkit error #${e}; visit https://redux-toolkit.js.org/Errors?code=${e} for the full message or use the non-minified dev environment for full errors. `}var KL={layoutType:"horizontal",width:0,height:0,margin:{top:5,right:5,bottom:5,left:5},scale:1},GO=Jt({name:"chartLayout",initialState:KL,reducers:{setLayout(e,t){e.layoutType=t.payload},setChartSize(e,t){e.width=t.payload.width,e.height=t.payload.height},setMargin(e,t){var r,n,i,o;e.margin.top=(r=t.payload.top)!==null&&r!==void 0?r:0,e.margin.right=(n=t.payload.right)!==null&&n!==void 0?n:0,e.margin.bottom=(i=t.payload.bottom)!==null&&i!==void 0?i:0,e.margin.left=(o=t.payload.left)!==null&&o!==void 0?o:0},setScale(e,t){e.scale=t.payload}}}),Xf=GO.actions,VL=Xf.setMargin,qL=Xf.setLayout,GL=Xf.setChartSize,YL=Xf.setScale,QL=GO.reducer;function YO(e,t,r){return Array.isArray(e)&&e&&t+r!==0?e.slice(t,r+1):e}function Fe(e){return Number.isFinite(e)}function jn(e){return typeof e=="number"&&e>0&&Number.isFinite(e)}function qw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Wo(e){for(var t=1;t{if(t&&r){var n=r.width,i=r.height,o=t.align,s=t.verticalAlign,u=t.layout;if((u==="vertical"||u==="horizontal"&&s==="middle")&&o!=="center"&&be(e[o]))return Wo(Wo({},e),{},{[o]:e[o]+(n||0)});if((u==="horizontal"||u==="vertical"&&o==="center")&&s!=="middle"&&be(e[s]))return Wo(Wo({},e),{},{[s]:e[s]+(i||0)})}return e},Mn=(e,t)=>e==="horizontal"&&t==="xAxis"||e==="vertical"&&t==="yAxis"||e==="centric"&&t==="angleAxis"||e==="radial"&&t==="radiusAxis",QO=(e,t,r,n)=>{if(n)return e.map(u=>u.coordinate);var i,o,s=e.map(u=>(u.coordinate===t&&(i=!0),u.coordinate===r&&(o=!0),u.coordinate));return i||s.push(t),o||s.push(r),s},XO=(e,t,r)=>{if(!e)return null;var n=e.duplicateDomain,i=e.type,o=e.range,s=e.scale,u=e.realScaleType,d=e.isCategorical,f=e.categoricalDomain,h=e.tickCount,m=e.ticks,v=e.niceTicks,x=e.axisType;if(!s)return null;var k=u==="scaleBand"&&s.bandwidth?s.bandwidth()/2:2,S=i==="category"&&s.bandwidth?s.bandwidth()/k:0;if(S=x==="angleAxis"&&o&&o.length>=2?Lr(o[0]-o[1])*2*S:S,m||v){var E=(m||v||[]).map((P,_)=>{var j=n?n.indexOf(P):P,O=s.map(j);return Fe(O)?{coordinate:O+S,value:P,offset:S,index:_}:null}).filter(vr);return E}return d&&f?f.map((P,_)=>{var j=s.map(P);return Fe(j)?{coordinate:j+S,value:P,index:_,offset:S}:null}).filter(vr):s.ticks&&h!=null?s.ticks(h).map((P,_)=>{var j=s.map(P);return Fe(j)?{coordinate:j+S,value:P,index:_,offset:S}:null}).filter(vr):s.domain().map((P,_)=>{var j=s.map(P);return Fe(j)?{coordinate:j+S,value:n?n[P]:P,index:_,offset:S}:null}).filter(vr)},t4=e=>{var t,r=e.length;if(!(r<=0)){var n=(t=e[0])===null||t===void 0?void 0:t.length;if(!(n==null||n<=0))for(var i=0;i=0?(f[0]=o,o+=v,f[1]=o):(f[0]=s,s+=v,f[1]=s)}}}},r4=e=>{var t,r=e.length;if(!(r<=0)){var n=(t=e[0])===null||t===void 0?void 0:t.length;if(!(n==null||n<=0))for(var i=0;i=0?(d[0]=o,o+=f,d[1]=o):(d[0]=0,d[1]=0)}}}},n4={sign:t4,expand:x$,none:Wa,silhouette:b$,wiggle:w$,positive:r4},i4=(e,t,r)=>{var n,i=(n=n4[r])!==null&&n!==void 0?n:Wa,o=g$().keys(t).value((u,d)=>Number(Nt(u,d,0))).order(Bv).offset(i),s=o(e);return s.forEach((u,d)=>{u.forEach((f,h)=>{var m=Nt(e[h],t[d],0);Array.isArray(m)&&m.length===2&&be(m[0])&&be(m[1])&&(f[0]=m[0],f[1]=m[1])})}),s};function a4(e){return e==null?void 0:String(e)}function Gw(e){var t=e.axis,r=e.ticks,n=e.bandSize,i=e.entry,o=e.index,s=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!Ut(i[t.dataKey])){var u=nO(r,"value",i[t.dataKey]);if(u)return u.coordinate+n/2}return r!=null&&r[o]?r[o].coordinate+n/2:null}var d=Nt(i,Ut(s)?t.dataKey:s),f=t.scale.map(d);return be(f)?f:null}var o4=e=>{var t=e.flat(2).filter(be);return[Math.min(...t),Math.max(...t)]},l4=e=>[e[0]===1/0?0:e[0],e[1]===-1/0?0:e[1]],s4=(e,t,r)=>{if(!(e==null||Object.keys(e).length===0))return l4(Object.keys(e).reduce((n,i)=>{var o=e[i];if(!o)return n;var s=o.stackedData,u=s.reduce((d,f)=>{var h=YO(f,t,r),m=o4(h);return!Fe(m[0])||!Fe(m[1])?d:[Math.min(d[0],m[0]),Math.max(d[1],m[1])]},[1/0,-1/0]);return[Math.min(u[0],n[0]),Math.max(u[1],n[1])]},[1/0,-1/0]))},Yw=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Qw=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Kd=(e,t,r)=>{if(e&&e.scale&&e.scale.bandwidth){var n=e.scale.bandwidth();if(!r||n>0)return n}if(e&&t&&t.length>=2){for(var i=Bf(t,h=>h.coordinate),o=1/0,s=1,u=i.length;s{if(t==="horizontal")return e.relativeX;if(t==="vertical")return e.relativeY},c4=(e,t)=>t==="centric"?e.angle:e.radius,ai=e=>e.layout.width,oi=e=>e.layout.height,d4=e=>e.layout.scale,JO=e=>e.layout.margin,Zf=H(e=>e.cartesianAxis.xAxis,e=>Object.values(e)),Jf=H(e=>e.cartesianAxis.yAxis,e=>Object.values(e)),f4="data-recharts-item-index",h4="data-recharts-item-id",Pu=60;function Zw(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function ud(e){for(var t=1;te.brush.height;function g4(e){var t=Jf(e);return t.reduce((r,n)=>{if(n.orientation==="left"&&!n.mirror&&!n.hide){var i=typeof n.width=="number"?n.width:Pu;return r+i}return r},0)}function x4(e){var t=Jf(e);return t.reduce((r,n)=>{if(n.orientation==="right"&&!n.mirror&&!n.hide){var i=typeof n.width=="number"?n.width:Pu;return r+i}return r},0)}function b4(e){var t=Zf(e);return t.reduce((r,n)=>n.orientation==="top"&&!n.mirror&&!n.hide?r+n.height:r,0)}function w4(e){var t=Zf(e);return t.reduce((r,n)=>n.orientation==="bottom"&&!n.mirror&&!n.hide?r+n.height:r,0)}var Ht=H([ai,oi,JO,y4,g4,x4,b4,w4,xO,U5],(e,t,r,n,i,o,s,u,d,f)=>{var h={left:(r.left||0)+i,right:(r.right||0)+o},m={top:(r.top||0)+s,bottom:(r.bottom||0)+u},v=ud(ud({},m),h),x=v.bottom;v.bottom+=n,v=e4(v,d,f);var k=e-v.left-v.right,S=t-v.top-v.bottom;return ud(ud({brushBottom:x},v),{},{width:Math.max(k,0),height:Math.max(S,0)})}),S4=H(Ht,e=>({x:e.left,y:e.top,width:e.width,height:e.height})),e2=H(ai,oi,(e,t)=>({x:0,y:0,width:e,height:t})),k4=g.createContext(null),gr=()=>g.useContext(k4)!=null,eh=e=>e.brush,th=H([eh,Ht,JO],(e,t,r)=>({height:e.height,x:be(e.x)?e.x:t.left,y:be(e.y)?e.y:t.top+t.height+t.brushBottom-((r==null?void 0:r.bottom)||0),width:be(e.width)?e.width:t.width}));function E4(e,t,{signal:r,edges:n}={}){let i,o=null;const s=n!=null&&n.includes("leading"),u=n==null||n.includes("trailing"),d=()=>{o!==null&&(e.apply(i,o),i=void 0,o=null)},f=()=>{u&&d(),x()};let h=null;const m=()=>{h!=null&&clearTimeout(h),h=setTimeout(()=>{h=null,f()},t)},v=()=>{h!==null&&(clearTimeout(h),h=null)},x=()=>{v(),i=void 0,o=null},k=()=>{d()},S=function(...E){if(r!=null&&r.aborted)return;i=this,o=E;const P=h==null;m(),s&&P&&d()};return S.schedule=m,S.cancel=x,S.flush=k,r==null||r.addEventListener("abort",x,{once:!0}),S}function P4(e,t=0,r={}){typeof r!="object"&&(r={});const{leading:n=!1,trailing:i=!0,maxWait:o}=r,s=Array(2);n&&(s[0]="leading"),i&&(s[1]="trailing");let u,d=null;const f=E4(function(...v){u=e.apply(this,v),d=null},t,{edges:s}),h=function(...v){return o!=null&&(d===null&&(d=Date.now()),Date.now()-d>=o)?(u=e.apply(this,v),d=Date.now(),f.cancel(),f.schedule(),u):(f.apply(this,v),u)},m=()=>(f.flush(),u);return h.cancel=f.cancel,h.flush=m,h}function A4(e,t=0,r={}){const{leading:n=!0,trailing:i=!0}=r;return P4(e,t,{leading:n,maxWait:t,trailing:i})}var Vd=function(t,r){for(var n=arguments.length,i=new Array(n>2?n-2:0),o=2;oi[s++]))}},En={width:"100%",height:"100%",debounce:0,minWidth:0,initialDimension:{width:-1,height:-1}},t2=(e,t,r)=>{var n=r.width,i=n===void 0?En.width:n,o=r.height,s=o===void 0?En.height:o,u=r.aspect,d=r.maxHeight,f=Ha(i)?e:Number(i),h=Ha(s)?t:Number(s);return u&&u>0&&(f?h=f/u:h&&(f=h*u),d&&h!=null&&h>d&&(h=d)),{calculatedWidth:f,calculatedHeight:h}},O4={width:0,height:0,overflow:"visible"},C4={width:0,overflowX:"visible"},_4={height:0,overflowY:"visible"},j4={},N4=e=>{var t=e.width,r=e.height,n=Ha(t),i=Ha(r);return n&&i?O4:n?C4:i?_4:j4};function I4(e){var t=e.width,r=e.height,n=e.aspect,i=t,o=r;return i===void 0&&o===void 0?(i=En.width,o=En.height):i===void 0?i=n&&n>0?void 0:En.width:o===void 0&&(o=n&&n>0?void 0:En.height),{width:i,height:o}}var M4=["aspect","initialDimension","width","height","minWidth","minHeight","maxHeight","children","debounce","id","className","onResize","style"];function qd(){return qd=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r({width:r,height:n}),[r,n]);return H4(i)?g.createElement(r2.Provider,{value:i},t):null}var fg=()=>g.useContext(r2),K4=g.forwardRef((e,t)=>{var r=e.aspect,n=e.initialDimension,i=n===void 0?En.initialDimension:n,o=e.width,s=e.height,u=e.minWidth,d=u===void 0?En.minWidth:u,f=e.minHeight,h=e.maxHeight,m=e.children,v=e.debounce,x=v===void 0?En.debounce:v,k=e.id,S=e.className,E=e.onResize,P=e.style,_=P===void 0?{}:P,j=U4(e,M4),O=g.useRef(null),N=g.useRef();N.current=E,g.useImperativeHandle(t,()=>O.current);var C=g.useState({containerWidth:i.width,containerHeight:i.height}),R=$4(C,2),z=R[0],F=R[1],V=g.useCallback((fe,de)=>{F(Y=>{var ae=Math.round(fe),X=Math.round(de);return Y.containerWidth===ae&&Y.containerHeight===X?Y:{containerWidth:ae,containerHeight:X}})},[]);g.useEffect(()=>{if(O.current==null||typeof ResizeObserver>"u")return El;var fe=M=>{var T,Z=M[0];if(Z!=null){var se=Z.contentRect,te=se.width,ce=se.height;V(te,ce),(T=N.current)===null||T===void 0||T.call(N,te,ce)}};x>0&&(fe=A4(fe,x,{trailing:!0,leading:!1}));var de=new ResizeObserver(fe),Y=O.current.getBoundingClientRect(),ae=Y.width,X=Y.height;return V(ae,X),de.observe(O.current),()=>{de.disconnect()}},[V,x]);var Q=z.containerWidth,B=z.containerHeight;Vd(!r||r>0,"The aspect(%s) must be greater than zero.",r);var ue=t2(Q,B,{width:o,height:s,aspect:r,maxHeight:h}),G=ue.calculatedWidth,le=ue.calculatedHeight;return Vd(Q<0||B<0||G!=null&&G>0||le!=null&&le>0,`The width(%s) and height(%s) of chart should be greater than 0, please check the style of container, or the props width(%s) and height(%s), or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the - height and width.`,G,le,o,s,d,f,r),y.createElement("div",qd({id:k?"".concat(k):void 0,className:Xe("recharts-responsive-container",S),style:eS(eS({},j),{},{width:o,height:s,minWidth:d,minHeight:f,maxHeight:h}),ref:O},_),y.createElement("div",{style:BL({width:o,height:s})},y.createElement(lO,{width:G,height:le},m)))}),rz=y.forwardRef((e,t)=>{var r=hy();if(_n(r.width)&&_n(r.height))return e.children;var n=UL({width:e.width,height:e.height,aspect:e.aspect}),i=n.width,o=n.height,s=aO(void 0,void 0,{width:i,height:o,aspect:e.aspect,maxHeight:e.maxHeight}),u=s.calculatedWidth,d=s.calculatedHeight;return be(u)&&be(d)?y.createElement(lO,{width:u,height:d},e.children):y.createElement(tz,qd({},e,{width:i,height:o,ref:t}))});function py(e){if(e)return{x:e.x,y:e.y,upperWidth:"upperWidth"in e?e.upperWidth:e.width,lowerWidth:"lowerWidth"in e?e.lowerWidth:e.width,width:e.width,height:e.height}}var rh=()=>{var e,t=yr(),r=Ee(IL),n=Ee(th),i=(e=Ee(eh))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},nz={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},sO=()=>{var e;return(e=Ee(Ht))!==null&&e!==void 0?e:nz},uO=()=>Ee(ai),cO=()=>Ee(oi),ot=e=>e.layout.layoutType,Al=()=>Ee(ot),my=()=>{var e=Al();if(e==="horizontal"||e==="vertical")return e},dO=e=>{var t=e.layout.layoutType;if(t==="centric"||t==="radial")return t},iz=()=>{var e=Al();return e!==void 0},Au=e=>{var t=xt(),r=yr(),n=e.width,i=e.height,o=hy(),s=n,u=i;return o&&(s=o.width>0?o.width:n,u=o.height>0?o.height:i),y.useEffect(()=>{!r&&_n(s)&&_n(u)&&t(iL({width:s,height:u}))},[t,r,s,u]),null},fO=Symbol.for("immer-nothing"),rS=Symbol.for("immer-draftable"),jr=Symbol.for("immer-state");function nn(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var tu=Object.getPrototypeOf;function ml(e){return!!e&&!!e[jr]}function Va(e){var t;return e?hO(e)||Array.isArray(e)||!!e[rS]||!!((t=e.constructor)!=null&&t[rS])||Ou(e)||ih(e):!1}var az=Object.prototype.constructor.toString(),nS=new WeakMap;function hO(e){if(!e||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;if(r===Object)return!0;if(typeof r!="function")return!1;let n=nS.get(r);return n===void 0&&(n=Function.toString.call(r),nS.set(r,n)),n===az}function Gd(e,t,r=!0){nh(e)===0?(r?Reflect.ownKeys(e):Object.keys(e)).forEach(i=>{t(i,e[i],e)}):e.forEach((n,i)=>t(i,n,e))}function nh(e){const t=e[jr];return t?t.type_:Array.isArray(e)?1:Ou(e)?2:ih(e)?3:0}function ng(e,t){return nh(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function pO(e,t,r){const n=nh(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function oz(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Ou(e){return e instanceof Map}function ih(e){return e instanceof Set}function wa(e){return e.copy_||e.base_}function ig(e,t){if(Ou(e))return new Map(e);if(ih(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=hO(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[jr];let i=Reflect.ownKeys(n);for(let o=0;o1&&Object.defineProperties(e,{set:cd,add:cd,clear:cd,delete:cd}),Object.freeze(e),t&&Object.values(e).forEach(r=>vy(r,!0))),e}function lz(){nn(2)}var cd={value:lz};function ah(e){return e===null||typeof e!="object"?!0:Object.isFrozen(e)}var sz={};function qa(e){const t=sz[e];return t||nn(0,e),t}var ru;function mO(){return ru}function uz(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function iS(e,t){t&&(qa("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function ag(e){og(e),e.drafts_.forEach(cz),e.drafts_=null}function og(e){e===ru&&(ru=e.parent_)}function aS(e){return ru=uz(ru,e)}function cz(e){const t=e[jr];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function oS(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[jr].modified_&&(ag(t),nn(4)),Va(e)&&(e=Yd(t,e),t.parent_||Qd(t,e)),t.patches_&&qa("Patches").generateReplacementPatches_(r[jr].base_,e,t.patches_,t.inversePatches_)):e=Yd(t,r,[]),ag(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==fO?e:void 0}function Yd(e,t,r){if(ah(t))return t;const n=e.immer_.shouldUseStrictIteration(),i=t[jr];if(!i)return Gd(t,(o,s)=>lS(e,i,t,o,s,r),n),t;if(i.scope_!==e)return t;if(!i.modified_)return Qd(e,i.base_,!0),i.base_;if(!i.finalized_){i.finalized_=!0,i.scope_.unfinalizedDrafts_--;const o=i.copy_;let s=o,u=!1;i.type_===3&&(s=new Set(o),o.clear(),u=!0),Gd(s,(d,f)=>lS(e,i,o,d,f,r,u),n),Qd(e,o,!1),r&&e.patches_&&qa("Patches").generatePatches_(i,r,e.patches_,e.inversePatches_)}return i.copy_}function lS(e,t,r,n,i,o,s){if(i==null||typeof i!="object"&&!s)return;const u=ah(i);if(!(u&&!s)){if(ml(i)){const d=o&&t&&t.type_!==3&&!ng(t.assigned_,n)?o.concat(n):void 0,f=Yd(e,i,d);if(pO(r,n,f),ml(f))e.canAutoFreeze_=!1;else return}else s&&r.add(i);if(Va(i)&&!u){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[n]===i&&u)return;Yd(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&(Ou(r)?r.has(n):Object.prototype.propertyIsEnumerable.call(r,n))&&Qd(e,i)}}}function Qd(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&vy(t,r)}function dz(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:mO(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,o=gy;r&&(i=[n],o=nu);const{revoke:s,proxy:u}=Proxy.revocable(i,o);return n.draft_=u,n.revoke_=s,u}var gy={get(e,t){if(t===jr)return e;const r=wa(e);if(!ng(r,t))return fz(e,r,t);const n=r[t];return e.finalized_||!Va(n)?n:n===Um(e.base_,t)?(Wm(e),e.copy_[t]=sg(n,e)):n},has(e,t){return t in wa(e)},ownKeys(e){return Reflect.ownKeys(wa(e))},set(e,t,r){const n=vO(wa(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=Um(wa(e),t),o=i==null?void 0:i[jr];if(o&&o.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(oz(r,i)&&(r!==void 0||ng(e.base_,t)))return!0;Wm(e),lg(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return Um(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Wm(e),lg(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=wa(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){nn(11)},getPrototypeOf(e){return tu(e.base_)},setPrototypeOf(){nn(12)}},nu={};Gd(gy,(e,t)=>{nu[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});nu.deleteProperty=function(e,t){return nu.set.call(this,e,t,void 0)};nu.set=function(e,t,r){return gy.set.call(this,e[0],t,r,e[0])};function Um(e,t){const r=e[jr];return(r?wa(r):e)[t]}function fz(e,t,r){var i;const n=vO(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function vO(e,t){if(!(t in e))return;let r=tu(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=tu(r)}}function lg(e){e.modified_||(e.modified_=!0,e.parent_&&lg(e.parent_))}function Wm(e){e.copy_||(e.copy_=ig(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var hz=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const o=r;r=t;const s=this;return function(d=o,...f){return s.produce(d,h=>r.call(this,h,...f))}}typeof r!="function"&&nn(6),n!==void 0&&typeof n!="function"&&nn(7);let i;if(Va(t)){const o=aS(this),s=sg(t,void 0);let u=!0;try{i=r(s),u=!1}finally{u?ag(o):og(o)}return iS(o,n),oS(i,o)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===fO&&(i=void 0),this.autoFreeze_&&vy(i,!0),n){const o=[],s=[];qa("Patches").generateReplacementPatches_(t,i,o,s),n(o,s)}return i}else nn(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(s,...u)=>this.produceWithPatches(s,d=>t(d,...u));let n,i;return[this.produce(t,r,(s,u)=>{n=s,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof(e==null?void 0:e.useStrictIteration)=="boolean"&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){Va(e)||nn(8),ml(e)&&(e=pz(e));const t=aS(this),r=sg(e,void 0);return r[jr].isManual_=!0,og(t),r}finishDraft(e,t){const r=e&&e[jr];(!r||!r.isManual_)&&nn(9);const{scope_:n}=r;return iS(n,t),oS(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=qa("Patches").applyPatches_;return ml(e)?n(e,t):this.produce(e,i=>n(i,t))}};function sg(e,t){const r=Ou(e)?qa("MapSet").proxyMap_(e,t):ih(e)?qa("MapSet").proxySet_(e,t):dz(e,t);return(t?t.scope_:mO()).drafts_.push(r),r}function pz(e){return ml(e)||nn(10,e),gO(e)}function gO(e){if(!Va(e)||ah(e))return e;const t=e[jr];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=ig(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=ig(e,!0);return Gd(r,(i,o)=>{pO(r,i,gO(o))},n),t&&(t.finalized_=!1),r}var mz=new hz;mz.produce;var vz={settings:{layout:"horizontal",align:"center",verticalAlign:"bottom",itemSorter:"value"},size:{width:0,height:0},payload:[]},yO=Jt({name:"legend",initialState:vz,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload:{reducer(e,t){e.payload.push(t.payload)},prepare:rt()},replaceLegendPayload:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).payload.indexOf(n);o>-1&&(e.payload[o]=i)},prepare:rt()},removeLegendPayload:{reducer(e,t){var r=zr(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)},prepare:rt()}}}),Cu=yO.actions;Cu.setLegendSize;Cu.setLegendSettings;var gz=Cu.addLegendPayload,yz=Cu.replaceLegendPayload,xz=Cu.removeLegendPayload,bz=yO.reducer,Hm={exports:{}},Km={};/** + height and width.`,G,le,o,s,d,f,r),g.createElement("div",qd({id:k?"".concat(k):void 0,className:Xe("recharts-responsive-container",S),style:eS(eS({},_),{},{width:o,height:s,minWidth:d,minHeight:f,maxHeight:h}),ref:O},j),g.createElement("div",{style:N4({width:o,height:s})},g.createElement(n2,{width:G,height:le},m)))}),V4=g.forwardRef((e,t)=>{var r=fg();if(jn(r.width)&&jn(r.height))return e.children;var n=I4({width:e.width,height:e.height,aspect:e.aspect}),i=n.width,o=n.height,s=t2(void 0,void 0,{width:i,height:o,aspect:e.aspect,maxHeight:e.maxHeight}),u=s.calculatedWidth,d=s.calculatedHeight;return be(u)&&be(d)?g.createElement(n2,{width:u,height:d},e.children):g.createElement(K4,qd({},e,{width:i,height:o,ref:t}))});function hg(e){if(e)return{x:e.x,y:e.y,upperWidth:"upperWidth"in e?e.upperWidth:e.width,lowerWidth:"lowerWidth"in e?e.lowerWidth:e.width,width:e.width,height:e.height}}var rh=()=>{var e,t=gr(),r=ke(S4),n=ke(th),i=(e=ke(eh))===null||e===void 0?void 0:e.padding;return!t||!n||!i?r:{width:n.width-i.left-i.right,height:n.height-i.top-i.bottom,x:i.left,y:i.top}},q4={top:0,bottom:0,left:0,right:0,width:0,height:0,brushBottom:0},i2=()=>{var e;return(e=ke(Ht))!==null&&e!==void 0?e:q4},a2=()=>ke(ai),o2=()=>ke(oi),ot=e=>e.layout.layoutType,Pl=()=>ke(ot),pg=()=>{var e=Pl();if(e==="horizontal"||e==="vertical")return e},l2=e=>{var t=e.layout.layoutType;if(t==="centric"||t==="radial")return t},G4=()=>{var e=Pl();return e!==void 0},Au=e=>{var t=xt(),r=gr(),n=e.width,i=e.height,o=fg(),s=n,u=i;return o&&(s=o.width>0?o.width:n,u=o.height>0?o.height:i),g.useEffect(()=>{!r&&jn(s)&&jn(u)&&t(GL({width:s,height:u}))},[t,r,s,u]),null},s2=Symbol.for("immer-nothing"),rS=Symbol.for("immer-draftable"),_r=Symbol.for("immer-state");function nn(e,...t){throw new Error(`[Immer] minified error nr: ${e}. Full error at: https://bit.ly/3cXEKWf`)}var tu=Object.getPrototypeOf;function pl(e){return!!e&&!!e[_r]}function Va(e){var t;return e?u2(e)||Array.isArray(e)||!!e[rS]||!!((t=e.constructor)!=null&&t[rS])||Ou(e)||ih(e):!1}var Y4=Object.prototype.constructor.toString(),nS=new WeakMap;function u2(e){if(!e||typeof e!="object")return!1;const t=Object.getPrototypeOf(e);if(t===null||t===Object.prototype)return!0;const r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;if(r===Object)return!0;if(typeof r!="function")return!1;let n=nS.get(r);return n===void 0&&(n=Function.toString.call(r),nS.set(r,n)),n===Y4}function Gd(e,t,r=!0){nh(e)===0?(r?Reflect.ownKeys(e):Object.keys(e)).forEach(i=>{t(i,e[i],e)}):e.forEach((n,i)=>t(i,n,e))}function nh(e){const t=e[_r];return t?t.type_:Array.isArray(e)?1:Ou(e)?2:ih(e)?3:0}function ry(e,t){return nh(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function c2(e,t,r){const n=nh(e);n===2?e.set(t,r):n===3?e.add(r):e[t]=r}function Q4(e,t){return e===t?e!==0||1/e===1/t:e!==e&&t!==t}function Ou(e){return e instanceof Map}function ih(e){return e instanceof Set}function wa(e){return e.copy_||e.base_}function ny(e,t){if(Ou(e))return new Map(e);if(ih(e))return new Set(e);if(Array.isArray(e))return Array.prototype.slice.call(e);const r=u2(e);if(t===!0||t==="class_only"&&!r){const n=Object.getOwnPropertyDescriptors(e);delete n[_r];let i=Reflect.ownKeys(n);for(let o=0;o1&&Object.defineProperties(e,{set:cd,add:cd,clear:cd,delete:cd}),Object.freeze(e),t&&Object.values(e).forEach(r=>mg(r,!0))),e}function X4(){nn(2)}var cd={value:X4};function ah(e){return e===null||typeof e!="object"?!0:Object.isFrozen(e)}var Z4={};function qa(e){const t=Z4[e];return t||nn(0,e),t}var ru;function d2(){return ru}function J4(e,t){return{drafts_:[],parent_:e,immer_:t,canAutoFreeze_:!0,unfinalizedDrafts_:0}}function iS(e,t){t&&(qa("Patches"),e.patches_=[],e.inversePatches_=[],e.patchListener_=t)}function iy(e){ay(e),e.drafts_.forEach(ez),e.drafts_=null}function ay(e){e===ru&&(ru=e.parent_)}function aS(e){return ru=J4(ru,e)}function ez(e){const t=e[_r];t.type_===0||t.type_===1?t.revoke_():t.revoked_=!0}function oS(e,t){t.unfinalizedDrafts_=t.drafts_.length;const r=t.drafts_[0];return e!==void 0&&e!==r?(r[_r].modified_&&(iy(t),nn(4)),Va(e)&&(e=Yd(t,e),t.parent_||Qd(t,e)),t.patches_&&qa("Patches").generateReplacementPatches_(r[_r].base_,e,t.patches_,t.inversePatches_)):e=Yd(t,r,[]),iy(t),t.patches_&&t.patchListener_(t.patches_,t.inversePatches_),e!==s2?e:void 0}function Yd(e,t,r){if(ah(t))return t;const n=e.immer_.shouldUseStrictIteration(),i=t[_r];if(!i)return Gd(t,(o,s)=>lS(e,i,t,o,s,r),n),t;if(i.scope_!==e)return t;if(!i.modified_)return Qd(e,i.base_,!0),i.base_;if(!i.finalized_){i.finalized_=!0,i.scope_.unfinalizedDrafts_--;const o=i.copy_;let s=o,u=!1;i.type_===3&&(s=new Set(o),o.clear(),u=!0),Gd(s,(d,f)=>lS(e,i,o,d,f,r,u),n),Qd(e,o,!1),r&&e.patches_&&qa("Patches").generatePatches_(i,r,e.patches_,e.inversePatches_)}return i.copy_}function lS(e,t,r,n,i,o,s){if(i==null||typeof i!="object"&&!s)return;const u=ah(i);if(!(u&&!s)){if(pl(i)){const d=o&&t&&t.type_!==3&&!ry(t.assigned_,n)?o.concat(n):void 0,f=Yd(e,i,d);if(c2(r,n,f),pl(f))e.canAutoFreeze_=!1;else return}else s&&r.add(i);if(Va(i)&&!u){if(!e.immer_.autoFreeze_&&e.unfinalizedDrafts_<1||t&&t.base_&&t.base_[n]===i&&u)return;Yd(e,i),(!t||!t.scope_.parent_)&&typeof n!="symbol"&&(Ou(r)?r.has(n):Object.prototype.propertyIsEnumerable.call(r,n))&&Qd(e,i)}}}function Qd(e,t,r=!1){!e.parent_&&e.immer_.autoFreeze_&&e.canAutoFreeze_&&mg(t,r)}function tz(e,t){const r=Array.isArray(e),n={type_:r?1:0,scope_:t?t.scope_:d2(),modified_:!1,finalized_:!1,assigned_:{},parent_:t,base_:e,draft_:null,copy_:null,revoke_:null,isManual_:!1};let i=n,o=vg;r&&(i=[n],o=nu);const{revoke:s,proxy:u}=Proxy.revocable(i,o);return n.draft_=u,n.revoke_=s,u}var vg={get(e,t){if(t===_r)return e;const r=wa(e);if(!ry(r,t))return rz(e,r,t);const n=r[t];return e.finalized_||!Va(n)?n:n===Um(e.base_,t)?(Wm(e),e.copy_[t]=ly(n,e)):n},has(e,t){return t in wa(e)},ownKeys(e){return Reflect.ownKeys(wa(e))},set(e,t,r){const n=f2(wa(e),t);if(n!=null&&n.set)return n.set.call(e.draft_,r),!0;if(!e.modified_){const i=Um(wa(e),t),o=i==null?void 0:i[_r];if(o&&o.base_===r)return e.copy_[t]=r,e.assigned_[t]=!1,!0;if(Q4(r,i)&&(r!==void 0||ry(e.base_,t)))return!0;Wm(e),oy(e)}return e.copy_[t]===r&&(r!==void 0||t in e.copy_)||Number.isNaN(r)&&Number.isNaN(e.copy_[t])||(e.copy_[t]=r,e.assigned_[t]=!0),!0},deleteProperty(e,t){return Um(e.base_,t)!==void 0||t in e.base_?(e.assigned_[t]=!1,Wm(e),oy(e)):delete e.assigned_[t],e.copy_&&delete e.copy_[t],!0},getOwnPropertyDescriptor(e,t){const r=wa(e),n=Reflect.getOwnPropertyDescriptor(r,t);return n&&{writable:!0,configurable:e.type_!==1||t!=="length",enumerable:n.enumerable,value:r[t]}},defineProperty(){nn(11)},getPrototypeOf(e){return tu(e.base_)},setPrototypeOf(){nn(12)}},nu={};Gd(vg,(e,t)=>{nu[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}});nu.deleteProperty=function(e,t){return nu.set.call(this,e,t,void 0)};nu.set=function(e,t,r){return vg.set.call(this,e[0],t,r,e[0])};function Um(e,t){const r=e[_r];return(r?wa(r):e)[t]}function rz(e,t,r){var i;const n=f2(t,r);return n?"value"in n?n.value:(i=n.get)==null?void 0:i.call(e.draft_):void 0}function f2(e,t){if(!(t in e))return;let r=tu(e);for(;r;){const n=Object.getOwnPropertyDescriptor(r,t);if(n)return n;r=tu(r)}}function oy(e){e.modified_||(e.modified_=!0,e.parent_&&oy(e.parent_))}function Wm(e){e.copy_||(e.copy_=ny(e.base_,e.scope_.immer_.useStrictShallowCopy_))}var nz=class{constructor(e){this.autoFreeze_=!0,this.useStrictShallowCopy_=!1,this.useStrictIteration_=!0,this.produce=(t,r,n)=>{if(typeof t=="function"&&typeof r!="function"){const o=r;r=t;const s=this;return function(d=o,...f){return s.produce(d,h=>r.call(this,h,...f))}}typeof r!="function"&&nn(6),n!==void 0&&typeof n!="function"&&nn(7);let i;if(Va(t)){const o=aS(this),s=ly(t,void 0);let u=!0;try{i=r(s),u=!1}finally{u?iy(o):ay(o)}return iS(o,n),oS(i,o)}else if(!t||typeof t!="object"){if(i=r(t),i===void 0&&(i=t),i===s2&&(i=void 0),this.autoFreeze_&&mg(i,!0),n){const o=[],s=[];qa("Patches").generateReplacementPatches_(t,i,o,s),n(o,s)}return i}else nn(1,t)},this.produceWithPatches=(t,r)=>{if(typeof t=="function")return(s,...u)=>this.produceWithPatches(s,d=>t(d,...u));let n,i;return[this.produce(t,r,(s,u)=>{n=s,i=u}),n,i]},typeof(e==null?void 0:e.autoFreeze)=="boolean"&&this.setAutoFreeze(e.autoFreeze),typeof(e==null?void 0:e.useStrictShallowCopy)=="boolean"&&this.setUseStrictShallowCopy(e.useStrictShallowCopy),typeof(e==null?void 0:e.useStrictIteration)=="boolean"&&this.setUseStrictIteration(e.useStrictIteration)}createDraft(e){Va(e)||nn(8),pl(e)&&(e=iz(e));const t=aS(this),r=ly(e,void 0);return r[_r].isManual_=!0,ay(t),r}finishDraft(e,t){const r=e&&e[_r];(!r||!r.isManual_)&&nn(9);const{scope_:n}=r;return iS(n,t),oS(void 0,n)}setAutoFreeze(e){this.autoFreeze_=e}setUseStrictShallowCopy(e){this.useStrictShallowCopy_=e}setUseStrictIteration(e){this.useStrictIteration_=e}shouldUseStrictIteration(){return this.useStrictIteration_}applyPatches(e,t){let r;for(r=t.length-1;r>=0;r--){const i=t[r];if(i.path.length===0&&i.op==="replace"){e=i.value;break}}r>-1&&(t=t.slice(r+1));const n=qa("Patches").applyPatches_;return pl(e)?n(e,t):this.produce(e,i=>n(i,t))}};function ly(e,t){const r=Ou(e)?qa("MapSet").proxyMap_(e,t):ih(e)?qa("MapSet").proxySet_(e,t):tz(e,t);return(t?t.scope_:d2()).drafts_.push(r),r}function iz(e){return pl(e)||nn(10,e),h2(e)}function h2(e){if(!Va(e)||ah(e))return e;const t=e[_r];let r,n=!0;if(t){if(!t.modified_)return t.base_;t.finalized_=!0,r=ny(e,t.scope_.immer_.useStrictShallowCopy_),n=t.scope_.immer_.shouldUseStrictIteration()}else r=ny(e,!0);return Gd(r,(i,o)=>{c2(r,i,h2(o))},n),t&&(t.finalized_=!1),r}var az=new nz;az.produce;var oz={settings:{layout:"horizontal",align:"center",verticalAlign:"bottom",itemSorter:"value"},size:{width:0,height:0},payload:[]},p2=Jt({name:"legend",initialState:oz,reducers:{setLegendSize(e,t){e.size.width=t.payload.width,e.size.height=t.payload.height},setLegendSettings(e,t){e.settings.align=t.payload.align,e.settings.layout=t.payload.layout,e.settings.verticalAlign=t.payload.verticalAlign,e.settings.itemSorter=t.payload.itemSorter},addLegendPayload:{reducer(e,t){e.payload.push(t.payload)},prepare:rt()},replaceLegendPayload:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).payload.indexOf(n);o>-1&&(e.payload[o]=i)},prepare:rt()},removeLegendPayload:{reducer(e,t){var r=zr(e).payload.indexOf(t.payload);r>-1&&e.payload.splice(r,1)},prepare:rt()}}}),Cu=p2.actions;Cu.setLegendSize;Cu.setLegendSettings;var lz=Cu.addLegendPayload,sz=Cu.replaceLegendPayload,uz=Cu.removeLegendPayload,cz=p2.reducer,Hm={exports:{}},Km={};/** * @license React * use-sync-external-store-with-selector.production.js * @@ -414,53 +398,53 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var sS;function wz(){if(sS)return Km;sS=1;var e=kl();function t(d,f){return d===f&&(d!==0||1/d===1/f)||d!==d&&f!==f}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,o=e.useEffect,s=e.useMemo,u=e.useDebugValue;return Km.useSyncExternalStoreWithSelector=function(d,f,h,m,v){var x=i(null);if(x.current===null){var k={hasValue:!1,value:null};x.current=k}else k=x.current;x=s(function(){function E(N){if(!P){if(P=!0,j=N,N=m(N),v!==void 0&&k.hasValue){var C=k.value;if(v(C,N))return _=C}return _=N}if(C=_,r(j,N))return C;var R=m(N);return v!==void 0&&v(C,R)?(j=N,C):(j=N,_=R)}var P=!1,j,_,O=h===void 0?null:h;return[function(){return E(f())},O===null?void 0:function(){return E(O())}]},[f,h,m,v]);var S=n(d,x[0],x[1]);return o(function(){k.hasValue=!0,k.value=S},[S]),u(S),S},Km}var uS;function Sz(){return uS||(uS=1,Hm.exports=wz()),Hm.exports}Sz();function kz(e){e()}function Ez(){let e=null,t=null;return{clear(){e=null,t=null},notify(){kz(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var cS={notify(){},get:()=>[]};function Pz(e,t){let r,n=cS,i=0,o=!1;function s(S){h();const E=n.subscribe(S);let P=!1;return()=>{P||(P=!0,E(),m())}}function u(){n.notify()}function d(){k.onStateChange&&k.onStateChange()}function f(){return o}function h(){i++,r||(r=e.subscribe(d),n=Ez())}function m(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=cS)}function v(){o||(o=!0,h())}function x(){o&&(o=!1,m())}const k={addNestedSub:s,notifyNestedSubs:u,handleChangeWrapper:d,isSubscribed:f,trySubscribe:v,tryUnsubscribe:x,getListeners:()=>n};return k}var Az=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",Oz=Az(),Cz=()=>typeof navigator<"u"&&navigator.product==="ReactNative",jz=Cz(),_z=()=>Oz||jz?y.useLayoutEffect:y.useEffect,Nz=_z();function dS(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function Iz(e,t){if(dS(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(let i=0;i{const d=Pz(i);return{store:i,subscription:d,getServerState:n?()=>n:void 0}},[i,n]),s=y.useMemo(()=>i.getState(),[i]);Nz(()=>{const{subscription:d}=o;return d.onStateChange=d.notifyNestedSubs,d.trySubscribe(),s!==i.getState()&&d.notifyNestedSubs(),()=>{d.tryUnsubscribe(),d.onStateChange=void 0}},[o,s]);const u=r||Tz;return y.createElement(u.Provider,{value:o},t)}var Rz=Dz,$z=new Set(["axisLine","tickLine","activeBar","activeDot","activeLabel","activeShape","allowEscapeViewBox","background","cursor","dot","label","line","margin","padding","position","shape","style","tick","wrapperStyle","radius","throttledEvents"]);function Lz(e,t){return e==null&&t==null?!0:typeof e=="number"&&typeof t=="number"?e===t||e!==e&&t!==t:e===t}function oh(e,t){var r=new Set([...Object.keys(e),...Object.keys(t)]);for(var n of r)if($z.has(n)){if(e[n]==null&&t[n]==null)continue;if(!Iz(e[n],t[n]))return!1}else if(!Lz(e[n],t[n]))return!1;return!0}function ug(){return ug=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=e.separator,r=t===void 0?Mo.separator:t,n=e.contentStyle,i=e.itemStyle,o=e.labelStyle,s=o===void 0?Mo.labelStyle:o,u=e.payload,d=e.formatter,f=e.itemSorter,h=e.wrapperClassName,m=e.labelClassName,v=e.label,x=e.labelFormatter,k=e.accessibilityLayer,S=k===void 0?Mo.accessibilityLayer:k,E=()=>{if(u&&u.length){var z={padding:0,margin:0},F=Gz(u,f),V=F.map((Q,B)=>{if(!Q||Q.type==="none")return null;var ue=Q.formatter||d||qz,G=Q.value,le=Q.name,fe=G,de=le;if(ue){var Y=ue(G,le,Q,B,u);if(Array.isArray(Y)){var ae=Uz(Y,2);fe=ae[0],de=ae[1]}else if(Y!=null)fe=Y;else return null}var X=Cs(Cs({},Mo.itemStyle),{},{color:Q.color||Mo.itemStyle.color},i);return y.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(B),style:X},jn(de)?y.createElement("span",{className:"recharts-tooltip-item-name"},de):null,jn(de)?y.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,y.createElement("span",{className:"recharts-tooltip-item-value"},fe),y.createElement("span",{className:"recharts-tooltip-item-unit"},Q.unit||""))});return y.createElement("ul",{className:"recharts-tooltip-item-list",style:z},V)}return null},P=Cs(Cs({},Mo.contentStyle),n),j=Cs({margin:0},s),_=!Ut(v),O=_?v:"",N=Xe("recharts-default-tooltip",h),C=Xe("recharts-tooltip-label",m);_&&x&&u!==void 0&&u!==null&&(O=x(v,u));var R=S?{role:"status","aria-live":"assertive"}:{};return y.createElement("div",ug({className:N,style:P},R),y.createElement("p",{className:C,style:j},y.isValidElement(O)?O:"".concat(O)),E())},js="recharts-tooltip-wrapper",Qz={visibility:"hidden"};function Xz(e){var t=e.coordinate,r=e.translateX,n=e.translateY;return Xe(js,{["".concat(js,"-right")]:be(r)&&t&&be(t.x)&&r>=t.x,["".concat(js,"-left")]:be(r)&&t&&be(t.x)&&r=t.y,["".concat(js,"-top")]:be(n)&&t&&be(t.y)&&n0?i:0),m=r[n]+i;if(t[n])return s[n]?h:m;var v=d[n];if(v==null)return 0;if(s[n]){var x=h,k=v;return xE?Math.max(h,v):Math.max(m,v)}function Zz(e){var t=e.translateX,r=e.translateY,n=e.useTranslate3d;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function Jz(e){var t=e.allowEscapeViewBox,r=e.coordinate,n=e.offsetTop,i=e.offsetLeft,o=e.position,s=e.reverseDirection,u=e.tooltipBox,d=e.useTranslate3d,f=e.viewBox,h,m,v;return u.height>0&&u.width>0&&r?(m=pS({allowEscapeViewBox:t,coordinate:r,key:"x",offset:i,position:o,reverseDirection:s,tooltipDimension:u.width,viewBox:f,viewBoxDimension:f.width}),v=pS({allowEscapeViewBox:t,coordinate:r,key:"y",offset:n,position:o,reverseDirection:s,tooltipDimension:u.height,viewBox:f,viewBoxDimension:f.height}),h=Zz({translateX:m,translateY:v,useTranslate3d:d})):h=Qz,{cssProperties:h,cssClasses:Xz({translateX:m,translateY:v,coordinate:r})}}var eF=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),ju={isSsr:eF()};function tF(e,t){return aF(e)||iF(e,t)||nF(e,t)||rF()}function rF(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nF(e,t){if(e){if(typeof e=="string")return mS(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?mS(e,t):void 0}}function mS(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rju.isSsr||!window.matchMedia?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches),t=tF(e,2),r=t[0],n=t[1];return y.useEffect(()=>{if(window.matchMedia){var i=window.matchMedia("(prefers-reduced-motion: reduce)"),o=()=>{n(i.matches)};return i.addEventListener("change",o),()=>{i.removeEventListener("change",o)}}},[]),r}function vS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function To(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r({dismissed:!1,dismissedAtCoordinate:{x:0,y:0}})),f=uF(d,2),h=f[0],m=f[1];y.useEffect(()=>{var P=j=>{if(j.key==="Escape"){var _,O,N,C;m({dismissed:!0,dismissedAtCoordinate:{x:(_=(O=e.coordinate)===null||O===void 0?void 0:O.x)!==null&&_!==void 0?_:0,y:(N=(C=e.coordinate)===null||C===void 0?void 0:C.y)!==null&&N!==void 0?N:0}})}};return document.addEventListener("keydown",P),()=>{document.removeEventListener("keydown",P)}},[(t=e.coordinate)===null||t===void 0?void 0:t.x,(r=e.coordinate)===null||r===void 0?void 0:r.y]),h.dismissed&&(((n=(i=e.coordinate)===null||i===void 0?void 0:i.x)!==null&&n!==void 0?n:0)!==h.dismissedAtCoordinate.x||((o=(s=e.coordinate)===null||s===void 0?void 0:s.y)!==null&&o!==void 0?o:0)!==h.dismissedAtCoordinate.y)&&m(To(To({},h),{},{dismissed:!1}));var v=Jz({allowEscapeViewBox:e.allowEscapeViewBox,coordinate:e.coordinate,offsetLeft:typeof e.offset=="number"?e.offset:e.offset.x,offsetTop:typeof e.offset=="number"?e.offset:e.offset.y,position:e.position,reverseDirection:e.reverseDirection,tooltipBox:{height:e.lastBoundingBox.height,width:e.lastBoundingBox.width},useTranslate3d:e.useTranslate3d,viewBox:e.viewBox}),x=v.cssClasses,k=v.cssProperties,S=e.hasPortalFromProps?{}:To(To({transition:pF({prefersReducedMotion:u,isAnimationActive:e.isAnimationActive,active:e.active,animationDuration:e.animationDuration,animationEasing:e.animationEasing})},k),{},{pointerEvents:"none",position:"absolute",top:0,left:0}),E=To(To({},S),{},{visibility:!h.dismissed&&e.active&&e.hasPayload?"visible":"hidden"},e.wrapperStyle);return y.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:x,style:E,ref:e.innerRef},e.children)}var vF=y.memo(mF),bO=()=>{var e;return(e=Ee(t=>t.rootProps.accessibilityLayer))!==null&&e!==void 0?e:!0};function cg(){return cg=Object.assign?Object.assign.bind():function(e){for(var t=1;tFe(e.x)&&Fe(e.y),wS=e=>e.base!=null&&Xd(e.base)&&Xd(e),_s=e=>e.x,Ns=e=>e.y,bF=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(ny(e));if((r==="curveMonotone"||r==="curveBump")&&t){var n=bS["".concat(r).concat(t==="vertical"?"Y":"X")];if(n)return n}return bS[r]||zf},SS={connectNulls:!1,type:"linear"},wF=e=>{var t=e.type,r=t===void 0?SS.type:t,n=e.points,i=n===void 0?[]:n,o=e.baseLine,s=e.layout,u=e.connectNulls,d=u===void 0?SS.connectNulls:u,f=bF(r,s),h=d?i.filter(Xd):i;if(Array.isArray(o)){var m,v=i.map((P,j)=>xS(xS({},P),{},{base:o[j]}));s==="vertical"?m=nd().y(Ns).x1(_s).x0(P=>P.base.x):m=nd().x(_s).y1(Ns).y0(P=>P.base.y);var x=m.defined(wS).curve(f),k=d?v.filter(wS):v;return x(k)}var S;s==="vertical"&&be(o)?S=nd().y(Ns).x1(_s).x0(o):be(o)?S=nd().x(_s).y1(Ns).y0(o):S=YA().x(_s).y(Ns);var E=S.defined(Xd).curve(f);return E(h)},Od=e=>{var t=e.className,r=e.points,n=e.path,i=e.pathRef,o=Al();if((!r||!r.length)&&!n)return null;var s={type:e.type,points:e.points,baseLine:e.baseLine,layout:e.layout||o,connectNulls:e.connectNulls},u=r&&r.length?wF(s):n;return y.createElement("path",cg({},on(e),iy(e),{className:Xe("recharts-curve",t),d:u===null?void 0:u,ref:i}))},SF=["x","y","top","left","width","height","className"];function dg(){return dg=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(o,",").concat(t,"h").concat(r),_F=e=>{var t=e.x,r=t===void 0?0:t,n=e.y,i=n===void 0?0:n,o=e.top,s=o===void 0?0:o,u=e.left,d=u===void 0?0:u,f=e.width,h=f===void 0?0:f,m=e.height,v=m===void 0?0:m,x=e.className,k=OF(e,SF),S=kF({x:r,y:i,top:s,left:d,width:h,height:v},k);return!be(r)||!be(i)||!be(h)||!be(v)||!be(s)||!be(d)?null:y.createElement("path",dg({},Br(S),{className:Xe("recharts-cross",x),d:jF(r,i,h,v,s,d)}))};function NF(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}var Zd=1e-4,wO=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],SO=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),ES=(e,t)=>r=>{var n=wO(e,t);return SO(n,r)},IF=(e,t)=>r=>{var n=wO(e,t),i=[...n.map((o,s)=>o*s).slice(1),0];return SO(i,r)},MF=e=>{var t,r=e.split("(");if(r.length!==2||r[0]!=="cubic-bezier")return null;var n=(t=r[1])===null||t===void 0||(t=t.split(")")[0])===null||t===void 0?void 0:t.split(",");if(n==null||n.length!==4)return null;var i=n.map(o=>parseFloat(o));return[i[0],i[1],i[2],i[3]]},TF=function(){for(var t=arguments.length,r=new Array(t),n=0;n{var i=ES(e,r),o=ES(t,n),s=IF(e,r),u=f=>f>1?1:f<0?0:f,d=f=>{for(var h=f>1?1:f,m=h,v=0;v<8;++v){var x=i(m)-h,k=s(m);if(Math.abs(x-h)0&&arguments[0]!==void 0?arguments[0]:{},r=t.stiff,n=r===void 0?100:r,i=t.damping,o=i===void 0?8:i,s=t.dt,u=s===void 0?16.67:s,d=1,f=[0],h=0,m=0,v=1e4,x=0;x{var j,_,O;if(P<=0)return 0;if(P>=1)return d;var N=P*E,C=Math.floor(N),R=N-C;return((j=f[C])!==null&&j!==void 0?j:0)+(((_=f[C+1])!==null&&_!==void 0?_:0)-((O=f[C])!==null&&O!==void 0?O:0))*R}},$F=e=>{if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return PS(e);case"spring":return RF();default:if(e.split("(")[0]==="cubic-bezier")return PS(e)}return typeof e=="function"?e:null},LF=(e,t,r)=>{var n,i=o=>{var s=t.tick(o);if(t.getState()==="active"){if(r(t.getInterpolated()),t.getProgress()===1){t.complete(),n=void 0;return}n=e.setTimeout(i,s);return}n=e.setTimeout(i,s)};return n=e.setTimeout(i,0),()=>{var o;return(o=n)===null||o===void 0?void 0:o()}},kO=y.createContext(LF);kO.Provider;function zF(e){var t=y.useContext(kO);return y.useMemo(()=>e??t,[e,t])}function FF(e,t,r){return(t=BF(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function BF(e){var t=UF(e,"string");return typeof t=="symbol"?t:t+""}function UF(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var AS="init",OS="pending",CS="active",WF="completed";function Gm(e){return Math.max(0,e)}class HF{getAnimationStartedTime(){return this.animationStartedTime}getBeginStartedTime(){return this.beginStartedTime}constructor(t){var r;FF(this,"state",AS),this.animationId=t.animationId,this.onAnimationEnd=t.onAnimationEnd,this.animationDuration=Gm(t.animationDuration),this.animationBegin=Gm(t.animationBegin),this.progress=0,this.from=t.from,this.to=t.to,this.easing=t.easing,(r=t.onAnimationStart)===null||r===void 0||r.call(t)}getState(){return this.state}getEasing(){return this.easing}getAnimationDuration(){return this.animationDuration}tick(t){if(this.getState()===AS)return this.state=OS,this.beginStartedTime=t,this.animationBegin;if(this.getState()===OS){if(this.beginStartedTime==null)throw new Error;var r=t-this.beginStartedTime;return r>=this.animationBegin?(this.state=CS,this.animationStartedTime=t,this.nextAnimationUpdate(0)):Gm(this.animationBegin-r)}if(this.getState()===CS){if(this.animationStartedTime==null)throw new Error;var n=t-this.animationStartedTime;return this.setProgress(n/this.animationDuration),this.nextAnimationUpdate(n)}return 0}setProgress(t){this.progress=Math.min(1,Math.max(0,t))}getProgress(){return this.progress}complete(){if(this.progress=1,this.state==="active"){var t;(t=this.onAnimationEnd)===null||t===void 0||t.call(this)}this.state=WF}getFrom(){return this.from}getTo(){return this.to}getAnimationId(){return this.animationId}getAnimationBegin(){return this.animationBegin}}class KF extends HF{nextAnimationUpdate(){return 0}getInterpolated(){return this.easing(Yn(this.getFrom(),this.getTo(),this.getProgress()))}}class VF{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,o=s=>{s-n>=r?t(s):i=requestAnimationFrame(o)};return i=requestAnimationFrame(o),()=>{i!=null&&cancelAnimationFrame(i)}}}function qF(e,t){return XF(e)||QF(e,t)||YF(e,t)||GF()}function GF(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function YF(e,t){if(e){if(typeof e=="string")return jS(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?jS(e,t):void 0}}function jS(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{},onAnimationStart:()=>{}},_S=0,Ym=1;function EO(e){var t=Hr(e,ZF),r=t.animationId,n=t.isActive,i=t.canBegin,o=t.duration,s=t.easing,u=t.begin,d=t.onAnimationEnd,f=t.onAnimationStart,h=t.children,m=xO(),v=n==="auto"?!ju.isSsr&&!m:n,x=zF(t.animationController),k=y.useState(v?_S:Ym),S=qF(k,2),E=S[0],P=S[1];return y.useEffect(()=>{v||P(Ym)},[v]),y.useEffect(()=>{var j=$F(s);if(!v||!i||j==null)return Pl;var _=new VF,O=new KF({animationId:r,easing:j,animationDuration:o,animationBegin:u,onAnimationStart:f,onAnimationEnd:d,from:_S,to:Ym});return x(_,O,P)},[x,r,v,i,o,s,u,f,d]),h(Number(E))}function PO(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=y.useRef(Xs(t)),n=y.useRef(e);return n.current!==e&&(r.current=Xs(t),n.current=e),r.current}var JF=e=>e.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),e6=(e,t,r)=>e.map(n=>"".concat(JF(n)," ").concat(t,"ms ").concat(r)).join(","),t6=["radius"],r6=["radius"],NS,IS,MS,TS,DS,RS,$S,LS,zS,FS;function BS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function US(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r{var o=Gi(r),s=Gi(n),u=Math.min(Math.abs(o)/2,Math.abs(s)/2),d=s>=0?1:-1,f=o>=0?1:-1,h=s>=0&&o>=0||s<0&&o<0?1:0,m;if(u>0&&Array.isArray(i)){for(var v=[0,0,0,0],x=0,k=4;xu?u:E}m=Lt(NS||(NS=gn(["M",",",""])),e,t+d*v[0]),v[0]>0&&(m+=Lt(IS||(IS=gn(["A ",",",",0,0,",",",",",""])),v[0],v[0],h,e+f*v[0],t)),m+=Lt(MS||(MS=gn(["L ",",",""])),e+r-f*v[1],t),v[1]>0&&(m+=Lt(TS||(TS=gn(["A ",",",",0,0,",`, - `,",",""])),v[1],v[1],h,e+r,t+d*v[1])),m+=Lt(DS||(DS=gn(["L ",",",""])),e+r,t+n-d*v[2]),v[2]>0&&(m+=Lt(RS||(RS=gn(["A ",",",",0,0,",`, - `,",",""])),v[2],v[2],h,e+r-f*v[2],t+n)),m+=Lt($S||($S=gn(["L ",",",""])),e+f*v[3],t+n),v[3]>0&&(m+=Lt(LS||(LS=gn(["A ",",",",0,0,",`, - `,",",""])),v[3],v[3],h,e,t+n-d*v[3])),m+="Z"}else if(u>0&&i===+i&&i>0){var P=Math.min(u,i);m=Lt(zS||(zS=gn(["M ",",",` + */var sS;function dz(){if(sS)return Km;sS=1;var e=Sl();function t(d,f){return d===f&&(d!==0||1/d===1/f)||d!==d&&f!==f}var r=typeof Object.is=="function"?Object.is:t,n=e.useSyncExternalStore,i=e.useRef,o=e.useEffect,s=e.useMemo,u=e.useDebugValue;return Km.useSyncExternalStoreWithSelector=function(d,f,h,m,v){var x=i(null);if(x.current===null){var k={hasValue:!1,value:null};x.current=k}else k=x.current;x=s(function(){function E(N){if(!P){if(P=!0,_=N,N=m(N),v!==void 0&&k.hasValue){var C=k.value;if(v(C,N))return j=C}return j=N}if(C=j,r(_,N))return C;var R=m(N);return v!==void 0&&v(C,R)?(_=N,C):(_=N,j=R)}var P=!1,_,j,O=h===void 0?null:h;return[function(){return E(f())},O===null?void 0:function(){return E(O())}]},[f,h,m,v]);var S=n(d,x[0],x[1]);return o(function(){k.hasValue=!0,k.value=S},[S]),u(S),S},Km}var uS;function fz(){return uS||(uS=1,Hm.exports=dz()),Hm.exports}fz();function hz(e){e()}function pz(){let e=null,t=null;return{clear(){e=null,t=null},notify(){hz(()=>{let r=e;for(;r;)r.callback(),r=r.next})},get(){const r=[];let n=e;for(;n;)r.push(n),n=n.next;return r},subscribe(r){let n=!0;const i=t={callback:r,next:null,prev:t};return i.prev?i.prev.next=i:e=i,function(){!n||e===null||(n=!1,i.next?i.next.prev=i.prev:t=i.prev,i.prev?i.prev.next=i.next:e=i.next)}}}}var cS={notify(){},get:()=>[]};function mz(e,t){let r,n=cS,i=0,o=!1;function s(S){h();const E=n.subscribe(S);let P=!1;return()=>{P||(P=!0,E(),m())}}function u(){n.notify()}function d(){k.onStateChange&&k.onStateChange()}function f(){return o}function h(){i++,r||(r=e.subscribe(d),n=pz())}function m(){i--,r&&i===0&&(r(),r=void 0,n.clear(),n=cS)}function v(){o||(o=!0,h())}function x(){o&&(o=!1,m())}const k={addNestedSub:s,notifyNestedSubs:u,handleChangeWrapper:d,isSubscribed:f,trySubscribe:v,tryUnsubscribe:x,getListeners:()=>n};return k}var vz=()=>typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",yz=vz(),gz=()=>typeof navigator<"u"&&navigator.product==="ReactNative",xz=gz(),bz=()=>yz||xz?g.useLayoutEffect:g.useEffect,wz=bz();function dS(e,t){return e===t?e!==0||t!==0||1/e===1/t:e!==e&&t!==t}function Sz(e,t){if(dS(e,t))return!0;if(typeof e!="object"||e===null||typeof t!="object"||t===null)return!1;const r=Object.keys(e),n=Object.keys(t);if(r.length!==n.length)return!1;for(let i=0;i{const d=mz(i);return{store:i,subscription:d,getServerState:n?()=>n:void 0}},[i,n]),s=g.useMemo(()=>i.getState(),[i]);wz(()=>{const{subscription:d}=o;return d.onStateChange=d.notifyNestedSubs,d.trySubscribe(),s!==i.getState()&&d.notifyNestedSubs(),()=>{d.tryUnsubscribe(),d.onStateChange=void 0}},[o,s]);const u=r||Ez;return g.createElement(u.Provider,{value:o},t)}var Az=Pz,Oz=new Set(["axisLine","tickLine","activeBar","activeDot","activeLabel","activeShape","allowEscapeViewBox","background","cursor","dot","label","line","margin","padding","position","shape","style","tick","wrapperStyle","radius","throttledEvents"]);function Cz(e,t){return e==null&&t==null?!0:typeof e=="number"&&typeof t=="number"?e===t||e!==e&&t!==t:e===t}function oh(e,t){var r=new Set([...Object.keys(e),...Object.keys(t)]);for(var n of r)if(Oz.has(n)){if(e[n]==null&&t[n]==null)continue;if(!Sz(e[n],t[n]))return!1}else if(!Cz(e[n],t[n]))return!1;return!0}function sy(){return sy=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=e.separator,r=t===void 0?Mo.separator:t,n=e.contentStyle,i=e.itemStyle,o=e.labelStyle,s=o===void 0?Mo.labelStyle:o,u=e.payload,d=e.formatter,f=e.itemSorter,h=e.wrapperClassName,m=e.labelClassName,v=e.label,x=e.labelFormatter,k=e.accessibilityLayer,S=k===void 0?Mo.accessibilityLayer:k,E=()=>{if(u&&u.length){var z={padding:0,margin:0},F=Lz(u,f),V=F.map((Q,B)=>{if(!Q||Q.type==="none")return null;var ue=Q.formatter||d||$z,G=Q.value,le=Q.name,fe=G,de=le;if(ue){var Y=ue(G,le,Q,B,u);if(Array.isArray(Y)){var ae=Iz(Y,2);fe=ae[0],de=ae[1]}else if(Y!=null)fe=Y;else return null}var X=Os(Os({},Mo.itemStyle),{},{color:Q.color||Mo.itemStyle.color},i);return g.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(B),style:X},_n(de)?g.createElement("span",{className:"recharts-tooltip-item-name"},de):null,_n(de)?g.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,g.createElement("span",{className:"recharts-tooltip-item-value"},fe),g.createElement("span",{className:"recharts-tooltip-item-unit"},Q.unit||""))});return g.createElement("ul",{className:"recharts-tooltip-item-list",style:z},V)}return null},P=Os(Os({},Mo.contentStyle),n),_=Os({margin:0},s),j=!Ut(v),O=j?v:"",N=Xe("recharts-default-tooltip",h),C=Xe("recharts-tooltip-label",m);j&&x&&u!==void 0&&u!==null&&(O=x(v,u));var R=S?{role:"status","aria-live":"assertive"}:{};return g.createElement("div",sy({className:N,style:P},R),g.createElement("p",{className:C,style:_},g.isValidElement(O)?O:"".concat(O)),E())},Cs="recharts-tooltip-wrapper",Fz={visibility:"hidden"};function Bz(e){var t=e.coordinate,r=e.translateX,n=e.translateY;return Xe(Cs,{["".concat(Cs,"-right")]:be(r)&&t&&be(t.x)&&r>=t.x,["".concat(Cs,"-left")]:be(r)&&t&&be(t.x)&&r=t.y,["".concat(Cs,"-top")]:be(n)&&t&&be(t.y)&&n0?i:0),m=r[n]+i;if(t[n])return s[n]?h:m;var v=d[n];if(v==null)return 0;if(s[n]){var x=h,k=v;return xE?Math.max(h,v):Math.max(m,v)}function Uz(e){var t=e.translateX,r=e.translateY,n=e.useTranslate3d;return{transform:n?"translate3d(".concat(t,"px, ").concat(r,"px, 0)"):"translate(".concat(t,"px, ").concat(r,"px)")}}function Wz(e){var t=e.allowEscapeViewBox,r=e.coordinate,n=e.offsetTop,i=e.offsetLeft,o=e.position,s=e.reverseDirection,u=e.tooltipBox,d=e.useTranslate3d,f=e.viewBox,h,m,v;return u.height>0&&u.width>0&&r?(m=pS({allowEscapeViewBox:t,coordinate:r,key:"x",offset:i,position:o,reverseDirection:s,tooltipDimension:u.width,viewBox:f,viewBoxDimension:f.width}),v=pS({allowEscapeViewBox:t,coordinate:r,key:"y",offset:n,position:o,reverseDirection:s,tooltipDimension:u.height,viewBox:f,viewBoxDimension:f.height}),h=Uz({translateX:m,translateY:v,useTranslate3d:d})):h=Fz,{cssProperties:h,cssClasses:Bz({translateX:m,translateY:v,coordinate:r})}}var Hz=()=>!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout),_u={isSsr:Hz()};function Kz(e,t){return Yz(e)||Gz(e,t)||qz(e,t)||Vz()}function Vz(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function qz(e,t){if(e){if(typeof e=="string")return mS(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?mS(e,t):void 0}}function mS(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r_u.isSsr||!window.matchMedia?!1:window.matchMedia("(prefers-reduced-motion: reduce)").matches),t=Kz(e,2),r=t[0],n=t[1];return g.useEffect(()=>{if(window.matchMedia){var i=window.matchMedia("(prefers-reduced-motion: reduce)"),o=()=>{n(i.matches)};return i.addEventListener("change",o),()=>{i.removeEventListener("change",o)}}},[]),r}function vS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function To(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r({dismissed:!1,dismissedAtCoordinate:{x:0,y:0}})),f=Jz(d,2),h=f[0],m=f[1];g.useEffect(()=>{var P=_=>{if(_.key==="Escape"){var j,O,N,C;m({dismissed:!0,dismissedAtCoordinate:{x:(j=(O=e.coordinate)===null||O===void 0?void 0:O.x)!==null&&j!==void 0?j:0,y:(N=(C=e.coordinate)===null||C===void 0?void 0:C.y)!==null&&N!==void 0?N:0}})}};return document.addEventListener("keydown",P),()=>{document.removeEventListener("keydown",P)}},[(t=e.coordinate)===null||t===void 0?void 0:t.x,(r=e.coordinate)===null||r===void 0?void 0:r.y]),h.dismissed&&(((n=(i=e.coordinate)===null||i===void 0?void 0:i.x)!==null&&n!==void 0?n:0)!==h.dismissedAtCoordinate.x||((o=(s=e.coordinate)===null||s===void 0?void 0:s.y)!==null&&o!==void 0?o:0)!==h.dismissedAtCoordinate.y)&&m(To(To({},h),{},{dismissed:!1}));var v=Wz({allowEscapeViewBox:e.allowEscapeViewBox,coordinate:e.coordinate,offsetLeft:typeof e.offset=="number"?e.offset:e.offset.x,offsetTop:typeof e.offset=="number"?e.offset:e.offset.y,position:e.position,reverseDirection:e.reverseDirection,tooltipBox:{height:e.lastBoundingBox.height,width:e.lastBoundingBox.width},useTranslate3d:e.useTranslate3d,viewBox:e.viewBox}),x=v.cssClasses,k=v.cssProperties,S=e.hasPortalFromProps?{}:To(To({transition:iF({prefersReducedMotion:u,isAnimationActive:e.isAnimationActive,active:e.active,animationDuration:e.animationDuration,animationEasing:e.animationEasing})},k),{},{pointerEvents:"none",position:"absolute",top:0,left:0}),E=To(To({},S),{},{visibility:!h.dismissed&&e.active&&e.hasPayload?"visible":"hidden"},e.wrapperStyle);return g.createElement("div",{xmlns:"http://www.w3.org/1999/xhtml",tabIndex:-1,className:x,style:E,ref:e.innerRef},e.children)}var oF=g.memo(aF),v2=()=>{var e;return(e=ke(t=>t.rootProps.accessibilityLayer))!==null&&e!==void 0?e:!0};function uy(){return uy=Object.assign?Object.assign.bind():function(e){for(var t=1;tFe(e.x)&&Fe(e.y),wS=e=>e.base!=null&&Xd(e.base)&&Xd(e),_s=e=>e.x,js=e=>e.y,cF=(e,t)=>{if(typeof e=="function")return e;var r="curve".concat(rg(e));if((r==="curveMonotone"||r==="curveBump")&&t){var n=bS["".concat(r).concat(t==="vertical"?"Y":"X")];if(n)return n}return bS[r]||zf},SS={connectNulls:!1,type:"linear"},dF=e=>{var t=e.type,r=t===void 0?SS.type:t,n=e.points,i=n===void 0?[]:n,o=e.baseLine,s=e.layout,u=e.connectNulls,d=u===void 0?SS.connectNulls:u,f=cF(r,s),h=d?i.filter(Xd):i;if(Array.isArray(o)){var m,v=i.map((P,_)=>xS(xS({},P),{},{base:o[_]}));s==="vertical"?m=nd().y(js).x1(_s).x0(P=>P.base.x):m=nd().x(_s).y1(js).y0(P=>P.base.y);var x=m.defined(wS).curve(f),k=d?v.filter(wS):v;return x(k)}var S;s==="vertical"&&be(o)?S=nd().y(js).x1(_s).x0(o):be(o)?S=nd().x(_s).y1(js).y0(o):S=KA().x(_s).y(js);var E=S.defined(Xd).curve(f);return E(h)},Od=e=>{var t=e.className,r=e.points,n=e.path,i=e.pathRef,o=Pl();if((!r||!r.length)&&!n)return null;var s={type:e.type,points:e.points,baseLine:e.baseLine,layout:e.layout||o,connectNulls:e.connectNulls},u=r&&r.length?dF(s):n;return g.createElement("path",uy({},on(e),ng(e),{className:Xe("recharts-curve",t),d:u===null?void 0:u,ref:i}))},fF=["x","y","top","left","width","height","className"];function cy(){return cy=Object.assign?Object.assign.bind():function(e){for(var t=1;t"M".concat(e,",").concat(i,"v").concat(n,"M").concat(o,",").concat(t,"h").concat(r),bF=e=>{var t=e.x,r=t===void 0?0:t,n=e.y,i=n===void 0?0:n,o=e.top,s=o===void 0?0:o,u=e.left,d=u===void 0?0:u,f=e.width,h=f===void 0?0:f,m=e.height,v=m===void 0?0:m,x=e.className,k=yF(e,fF),S=hF({x:r,y:i,top:s,left:d,width:h,height:v},k);return!be(r)||!be(i)||!be(h)||!be(v)||!be(s)||!be(d)?null:g.createElement("path",cy({},Br(S),{className:Xe("recharts-cross",x),d:xF(r,i,h,v,s,d)}))};function wF(e,t,r,n){var i=n/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-i:r.left+.5,y:e==="horizontal"?r.top+.5:t.y-i,width:e==="horizontal"?n:r.width-1,height:e==="horizontal"?r.height-1:n}}var Zd=1e-4,y2=(e,t)=>[0,3*e,3*t-6*e,3*e-3*t+1],g2=(e,t)=>e.map((r,n)=>r*t**n).reduce((r,n)=>r+n),ES=(e,t)=>r=>{var n=y2(e,t);return g2(n,r)},SF=(e,t)=>r=>{var n=y2(e,t),i=[...n.map((o,s)=>o*s).slice(1),0];return g2(i,r)},kF=e=>{var t,r=e.split("(");if(r.length!==2||r[0]!=="cubic-bezier")return null;var n=(t=r[1])===null||t===void 0||(t=t.split(")")[0])===null||t===void 0?void 0:t.split(",");if(n==null||n.length!==4)return null;var i=n.map(o=>parseFloat(o));return[i[0],i[1],i[2],i[3]]},EF=function(){for(var t=arguments.length,r=new Array(t),n=0;n{var i=ES(e,r),o=ES(t,n),s=SF(e,r),u=f=>f>1?1:f<0?0:f,d=f=>{for(var h=f>1?1:f,m=h,v=0;v<8;++v){var x=i(m)-h,k=s(m);if(Math.abs(x-h)0&&arguments[0]!==void 0?arguments[0]:{},r=t.stiff,n=r===void 0?100:r,i=t.damping,o=i===void 0?8:i,s=t.dt,u=s===void 0?16.67:s,d=1,f=[0],h=0,m=0,v=1e4,x=0;x{var _,j,O;if(P<=0)return 0;if(P>=1)return d;var N=P*E,C=Math.floor(N),R=N-C;return((_=f[C])!==null&&_!==void 0?_:0)+(((j=f[C+1])!==null&&j!==void 0?j:0)-((O=f[C])!==null&&O!==void 0?O:0))*R}},OF=e=>{if(typeof e=="string")switch(e){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return PS(e);case"spring":return AF();default:if(e.split("(")[0]==="cubic-bezier")return PS(e)}return typeof e=="function"?e:null},CF=(e,t,r)=>{var n,i=o=>{var s=t.tick(o);if(t.getState()==="active"){if(r(t.getInterpolated()),t.getProgress()===1){t.complete(),n=void 0;return}n=e.setTimeout(i,s);return}n=e.setTimeout(i,s)};return n=e.setTimeout(i,0),()=>{var o;return(o=n)===null||o===void 0?void 0:o()}},x2=g.createContext(CF);x2.Provider;function _F(e){var t=g.useContext(x2);return g.useMemo(()=>e??t,[e,t])}function jF(e,t,r){return(t=NF(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function NF(e){var t=IF(e,"string");return typeof t=="symbol"?t:t+""}function IF(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var AS="init",OS="pending",CS="active",MF="completed";function Gm(e){return Math.max(0,e)}class TF{getAnimationStartedTime(){return this.animationStartedTime}getBeginStartedTime(){return this.beginStartedTime}constructor(t){var r;jF(this,"state",AS),this.animationId=t.animationId,this.onAnimationEnd=t.onAnimationEnd,this.animationDuration=Gm(t.animationDuration),this.animationBegin=Gm(t.animationBegin),this.progress=0,this.from=t.from,this.to=t.to,this.easing=t.easing,(r=t.onAnimationStart)===null||r===void 0||r.call(t)}getState(){return this.state}getEasing(){return this.easing}getAnimationDuration(){return this.animationDuration}tick(t){if(this.getState()===AS)return this.state=OS,this.beginStartedTime=t,this.animationBegin;if(this.getState()===OS){if(this.beginStartedTime==null)throw new Error;var r=t-this.beginStartedTime;return r>=this.animationBegin?(this.state=CS,this.animationStartedTime=t,this.nextAnimationUpdate(0)):Gm(this.animationBegin-r)}if(this.getState()===CS){if(this.animationStartedTime==null)throw new Error;var n=t-this.animationStartedTime;return this.setProgress(n/this.animationDuration),this.nextAnimationUpdate(n)}return 0}setProgress(t){this.progress=Math.min(1,Math.max(0,t))}getProgress(){return this.progress}complete(){if(this.progress=1,this.state==="active"){var t;(t=this.onAnimationEnd)===null||t===void 0||t.call(this)}this.state=MF}getFrom(){return this.from}getTo(){return this.to}getAnimationId(){return this.animationId}getAnimationBegin(){return this.animationBegin}}class DF extends TF{nextAnimationUpdate(){return 0}getInterpolated(){return this.easing(Yn(this.getFrom(),this.getTo(),this.getProgress()))}}class RF{setTimeout(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=performance.now(),i=null,o=s=>{s-n>=r?t(s):i=requestAnimationFrame(o)};return i=requestAnimationFrame(o),()=>{i!=null&&cancelAnimationFrame(i)}}}function $F(e,t){return BF(e)||FF(e,t)||zF(e,t)||LF()}function LF(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function zF(e,t){if(e){if(typeof e=="string")return _S(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_S(e,t):void 0}}function _S(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{},onAnimationStart:()=>{}},jS=0,Ym=1;function b2(e){var t=Hr(e,UF),r=t.animationId,n=t.isActive,i=t.canBegin,o=t.duration,s=t.easing,u=t.begin,d=t.onAnimationEnd,f=t.onAnimationStart,h=t.children,m=m2(),v=n==="auto"?!_u.isSsr&&!m:n,x=_F(t.animationController),k=g.useState(v?jS:Ym),S=$F(k,2),E=S[0],P=S[1];return g.useEffect(()=>{v||P(Ym)},[v]),g.useEffect(()=>{var _=OF(s);if(!v||!i||_==null)return El;var j=new RF,O=new DF({animationId:r,easing:_,animationDuration:o,animationBegin:u,onAnimationStart:f,onAnimationEnd:d,from:jS,to:Ym});return x(j,O,P)},[x,r,v,i,o,s,u,f,d]),h(Number(E))}function w2(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"animation-",r=g.useRef(Xs(t)),n=g.useRef(e);return n.current!==e&&(r.current=Xs(t),n.current=e),r.current}var WF=e=>e.replace(/([A-Z])/g,t=>"-".concat(t.toLowerCase())),HF=(e,t,r)=>e.map(n=>"".concat(WF(n)," ").concat(t,"ms ").concat(r)).join(","),KF=["radius"],VF=["radius"],NS,IS,MS,TS,DS,RS,$S,LS,zS,FS;function BS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function US(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r{var o=Gi(r),s=Gi(n),u=Math.min(Math.abs(o)/2,Math.abs(s)/2),d=s>=0?1:-1,f=o>=0?1:-1,h=s>=0&&o>=0||s<0&&o<0?1:0,m;if(u>0&&Array.isArray(i)){for(var v=[0,0,0,0],x=0,k=4;xu?u:E}m=Lt(NS||(NS=yn(["M",",",""])),e,t+d*v[0]),v[0]>0&&(m+=Lt(IS||(IS=yn(["A ",",",",0,0,",",",",",""])),v[0],v[0],h,e+f*v[0],t)),m+=Lt(MS||(MS=yn(["L ",",",""])),e+r-f*v[1],t),v[1]>0&&(m+=Lt(TS||(TS=yn(["A ",",",",0,0,",`, + `,",",""])),v[1],v[1],h,e+r,t+d*v[1])),m+=Lt(DS||(DS=yn(["L ",",",""])),e+r,t+n-d*v[2]),v[2]>0&&(m+=Lt(RS||(RS=yn(["A ",",",",0,0,",`, + `,",",""])),v[2],v[2],h,e+r-f*v[2],t+n)),m+=Lt($S||($S=yn(["L ",",",""])),e+f*v[3],t+n),v[3]>0&&(m+=Lt(LS||(LS=yn(["A ",",",",0,0,",`, + `,",",""])),v[3],v[3],h,e,t+n-d*v[3])),m+="Z"}else if(u>0&&i===+i&&i>0){var P=Math.min(u,i);m=Lt(zS||(zS=yn(["M ",",",` A `,",",",0,0,",",",",",` L `,",",` A `,",",",0,0,",",",",",` L `,",",` A `,",",",0,0,",",",",",` L `,",",` - A `,",",",0,0,",",",","," Z"])),e,t+d*P,P,P,h,e+f*P,t,e+r-f*P,t,P,P,h,e+r,t+d*P,e+r,t+n-d*P,P,P,h,e+r-f*P,t+n,e+f*P,t+n,P,P,h,e,t+n-d*P)}else m=Lt(FS||(FS=gn(["M ",","," h "," v "," h "," Z"])),e,t,r,n,-r);return m},VS={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},f6=e=>{var t=Hr(e,VS),r=y.useRef(null),n=y.useState(-1),i=l6(n,2),o=i[0],s=i[1];y.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var Y=r.current.getTotalLength();Y&&s(Y)}catch{}},[]);var u=t.x,d=t.y,f=t.width,h=t.height,m=t.radius,v=t.className,x=t.animationEasing,k=t.animationDuration,S=t.animationBegin,E=t.isAnimationActive,P=t.isUpdateAnimationActive,j=y.useRef(f),_=y.useRef(h),O=y.useRef(u),N=y.useRef(d),C=y.useMemo(()=>({x:u,y:d,width:f,height:h,radius:m}),[u,d,f,h,m]),R=PO(C,"rectangle-");if(u!==+u||d!==+d||f!==+f||h!==+h||f===0||h===0)return null;var z=Xe("recharts-rectangle",v);if(!P){var F=Br(t);F.radius;var V=WS(F,t6);return y.createElement("path",Jd({},V,{x:Gi(u),y:Gi(d),width:Gi(f),height:Gi(h),radius:typeof m=="number"?m:void 0,className:z,d:KS(u,d,f,h,m)}))}var Q=j.current,B=_.current,ue=O.current,G=N.current,le="0px ".concat(o===-1?1:o,"px"),fe="".concat(o,"px ").concat(o,"px"),de=e6(["strokeDasharray"],k,typeof x=="string"?x:VS.animationEasing);return y.createElement(EO,{animationId:R,key:R,canBegin:o>0,duration:k,easing:x,isActive:P,begin:S},Y=>{var ae=Yn(Q,f,Y),X=Yn(B,h,Y),M=Yn(ue,u,Y),T=Yn(G,d,Y);r.current&&(j.current=ae,_.current=X,O.current=M,N.current=T);var Z;E?Y>0?Z={transition:de,strokeDasharray:fe}:Z={strokeDasharray:le}:Z={strokeDasharray:fe};var se=Br(t);se.radius;var te=WS(se,r6);return y.createElement("path",Jd({},te,{radius:typeof m=="number"?m:void 0,className:z,d:KS(M,T,ae,X,m),ref:r,style:US(US({},Z),t.style)}))})};function qS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function GS(e){for(var t=1;te*180/Math.PI,Bt=(e,t,r,n)=>({x:e+Math.cos(-ef*n)*r,y:t+Math.sin(-ef*n)*r}),g6=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},y6=(e,t)=>{var r=e.x,n=e.y,i=t.x,o=t.y;return Math.sqrt((r-i)**2+(n-o)**2)},x6=(e,t)=>{var r=e.x,n=e.y,i=t.cx,o=t.cy,s=y6({x:r,y:n},{x:i,y:o});if(s<=0)return{radius:s,angle:0};var u=(r-i)/s,d=Math.acos(u);return n>o&&(d=2*Math.PI-d),{radius:s,angle:v6(d),angleInRadian:d}},b6=e=>{var t=e.startAngle,r=e.endAngle,n=Math.floor(t/360),i=Math.floor(r/360),o=Math.min(n,i);return{startAngle:t-o*360,endAngle:r-o*360}},w6=(e,t)=>{var r=t.startAngle,n=t.endAngle,i=Math.floor(r/360),o=Math.floor(n/360),s=Math.min(i,o);return e+s*360},S6=(e,t)=>{var r=e.relativeX,n=e.relativeY,i=x6({x:r,y:n},t),o=i.radius,s=i.angle,u=t.innerRadius,d=t.outerRadius;if(od||o===0)return null;var f=b6(t),h=f.startAngle,m=f.endAngle,v=s,x;if(h<=m){for(;v>m;)v-=360;for(;v=h&&v<=m}else{for(;v>h;)v-=360;for(;v=m&&v<=h}return x?GS(GS({},t),{},{radius:o,angle:w6(v,t)}):null};function AO(e){var t=e.cx,r=e.cy,n=e.radius,i=e.startAngle,o=e.endAngle,s=Bt(t,r,n,i),u=Bt(t,r,n,o);return{points:[s,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:o}}var YS,QS,XS,ZS,JS,ek,tk;function fg(){return fg=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=Lr(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},dd=e=>{var t=e.cx,r=e.cy,n=e.radius,i=e.angle,o=e.sign,s=e.isExternal,u=e.cornerRadius,d=e.cornerIsExternal,f=u*(s?1:-1)+n,h=Math.asin(u/f)/ef,m=d?i:i+o*h,v=Bt(t,r,f,m),x=Bt(t,r,n,m),k=d?i-o*h:i,S=Bt(t,r,f*Math.cos(h*ef),k);return{center:v,circleTangency:x,lineTangency:S,theta:h}},OO=e=>{var t=e.cx,r=e.cy,n=e.innerRadius,i=e.outerRadius,o=e.startAngle,s=e.endAngle,u=k6(o,s),d=o+u,f=Bt(t,r,i,o),h=Bt(t,r,i,d),m=Lt(YS||(YS=Pa(["M ",",",` + A `,",",",0,0,",",",","," Z"])),e,t+d*P,P,P,h,e+f*P,t,e+r-f*P,t,P,P,h,e+r,t+d*P,e+r,t+n-d*P,P,P,h,e+r-f*P,t+n,e+f*P,t+n,P,P,h,e,t+n-d*P)}else m=Lt(FS||(FS=yn(["M ",","," h "," v "," h "," Z"])),e,t,r,n,-r);return m},VS={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},r6=e=>{var t=Hr(e,VS),r=g.useRef(null),n=g.useState(-1),i=XF(n,2),o=i[0],s=i[1];g.useEffect(()=>{if(r.current&&r.current.getTotalLength)try{var Y=r.current.getTotalLength();Y&&s(Y)}catch{}},[]);var u=t.x,d=t.y,f=t.width,h=t.height,m=t.radius,v=t.className,x=t.animationEasing,k=t.animationDuration,S=t.animationBegin,E=t.isAnimationActive,P=t.isUpdateAnimationActive,_=g.useRef(f),j=g.useRef(h),O=g.useRef(u),N=g.useRef(d),C=g.useMemo(()=>({x:u,y:d,width:f,height:h,radius:m}),[u,d,f,h,m]),R=w2(C,"rectangle-");if(u!==+u||d!==+d||f!==+f||h!==+h||f===0||h===0)return null;var z=Xe("recharts-rectangle",v);if(!P){var F=Br(t);F.radius;var V=WS(F,KF);return g.createElement("path",Jd({},V,{x:Gi(u),y:Gi(d),width:Gi(f),height:Gi(h),radius:typeof m=="number"?m:void 0,className:z,d:KS(u,d,f,h,m)}))}var Q=_.current,B=j.current,ue=O.current,G=N.current,le="0px ".concat(o===-1?1:o,"px"),fe="".concat(o,"px ").concat(o,"px"),de=HF(["strokeDasharray"],k,typeof x=="string"?x:VS.animationEasing);return g.createElement(b2,{animationId:R,key:R,canBegin:o>0,duration:k,easing:x,isActive:P,begin:S},Y=>{var ae=Yn(Q,f,Y),X=Yn(B,h,Y),M=Yn(ue,u,Y),T=Yn(G,d,Y);r.current&&(_.current=ae,j.current=X,O.current=M,N.current=T);var Z;E?Y>0?Z={transition:de,strokeDasharray:fe}:Z={strokeDasharray:le}:Z={strokeDasharray:fe};var se=Br(t);se.radius;var te=WS(se,VF);return g.createElement("path",Jd({},te,{radius:typeof m=="number"?m:void 0,className:z,d:KS(M,T,ae,X,m),ref:r,style:US(US({},Z),t.style)}))})};function qS(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function GS(e){for(var t=1;te*180/Math.PI,Bt=(e,t,r,n)=>({x:e+Math.cos(-ef*n)*r,y:t+Math.sin(-ef*n)*r}),l6=function(t,r){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(n.left||0)-(n.right||0)),Math.abs(r-(n.top||0)-(n.bottom||0)))/2},s6=(e,t)=>{var r=e.x,n=e.y,i=t.x,o=t.y;return Math.sqrt((r-i)**2+(n-o)**2)},u6=(e,t)=>{var r=e.x,n=e.y,i=t.cx,o=t.cy,s=s6({x:r,y:n},{x:i,y:o});if(s<=0)return{radius:s,angle:0};var u=(r-i)/s,d=Math.acos(u);return n>o&&(d=2*Math.PI-d),{radius:s,angle:o6(d),angleInRadian:d}},c6=e=>{var t=e.startAngle,r=e.endAngle,n=Math.floor(t/360),i=Math.floor(r/360),o=Math.min(n,i);return{startAngle:t-o*360,endAngle:r-o*360}},d6=(e,t)=>{var r=t.startAngle,n=t.endAngle,i=Math.floor(r/360),o=Math.floor(n/360),s=Math.min(i,o);return e+s*360},f6=(e,t)=>{var r=e.relativeX,n=e.relativeY,i=u6({x:r,y:n},t),o=i.radius,s=i.angle,u=t.innerRadius,d=t.outerRadius;if(od||o===0)return null;var f=c6(t),h=f.startAngle,m=f.endAngle,v=s,x;if(h<=m){for(;v>m;)v-=360;for(;v=h&&v<=m}else{for(;v>h;)v-=360;for(;v=m&&v<=h}return x?GS(GS({},t),{},{radius:o,angle:d6(v,t)}):null};function S2(e){var t=e.cx,r=e.cy,n=e.radius,i=e.startAngle,o=e.endAngle,s=Bt(t,r,n,i),u=Bt(t,r,n,o);return{points:[s,u],cx:t,cy:r,radius:n,startAngle:i,endAngle:o}}var YS,QS,XS,ZS,JS,ek,tk;function dy(){return dy=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var r=Lr(t-e),n=Math.min(Math.abs(t-e),359.999);return r*n},dd=e=>{var t=e.cx,r=e.cy,n=e.radius,i=e.angle,o=e.sign,s=e.isExternal,u=e.cornerRadius,d=e.cornerIsExternal,f=u*(s?1:-1)+n,h=Math.asin(u/f)/ef,m=d?i:i+o*h,v=Bt(t,r,f,m),x=Bt(t,r,n,m),k=d?i-o*h:i,S=Bt(t,r,f*Math.cos(h*ef),k);return{center:v,circleTangency:x,lineTangency:S,theta:h}},k2=e=>{var t=e.cx,r=e.cy,n=e.innerRadius,i=e.outerRadius,o=e.startAngle,s=e.endAngle,u=h6(o,s),d=o+u,f=Bt(t,r,i,o),h=Bt(t,r,i,d),m=Lt(YS||(YS=Pa(["M ",",",` A `,",",`,0, `,",",`, `,",",` `])),f.x,f.y,i,i,+(Math.abs(u)>180),+(o>d),h.x,h.y);if(n>0){var v=Bt(t,r,n,o),x=Bt(t,r,n,d);m+=Lt(QS||(QS=Pa(["L ",",",` A `,",",`,0, `,",",`, - `,","," Z"])),x.x,x.y,n,n,+(Math.abs(u)>180),+(o<=d),v.x,v.y)}else m+=Lt(XS||(XS=Pa(["L ",","," Z"])),t,r);return m},E6=e=>{var t=e.cx,r=e.cy,n=e.innerRadius,i=e.outerRadius,o=e.cornerRadius,s=e.forceCornerRadius,u=e.cornerIsExternal,d=e.startAngle,f=e.endAngle,h=Lr(f-d),m=dd({cx:t,cy:r,radius:i,angle:d,sign:h,cornerRadius:o,cornerIsExternal:u}),v=m.circleTangency,x=m.lineTangency,k=m.theta,S=dd({cx:t,cy:r,radius:i,angle:f,sign:-h,cornerRadius:o,cornerIsExternal:u}),E=S.circleTangency,P=S.lineTangency,j=S.theta,_=u?Math.abs(d-f):Math.abs(d-f)-k-j;if(_<0)return s?Lt(ZS||(ZS=Pa(["M ",",",` + `,","," Z"])),x.x,x.y,n,n,+(Math.abs(u)>180),+(o<=d),v.x,v.y)}else m+=Lt(XS||(XS=Pa(["L ",","," Z"])),t,r);return m},p6=e=>{var t=e.cx,r=e.cy,n=e.innerRadius,i=e.outerRadius,o=e.cornerRadius,s=e.forceCornerRadius,u=e.cornerIsExternal,d=e.startAngle,f=e.endAngle,h=Lr(f-d),m=dd({cx:t,cy:r,radius:i,angle:d,sign:h,cornerRadius:o,cornerIsExternal:u}),v=m.circleTangency,x=m.lineTangency,k=m.theta,S=dd({cx:t,cy:r,radius:i,angle:f,sign:-h,cornerRadius:o,cornerIsExternal:u}),E=S.circleTangency,P=S.lineTangency,_=S.theta,j=u?Math.abs(d-f):Math.abs(d-f)-k-_;if(j<0)return s?Lt(ZS||(ZS=Pa(["M ",",",` a`,",",",0,0,1,",`,0 a`,",",",0,0,1,",`,0 - `])),x.x,x.y,o,o,o*2,o,o,-o*2):OO({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:d,endAngle:f});var O=Lt(JS||(JS=Pa(["M ",",",` + `])),x.x,x.y,o,o,o*2,o,o,-o*2):k2({cx:t,cy:r,innerRadius:n,outerRadius:i,startAngle:d,endAngle:f});var O=Lt(JS||(JS=Pa(["M ",",",` A`,",",",0,0,",",",",",` A`,",",",0,",",",",",",",` A`,",",",0,0,",",",",",` - `])),x.x,x.y,o,o,+(h<0),v.x,v.y,i,i,+(_>180),+(h<0),E.x,E.y,o,o,+(h<0),P.x,P.y);if(n>0){var N=dd({cx:t,cy:r,radius:n,angle:d,sign:h,isExternal:!0,cornerRadius:o,cornerIsExternal:u}),C=N.circleTangency,R=N.lineTangency,z=N.theta,F=dd({cx:t,cy:r,radius:n,angle:f,sign:-h,isExternal:!0,cornerRadius:o,cornerIsExternal:u}),V=F.circleTangency,Q=F.lineTangency,B=F.theta,ue=u?Math.abs(d-f):Math.abs(d-f)-z-B;if(ue<0&&o===0)return"".concat(O,"L").concat(t,",").concat(r,"Z");O+=Lt(ek||(ek=Pa(["L",",",` + `])),x.x,x.y,o,o,+(h<0),v.x,v.y,i,i,+(j>180),+(h<0),E.x,E.y,o,o,+(h<0),P.x,P.y);if(n>0){var N=dd({cx:t,cy:r,radius:n,angle:d,sign:h,isExternal:!0,cornerRadius:o,cornerIsExternal:u}),C=N.circleTangency,R=N.lineTangency,z=N.theta,F=dd({cx:t,cy:r,radius:n,angle:f,sign:-h,isExternal:!0,cornerRadius:o,cornerIsExternal:u}),V=F.circleTangency,Q=F.lineTangency,B=F.theta,ue=u?Math.abs(d-f):Math.abs(d-f)-z-B;if(ue<0&&o===0)return"".concat(O,"L").concat(t,",").concat(r,"Z");O+=Lt(ek||(ek=Pa(["L",",",` A`,",",",0,0,",",",",",` A`,",",",0,",",",",",",",` - A`,",",",0,0,",",",",","Z"])),Q.x,Q.y,o,o,+(h<0),V.x,V.y,n,n,+(ue>180),+(h>0),C.x,C.y,o,o,+(h<0),R.x,R.y)}else O+=Lt(tk||(tk=Pa(["L",",","Z"])),t,r);return O},P6={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},A6=e=>{var t=Hr(e,P6),r=t.cx,n=t.cy,i=t.innerRadius,o=t.outerRadius,s=t.cornerRadius,u=t.forceCornerRadius,d=t.cornerIsExternal,f=t.startAngle,h=t.endAngle,m=t.className;if(o0&&Math.abs(f-h)<360?S=E6({cx:r,cy:n,innerRadius:i,outerRadius:o,cornerRadius:Math.min(k,x/2),forceCornerRadius:u,cornerIsExternal:d,startAngle:f,endAngle:h}):S=OO({cx:r,cy:n,innerRadius:i,outerRadius:o,startAngle:f,endAngle:h}),y.createElement("path",fg({},Br(t),{className:v,d:S}))};function O6(e,t,r){if(e==="horizontal")return[{x:t.x,y:r.top},{x:t.x,y:r.top+r.height}];if(e==="vertical")return[{x:r.left,y:t.y},{x:r.left+r.width,y:t.y}];if(s2(t)){if(e==="centric"){var n=t.cx,i=t.cy,o=t.innerRadius,s=t.outerRadius,u=t.angle,d=Bt(n,i,o,u),f=Bt(n,i,s,u);return[{x:d.x,y:d.y},{x:f.x,y:f.y}]}return AO(t)}}function C6(e){return S2(e)?NaN:Number(e)}function Qm(e){return e?(e=C6(e),e===1/0||e===-1/0?(e<0?-1:1)*Number.MAX_VALUE:e===e?e:0):e===0?e:0}function CO(e,t,r){r&&typeof r!="number"&&Vv(e,t,r)&&(t=r=void 0),e=Qm(e),t===void 0?(t=e,e=0):t=Qm(t),r=r===void 0?ee.chartData,yy=H([cn],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),lh=(e,t,r,n)=>n?yy(e):cn(e),j6=(e,t,r)=>r?yy(e):cn(e),_6=H([lh],e=>{var t=e.chartData,r=e.dataStartIndex,n=e.dataEndIndex;return t!=null?t.slice(r,n+1):[]});H([yy],e=>{var t=e.chartData,r=e.dataStartIndex,n=e.dataEndIndex;return t!=null?t.slice(r,n+1):[]});var N6=H([cn],e=>{var t=e.chartData,r=e.dataStartIndex,n=e.dataEndIndex;return t!=null?t.slice(r,n+1):[]});function xy(e,t){return D6(e)||T6(e,t)||M6(e,t)||I6()}function I6(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function M6(e,t){if(e){if(typeof e=="string")return rk(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?rk(e,t):void 0}}function rk(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);re.e^o.s<0?1:-1;for(n=o.d.length,i=e.d.length,t=0,r=ne.d[t]^o.s<0?1:-1;return n===i?0:n>i^o.s<0?1:-1};ve.decimalPlaces=ve.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*nt;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};ve.dividedBy=ve.div=function(e){return Jn(this,new this.constructor(e))};ve.dividedToIntegerBy=ve.idiv=function(e){var t=this,r=t.constructor;return Ge(Jn(t,new r(e),0,1),r.precision)};ve.equals=ve.eq=function(e){return!this.cmp(e)};ve.exponent=function(){return yt(this)};ve.greaterThan=ve.gt=function(e){return this.cmp(e)>0};ve.greaterThanOrEqualTo=ve.gte=function(e){return this.cmp(e)>=0};ve.isInteger=ve.isint=function(){return this.e>this.d.length-2};ve.isNegative=ve.isneg=function(){return this.s<0};ve.isPositive=ve.ispos=function(){return this.s>0};ve.isZero=function(){return this.s===0};ve.lessThan=ve.lt=function(e){return this.cmp(e)<0};ve.lessThanOrEqualTo=ve.lte=function(e){return this.cmp(e)<1};ve.logarithm=ve.log=function(e){var t,r=this,n=r.constructor,i=n.precision,o=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(Pr))throw Error(Wr+"NaN");if(r.s<1)throw Error(Wr+(r.s?"NaN":"-Infinity"));return r.eq(Pr)?new n(0):(at=!1,t=Jn(iu(r,o),iu(e,o),o),at=!0,Ge(t,i))};ve.minus=ve.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?MO(t,e):NO(t,(e.s=-e.s,e))};ve.modulo=ve.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(Wr+"NaN");return r.s?(at=!1,t=Jn(r,e,0,1).times(e),at=!0,r.minus(t)):Ge(new n(r),i)};ve.naturalExponential=ve.exp=function(){return IO(this)};ve.naturalLogarithm=ve.ln=function(){return iu(this)};ve.negated=ve.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};ve.plus=ve.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?NO(t,e):MO(t,(e.s=-e.s,e))};ve.precision=ve.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Fa+e);if(t=yt(i)+1,n=i.d.length-1,r=n*nt+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};ve.squareRoot=ve.sqrt=function(){var e,t,r,n,i,o,s,u=this,d=u.constructor;if(u.s<1){if(!u.s)return new d(0);throw Error(Wr+"NaN")}for(e=yt(u),at=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=Pn(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Cl((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new d(t)):n=new d(i.toString()),r=d.precision,i=s=r+3;;)if(o=n,n=o.plus(Jn(u,o,s+2)).times(.5),Pn(o.d).slice(0,s)===(t=Pn(n.d)).slice(0,s)){if(t=t.slice(s-3,s+1),i==s&&t=="4999"){if(Ge(o,r+1,0),o.times(o).eq(u)){n=o;break}}else if(t!="9999")break;s+=4}return at=!0,Ge(n,r)};ve.times=ve.mul=function(e){var t,r,n,i,o,s,u,d,f,h=this,m=h.constructor,v=h.d,x=(e=new m(e)).d;if(!h.s||!e.s)return new m(0);for(e.s*=h.s,r=h.e+e.e,d=v.length,f=x.length,d=0;){for(t=0,i=d+n;i>n;)u=o[i]+x[n]*v[i-n-1]+t,o[i--]=u%_t|0,t=u/_t|0;o[i]=(o[i]+t)%_t|0}for(;!o[--s];)o.pop();return t?++r:o.shift(),e.d=o,e.e=r,at?Ge(e,m.precision):e};ve.toDecimalPlaces=ve.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(Nn(e,0,Ol),t===void 0?t=n.rounding:Nn(t,0,8),Ge(r,e+yt(r)+1,t))};ve.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=Ga(n,!0):(Nn(e,0,Ol),t===void 0?t=i.rounding:Nn(t,0,8),n=Ge(new i(n),e+1,t),r=Ga(n,!0,e+1)),r};ve.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?Ga(i):(Nn(e,0,Ol),t===void 0?t=o.rounding:Nn(t,0,8),n=Ge(new o(i),e+yt(i)+1,t),r=Ga(n.abs(),!1,e+yt(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};ve.toInteger=ve.toint=function(){var e=this,t=e.constructor;return Ge(new t(e),yt(e)+1,t.rounding)};ve.toNumber=function(){return+this};ve.toPower=ve.pow=function(e){var t,r,n,i,o,s,u=this,d=u.constructor,f=12,h=+(e=new d(e));if(!e.s)return new d(Pr);if(u=new d(u),!u.s){if(e.s<1)throw Error(Wr+"Infinity");return u}if(u.eq(Pr))return u;if(n=d.precision,e.eq(Pr))return Ge(u,n);if(t=e.e,r=e.d.length-1,s=t>=r,o=u.s,s){if((r=h<0?-h:h)<=_O){for(i=new d(Pr),t=Math.ceil(n/nt+4),at=!1;r%2&&(i=i.times(u),ak(i.d,t)),r=Cl(r/2),r!==0;)u=u.times(u),ak(u.d,t);return at=!0,e.s<0?new d(Pr).div(i):Ge(i,n)}}else if(o<0)throw Error(Wr+"NaN");return o=o<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,at=!1,i=e.times(iu(u,n+f)),at=!0,i=IO(i),i.s=o,i};ve.toPrecision=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?(r=yt(i),n=Ga(i,r<=o.toExpNeg||r>=o.toExpPos)):(Nn(e,1,Ol),t===void 0?t=o.rounding:Nn(t,0,8),i=Ge(new o(i),e,t),r=yt(i),n=Ga(i,e<=r||r<=o.toExpNeg,e)),n};ve.toSignificantDigits=ve.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(Nn(e,1,Ol),t===void 0?t=n.rounding:Nn(t,0,8)),Ge(new n(r),e,t)};ve.toString=ve.valueOf=ve.val=ve.toJSON=ve[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=yt(e),r=e.constructor;return Ga(e,t<=r.toExpNeg||t>=r.toExpPos)};function NO(e,t){var r,n,i,o,s,u,d,f,h=e.constructor,m=h.precision;if(!e.s||!t.s)return t.s||(t=new h(e)),at?Ge(t,m):t;if(d=e.d,f=t.d,s=e.e,i=t.e,d=d.slice(),o=s-i,o){for(o<0?(n=d,o=-o,u=f.length):(n=f,i=s,u=d.length),s=Math.ceil(m/nt),u=s>u?s+1:u+1,o>u&&(o=u,n.length=1),n.reverse();o--;)n.push(0);n.reverse()}for(u=d.length,o=f.length,u-o<0&&(o=u,n=f,f=d,d=n),r=0;o;)r=(d[--o]=d[o]+f[o]+r)/_t|0,d[o]%=_t;for(r&&(d.unshift(r),++i),u=d.length;d[--u]==0;)d.pop();return t.d=d,t.e=i,at?Ge(t,m):t}function Nn(e,t,r){if(e!==~~e||er)throw Error(Fa+e)}function Pn(e){var t,r,n,i=e.length-1,o="",s=e[0];if(i>0){for(o+=s,t=1;ts?1:-1;else for(u=d=0;ui[u]?1:-1;break}return d}function r(n,i,o){for(var s=0;o--;)n[o]-=s,s=n[o]1;)n.shift()}return function(n,i,o,s){var u,d,f,h,m,v,x,k,S,E,P,j,_,O,N,C,R,z,F=n.constructor,V=n.s==i.s?1:-1,Q=n.d,B=i.d;if(!n.s)return new F(n);if(!i.s)throw Error(Wr+"Division by zero");for(d=n.e-i.e,R=B.length,N=Q.length,x=new F(V),k=x.d=[],f=0;B[f]==(Q[f]||0);)++f;if(B[f]>(Q[f]||0)&&--d,o==null?j=o=F.precision:s?j=o+(yt(n)-yt(i))+1:j=o,j<0)return new F(0);if(j=j/nt+2|0,f=0,R==1)for(h=0,B=B[0],j++;(f1&&(B=e(B,h),Q=e(Q,h),R=B.length,N=Q.length),O=R,S=Q.slice(0,R),E=S.length;E=_t/2&&++C;do h=0,u=t(B,S,R,E),u<0?(P=S[0],R!=E&&(P=P*_t+(S[1]||0)),h=P/C|0,h>1?(h>=_t&&(h=_t-1),m=e(B,h),v=m.length,E=S.length,u=t(m,S,v,E),u==1&&(h--,r(m,R16)throw Error(by+yt(e));if(!e.s)return new h(Pr);for(at=!1,u=m,s=new h(.03125);e.abs().gte(.1);)e=e.times(s),f+=5;for(n=Math.log(Sa(2,f))/Math.LN10*2+5|0,u+=n,r=i=o=new h(Pr),h.precision=u;;){if(i=Ge(i.times(e),u),r=r.times(++d),s=o.plus(Jn(i,r,u)),Pn(s.d).slice(0,u)===Pn(o.d).slice(0,u)){for(;f--;)o=Ge(o.times(o),u);return h.precision=m,t==null?(at=!0,Ge(o,m)):o}o=s}}function yt(e){for(var t=e.e*nt,r=e.d[0];r>=10;r/=10)t++;return t}function Xm(e,t,r){if(t>e.LN10.sd())throw at=!0,r&&(e.precision=r),Error(Wr+"LN10 precision limit exceeded");return Ge(new e(e.LN10),t)}function $i(e){for(var t="";e--;)t+="0";return t}function iu(e,t){var r,n,i,o,s,u,d,f,h,m=1,v=10,x=e,k=x.d,S=x.constructor,E=S.precision;if(x.s<1)throw Error(Wr+(x.s?"NaN":"-Infinity"));if(x.eq(Pr))return new S(0);if(t==null?(at=!1,f=E):f=t,x.eq(10))return t==null&&(at=!0),Xm(S,f);if(f+=v,S.precision=f,r=Pn(k),n=r.charAt(0),o=yt(x),Math.abs(o)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)x=x.times(e),r=Pn(x.d),n=r.charAt(0),m++;o=yt(x),n>1?(x=new S("0."+r),o++):x=new S(n+"."+r.slice(1))}else return d=Xm(S,f+2,E).times(o+""),x=iu(new S(n+"."+r.slice(1)),f-v).plus(d),S.precision=E,t==null?(at=!0,Ge(x,E)):x;for(u=s=x=Jn(x.minus(Pr),x.plus(Pr),f),h=Ge(x.times(x),f),i=3;;){if(s=Ge(s.times(h),f),d=u.plus(Jn(s,new S(i),f)),Pn(d.d).slice(0,f)===Pn(u.d).slice(0,f))return u=u.times(2),o!==0&&(u=u.plus(Xm(S,f+2,E).times(o+""))),u=Jn(u,new S(m),f),S.precision=E,t==null?(at=!0,Ge(u,E)):u;u=d,i+=2}}function ik(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Cl(r/nt),e.d=[],n=(r+1)%nt,r<0&&(n+=nt),ntf||e.e<-tf))throw Error(by+r)}else e.s=0,e.e=0,e.d=[0];return e}function Ge(e,t,r){var n,i,o,s,u,d,f,h,m=e.d;for(s=1,o=m[0];o>=10;o/=10)s++;if(n=t-s,n<0)n+=nt,i=t,f=m[h=0];else{if(h=Math.ceil((n+1)/nt),o=m.length,h>=o)return e;for(f=o=m[h],s=1;o>=10;o/=10)s++;n%=nt,i=n-nt+s}if(r!==void 0&&(o=Sa(10,s-i-1),u=f/o%10|0,d=t<0||m[h+1]!==void 0||f%o,d=r<4?(u||d)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||d||r==6&&(n>0?i>0?f/Sa(10,s-i):0:m[h-1])%10&1||r==(e.s<0?8:7))),t<1||!m[0])return d?(o=yt(e),m.length=1,t=t-o-1,m[0]=Sa(10,(nt-t%nt)%nt),e.e=Cl(-t/nt)||0):(m.length=1,m[0]=e.e=e.s=0),e;if(n==0?(m.length=h,o=1,h--):(m.length=h+1,o=Sa(10,nt-n),m[h]=i>0?(f/Sa(10,s-i)%Sa(10,i)|0)*o:0),d)for(;;)if(h==0){(m[0]+=o)==_t&&(m[0]=1,++e.e);break}else{if(m[h]+=o,m[h]!=_t)break;m[h--]=0,o=1}for(n=m.length;m[--n]===0;)m.pop();if(at&&(e.e>tf||e.e<-tf))throw Error(by+yt(e));return e}function MO(e,t){var r,n,i,o,s,u,d,f,h,m,v=e.constructor,x=v.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new v(e),at?Ge(t,x):t;if(d=e.d,m=t.d,n=t.e,f=e.e,d=d.slice(),s=f-n,s){for(h=s<0,h?(r=d,s=-s,u=m.length):(r=m,n=f,u=d.length),i=Math.max(Math.ceil(x/nt),u)+2,s>i&&(s=i,r.length=1),r.reverse(),i=s;i--;)r.push(0);r.reverse()}else{for(i=d.length,u=m.length,h=i0;--i)d[u++]=0;for(i=m.length;i>s;){if(d[--i]0?o=o.charAt(0)+"."+o.slice(1)+$i(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i<0?"e":"e+")+i):i<0?(o="0."+$i(-i-1)+o,r&&(n=r-s)>0&&(o+=$i(n))):i>=s?(o+=$i(i+1-s),r&&(n=r-i-1)>0&&(o=o+"."+$i(n))):((n=i+1)0&&(i+1===s&&(o+="."),o+=$i(n))),e.s<0?"-"+o:o}function ak(e,t){if(e.length>t)return e.length=t,!0}function TO(e){var t,r,n;function i(o){var s=this;if(!(s instanceof i))return new i(o);if(s.constructor=i,o instanceof i){s.s=o.s,s.e=o.e,s.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(Fa+o);if(o>0)s.s=1;else if(o<0)o=-o,s.s=-1;else{s.s=0,s.e=0,s.d=[0];return}if(o===~~o&&o<1e7){s.e=0,s.d=[o];return}return ik(s,o.toString())}else if(typeof o!="string")throw Error(Fa+o);if(o.charCodeAt(0)===45?(o=o.slice(1),s.s=-1):s.s=1,L6.test(o))ik(s,o);else throw Error(Fa+o)}if(i.prototype=ve,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=TO,i.config=i.set=z6,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Fa+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Fa+r+": "+n);return this}var wy=TO($6);Pr=new wy(1);const Ue=wy;function DO(e){var t;return e===0?t=1:t=Math.floor(new Ue(e).abs().log(10).toNumber())+1,t}function RO(e,t,r){for(var n=new Ue(e),i=0,o=[];n.lt(t)&&i<1e5;)o.push(n.toNumber()),n=n.add(r),i++;return o}function au(e,t){return W6(e)||U6(e,t)||B6(e,t)||F6()}function F6(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function B6(e,t){if(e){if(typeof e=="string")return ok(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ok(e,t):void 0}}function ok(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=au(e,2),r=t[0],n=t[1],i=r,o=n;return r>n&&(i=n,o=r),[i,o]},Sy=(e,t,r)=>{if(e.lte(0))return new Ue(0);var n=DO(e.toNumber()),i=new Ue(10).pow(n),o=e.div(i),s=n!==1?.05:.1,u=new Ue(Math.ceil(o.div(s).toNumber())).add(r).mul(s),d=u.mul(i);return t?new Ue(d.toNumber()):new Ue(Math.ceil(d.toNumber()))},LO=(e,t,r)=>{var n;if(e.lte(0))return new Ue(0);var i=[1,2,2.5,5],o=e.toNumber(),s=Math.floor(new Ue(o).abs().log(10).toNumber()),u=new Ue(10).pow(s),d=e.div(u).toNumber(),f=i.findIndex(x=>x>=d-1e-10);if(f===-1&&(u=u.mul(10),f=0),f+=r,f>=i.length){var h=Math.floor(f/i.length);f%=i.length,u=u.mul(new Ue(10).pow(h))}var m=(n=i[f])!==null&&n!==void 0?n:1,v=new Ue(m).mul(u);return t?v:new Ue(Math.ceil(v.toNumber()))},H6=(e,t,r)=>{var n=new Ue(1),i=new Ue(e);if(!i.isint()&&r){var o=Math.abs(e);o<1?(n=new Ue(10).pow(DO(e)-1),i=new Ue(Math.floor(i.div(n).toNumber())).mul(n)):o>1&&(i=new Ue(Math.floor(e)))}else e===0?i=new Ue(Math.floor((t-1)/2)):r||(i=new Ue(Math.floor(e)));for(var s=Math.floor((t-1)/2),u=[],d=0;d4&&arguments[4]!==void 0?arguments[4]:0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:Sy;if(!Number.isFinite((r-t)/(n-1)))return{step:new Ue(0),tickMin:new Ue(0),tickMax:new Ue(0)};var u=s(new Ue(r).sub(t).div(n-1),i,o),d;t<=0&&r>=0?d=new Ue(0):(d=new Ue(t).add(r).div(2),d=d.sub(new Ue(d).mod(u)));var f=Math.ceil(d.sub(t).div(u).toNumber()),h=Math.ceil(new Ue(r).sub(d).div(u).toNumber()),m=f+h+1;return m>n?zO(t,r,n,i,o+1,s):(m0?h+(n-m):h,f=r>0?f:f+(n-m)),{step:u,tickMin:d.sub(new Ue(f).mul(u)),tickMax:d.add(new Ue(h).mul(u))})},lk=function(t){var r=au(t,2),n=r[0],i=r[1],o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"auto",d=Math.max(o,2),f=$O([n,i]),h=au(f,2),m=h[0],v=h[1];if(m===-1/0||v===1/0){var x=v===1/0?[m,...Array(o-1).fill(1/0)]:[...Array(o-1).fill(-1/0),v];return n>i?x.reverse():x}if(m===v)return H6(m,o,s);var k=u==="snap125"?LO:Sy,S=zO(m,v,d,s,0,k),E=S.step,P=S.tickMin,j=S.tickMax,_=RO(P,j.add(new Ue(.1).mul(E)),E);return n>i?_.reverse():_},sk=function(t,r){var n=au(t,2),i=n[0],o=n[1],s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"auto",d=$O([i,o]),f=au(d,2),h=f[0],m=f[1];if(h===-1/0||m===1/0)return[i,o];if(h===m)return[h];var v=u==="snap125"?LO:Sy,x=Math.max(r,2),k=v(new Ue(m).sub(h).div(x-1),s,0),S=[...RO(new Ue(h),new Ue(m),k),m];return s===!1&&(S=S.map(E=>Math.round(E))),i>o?S.reverse():S},K6=e=>e.rootProps.barCategoryGap,sh=e=>e.rootProps.stackOffset,FO=e=>e.rootProps.reverseStackOrder,ky=e=>e.options.chartName,Ey=e=>e.rootProps.syncId,BO=e=>e.rootProps.syncMethod,Py=e=>e.options.eventEmitter,V6=e=>e.rootProps.baseValue,nr={grid:-100,barBackground:-50,area:100,cursorRectangle:200,bar:300,line:400,axis:500,scatter:600,activeBar:1e3,cursorLine:1100,activeDot:1200,label:2e3},va={allowDecimals:!1,allowDataOverflow:!1,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"auto"},yn={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!0,includeHidden:!1,radiusAxisId:0,reversed:!1,scale:"auto",tick:!0,tickCount:5,type:"auto"},uh=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t};function ch(e,t,r){if(r!=="auto")return r;if(e!=null)return Mn(e,t)?"category":"number"}function uk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function rf(e){for(var t=1;t{if(t!=null)return e.polarAxis.angleAxis[t]},Ay=H([Q6,dO],(e,t)=>{var r;if(e!=null)return e;var n=(r=ch(t,"angleAxis",ck.type))!==null&&r!==void 0?r:"category";return rf(rf({},ck),{},{type:n})}),X6=(e,t)=>e.polarAxis.radiusAxis[t],Oy=H([X6,dO],(e,t)=>{var r;if(e!=null)return e;var n=(r=ch(t,"radiusAxis",dk.type))!==null&&r!==void 0?r:"category";return rf(rf({},dk),{},{type:n})}),dh=e=>e.polarOptions,Cy=H([ai,oi,Ht],g6),UO=H([dh,Cy],(e,t)=>{if(e!=null)return ea(e.innerRadius,t,0)}),WO=H([dh,Cy],(e,t)=>{if(e!=null)return ea(e.outerRadius,t,t*.8)}),Z6=e=>{if(e==null)return[0,0];var t=e.startAngle,r=e.endAngle;return[t,r]},HO=H([dh],Z6);H([Ay,HO],uh);var KO=H([Cy,UO,WO],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});H([Oy,KO],uh);var VO=H([ot,dh,UO,WO,ai,oi],(e,t,r,n,i,o)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var s=t.cx,u=t.cy,d=t.startAngle,f=t.endAngle;return{cx:ea(s,i,i/2),cy:ea(u,o,o/2),innerRadius:r,outerRadius:n,startAngle:d,endAngle:f,clockWise:!1}}}),It=(e,t)=>t,fh=(e,t,r)=>r;function jy(e){return e==null?void 0:e.id}function qO(e,t,r){var n=t.chartData,i=n===void 0?[]:n,o=r.allowDuplicatedCategory,s=r.dataKey,u=new Map;return e.forEach(d=>{var f,h=(f=d.data)!==null&&f!==void 0?f:i;if(!(h==null||h.length===0)){var m=jy(d);h.forEach((v,x)=>{var k=s==null||o?x:String(Nt(v,s,null)),S=Nt(v,d.dataKey,0),E;u.has(k)?E=u.get(k):E={},Object.assign(E,{[m]:S}),u.set(k,E)})}}),Array.from(u.values())}function _y(e){return"stackId"in e&&e.stackId!=null&&e.dataKey!=null}var hh=(e,t)=>e===t?!0:e==null||t==null?!1:e[0]===t[0]&&e[1]===t[1];function ph(e,t){return Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t}function J6(e,t){if(e.length===t.length){for(var r=0;r{var t=ot(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},jl=e=>e.tooltip.settings.axisId;function Ny(e){if(e!=null){var t=e.ticks,r=e.bandwidth,n=e.range(),i=[Math.min(...n),Math.max(...n)];return{domain:()=>e.domain(),range:(function(o){function s(){return o.apply(this,arguments)}return s.toString=function(){return o.toString()},s})(()=>i),rangeMin:()=>i[0],rangeMax:()=>i[1],isInRange(o){var s=i[0],u=i[1];return s<=u?o>=s&&o<=u:o>=u&&o<=s},bandwidth:r?()=>r.call(e):void 0,ticks:t?o=>t.call(e,o):void 0,map:(o,s)=>{var u=e(o);if(u!=null){if(e.bandwidth&&s!==null&&s!==void 0&&s.position){var d=e.bandwidth();switch(s.position){case"middle":u+=d/2;break;case"end":u+=d;break}}return u}}}}}var e8=(e,t)=>{if(t!=null)switch(e){case"linear":{if(!An(t)){for(var r,n,i=0;in)&&(n=o))}return r!==void 0&&n!==void 0?[r,n]:void 0}return t}default:return t}};function Xi(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function t8(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function Iy(e){let t,r,n;e.length!==2?(t=Xi,r=(u,d)=>Xi(e(u),d),n=(u,d)=>e(u)-d):(t=e===Xi||e===t8?e:r8,r=e,n=e);function i(u,d,f=0,h=u.length){if(f>>1;r(u[m],d)<0?f=m+1:h=m}while(f>>1;r(u[m],d)<=0?f=m+1:h=m}while(ff&&n(u[m-1],d)>-n(u[m],d)?m-1:m}return{left:i,center:s,right:o}}function r8(){return 0}function GO(e){return e===null?NaN:+e}function*n8(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const i8=Iy(Xi),_u=i8.right;Iy(GO).center;class fk extends Map{constructor(t,r=l8){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(hk(this,t))}has(t){return super.has(hk(this,t))}set(t,r){return super.set(a8(this,t),r)}delete(t){return super.delete(o8(this,t))}}function hk({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function a8({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function o8({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function l8(e){return e!==null&&typeof e=="object"?e.valueOf():e}function s8(e=Xi){if(e===Xi)return YO;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function YO(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const u8=Math.sqrt(50),c8=Math.sqrt(10),d8=Math.sqrt(2);function nf(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),o=n/Math.pow(10,i),s=o>=u8?10:o>=c8?5:o>=d8?2:1;let u,d,f;return i<0?(f=Math.pow(10,-i)/s,u=Math.round(e*f),d=Math.round(t*f),u/ft&&--d,f=-f):(f=Math.pow(10,i)*s,u=Math.round(e/f),d=Math.round(t/f),u*ft&&--d),d0))return[];if(e===t)return[e];const n=t=i))return[];const u=o-i+1,d=new Array(u);if(n)if(s<0)for(let f=0;f=n)&&(r=n);else{let n=-1;for(let i of e)(i=t(i,++n,e))!=null&&(r=i)&&(r=i)}return r}function mk(e,t){let r;if(t===void 0)for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of e)(i=t(i,++n,e))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}function QO(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?YO:s8(i);n>r;){if(n-r>600){const d=n-r+1,f=t-r+1,h=Math.log(d),m=.5*Math.exp(2*h/3),v=.5*Math.sqrt(h*m*(d-m)/d)*(f-d/2<0?-1:1),x=Math.max(r,Math.floor(t-f*m/d+v)),k=Math.min(n,Math.floor(t+(d-f)*m/d+v));QO(e,t,x,k,i)}const o=e[t];let s=r,u=n;for(Is(e,r,t),i(e[n],o)>0&&Is(e,r,n);s0;)--u}i(e[r],o)===0?Is(e,r,u):(++u,Is(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Is(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function f8(e,t,r){if(e=Float64Array.from(n8(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return mk(e);if(t>=1)return pk(e);var n,i=(n-1)*t,o=Math.floor(i),s=pk(QO(e,o).subarray(0,o+1)),u=mk(e.subarray(o+1));return s+(u-s)*(i-o)}}function h8(e,t,r=GO){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,o=Math.floor(i),s=+r(e[o],o,e),u=+r(e[o+1],o+1,e);return s+(u-s)*(i-o)}}function p8(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,o=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?fd(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?fd(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=g8.exec(e))?new gr(t[1],t[2],t[3],1):(t=y8.exec(e))?new gr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=x8.exec(e))?fd(t[1],t[2],t[3],t[4]):(t=b8.exec(e))?fd(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=w8.exec(e))?Sk(t[1],t[2]/100,t[3]/100,1):(t=S8.exec(e))?Sk(t[1],t[2]/100,t[3]/100,t[4]):vk.hasOwnProperty(e)?xk(vk[e]):e==="transparent"?new gr(NaN,NaN,NaN,0):null}function xk(e){return new gr(e>>16&255,e>>8&255,e&255,1)}function fd(e,t,r,n){return n<=0&&(e=t=r=NaN),new gr(e,t,r,n)}function P8(e){return e instanceof Nu||(e=su(e)),e?(e=e.rgb(),new gr(e.r,e.g,e.b,e.opacity)):new gr}function gg(e,t,r,n){return arguments.length===1?P8(e):new gr(e,t,r,n??1)}function gr(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}Dy(gr,gg,ZO(Nu,{brighter(e){return e=e==null?af:Math.pow(af,e),new gr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?ou:Math.pow(ou,e),new gr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new gr(Ba(this.r),Ba(this.g),Ba(this.b),of(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:bk,formatHex:bk,formatHex8:A8,formatRgb:wk,toString:wk}));function bk(){return`#${Aa(this.r)}${Aa(this.g)}${Aa(this.b)}`}function A8(){return`#${Aa(this.r)}${Aa(this.g)}${Aa(this.b)}${Aa((isNaN(this.opacity)?1:this.opacity)*255)}`}function wk(){const e=of(this.opacity);return`${e===1?"rgb(":"rgba("}${Ba(this.r)}, ${Ba(this.g)}, ${Ba(this.b)}${e===1?")":`, ${e})`}`}function of(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Ba(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Aa(e){return e=Ba(e),(e<16?"0":"")+e.toString(16)}function Sk(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new an(e,t,r,n)}function JO(e){if(e instanceof an)return new an(e.h,e.s,e.l,e.opacity);if(e instanceof Nu||(e=su(e)),!e)return new an;if(e instanceof an)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),o=Math.max(t,r,n),s=NaN,u=o-i,d=(o+i)/2;return u?(t===o?s=(r-n)/u+(r0&&d<1?0:s,new an(s,u,d,e.opacity)}function O8(e,t,r,n){return arguments.length===1?JO(e):new an(e,t,r,n??1)}function an(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}Dy(an,O8,ZO(Nu,{brighter(e){return e=e==null?af:Math.pow(af,e),new an(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?ou:Math.pow(ou,e),new an(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new gr(Zm(e>=240?e-240:e+120,i,n),Zm(e,i,n),Zm(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new an(kk(this.h),hd(this.s),hd(this.l),of(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=of(this.opacity);return`${e===1?"hsl(":"hsla("}${kk(this.h)}, ${hd(this.s)*100}%, ${hd(this.l)*100}%${e===1?")":`, ${e})`}`}}));function kk(e){return e=(e||0)%360,e<0?e+360:e}function hd(e){return Math.max(0,Math.min(1,e||0))}function Zm(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const Ry=e=>()=>e;function C8(e,t){return function(r){return e+r*t}}function j8(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function _8(e){return(e=+e)==1?eC:function(t,r){return r-t?j8(t,r,e):Ry(isNaN(t)?r:t)}}function eC(e,t){var r=t-e;return r?C8(e,r):Ry(isNaN(e)?t:e)}const Ek=(function e(t){var r=_8(t);function n(i,o){var s=r((i=gg(i)).r,(o=gg(o)).r),u=r(i.g,o.g),d=r(i.b,o.b),f=eC(i.opacity,o.opacity);return function(h){return i.r=s(h),i.g=u(h),i.b=d(h),i.opacity=f(h),i+""}}return n.gamma=e,n})(1);function N8(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(o){for(i=0;ir&&(o=t.slice(r,o),u[s]?u[s]+=o:u[++s]=o),(n=n[0])===(i=i[0])?u[s]?u[s]+=i:u[++s]=i:(u[++s]=null,d.push({i:s,x:lf(n,i)})),r=Jm.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function U8(e,t,r){var n=e[0],i=e[1],o=t[0],s=t[1];return i2?W8:U8,d=f=null,m}function m(v){return v==null||isNaN(v=+v)?o:(d||(d=u(e.map(n),t,r)))(n(s(v)))}return m.invert=function(v){return s(i((f||(f=u(t,e.map(n),lf)))(v)))},m.domain=function(v){return arguments.length?(e=Array.from(v,sf),h()):e.slice()},m.range=function(v){return arguments.length?(t=Array.from(v),h()):t.slice()},m.rangeRound=function(v){return t=Array.from(v),r=$y,h()},m.clamp=function(v){return arguments.length?(s=v?!0:ir,h()):s!==ir},m.interpolate=function(v){return arguments.length?(r=v,h()):r},m.unknown=function(v){return arguments.length?(o=v,m):o},function(v,x){return n=v,i=x,h()}}function Ly(){return mh()(ir,ir)}function H8(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function uf(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function vl(e){return e=uf(Math.abs(e)),e?e[1]:NaN}function K8(e,t){return function(r,n){for(var i=r.length,o=[],s=0,u=e[0],d=0;i>0&&u>0&&(d+u+1>n&&(u=Math.max(1,n-d)),o.push(r.substring(i-=u,i+u)),!((d+=u+1)>n));)u=e[s=(s+1)%e.length];return o.reverse().join(t)}}function V8(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var q8=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function uu(e){if(!(t=q8.exec(e)))throw new Error("invalid format: "+e);var t;return new zy({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}uu.prototype=zy.prototype;function zy(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}zy.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function G8(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var cf;function Y8(e,t){var r=uf(e,t);if(!r)return cf=void 0,e.toPrecision(t);var n=r[0],i=r[1],o=i-(cf=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return o===s?n:o>s?n+new Array(o-s+1).join("0"):o>0?n.slice(0,o)+"."+n.slice(o):"0."+new Array(1-o).join("0")+uf(e,Math.max(0,t+o-1))[0]}function Ak(e,t){var r=uf(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const Ok={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:H8,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Ak(e*100,t),r:Ak,s:Y8,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Ck(e){return e}var jk=Array.prototype.map,_k=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function Q8(e){var t=e.grouping===void 0||e.thousands===void 0?Ck:K8(jk.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?Ck:V8(jk.call(e.numerals,String)),s=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",d=e.nan===void 0?"NaN":e.nan+"";function f(m,v){m=uu(m);var x=m.fill,k=m.align,S=m.sign,E=m.symbol,P=m.zero,j=m.width,_=m.comma,O=m.precision,N=m.trim,C=m.type;C==="n"?(_=!0,C="g"):Ok[C]||(O===void 0&&(O=12),N=!0,C="g"),(P||x==="0"&&k==="=")&&(P=!0,x="0",k="=");var R=(v&&v.prefix!==void 0?v.prefix:"")+(E==="$"?r:E==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():""),z=(E==="$"?n:/[%p]/.test(C)?s:"")+(v&&v.suffix!==void 0?v.suffix:""),F=Ok[C],V=/[defgprs%]/.test(C);O=O===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,O)):Math.max(0,Math.min(20,O));function Q(B){var ue=R,G=z,le,fe,de;if(C==="c")G=F(B)+G,B="";else{B=+B;var Y=B<0||1/B<0;if(B=isNaN(B)?d:F(Math.abs(B),O),N&&(B=G8(B)),Y&&+B==0&&S!=="+"&&(Y=!1),ue=(Y?S==="("?S:u:S==="-"||S==="("?"":S)+ue,G=(C==="s"&&!isNaN(B)&&cf!==void 0?_k[8+cf/3]:"")+G+(Y&&S==="("?")":""),V){for(le=-1,fe=B.length;++lede||de>57){G=(de===46?i+B.slice(le+1):B.slice(le))+G,B=B.slice(0,le);break}}}_&&!P&&(B=t(B,1/0));var ae=ue.length+B.length+G.length,X=ae>1)+ue+B+G+X.slice(ae);break;default:B=X+ue+B+G;break}return o(B)}return Q.toString=function(){return m+""},Q}function h(m,v){var x=Math.max(-8,Math.min(8,Math.floor(vl(v)/3)))*3,k=Math.pow(10,-x),S=f((m=uu(m),m.type="f",m),{suffix:_k[8+x/3]});return function(E){return S(k*E)}}return{format:f,formatPrefix:h}}var pd,Fy,tC;X8({thousands:",",grouping:[3],currency:["$",""]});function X8(e){return pd=Q8(e),Fy=pd.format,tC=pd.formatPrefix,pd}function Z8(e){return Math.max(0,-vl(Math.abs(e)))}function J8(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(vl(t)/3)))*3-vl(Math.abs(e)))}function eB(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,vl(t)-vl(e))+1}function rC(e,t,r,n){var i=mg(e,t,r),o;switch(n=uu(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(o=J8(i,s))&&(n.precision=o),tC(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(o=eB(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=o-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(o=Z8(i))&&(n.precision=o-(n.type==="%")*2);break}}return Fy(n)}function ta(e){var t=e.domain;return e.ticks=function(r){var n=t();return hg(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return rC(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,o=n.length-1,s=n[i],u=n[o],d,f,h=10;for(u0;){if(f=pg(s,u,r),f===d)return n[i]=s,n[o]=u,t(n);if(f>0)s=Math.floor(s/f)*f,u=Math.ceil(u/f)*f;else if(f<0)s=Math.ceil(s*f)/f,u=Math.floor(u*f)/f;else break;d=f}return e},e}function nC(){var e=Ly();return e.copy=function(){return Iu(e,nC())},Kr.apply(e,arguments),ta(e)}function iC(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,sf),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return iC(e).unknown(t)},e=arguments.length?Array.from(e,sf):[0,1],ta(r)}function aC(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],o=e[n],s;return oMath.pow(e,t)}function aB(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function Mk(e){return(t,r)=>-e(-t,r)}function By(e){const t=e(Nk,Ik),r=t.domain;let n=10,i,o;function s(){return i=aB(n),o=iB(n),r()[0]<0?(i=Mk(i),o=Mk(o),e(tB,rB)):e(Nk,Ik),t}return t.base=function(u){return arguments.length?(n=+u,s()):n},t.domain=function(u){return arguments.length?(r(u),s()):r()},t.ticks=u=>{const d=r();let f=d[0],h=d[d.length-1];const m=h0){for(;v<=x;++v)for(k=1;kh)break;P.push(S)}}else for(;v<=x;++v)for(k=n-1;k>=1;--k)if(S=v>0?k/o(-v):k*o(v),!(Sh)break;P.push(S)}P.length*2{if(u==null&&(u=10),d==null&&(d=n===10?"s":","),typeof d!="function"&&(!(n%1)&&(d=uu(d)).precision==null&&(d.trim=!0),d=Fy(d)),u===1/0)return d;const f=Math.max(1,n*u/t.ticks().length);return h=>{let m=h/o(Math.round(i(h)));return m*nr(aC(r(),{floor:u=>o(Math.floor(i(u))),ceil:u=>o(Math.ceil(i(u)))})),t}function oC(){const e=By(mh()).domain([1,10]);return e.copy=()=>Iu(e,oC()).base(e.base()),Kr.apply(e,arguments),e}function Tk(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function Dk(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Uy(e){var t=1,r=e(Tk(t),Dk(t));return r.constant=function(n){return arguments.length?e(Tk(t=+n),Dk(t)):t},ta(r)}function lC(){var e=Uy(mh());return e.copy=function(){return Iu(e,lC()).constant(e.constant())},Kr.apply(e,arguments)}function Rk(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function oB(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function lB(e){return e<0?-e*e:e*e}function Wy(e){var t=e(ir,ir),r=1;function n(){return r===1?e(ir,ir):r===.5?e(oB,lB):e(Rk(r),Rk(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},ta(t)}function Hy(){var e=Wy(mh());return e.copy=function(){return Iu(e,Hy()).exponent(e.exponent())},Kr.apply(e,arguments),e}function sB(){return Hy.apply(null,arguments).exponent(.5)}function $k(e){return Math.sign(e)*e*e}function uB(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function sC(){var e=Ly(),t=[0,1],r=!1,n;function i(o){var s=uB(e(o));return isNaN(s)?n:r?Math.round(s):s}return i.invert=function(o){return e.invert($k(o))},i.domain=function(o){return arguments.length?(e.domain(o),i):e.domain()},i.range=function(o){return arguments.length?(e.range((t=Array.from(o,sf)).map($k)),i):t.slice()},i.rangeRound=function(o){return i.range(o).round(!0)},i.round=function(o){return arguments.length?(r=!!o,i):r},i.clamp=function(o){return arguments.length?(e.clamp(o),i):e.clamp()},i.unknown=function(o){return arguments.length?(n=o,i):n},i.copy=function(){return sC(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},Kr.apply(i,arguments),ta(i)}function uC(){var e=[],t=[],r=[],n;function i(){var s=0,u=Math.max(1,t.length);for(r=new Array(u-1);++s0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[f-1],n[f]]},s.unknown=function(d){return arguments.length&&(o=d),s},s.thresholds=function(){return n.slice()},s.copy=function(){return cC().domain([e,t]).range(i).unknown(o)},Kr.apply(ta(s),arguments)}function dC(){var e=[.5],t=[0,1],r,n=1;function i(o){return o!=null&&o<=o?t[_u(e,o,0,n)]:r}return i.domain=function(o){return arguments.length?(e=Array.from(o),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(o){return arguments.length?(t=Array.from(o),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(o){var s=t.indexOf(o);return[e[s-1],e[s]]},i.unknown=function(o){return arguments.length?(r=o,i):r},i.copy=function(){return dC().domain(e).range(t).unknown(r)},Kr.apply(i,arguments)}const ev=new Date,tv=new Date;function Et(e,t,r,n){function i(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return i.floor=o=>(e(o=new Date(+o)),o),i.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),i.round=o=>{const s=i(o),u=i.ceil(o);return o-s(t(o=new Date(+o),s==null?1:Math.floor(s)),o),i.range=(o,s,u)=>{const d=[];if(o=i.ceil(o),u=u==null?1:Math.floor(u),!(o0))return d;let f;do d.push(f=new Date(+o)),t(o,u),e(o);while(fEt(s=>{if(s>=s)for(;e(s),!o(s);)s.setTime(s-1)},(s,u)=>{if(s>=s)if(u<0)for(;++u<=0;)for(;t(s,-1),!o(s););else for(;--u>=0;)for(;t(s,1),!o(s););}),r&&(i.count=(o,s)=>(ev.setTime(+o),tv.setTime(+s),e(ev),e(tv),Math.floor(r(ev,tv))),i.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?i.filter(n?s=>n(s)%o===0:s=>i.count(0,s)%o===0):i)),i}const df=Et(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);df.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Et(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):df);df.range;const Qn=1e3,Fr=Qn*60,Xn=Fr*60,ri=Xn*24,Ky=ri*7,Lk=ri*30,rv=ri*365,Oa=Et(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Qn)},(e,t)=>(t-e)/Qn,e=>e.getUTCSeconds());Oa.range;const Vy=Et(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Qn)},(e,t)=>{e.setTime(+e+t*Fr)},(e,t)=>(t-e)/Fr,e=>e.getMinutes());Vy.range;const qy=Et(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Fr)},(e,t)=>(t-e)/Fr,e=>e.getUTCMinutes());qy.range;const Gy=Et(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Qn-e.getMinutes()*Fr)},(e,t)=>{e.setTime(+e+t*Xn)},(e,t)=>(t-e)/Xn,e=>e.getHours());Gy.range;const Yy=Et(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Xn)},(e,t)=>(t-e)/Xn,e=>e.getUTCHours());Yy.range;const Mu=Et(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Fr)/ri,e=>e.getDate()-1);Mu.range;const vh=Et(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ri,e=>e.getUTCDate()-1);vh.range;const fC=Et(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ri,e=>Math.floor(e/ri));fC.range;function Ja(e){return Et(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Fr)/Ky)}const gh=Ja(0),ff=Ja(1),cB=Ja(2),dB=Ja(3),gl=Ja(4),fB=Ja(5),hB=Ja(6);gh.range;ff.range;cB.range;dB.range;gl.range;fB.range;hB.range;function eo(e){return Et(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Ky)}const yh=eo(0),hf=eo(1),pB=eo(2),mB=eo(3),yl=eo(4),vB=eo(5),gB=eo(6);yh.range;hf.range;pB.range;mB.range;yl.range;vB.range;gB.range;const Qy=Et(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Qy.range;const Xy=Et(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Xy.range;const ni=Et(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());ni.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Et(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});ni.range;const ii=Et(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());ii.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Et(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});ii.range;function hC(e,t,r,n,i,o){const s=[[Oa,1,Qn],[Oa,5,5*Qn],[Oa,15,15*Qn],[Oa,30,30*Qn],[o,1,Fr],[o,5,5*Fr],[o,15,15*Fr],[o,30,30*Fr],[i,1,Xn],[i,3,3*Xn],[i,6,6*Xn],[i,12,12*Xn],[n,1,ri],[n,2,2*ri],[r,1,Ky],[t,1,Lk],[t,3,3*Lk],[e,1,rv]];function u(f,h,m){const v=hE).right(s,v);if(x===s.length)return e.every(mg(f/rv,h/rv,m));if(x===0)return df.every(Math.max(mg(f,h,m),1));const[k,S]=s[v/s[x-1][2]53)return null;"w"in ne||(ne.w=1),"Z"in ne?($e=iv(Ms(ne.y,0,1)),Pe=$e.getUTCDay(),$e=Pe>4||Pe===0?hf.ceil($e):hf($e),$e=vh.offset($e,(ne.V-1)*7),ne.y=$e.getUTCFullYear(),ne.m=$e.getUTCMonth(),ne.d=$e.getUTCDate()+(ne.w+6)%7):($e=nv(Ms(ne.y,0,1)),Pe=$e.getDay(),$e=Pe>4||Pe===0?ff.ceil($e):ff($e),$e=Mu.offset($e,(ne.V-1)*7),ne.y=$e.getFullYear(),ne.m=$e.getMonth(),ne.d=$e.getDate()+(ne.w+6)%7)}else("W"in ne||"U"in ne)&&("w"in ne||(ne.w="u"in ne?ne.u%7:"W"in ne?1:0),Pe="Z"in ne?iv(Ms(ne.y,0,1)).getUTCDay():nv(Ms(ne.y,0,1)).getDay(),ne.m=0,ne.d="W"in ne?(ne.w+6)%7+ne.W*7-(Pe+5)%7:ne.w+ne.U*7-(Pe+6)%7);return"Z"in ne?(ne.H+=ne.Z/100|0,ne.M+=ne.Z%100,iv(ne)):nv(ne)}}function z(J,we,Ae,ne){for(var lt=0,$e=we.length,Pe=Ae.length,vt,lr;lt<$e;){if(ne>=Pe)return-1;if(vt=we.charCodeAt(lt++),vt===37){if(vt=we.charAt(lt++),lr=N[vt in zk?we.charAt(lt++):vt],!lr||(ne=lr(J,Ae,ne))<0)return-1}else if(vt!=Ae.charCodeAt(ne++))return-1}return ne}function F(J,we,Ae){var ne=f.exec(we.slice(Ae));return ne?(J.p=h.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function V(J,we,Ae){var ne=x.exec(we.slice(Ae));return ne?(J.w=k.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function Q(J,we,Ae){var ne=m.exec(we.slice(Ae));return ne?(J.w=v.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function B(J,we,Ae){var ne=P.exec(we.slice(Ae));return ne?(J.m=j.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function ue(J,we,Ae){var ne=S.exec(we.slice(Ae));return ne?(J.m=E.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function G(J,we,Ae){return z(J,t,we,Ae)}function le(J,we,Ae){return z(J,r,we,Ae)}function fe(J,we,Ae){return z(J,n,we,Ae)}function de(J){return s[J.getDay()]}function Y(J){return o[J.getDay()]}function ae(J){return d[J.getMonth()]}function X(J){return u[J.getMonth()]}function M(J){return i[+(J.getHours()>=12)]}function T(J){return 1+~~(J.getMonth()/3)}function Z(J){return s[J.getUTCDay()]}function se(J){return o[J.getUTCDay()]}function te(J){return d[J.getUTCMonth()]}function ce(J){return u[J.getUTCMonth()]}function ge(J){return i[+(J.getUTCHours()>=12)]}function _e(J){return 1+~~(J.getUTCMonth()/3)}return{format:function(J){var we=C(J+="",_);return we.toString=function(){return J},we},parse:function(J){var we=R(J+="",!1);return we.toString=function(){return J},we},utcFormat:function(J){var we=C(J+="",O);return we.toString=function(){return J},we},utcParse:function(J){var we=R(J+="",!0);return we.toString=function(){return J},we}}}var zk={"-":"",_:" ",0:"0"},Tt=/^\s*\d+/,kB=/^%/,EB=/[\\^$*+?|[\]().{}]/g;function Ke(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",o=i.length;return n+(o[t.toLowerCase(),r]))}function AB(e,t,r){var n=Tt.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function OB(e,t,r){var n=Tt.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function CB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function jB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function _B(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function Fk(e,t,r){var n=Tt.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function Bk(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function NB(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function IB(e,t,r){var n=Tt.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function MB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function Uk(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function TB(e,t,r){var n=Tt.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function Wk(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function DB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function RB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function $B(e,t,r){var n=Tt.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function LB(e,t,r){var n=Tt.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function zB(e,t,r){var n=kB.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function FB(e,t,r){var n=Tt.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function BB(e,t,r){var n=Tt.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Hk(e,t){return Ke(e.getDate(),t,2)}function UB(e,t){return Ke(e.getHours(),t,2)}function WB(e,t){return Ke(e.getHours()%12||12,t,2)}function HB(e,t){return Ke(1+Mu.count(ni(e),e),t,3)}function pC(e,t){return Ke(e.getMilliseconds(),t,3)}function KB(e,t){return pC(e,t)+"000"}function VB(e,t){return Ke(e.getMonth()+1,t,2)}function qB(e,t){return Ke(e.getMinutes(),t,2)}function GB(e,t){return Ke(e.getSeconds(),t,2)}function YB(e){var t=e.getDay();return t===0?7:t}function QB(e,t){return Ke(gh.count(ni(e)-1,e),t,2)}function mC(e){var t=e.getDay();return t>=4||t===0?gl(e):gl.ceil(e)}function XB(e,t){return e=mC(e),Ke(gl.count(ni(e),e)+(ni(e).getDay()===4),t,2)}function ZB(e){return e.getDay()}function JB(e,t){return Ke(ff.count(ni(e)-1,e),t,2)}function eU(e,t){return Ke(e.getFullYear()%100,t,2)}function tU(e,t){return e=mC(e),Ke(e.getFullYear()%100,t,2)}function rU(e,t){return Ke(e.getFullYear()%1e4,t,4)}function nU(e,t){var r=e.getDay();return e=r>=4||r===0?gl(e):gl.ceil(e),Ke(e.getFullYear()%1e4,t,4)}function iU(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+Ke(t/60|0,"0",2)+Ke(t%60,"0",2)}function Kk(e,t){return Ke(e.getUTCDate(),t,2)}function aU(e,t){return Ke(e.getUTCHours(),t,2)}function oU(e,t){return Ke(e.getUTCHours()%12||12,t,2)}function lU(e,t){return Ke(1+vh.count(ii(e),e),t,3)}function vC(e,t){return Ke(e.getUTCMilliseconds(),t,3)}function sU(e,t){return vC(e,t)+"000"}function uU(e,t){return Ke(e.getUTCMonth()+1,t,2)}function cU(e,t){return Ke(e.getUTCMinutes(),t,2)}function dU(e,t){return Ke(e.getUTCSeconds(),t,2)}function fU(e){var t=e.getUTCDay();return t===0?7:t}function hU(e,t){return Ke(yh.count(ii(e)-1,e),t,2)}function gC(e){var t=e.getUTCDay();return t>=4||t===0?yl(e):yl.ceil(e)}function pU(e,t){return e=gC(e),Ke(yl.count(ii(e),e)+(ii(e).getUTCDay()===4),t,2)}function mU(e){return e.getUTCDay()}function vU(e,t){return Ke(hf.count(ii(e)-1,e),t,2)}function gU(e,t){return Ke(e.getUTCFullYear()%100,t,2)}function yU(e,t){return e=gC(e),Ke(e.getUTCFullYear()%100,t,2)}function xU(e,t){return Ke(e.getUTCFullYear()%1e4,t,4)}function bU(e,t){var r=e.getUTCDay();return e=r>=4||r===0?yl(e):yl.ceil(e),Ke(e.getUTCFullYear()%1e4,t,4)}function wU(){return"+0000"}function Vk(){return"%"}function qk(e){return+e}function Gk(e){return Math.floor(+e/1e3)}var Do,yC,xC;SU({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function SU(e){return Do=SB(e),yC=Do.format,Do.parse,xC=Do.utcFormat,Do.utcParse,Do}function kU(e){return new Date(e)}function EU(e){return e instanceof Date?+e:+new Date(+e)}function Zy(e,t,r,n,i,o,s,u,d,f){var h=Ly(),m=h.invert,v=h.domain,x=f(".%L"),k=f(":%S"),S=f("%I:%M"),E=f("%I %p"),P=f("%a %d"),j=f("%b %d"),_=f("%B"),O=f("%Y");function N(C){return(d(C)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,o)=>f8(e,o/n))},r.copy=function(){return kC(t).domain(e)},li.apply(r,arguments)}function bh(){var e=0,t=.5,r=1,n=1,i,o,s,u,d,f=ir,h,m=!1,v;function x(S){return isNaN(S=+S)?v:(S=.5+((S=+h(S))-o)*(n*S{if(e!=null){var n=e.scale,i=e.type;if(n==="auto")return i==="category"&&r&&(r.indexOf("LineChart")>=0||r.indexOf("AreaChart")>=0||r.indexOf("ComposedChart")>=0&&!t)?"point":i==="category"?"band":"linear";if(typeof n=="string")return NU(n)?n:"point"}};function IU(e,t){for(var r=0,n=e.length,i=e[0]t)?r=o+1:n=o}return r}function jC(e,t){if(e){var r=t??e.domain(),n=r.map(o=>{var s;return(s=e(o))!==null&&s!==void 0?s:0}),i=e.range();if(!(r.length===0||i.length<2))return o=>{var s,u,d=IU(n,o);if(d<=0)return r[0];if(d>=r.length)return r[r.length-1];var f=(s=n[d-1])!==null&&s!==void 0?s:0,h=(u=n[d])!==null&&u!==void 0?u:0;return Math.abs(o-f)<=Math.abs(o-h)?r[d-1]:r[d]}}}function MU(e){if(e!=null)return"invert"in e&&typeof e.invert=="function"?e.invert.bind(e):jC(e,void 0)}function Qk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function pf(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.cartesianAxis.xAxis[t],si=(e,t)=>{var r=NC(e,t);return r??St},kt={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:bg,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,niceTicks:"auto",width:Pu},IC=(e,t)=>e.cartesianAxis.yAxis[t],ui=(e,t)=>{var r=IC(e,t);return r??kt},BU={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},r0=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??BU},or=(e,t,r)=>{switch(t){case"xAxis":return si(e,r);case"yAxis":return ui(e,r);case"zAxis":return r0(e,r);case"angleAxis":return Ay(e,r);case"radiusAxis":return Oy(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},UU=(e,t,r)=>{switch(t){case"xAxis":return si(e,r);case"yAxis":return ui(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Tu=(e,t,r)=>{switch(t){case"xAxis":return si(e,r);case"yAxis":return ui(e,r);case"angleAxis":return Ay(e,r);case"radiusAxis":return Oy(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},MC=e=>e.graphicalItems.cartesianItems.some(t=>t.type==="bar")||e.graphicalItems.polarItems.some(t=>t.type==="radialBar");function TC(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var DC=e=>e.graphicalItems.cartesianItems,WU=H([It,fh],TC),RC=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),Nl=H([DC,or,WU],RC,{memoizeOptions:{resultEqualityCheck:ph}}),$C=H([Nl],e=>e.filter(t=>t.type==="area"||t.type==="bar").filter(_y)),LC=e=>e.filter(t=>!("stackId"in t)||t.stackId===void 0),HU=H([Nl],LC),zC=e=>e.map(t=>t.data).filter(Boolean).flat(1),KU=H([Nl],e=>e.some(t=>!t.data)),FC=H([Nl],zC,{memoizeOptions:{resultEqualityCheck:ph}}),BC=(e,t)=>{var r=t.chartData,n=r===void 0?[]:r,i=t.dataStartIndex,o=t.dataEndIndex;return e.length>0?e:n.slice(i,o+1)},n0=H([FC,lh],BC),VU=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:Nt(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:Nt(i,n)}))):e.map(n=>({value:n})),UC=(e,t,r,n,i,o)=>{var s=n.chartData,u=s===void 0?[]:s,d=n.dataStartIndex,f=n.dataEndIndex,h=VU(e,t,r);if(i&&(t==null?void 0:t.dataKey)!=null&&o.length>0){var m=u.slice(d,f+1),v=m.map(x=>({value:Nt(x,t.dataKey)})).filter(x=>x.value!=null);return[...v,...h]}return h},Du=H([n0,or,Nl,lh,KU,FC],UC);function Zo(e){if(jn(e)||e instanceof Date){var t=Number(e);if(Fe(t))return t}}function Zk(e){if(Array.isArray(e)){var t=[Zo(e[0]),Zo(e[1])];return An(t)?t:void 0}var r=Zo(e);if(r!=null)return[r,r]}function In(e){return e.map(Zo).filter(vr)}function qU(e,t){var r=Zo(e),n=Zo(t);return r==null&&n==null?0:r==null?-1:n==null?1:r-n}var GU=H([Du],e=>e==null?void 0:e.map(t=>t.value).sort(qU));function WC(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function YU(e,t,r){if(!r)return[];if(!r.length)return[];var n;if(typeof t=="number"&&!Cn(t))n=t;else if(Array.isArray(t)){var i=In(t);i.length>0&&(n=Math.max(...i))}return n==null?[]:In(r.flatMap(o=>{var s=Nt(e,o.dataKey),u,d;if(Array.isArray(s)){var f=_C(s,2);u=f[0],d=f[1]}else u=d=s;if(!(!Fe(u)||!Fe(d)))return[n-u,n+d]}))}var Pt=e=>{var t=Mt(e),r=jl(e);return Tu(e,t,r)},xl=H([Pt],e=>e==null?void 0:e.dataKey),QU=H([$C,lh,Pt],qO),HC=(e,t,r,n)=>{var i={},o=t.reduce((s,u)=>{if(u.stackId==null)return s;var d=s[u.stackId];return d==null&&(d=[]),d.push(u),s[u.stackId]=d,s},i);return Object.fromEntries(Object.entries(o).map(s=>{var u=_C(s,2),d=u[0],f=u[1],h=n?[...f].reverse():f,m=h.map(jy);return[d,{stackedData:pL(e,m,r),graphicalItems:h}]}))},KC=H([QU,$C,sh,FO],HC),VC=(e,t,r,n)=>{var i=t.dataStartIndex,o=t.dataEndIndex;if(n==null&&r!=="zAxis")return yL(e,i,o)},XU=H([or],e=>e.allowDataOverflow),i0=e=>{var t;if(e==null||!("domain"in e))return bg;if(e.domain!=null)return e.domain;if("ticks"in e&&e.ticks!=null){if(e.type==="number"){var r=In(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:bg},qC=H([or],i0),GC=H([qC,XU],jO),ZU=H([KC,cn,It,GC],VC,{memoizeOptions:{resultEqualityCheck:hh}}),a0=e=>e.errorBars,JU=(e,t,r)=>e.flatMap(n=>t[n.id]).filter(Boolean).filter(n=>WC(r,n)),mf=function(){for(var t=arguments.length,r=new Array(t),n=0;n5&&arguments[5]!==void 0?arguments[5]:[],u,d;if(n.length>0&&n.forEach(f=>{var h,m=f.data!=null?[...f.data]:s,v=(h=i[f.id])===null||h===void 0?void 0:h.filter(x=>WC(o,x));m.forEach(x=>{var k,S=Nt(x,(k=r.dataKey)!==null&&k!==void 0?k:f.dataKey),E=YU(x,S,v);if(E.length>=2){var P=Math.min(...E),j=Math.max(...E);(u==null||Pd)&&(d=j)}var _=Zk(S);_!=null&&(u=u==null?_[0]:Math.min(u,_[0]),d=d==null?_[1]:Math.max(d,_[1]))})}),(r==null?void 0:r.dataKey)!=null&&n.length===0&&t.forEach(f=>{var h=Zk(Nt(f,r.dataKey));h!=null&&(u=u==null?h[0]:Math.min(u,h[0]),d=d==null?h[1]:Math.max(d,h[1]))}),Fe(u)&&Fe(d))return[u,d]},e7=H([n0,or,HU,a0,It,_6],YC,{memoizeOptions:{resultEqualityCheck:hh}});function t7(e){var t=e.value;if(jn(t)||t instanceof Date)return t}var r7=(e,t,r)=>{var n=e.map(t7).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&o2(n))?CO(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},QC=e=>e.referenceElements.dots,Il=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),n7=H([QC,It,fh],Il),XC=e=>e.referenceElements.areas,i7=H([XC,It,fh],Il),ZC=e=>e.referenceElements.lines,a7=H([ZC,It,fh],Il),JC=(e,t)=>{if(e!=null){var r=In(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},o7=H(n7,It,JC),ej=(e,t)=>{if(e!=null){var r=In(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},l7=H([i7,It],ej);function s7(e){var t;if(e.x!=null)return In([e.x]);var r=(t=e.segment)===null||t===void 0?void 0:t.map(n=>n.x);return r==null||r.length===0?[]:In(r)}function u7(e){var t;if(e.y!=null)return In([e.y]);var r=(t=e.segment)===null||t===void 0?void 0:t.map(n=>n.y);return r==null||r.length===0?[]:In(r)}var tj=(e,t)=>{if(e!=null){var r=e.flatMap(n=>t==="xAxis"?s7(n):u7(n));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},c7=H([a7,It],tj),d7=H(o7,c7,l7,(e,t,r)=>mf(e,r,t)),rj=(e,t,r,n,i,o,s,u)=>{if(r!=null)return r;var d=s==="vertical"&&u==="xAxis"||s==="horizontal"&&u==="yAxis",f=d?mf(n,o,i):mf(o,i);return R6(t,f,e.allowDataOverflow)},f7=H([or,qC,GC,ZU,e7,d7,ot,It],rj,{memoizeOptions:{resultEqualityCheck:hh}}),h7=[0,1],nj=(e,t,r,n,i,o,s)=>{if(!((e==null||r==null||r.length===0)&&s===void 0)){var u=e.dataKey,d=e.type,f=Mn(t,o);if(f&&u==null){var h;return CO(0,(h=r==null?void 0:r.length)!==null&&h!==void 0?h:0)}return d==="category"?r7(n,e,f):i==="expand"&&!f?h7:s}},o0=H([or,ot,n0,Du,sh,It,f7],nj),Ml=H([or,MC,ky],CC),ij=(e,t,r)=>{var n=t.niceTicks;if(n!=="none"){var i=i0(t),o=Array.isArray(i)&&(i[0]==="auto"||i[1]==="auto");if((n==="snap125"||n==="adaptive")&&t!=null&&t.tickCount&&An(e)){if(o)return lk(e,t.tickCount,t.allowDecimals,n);if(t.type==="number")return sk(e,t.tickCount,t.allowDecimals,n)}if(n==="auto"&&r==="linear"&&t!=null&&t.tickCount){if(o&&An(e))return lk(e,t.tickCount,t.allowDecimals,"adaptive");if(t.type==="number"&&An(e))return sk(e,t.tickCount,t.allowDecimals,"adaptive")}}},l0=H([o0,Tu,Ml],ij),aj=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&An(t)&&Array.isArray(r)&&r.length>0){var i,o,s=t[0],u=(i=r[0])!==null&&i!==void 0?i:0,d=t[1],f=(o=r[r.length-1])!==null&&o!==void 0?o:0;return[Math.min(s,u),Math.max(d,f)]}return t},p7=H([or,o0,l0,It],aj),m7=H(Du,or,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(In(e.map(m=>m.value))).sort((m,v)=>m-v),i=n[0],o=n[n.length-1];if(i==null||o==null)return 1/0;var s=o-i;if(s===0)return 1/0;for(var u=0;ui,(e,t,r,n,i)=>{if(!Fe(e))return 0;var o=t==="vertical"?n.height:n.width;if(i==="gap")return e*o/2;if(i==="no-gap"){var s=ea(r,e*o),u=e*o/2;return u-s-(u-s)/o*s}return 0}),v7=(e,t,r)=>{var n=si(e,t);return n==null||typeof n.padding!="string"?0:oj(e,"xAxis",t,r,n.padding)},g7=(e,t,r)=>{var n=ui(e,t);return n==null||typeof n.padding!="string"?0:oj(e,"yAxis",t,r,n.padding)},y7=H(si,v7,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var i=e.padding;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),x7=H(ui,g7,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var i=e.padding;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),lj=H([Ht,y7,th,eh,(e,t,r)=>r],(e,t,r,n,i)=>{var o=n.padding;return i?[o.left,r.width-o.right]:[e.left+t.left,e.left+e.width-t.right]}),sj=H([Ht,ot,x7,th,eh,(e,t,r)=>r],(e,t,r,n,i,o)=>{var s=i.padding;return o?[n.height-s.bottom,s.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Ru=(e,t,r,n)=>{var i;switch(t){case"xAxis":return lj(e,r,n);case"yAxis":return sj(e,r,n);case"zAxis":return(i=r0(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return HO(e);case"radiusAxis":return KO(e,r);default:return}},uj=H([or,Ru],uh),b7=H([Ml,p7],e8),s0=H([or,Ml,b7,uj],t0),cj=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var i=r.type,o=r.scale,s=Mn(e,n);if(s&&(i==="number"||o!=="auto"))return t.map(u=>u.value)}},u0=H([ot,Du,Tu,It],cj),wh=H([s0],Ny);H([s0],MU);H([s0,GU],jC);H([Nl,a0,It],JU);function dj(e,t){return e.idt.id?1:0}var Sh=(e,t)=>t,kh=(e,t,r)=>r,w7=H(Zf,Sh,kh,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(dj)),S7=H(Jf,Sh,kh,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(dj)),fj=(e,t)=>({width:e.width,height:t.height}),k7=(e,t)=>{var r=typeof t.width=="number"?t.width:Pu;return{width:r,height:e.height}},E7=H(Ht,si,fj),P7=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},A7=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},O7=H(oi,Ht,w7,Sh,kh,(e,t,r,n,i)=>{var o={},s;return r.forEach(u=>{var d=fj(t,u);s==null&&(s=P7(t,n,e));var f=n==="top"&&!i||n==="bottom"&&i;o[u.id]=s-Number(f)*d.height,s+=(f?-1:1)*d.height}),o}),C7=H(ai,Ht,S7,Sh,kh,(e,t,r,n,i)=>{var o={},s;return r.forEach(u=>{var d=k7(t,u);s==null&&(s=A7(t,n,e));var f=n==="left"&&!i||n==="right"&&i;o[u.id]=s-Number(f)*d.width,s+=(f?-1:1)*d.width}),o}),j7=(e,t)=>{var r=si(e,t);if(r!=null)return O7(e,r.orientation,r.mirror)},_7=H([Ht,si,j7,(e,t)=>t],(e,t,r,n)=>{if(t!=null){var i=r==null?void 0:r[n];return i==null?{x:e.left,y:0}:{x:e.left,y:i}}}),N7=(e,t)=>{var r=ui(e,t);if(r!=null)return C7(e,r.orientation,r.mirror)},I7=H([Ht,ui,N7,(e,t)=>t],(e,t,r,n)=>{if(t!=null){var i=r==null?void 0:r[n];return i==null?{x:0,y:e.top}:{x:i,y:e.top}}}),M7=H(Ht,ui,(e,t)=>{var r=typeof t.width=="number"?t.width:Pu;return{width:r,height:e.height}}),hj=(e,t,r,n)=>{if(r!=null){var i=r.allowDuplicatedCategory,o=r.type,s=r.dataKey,u=Mn(e,n),d=t.map(h=>h.value),f=d.filter(h=>h!=null);if(s&&u&&o==="category"&&i&&o2(f))return d}},c0=H([ot,Du,or,It],hj),Jk=H([ot,UU,Ml,wh,c0,u0,Ru,l0,It],(e,t,r,n,i,o,s,u,d)=>{if(t!=null){var f=Mn(e,d);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:d,categoricalDomain:o,duplicateDomain:i,isCategorical:f,niceTicks:u,range:s,realScaleType:r,scale:n}}}),T7=(e,t,r,n,i,o,s,u,d)=>{if(!(t==null||n==null)){var f=Mn(e,d),h=t.type,m=t.ticks,v=t.tickCount,x=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,k=h==="category"&&n.bandwidth?n.bandwidth()/x:0;k=d==="angleAxis"&&o!=null&&o.length>=2?Lr(o[0]-o[1])*2*k:k;var S=m||i;return S?S.map((E,P)=>{var j=s?s.indexOf(E):E,_=n.map(j);return Fe(_)?{index:P,coordinate:_+k,value:E,offset:k}:null}).filter(vr):f&&u?u.map((E,P)=>{var j=n.map(E);return Fe(j)?{coordinate:j+k,value:E,index:P,offset:k}:null}).filter(vr):n.ticks?n.ticks(v).map((E,P)=>{var j=n.map(E);return Fe(j)?{coordinate:j+k,value:E,index:P,offset:k}:null}).filter(vr):n.domain().map((E,P)=>{var j=n.map(E);return Fe(j)?{coordinate:j+k,value:s?s[E]:E,index:P,offset:k}:null}).filter(vr)}},pj=H([ot,Tu,Ml,wh,l0,Ru,c0,u0,It],T7),D7=(e,t,r,n,i,o,s)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Mn(e,s),d=t.tickCount,f=0;return f=s==="angleAxis"&&(n==null?void 0:n.length)>=2?Lr(n[0]-n[1])*2*f:f,u&&o?o.map((h,m)=>{var v=r.map(h);return Fe(v)?{coordinate:v+f,value:h,index:m,offset:f}:null}).filter(vr):r.ticks?r.ticks(d).map((h,m)=>{var v=r.map(h);return Fe(v)?{coordinate:v+f,value:h,index:m,offset:f}:null}).filter(vr):r.domain().map((h,m)=>{var v=r.map(h);return Fe(v)?{coordinate:v+f,value:i?i[h]:h,index:m,offset:f}:null}).filter(vr)}},mj=H([ot,Tu,wh,Ru,c0,u0,It],D7),vj=H(or,wh,(e,t)=>{if(!(e==null||t==null))return pf(pf({},e),{},{scale:t})}),R7=H([or,Ml,o0,uj],t0),$7=H([R7],Ny);H((e,t,r)=>r0(e,r),$7,(e,t)=>{if(!(e==null||t==null))return pf(pf({},e),{},{scale:t})});var L7=H([ot,Zf,Jf],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),z7=(e,t,r)=>{var n;return(n=e.renderedTicks[t])===null||n===void 0?void 0:n[r]};H([z7],e=>{if(!(!e||e.length===0))return t=>{var r,n=1/0,i=e[0];for(var o of e){var s=Math.abs(o.coordinate-t);se.options.defaultTooltipEventType,yj=e=>e.options.validateTooltipEventTypes;function xj(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function $u(e,t){var r=gj(e),n=yj(e);return xj(t,r,n)}function F7(e){return Ee(t=>$u(t,e))}var bj=(e,t)=>{var r,n=Number(t);if(!(Cn(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},B7=e=>e.tooltip.settings,zi={active:!1,index:null,dataKey:void 0,graphicalItemId:void 0,coordinate:void 0},U7={itemInteraction:{click:zi,hover:zi},axisInteraction:{click:zi,hover:zi},keyboardInteraction:zi,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0,sourceViewBox:void 0,graphicalItemId:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},wj=Jt({name:"tooltip",initialState:U7,reducers:{addTooltipEntrySettings:{reducer(e,t){e.tooltipItemPayloads.push(t.payload)},prepare:rt()},replaceTooltipEntrySettings:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).tooltipItemPayloads.indexOf(n);o>-1&&(e.tooltipItemPayloads[o]=i)},prepare:rt()},removeTooltipEntrySettings:{reducer(e,t){var r=zr(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},prepare:rt()},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate}}}),Vr=wj.actions,W7=Vr.addTooltipEntrySettings,H7=Vr.replaceTooltipEntrySettings,K7=Vr.removeTooltipEntrySettings,V7=Vr.setTooltipSettingsState,q7=Vr.setActiveMouseOverItemIndex;Vr.mouseLeaveItem;var Sj=Vr.mouseLeaveChart;Vr.setActiveClickItemIndex;var kj=Vr.setMouseOverAxisIndex,G7=Vr.setMouseClickAxisIndex,Fs=Vr.setSyncInteraction,vf=Vr.setKeyboardInteraction,Y7=wj.reducer;function eE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function md(e){for(var t=1;t{if(t==null)return zi;var i=J7(e,t,r);if(i==null)return zi;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var o=e.settings.active===!0;if(e9(i)){if(o)return md(md({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n,graphicalItemId:void 0};return md(md({},zi),{},{coordinate:i.coordinate})};function t9(e){if(typeof e=="number")return Number.isFinite(e)?e:void 0;if(e instanceof Date){var t=e.valueOf();return Number.isFinite(t)?t:void 0}var r=Number(e);return Number.isFinite(r)?r:void 0}function r9(e,t){var r=t9(e),n=t[0],i=t[1];if(r===void 0)return!1;var o=Math.min(n,i),s=Math.max(n,i);return r>=o&&r<=s}function n9(e,t,r){if(r==null||t==null)return!0;var n=Nt(e,t);return n==null||!An(r)?!0:r9(n,r)}var Us=(e,t,r,n)=>{var i=e==null?void 0:e.index;if(i==null)return null;var o=Number(i);if(!Fe(o))return i;var s=0,u=1/0;t.length>0&&(u=t.length-1);var d=Math.max(s,Math.min(o,u)),f=t[d];return f==null||n9(f,r,n)?String(d):null},Pj=(e,t,r,n,i,o,s)=>{if(o!=null){var u=s[0],d=u==null?void 0:u.getPosition(o);if(d!=null)return d;var f=i==null?void 0:i[Number(o)];if(f)switch(r){case"horizontal":return{x:f.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:f.coordinate}}}},Aj=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;if(r==="hover"?i=e.itemInteraction.hover.graphicalItemId:i=e.itemInteraction.click.graphicalItemId,e.syncInteraction.active&&i==null)return e.tooltipItemPayloads;if(i==null&&(n!=null||e.keyboardInteraction.active)){var o=e.tooltipItemPayloads[0];return o!=null?[o]:[]}return e.tooltipItemPayloads.filter(s=>{var u;return((u=s.settings)===null||u===void 0?void 0:u.graphicalItemId)===i})},Oj=e=>e.options.tooltipPayloadSearcher,Tl=e=>e.tooltip;function tE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function rE(e){for(var t=1;te(t)}function nE(e){if(typeof e=="string")return e}function c9(e){if(!(e==null||typeof e!="object")){var t="name"in e?l9(e.name):void 0,r="unit"in e?s9(e.unit):void 0,n="dataKey"in e?u9(e.dataKey):void 0,i="payload"in e?e.payload:void 0,o="color"in e?nE(e.color):void 0,s="fill"in e?nE(e.fill):void 0;return{name:t,unit:r,dataKey:n,payload:i,color:o,fill:s}}}function d9(e,t){return e??t}var Cj=(e,t,r,n,i,o,s)=>{if(!(t==null||o==null)){var u=r.chartData,d=r.computedData,f=r.dataStartIndex,h=r.dataEndIndex,m=[];return e.reduce((v,x)=>{var k,S=x.dataDefinedOnItem,E=x.settings,P=d9(S,u),j=Array.isArray(P)?J2(P,f,h):P,_=(k=E==null?void 0:E.dataKey)!==null&&k!==void 0?k:n,O=E==null?void 0:E.nameKey,N;if(n&&Array.isArray(j)&&!Array.isArray(j[0])&&s==="axis"?N=l2(j,n,i):N=o(j,t,d,O),Array.isArray(N))N.forEach(R=>{var z,F,V=c9(R),Q=V==null?void 0:V.name,B=V==null?void 0:V.dataKey,ue=V==null?void 0:V.payload,G=rE(rE({},E),{},{name:Q,unit:V==null?void 0:V.unit,color:(z=V==null?void 0:V.color)!==null&&z!==void 0?z:E==null?void 0:E.color,fill:(F=V==null?void 0:V.fill)!==null&&F!==void 0?F:E==null?void 0:E.fill});v.push(Xw({tooltipEntrySettings:G,dataKey:B,payload:ue,value:Nt(ue,B),name:Q==null?void 0:String(Q)}))});else{var C;v.push(Xw({tooltipEntrySettings:E,dataKey:_,payload:N,value:Nt(N,_),name:(C=Nt(N,O))!==null&&C!==void 0?C:E==null?void 0:E.name}))}return v},m)}},d0=H([Pt,MC,ky],CC),f9=H([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),h9=H([Mt,jl],TC),to=H([f9,Pt,h9],RC,{memoizeOptions:{resultEqualityCheck:ph}}),p9=H([to],e=>e.filter(_y)),jj=H([to],zC,{memoizeOptions:{resultEqualityCheck:ph}}),m9=H([to],e=>e.some(t=>!t.data)),Ya=H([jj,cn],BC),v9=H([p9,cn,Pt],qO),f0=H([Ya,Pt,to,cn,m9,jj],UC),_j=H([Pt],i0),g9=H([Pt],e=>e.allowDataOverflow),Nj=H([_j,g9],jO),y9=H([to],e=>e.filter(_y)),x9=H([v9,y9,sh,FO],HC),b9=H([x9,cn,Mt,Nj],VC),w9=H([to],LC),S9=H([Ya,Pt,w9,a0,Mt,N6],YC,{memoizeOptions:{resultEqualityCheck:hh}}),k9=H([QC,Mt,jl],Il),E9=H([k9,Mt],JC),P9=H([XC,Mt,jl],Il),A9=H([P9,Mt],ej),O9=H([ZC,Mt,jl],Il),C9=H([O9,Mt],tj),j9=H([E9,C9,A9],mf),_9=H([Pt,_j,Nj,b9,S9,j9,ot,Mt],rj),bl=H([Pt,ot,Ya,f0,sh,Mt,_9],nj),N9=H([bl,Pt,d0],ij),I9=H([Pt,bl,N9,Mt],aj),Ij=e=>{var t=Mt(e),r=jl(e),n=!1;return Ru(e,t,r,n)},Mj=H([Pt,Ij],uh),M9=H([Pt,d0,I9,Mj],t0),Tj=H([M9],Ny),T9=H([ot,f0,Pt,Mt],hj),D9=H([ot,f0,Pt,Mt],cj),R9=(e,t,r,n,i,o,s,u)=>{if(t){var d=t.type,f=Mn(e,u);if(n){var h=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,m=d==="category"&&n.bandwidth?n.bandwidth()/h:0;return m=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?Lr(i[0]-i[1])*2*m:m,f&&s?s.map((v,x)=>{var k=n.map(v);return Fe(k)?{coordinate:k+m,value:v,index:x,offset:m}:null}).filter(vr):n.domain().map((v,x)=>{var k=n.map(v);return Fe(k)?{coordinate:k+m,value:o?o[v]:v,index:x,offset:m}:null}).filter(vr)}}},ci=H([ot,Pt,d0,Tj,Ij,T9,D9,Mt],R9),h0=H([gj,yj,B7],(e,t,r)=>xj(r.shared,e,t)),Dj=e=>e.tooltip.settings.trigger,p0=e=>e.tooltip.settings.defaultIndex,Lu=H([Tl,h0,Dj,p0],Ej),cu=H([Lu,Ya,xl,bl],Us),Rj=H([ci,cu],bj),$9=H([Lu],e=>{if(e)return e.dataKey}),L9=H([Lu],e=>{if(e)return e.graphicalItemId}),$j=H([Tl,h0,Dj,p0],Aj),z9=H([ai,oi,ot,Ht,ci,p0,$j],Pj),F9=H([Lu,z9],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),B9=H([Lu],e=>{var t;return(t=e==null?void 0:e.active)!==null&&t!==void 0?t:!1}),U9=H([$j,cu,cn,xl,Rj,Oj,h0],Cj),W9=H([U9],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function iE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function aE(e){for(var t=1;tEe(Pt),G9=()=>{var e=q9(),t=Ee(ci),r=Ee(Tj);return Kd(!e||!r?void 0:aE(aE({},e),{},{scale:r}),t)};function oE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ro(e){for(var t=1;t{var i=t.find(o=>o&&o.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.relativeY};if(e==="vertical")return{x:n.relativeX,y:i.coordinate}}return{x:0,y:0}},J9=(e,t,r,n)=>{var i=t.find(f=>f&&f.index===r);if(i){if(e==="centric"){var o=i.coordinate,s=n.radius;return Ro(Ro(Ro({},n),Bt(n.cx,n.cy,s,o)),{},{angle:o,radius:s})}var u=i.coordinate,d=n.angle;return Ro(Ro(Ro({},n),Bt(n.cx,n.cy,u,d)),{},{angle:d,radius:u})}return{angle:0,clockWise:!1,cx:0,cy:0,endAngle:0,innerRadius:0,outerRadius:0,radius:0,startAngle:0,x:0,y:0}};function eW(e,t){var r=e.relativeX,n=e.relativeY;return r>=t.left&&r<=t.left+t.width&&n>=t.top&&n<=t.top+t.height}var Lj=(e,t,r,n,i)=>{var o,s=(o=t==null?void 0:t.length)!==null&&o!==void 0?o:0;if(s<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var u=0;u0?(d=r[u-1])===null||d===void 0?void 0:d.coordinate:(f=r[s-1])===null||f===void 0?void 0:f.coordinate,k=(h=r[u])===null||h===void 0?void 0:h.coordinate,S=u>=s-1?(m=r[0])===null||m===void 0?void 0:m.coordinate:(v=r[u+1])===null||v===void 0?void 0:v.coordinate,E=void 0;if(!(x==null||k==null||S==null))if(Lr(k-x)!==Lr(S-k)){var P=[];if(Lr(S-k)===Lr(i[1]-i[0])){E=S;var j=k+i[1]-i[0];P[0]=Math.min(j,(j+x)/2),P[1]=Math.max(j,(j+x)/2)}else{E=x;var _=S+i[1]-i[0];P[0]=Math.min(k,(_+k)/2),P[1]=Math.max(k,(_+k)/2)}var O=[Math.min(k,(E+k)/2),Math.max(k,(E+k)/2)];if(e>O[0]&&e<=O[1]||e>=P[0]&&e<=P[1]){var N;return(N=r[u])===null||N===void 0?void 0:N.index}}else{var C=Math.min(x,S),R=Math.max(x,S);if(e>(C+k)/2&&e<=(R+k)/2){var z;return(z=r[u])===null||z===void 0?void 0:z.index}}}else if(t)for(var F=0;F(V.coordinate+B.coordinate)/2||F>0&&F(V.coordinate+B.coordinate)/2&&e<=(V.coordinate+Q.coordinate)/2)return V.index}}return-1},zj=()=>Ee(ky),m0=(e,t)=>t,Fj=(e,t,r)=>r,v0=(e,t,r,n)=>n,tW=H(ci,e=>Bf(e,t=>t.coordinate)),g0=H([Tl,m0,Fj,v0],Ej),y0=H([g0,Ya,xl,bl],Us),rW=(e,t,r)=>{if(t!=null){var n=Tl(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},Bj=H([Tl,m0,Fj,v0],Aj),gf=H([ai,oi,ot,Ht,ci,v0,Bj],Pj),nW=H([g0,gf],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),Uj=H([ci,y0],bj),iW=H([Bj,y0,cn,xl,Uj,Oj,m0],Cj),aW=H([g0,y0],(e,t)=>({isActive:e.active&&t!=null,activeIndex:t})),oW=(e,t,r,n,i,o,s)=>{if(!(!e||!r||!n||!i)&&eW(e,s)){var u=xL(e,t),d=Lj(u,o,i,r,n),f=Z9(t,i,d,e);return{activeIndex:String(d),activeCoordinate:f}}},lW=(e,t,r,n,i,o,s)=>{if(!(!e||!n||!i||!o||!r)){var u=S6(e,r);if(u){var d=bL(u,t),f=Lj(d,s,o,n,i),h=J9(t,o,f,u);return{activeIndex:String(f),activeCoordinate:h}}}},sW=(e,t,r,n,i,o,s,u)=>{if(!(!e||!t||!n||!i||!o))return t==="horizontal"||t==="vertical"?oW(e,t,n,i,o,s,u):lW(e,t,r,n,i,o,s)},uW=H(e=>e.zIndex.zIndexMap,(e,t)=>t,(e,t,r)=>r,(e,t,r)=>{if(t!=null){var n=e[t];if(n!=null)return r?n.panoramaElement:n.element}}),cW=H(e=>e.zIndex.zIndexMap,e=>{var t=Object.keys(e).map(n=>parseInt(n,10)).concat(Object.values(nr)),r=Array.from(new Set(t));return r.sort((n,i)=>n-i)},{memoizeOptions:{resultEqualityCheck:J6}});function lE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function sE(e){for(var t=1;tsE(sE({},e),{},{[t]:{element:void 0,panoramaElement:void 0,consumers:0}}),pW)},vW=new Set(Object.values(nr));function gW(e){return vW.has(e)}var Wj=Jt({name:"zIndex",initialState:mW,reducers:{registerZIndexPortal:{reducer:(e,t)=>{var r=t.payload.zIndex;e.zIndexMap[r]?e.zIndexMap[r].consumers+=1:e.zIndexMap[r]={consumers:1,element:void 0,panoramaElement:void 0}},prepare:rt()},unregisterZIndexPortal:{reducer:(e,t)=>{var r=t.payload.zIndex;e.zIndexMap[r]&&(e.zIndexMap[r].consumers-=1,e.zIndexMap[r].consumers<=0&&!gW(r)&&delete e.zIndexMap[r])},prepare:rt()},registerZIndexPortalElement:{reducer:(e,t)=>{var r=t.payload,n=r.zIndex,i=r.element,o=r.isPanorama;e.zIndexMap[n]?o?e.zIndexMap[n].panoramaElement=i:e.zIndexMap[n].element=i:e.zIndexMap[n]={consumers:0,element:o?void 0:i,panoramaElement:o?i:void 0}},prepare:rt()},unregisterZIndexPortalElement:{reducer:(e,t)=>{var r=t.payload.zIndex;e.zIndexMap[r]&&(t.payload.isPanorama?e.zIndexMap[r].panoramaElement=void 0:e.zIndexMap[r].element=void 0)},prepare:rt()}}}),Eh=Wj.actions,yW=Eh.registerZIndexPortal,av=Eh.unregisterZIndexPortal,xW=Eh.registerZIndexPortalElement,bW=Eh.unregisterZIndexPortalElement,wW=Wj.reducer;function di(e){var t=e.zIndex,r=e.children,n=iz(),i=n&&t!==void 0&&t!==0,o=yr(),s=y.useRef(void 0),u=y.useRef(new Set),d=xt(),f=Ee(m=>uW(m,t,o));if(y.useLayoutEffect(()=>{if(!i){var m=u.current;m.forEach(x=>{d(av({zIndex:x}))}),m.clear(),s.current=void 0;return}if(u.current.has(t)||(d(yW({zIndex:t})),u.current.add(t)),f){s.current=f;var v=u.current;v.forEach(x=>{x!==t&&(d(av({zIndex:x})),v.delete(x))})}},[d,t,i,f]),y.useLayoutEffect(()=>{var m=u.current;return()=>{m.forEach(v=>{d(av({zIndex:v}))}),m.clear()}},[d]),!i)return r;var h=f??s.current;return h?If.createPortal(r,h):null}function wg(){return wg=Object.assign?Object.assign.bind():function(e){for(var t=1;ty.useContext(Hj),ov={exports:{}},cE;function jW(){return cE||(cE=1,(function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(d,f,h){this.fn=d,this.context=f,this.once=h||!1}function o(d,f,h,m,v){if(typeof h!="function")throw new TypeError("The listener must be a function");var x=new i(h,m||d,v),k=r?r+f:f;return d._events[k]?d._events[k].fn?d._events[k]=[d._events[k],x]:d._events[k].push(x):(d._events[k]=x,d._eventsCount++),d}function s(d,f){--d._eventsCount===0?d._events=new n:delete d._events[f]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var f=[],h,m;if(this._eventsCount===0)return f;for(m in h=this._events)t.call(h,m)&&f.push(r?m.slice(1):m);return Object.getOwnPropertySymbols?f.concat(Object.getOwnPropertySymbols(h)):f},u.prototype.listeners=function(f){var h=r?r+f:f,m=this._events[h];if(!m)return[];if(m.fn)return[m.fn];for(var v=0,x=m.length,k=new Array(x);v{if(t&&Array.isArray(e)){var r=Number.parseInt(t,10);if(!Cn(r))return e[r]}},MW={chartName:"",tooltipPayloadSearcher:()=>{},eventEmitter:void 0,defaultTooltipEventType:"axis"},Kj=Jt({name:"options",initialState:MW,reducers:{createEventEmitter:e=>{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),TW=Kj.reducer,DW=Kj.actions.createEventEmitter;function RW(e){return e.tooltip.syncInteraction}var $W={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},Vj=Jt({name:"chartData",initialState:$W,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var r=t.payload,n=r.startIndex,i=r.endIndex;n!=null&&(e.dataStartIndex=n),i!=null&&(e.dataEndIndex=i)}}}),x0=Vj.actions,fE=x0.setChartData,LW=x0.setDataStartEndIndexes;x0.setComputedData;var zW=Vj.reducer,FW=["x","y"];function hE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $o(e){for(var t=1;td.rootProps.className);y.useEffect(()=>{if(e==null)return Pl;var d=(f,h,m)=>{if(t!==m&&e===f){if(h.payload.active===!1){r(Fs({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(n==="index"){var v;if(s&&h!==null&&h!==void 0&&(v=h.payload)!==null&&v!==void 0&&v.coordinate&&h.payload.sourceViewBox){var x=h.payload.coordinate,k=x.x,S=x.y,E=HW(x,FW),P=h.payload.sourceViewBox,j=P.x,_=P.y,O=P.width,N=P.height,C=$o($o({},E),{},{x:s.x+(O?(k-j)/O:0)*s.width,y:s.y+(N?(S-_)/N:0)*s.height});r($o($o({},h),{},{payload:$o($o({},h.payload),{},{coordinate:C})}))}else r(h);return}if(i!=null){var R;if(typeof n=="function"){var z={activeTooltipIndex:h.payload.index==null?void 0:Number(h.payload.index),isTooltipActive:h.payload.active,activeIndex:h.payload.index==null?void 0:Number(h.payload.index),activeLabel:h.payload.label,activeDataKey:h.payload.dataKey,activeCoordinate:h.payload.coordinate},F=n(i,z);R=i[F]}else n==="value"&&(R=i.find(de=>String(de.value)===h.payload.label));var V=h.payload.coordinate;if(V==null||s==null){r(Fs({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(R==null){r(Fs({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:h.payload.sourceViewBox,graphicalItemId:void 0}));return}var Q=V.x,B=V.y,ue=Math.min(Q,s.x+s.width),G=Math.min(B,s.y+s.height),le={x:o==="horizontal"?R.coordinate:ue,y:o==="horizontal"?G:R.coordinate},fe=Fs({active:h.payload.active,coordinate:le,dataKey:h.payload.dataKey,index:String(R.index),label:h.payload.label,sourceViewBox:h.payload.sourceViewBox,graphicalItemId:h.payload.graphicalItemId});r(fe)}}};return du.on(Sg,d),()=>{du.off(Sg,d)}},[u,r,t,e,n,i,o,s])}function qW(){var e=Ee(Ey),t=Ee(Py),r=xt();y.useEffect(()=>{if(e==null)return Pl;var n=(i,o,s)=>{t!==s&&e===i&&r(LW(o))};return du.on(dE,n),()=>{du.off(dE,n)}},[r,t,e])}function GW(){var e=xt();y.useEffect(()=>{e(DW())},[e]),VW(),qW()}function YW(e,t,r,n,i,o){var s=Ee(k=>rW(k,e,t)),u=Ee(L9),d=Ee(Py),f=Ee(Ey),h=Ee(BO),m=Ee(RW),v=(m==null?void 0:m.sourceViewBox)!=null,x=rh();y.useEffect(()=>{if(!v&&f!=null&&d!=null){var k=Fs({active:o,coordinate:r,dataKey:s,index:i,label:typeof n=="number"?String(n):n,sourceViewBox:x,graphicalItemId:u});du.emit(Sg,f,k,d)}},[v,r,s,u,i,n,d,f,h,o,x])}function pE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function mE(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r{R(V7({shared:j,trigger:_,axisId:C,active:i,defaultIndex:z}))},[R,j,_,C,i,z]);var F=rh(),V=bO(),Q=F7(j),B=(t=Ee(Ae=>aW(Ae,Q,_,z)))!==null&&t!==void 0?t:{},ue=B.activeIndex,G=B.isActive,le=Ee(Ae=>iW(Ae,Q,_,z)),fe=Ee(Ae=>Uj(Ae,Q,_,z)),de=Ee(Ae=>nW(Ae,Q,_,z)),Y=le,ae=CW(),X=(r=i??G)!==null&&r!==void 0?r:!1,M=a4([Y,X]),T=JW(M,2),Z=T[0],se=T[1],te=Q==="axis"?fe:void 0;YW(Q,_,de,te,ue,X);var ce=N??ae;if(ce==null||F==null||Q==null)return null;var ge=Y??gE;X||(ge=gE),f&&ge.length&&(ge=C$(ge.filter(Ae=>Ae.value!=null&&(Ae.hide!==!0||n.includeHidden)),v,iH));var _e=ge.length>0,J=mE(mE({},n),{},{payload:ge,label:te,active:X,activeIndex:ue,coordinate:de,accessibilityLayer:V}),we=y.createElement(vF,{allowEscapeViewBox:o,animationDuration:s,animationEasing:u,isAnimationActive:h,active:X,coordinate:de,hasPayload:_e,offset:m,position:x,reverseDirection:k,useTranslate3d:S,viewBox:F,wrapperStyle:E,lastBoundingBox:Z,innerRef:se,hasPortalFromProps:!!N},aH(d,J));return y.createElement(y.Fragment,null,If.createPortal(we,ce),X&&y.createElement(OW,{cursor:P,tooltipEventType:Q,coordinate:de,payload:ge,index:ue}))}function sH(e,t,r){return(t=uH(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function uH(e){var t=cH(e,"string");return typeof t=="symbol"?t:t+""}function cH(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class dH{constructor(t){sH(this,"cache",new Map),this.maxSize=t}get(t){var r=this.cache.get(t);return r!==void 0&&(this.cache.delete(t),this.cache.set(t,r)),r}set(t,r){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxSize){var n=this.cache.keys().next().value;n!=null&&this.cache.delete(n)}this.cache.set(t,r)}clear(){this.cache.clear()}size(){return this.cache.size}}function yE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function fH(e){for(var t=1;t{try{var r=document.getElementById(bE);r||(r=document.createElement("span"),r.setAttribute("id",bE),r.setAttribute("aria-hidden","true"),document.body.appendChild(r)),Object.assign(r.style,gH,t),r.textContent="".concat(e);var n=r.getBoundingClientRect();return{width:n.width,height:n.height}}catch{return{width:0,height:0}}},Ws=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||ju.isSsr)return{width:0,height:0};if(!qj.enableCache)return wE(t,r);var n=yH(t,r),i=xE.get(n);if(i)return i;var o=wE(t,r);return xE.set(n,o),o},Gj;function yf(e,t){return SH(e)||wH(e,t)||bH(e,t)||xH()}function xH(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function bH(e,t){if(e){if(typeof e=="string")return SE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?SE(e,t):void 0}}function SE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=e.children,r=e.breakAll,n=e.style;try{var i=[];Ut(t)||(r?i=t.toString().split(""):i=t.toString().split(Qj));var o=i.map(u=>({word:u,width:Ws(u,n).width})),s=r?0:Ws(" ",n).width;return{wordsWithComputedWidth:o,spaceWidth:s}}catch{return null}};function Zj(e){return e==="start"||e==="middle"||e==="end"||e==="inherit"}function UH(e){return Ut(e)||typeof e=="string"||typeof e=="number"||typeof e=="boolean"}var Jj=(e,t,r,n)=>e.reduce((i,o)=>{var s=o.word,u=o.width,d=i[i.length-1];if(d&&u!=null&&(t==null||n||d.width+u+re.reduce((t,r)=>t.width>r.width?t:r),WH="…",jE=(e,t,r,n,i,o,s,u)=>{var d=e.slice(0,t),f=Xj({breakAll:r,style:n,children:d+WH});if(!f)return[!1,[]];var h=Jj(f.wordsWithComputedWidth,o,s,u),m=h.length>i||e_(h).width>Number(o);return[m,h]},HH=(e,t,r,n,i)=>{var o=e.maxLines,s=e.children,u=e.style,d=e.breakAll,f=be(o),h=String(s),m=Jj(t,n,r,i);if(!f||i)return m;var v=m.length>o||e_(m).width>Number(n);if(!v)return m;for(var x=0,k=h.length-1,S=0,E;x<=k&&S<=h.length-1;){var P=Math.floor((x+k)/2),j=P-1,_=jE(h,j,d,u,o,n,r,i),O=OE(_,2),N=O[0],C=O[1],R=jE(h,P,d,u,o,n,r,i),z=OE(R,1),F=z[0];if(!N&&!F&&(x=P+1),N&&F&&(k=P-1),!N&&F){E=C;break}S++}return E||m},_E=e=>{var t=Ut(e)?[]:e.toString().split(Qj);return[{words:t,width:void 0}]},KH=e=>{var t=e.width,r=e.scaleToFit,n=e.children,i=e.style,o=e.breakAll,s=e.maxLines;if((t||r)&&!ju.isSsr){var u,d,f=Xj({breakAll:o,children:n,style:i});if(f){var h=f.wordsWithComputedWidth,m=f.spaceWidth;u=h,d=m}else return _E(n);return HH({breakAll:o,children:n,maxLines:s,style:i},u,d,t,!!r)}return _E(n)},t_="#808080",VH={angle:0,breakAll:!1,capHeight:"0.71em",fill:t_,lineHeight:"1em",scaleToFit:!1,textAnchor:"start",verticalAnchor:"end",x:0,y:0},b0=y.forwardRef((e,t)=>{var r=Hr(e,VH),n=r.x,i=r.y,o=r.lineHeight,s=r.capHeight,u=r.fill,d=r.scaleToFit,f=r.textAnchor,h=r.verticalAnchor,m=AE(r,DH),v=y.useMemo(()=>KH({breakAll:m.breakAll,children:m.children,maxLines:m.maxLines,scaleToFit:d,style:m.style,width:m.width}),[m.breakAll,m.children,m.maxLines,d,m.style,m.width]),x=m.dx,k=m.dy,S=m.angle,E=m.className,P=m.breakAll,j=AE(m,RH);if(!jn(n)||!jn(i)||v.length===0)return null;var _=Number(n)+(be(x)?x:0),O=Number(i)+(be(k)?k:0);if(!Fe(_)||!Fe(O))return null;var N;switch(h){case"start":N=lv("calc(".concat(s,")"));break;case"middle":N=lv("calc(".concat((v.length-1)/2," * -").concat(o," + (").concat(s," / 2))"));break;default:N=lv("calc(".concat(v.length-1," * -").concat(o,")"));break}var C=[],R=v[0];if(d&&R!=null){var z=R.width,F=m.width;C.push("scale(".concat(be(F)&&be(z)?F/z:1,")"))}return S&&C.push("rotate(".concat(S,", ").concat(_,", ").concat(O,")")),C.length&&(j.transform=C.join(" ")),y.createElement("text",kg({},Br(j),{ref:t,x:_,y:O,className:Xe("recharts-text",E),textAnchor:f,fill:u.includes("url")?t_:u}),v.map((V,Q)=>{var B=V.words.join(P?"":" ");return y.createElement("tspan",{x:_,dy:Q===0?N:o,key:"".concat(B,"-").concat(Q)},B)}))});b0.displayName="Text";function NE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function xn(e){for(var t=1;t{var t=e.viewBox,r=e.position,n=e.offset,i=n===void 0?0:n,o=e.parentViewBox,s=py(t),u=s.x,d=s.y,f=s.height,h=s.upperWidth,m=s.lowerWidth,v=u,x=u+(h-m)/2,k=(v+x)/2,S=(h+m)/2,E=v+h/2,P=f>=0?1:-1,j=P*i,_=P>0?"end":"start",O=P>0?"start":"end",N=h>=0?1:-1,C=N*i,R=N>0?"end":"start",z=N>0?"start":"end",F=o;if(r==="top"){var V={x:v+h/2,y:d-j,horizontalAnchor:"middle",verticalAnchor:_};return F&&(V.height=Math.max(d-F.y,0),V.width=h),V}if(r==="bottom"){var Q={x:x+m/2,y:d+f+j,horizontalAnchor:"middle",verticalAnchor:O};return F&&(Q.height=Math.max(F.y+F.height-(d+f),0),Q.width=m),Q}if(r==="left"){var B={x:k-C,y:d+f/2,horizontalAnchor:R,verticalAnchor:"middle"};return F&&(B.width=Math.max(B.x-F.x,0),B.height=f),B}if(r==="right"){var ue={x:k+S+C,y:d+f/2,horizontalAnchor:z,verticalAnchor:"middle"};return F&&(ue.width=Math.max(F.x+F.width-ue.x,0),ue.height=f),ue}var G=F?{width:S,height:f}:{};return r==="insideLeft"?xn({x:k+C,y:d+f/2,horizontalAnchor:z,verticalAnchor:"middle"},G):r==="insideRight"?xn({x:k+S-C,y:d+f/2,horizontalAnchor:R,verticalAnchor:"middle"},G):r==="insideTop"?xn({x:v+h/2,y:d+j,horizontalAnchor:"middle",verticalAnchor:O},G):r==="insideBottom"?xn({x:x+m/2,y:d+f-j,horizontalAnchor:"middle",verticalAnchor:_},G):r==="insideTopLeft"?xn({x:v+C,y:d+j,horizontalAnchor:z,verticalAnchor:O},G):r==="insideTopRight"?xn({x:v+h-C,y:d+j,horizontalAnchor:R,verticalAnchor:O},G):r==="insideBottomLeft"?xn({x:x+C,y:d+f-j,horizontalAnchor:z,verticalAnchor:_},G):r==="insideBottomRight"?xn({x:x+m-C,y:d+f-j,horizontalAnchor:R,verticalAnchor:_},G):r&&typeof r=="object"&&(be(r.x)||Ha(r.x))&&(be(r.y)||Ha(r.y))?xn({x:u+ea(r.x,S),y:d+ea(r.y,f),horizontalAnchor:"end",verticalAnchor:"end"},G):xn({x:E,y:d+f/2,horizontalAnchor:"middle",verticalAnchor:"middle"},G)},XH=["labelRef"],ZH=["content"];function IE(e,t){if(e==null)return{};var r,n,i=JH(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{var t=e.x,r=e.y,n=e.upperWidth,i=e.lowerWidth,o=e.width,s=e.height,u=e.children,d=y.useMemo(()=>({x:t,y:r,upperWidth:n,lowerWidth:i,width:o,height:s}),[t,r,n,i,o,s]);return y.createElement(r_.Provider,{value:d},u)},n_=()=>{var e=y.useContext(r_),t=rh();return e||(t?py(t):void 0)},iK=y.createContext(null),aK=()=>{var e=y.useContext(iK),t=Ee(VO);return e||t},oK=e=>{var t=e.value,r=e.formatter,n=Ut(e.children)?t:e.children;return typeof r=="function"?r(n):n},w0=e=>e!=null&&typeof e=="function",lK=(e,t)=>{var r=Lr(t-e),n=Math.min(Math.abs(t-e),360);return r*n},sK=(e,t,r,n,i)=>{var o=e.offset,s=e.className,u=i.cx,d=i.cy,f=i.innerRadius,h=i.outerRadius,m=i.startAngle,v=i.endAngle,x=i.clockWise,k=(f+h)/2,S=lK(m,v),E=S>=0?1:-1,P,j;switch(t){case"insideStart":P=m+E*o,j=x;break;case"insideEnd":P=v-E*o,j=!x;break;case"end":P=v+E*o,j=x;break;default:throw new Error("Unsupported position ".concat(t))}j=S<=0?j:!j;var _=Bt(u,d,k,P),O=Bt(u,d,k,P+(j?1:-1)*359),N="M".concat(_.x,",").concat(_.y,` - A`).concat(k,",").concat(k,",0,1,").concat(j?0:1,`, - `).concat(O.x,",").concat(O.y),C=Ut(e.id)?Xs("recharts-radial-line-"):e.id;return y.createElement("text",Gn({},n,{dominantBaseline:"central",className:Xe("recharts-radial-bar-label",s)}),y.createElement("defs",null,y.createElement("path",{id:C,d:N})),y.createElement("textPath",{xlinkHref:"#".concat(C)},r))},uK=(e,t,r)=>{var n=e.cx,i=e.cy,o=e.innerRadius,s=e.outerRadius,u=e.startAngle,d=e.endAngle,f=(u+d)/2;if(r==="outside"){var h=Bt(n,i,s+t,f),m=h.x,v=h.y;return{x:m,y:v,textAnchor:m>=n?"start":"end",verticalAnchor:"middle"}}if(r==="center")return{x:n,y:i,textAnchor:"middle",verticalAnchor:"middle"};if(r==="centerTop")return{x:n,y:i,textAnchor:"middle",verticalAnchor:"start"};if(r==="centerBottom")return{x:n,y:i,textAnchor:"middle",verticalAnchor:"end"};var x=(o+s)/2,k=Bt(n,i,x,f),S=k.x,E=k.y;return{x:S,y:E,textAnchor:"middle",verticalAnchor:"middle"}},Cd=e=>e!=null&&"cx"in e&&be(e.cx),cK={angle:0,offset:5,zIndex:nr.label,position:"middle",textBreakAll:!1};function dK(e){if(!Cd(e))return e;var t=e.cx,r=e.cy,n=e.outerRadius,i=n*2;return{x:t-n,y:r-n,width:i,upperWidth:i,lowerWidth:i,height:i}}function Li(e){var t=Hr(e,cK),r=t.viewBox,n=t.parentViewBox,i=t.position,o=t.value,s=t.children,u=t.content,d=t.className,f=d===void 0?"":d,h=t.textBreakAll,m=t.labelRef,v=aK(),x=n_(),k=i==="center"?x:v??x,S,E,P;r==null?S=k:Cd(r)?S=r:S=py(r);var j=dK(S);if(!S||Ut(o)&&Ut(s)&&!y.isValidElement(u)&&typeof u!="function")return null;var _=Bs(Bs({},t),{},{viewBox:S});if(y.isValidElement(u)){_.labelRef;var O=IE(_,XH);return y.cloneElement(u,O)}if(typeof u=="function"){_.content;var N=IE(_,ZH);if(E=y.createElement(u,N),y.isValidElement(E))return E}else E=oK(t);var C=Br(t);if(Cd(S)){if(i==="insideStart"||i==="insideEnd"||i==="end")return sK(t,i,E,C,S);P=uK(S,t.offset,t.position)}else{if(!j)return null;var R=QH({viewBox:j,position:i,offset:t.offset,parentViewBox:Cd(n)?void 0:n});P=Bs(Bs({x:R.x,y:R.y,textAnchor:R.horizontalAnchor,verticalAnchor:R.verticalAnchor},R.width!==void 0?{width:R.width}:{}),R.height!==void 0?{height:R.height}:{})}return y.createElement(di,{zIndex:t.zIndex},y.createElement(b0,Gn({ref:m,className:Xe("recharts-label",f)},C,P,{textAnchor:Zj(C.textAnchor)?C.textAnchor:P.textAnchor,breakAll:h}),E))}Li.displayName="Label";var fK=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?y.createElement(Li,Gn({key:"label-implicit"},n)):jn(e)?y.createElement(Li,Gn({key:"label-implicit",value:e},n)):y.isValidElement(e)?e.type===Li?y.cloneElement(e,Bs({key:"label-implicit"},n)):y.createElement(Li,Gn({key:"label-implicit",content:e},n)):w0(e)?y.createElement(Li,Gn({key:"label-implicit",content:e},n)):e&&typeof e=="object"?y.createElement(Li,Gn({},e,{key:"label-implicit"},n)):null};function hK(e){var t=e.label,r=e.labelRef,n=n_();return fK(t,n,r)||null}var pK=["valueAccessor"],mK=["dataKey","clockWise","id","textBreakAll","zIndex"];function xf(){return xf=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=Array.isArray(e.value)?e.value[e.value.length-1]:e.value;if(UH(t))return t},i_=y.createContext(void 0),yK=i_.Provider,a_=y.createContext(void 0);a_.Provider;function xK(){return y.useContext(i_)}function bK(){return y.useContext(a_)}function jd(e){var t=e.valueAccessor,r=t===void 0?gK:t,n=TE(e,pK),i=n.dataKey;n.clockWise;var o=n.id,s=n.textBreakAll,u=n.zIndex,d=TE(n,mK),f=xK(),h=bK(),m=f||h;return!m||!m.length?null:y.createElement(di,{zIndex:u??nr.label},y.createElement(Ur,{className:"recharts-label-list"},m.map((v,x)=>{var k,S=Ut(i)?r(v,x):Nt(v.payload,i),E=Ut(o)?{}:{id:"".concat(o,"-").concat(x)};return y.createElement(Li,xf({key:"label-".concat(x)},Br(v),d,E,{fill:(k=n.fill)!==null&&k!==void 0?k:v.fill,parentViewBox:v.parentViewBox,value:S,textBreakAll:s,viewBox:v.viewBox,index:x,zIndex:0}))})))}jd.displayName="LabelList";function wK(e){var t=e.label;return t?t===!0?y.createElement(jd,{key:"labelList-implicit"}):y.isValidElement(t)||w0(t)?y.createElement(jd,{key:"labelList-implicit",content:t}):typeof t=="object"?y.createElement(jd,xf({key:"labelList-implicit"},t,{type:String(t.type)})):null:null}function Eg(){return Eg=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=e.cx,r=e.cy,n=e.r,i=e.className,o=Xe("recharts-dot",i);return be(t)&&be(r)&&be(n)?y.createElement("circle",Eg({},on(e),iy(e),{className:o,cx:t,cy:r,r:n})):null},SK={radiusAxis:{},angleAxis:{}},l_=Jt({name:"polarAxis",initialState:SK,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),Ph=l_.actions;Ph.addRadiusAxis;Ph.removeRadiusAxis;Ph.addAngleAxis;Ph.removeAngleAxis;var kK=l_.reducer;function EK(e){return e&&typeof e=="object"&&"className"in e&&typeof e.className=="string"?e.className:""}var s_=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0;function DE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function RE(e){for(var t=1;t{n||(i.current===null?r(W7(t)):i.current!==t&&r(H7({prev:i.current,next:t})),i.current=t)},[t,r,n]),y.useLayoutEffect(()=>()=>{i.current&&(r(K7(i.current)),i.current=null)},[r]),null}function TK(e){var t=e.legendPayload,r=xt(),n=yr(),i=y.useRef(null);return y.useLayoutEffect(()=>{n||(i.current===null?r(gz(t)):i.current!==t&&r(yz({prev:i.current,next:t})),i.current=t)},[r,n,t]),y.useLayoutEffect(()=>()=>{i.current&&(r(xz(i.current)),i.current=null)},[r]),null}function DK(e,t){return zK(e)||LK(e,t)||$K(e,t)||RK()}function RK(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function $K(e,t){if(e){if(typeof e=="string")return $E(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?$E(e,t):void 0}}function $E(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r2&&arguments[2]!==void 0?arguments[2]:[],n=[];for(var i of r)n.push({status:"removed",prev:i});for(var o=0;oe[Math.floor(o*r)]);return k0(n,t)}function UK(e,t){var r=t.map((n,i)=>e[i]);return k0(r,t)}function WK(e,t){for(var r=new Map,n=0;n{var x=r(m,v);if(x!=null){var k=n.get(x);if(k!==void 0)return i.add(x),k}}),s=[];for(var u of n){var d=DK(u,2),f=d[0],h=d[1];i.has(f)||s.push(h)}return k0(o,t,s)}function Pg(e,t,r){return t==null?null:e==null?t.map(n=>({status:"added",next:n})):r===S0?BK(e,t):r===FK?UK(e,t):HK(e,t,r)}function c_(e,t){var r=y.useRef(e),n=y.useRef(t.current),i=y.useRef(!0);r.current!==e&&(r.current=e,n.current=t.current,i.current=!1);var o=y.useCallback(function(s,u){var d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(u===0){i.current=!0;return}u===1&&(n.current=s),u>0&&i.current&&d&&(t.current=s)},[t]);return{startValue:n.current,syncStepValue:o}}function KK(e,t){return YK(e)||GK(e,t)||qK(e,t)||VK()}function VK(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function qK(e,t){if(e){if(typeof e=="string")return LE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?LE(e,t):void 0}}function LE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{typeof e=="function"&&e(),o(!0)},[e]),u=y.useCallback(()=>{typeof t=="function"&&t(),o(!1)},[t]);return{isAnimating:i,handleAnimationStart:s,handleAnimationEnd:u}}function XK(e){var t,r=e.animationInput,n=e.animationIdPrefix,i=e.items,o=e.previousItemsRef,s=e.isAnimationActive,u=e.animationBegin,d=e.animationDuration,f=e.animationEasing,h=e.onAnimationStart,m=e.onAnimationEnd,v=e.animationInterpolateFn,x=e.animationMatchBy,k=e.shouldUpdatePreviousRef,S=e.children,E=e.layout,P=PO(r,n),j=c_(P,o),_=(t=j.startValue)!==null&&t!==void 0?t:null,O=Pg(_,i,x??S0);return y.createElement(EO,{animationId:P,begin:u,duration:d,isActive:s,easing:f,onAnimationEnd:m,onAnimationStart:h,key:P},N=>{var C=_==null,R=i==null?i:v(O,N,E),z=k?k(N):N>0;return j.syncStepValue(R,N,z),R==null?null:S(R,N,C)})}var sv;function ZK(e,t){return rV(e)||tV(e,t)||eV(e,t)||JK()}function JK(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function eV(e,t){if(e){if(typeof e=="string")return zE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?zE(e,t):void 0}}function zE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{var e=y.useState(()=>Xs("uid-")),t=ZK(e,1),r=t[0];return r},d_=(sv=Cf.useId)!==null&&sv!==void 0?sv:nV;function iV(e,t){var r=d_();return t||(e?"".concat(e,"-").concat(r):r)}var aV=y.createContext(void 0),oV=e=>{var t=e.id,r=e.type,n=e.children,i=iV("recharts-".concat(r),t);return y.createElement(aV.Provider,{value:i},n(i))},lV={cartesianItems:[],polarItems:[]},f_=Jt({name:"graphicalItems",initialState:lV,reducers:{addCartesianGraphicalItem:{reducer(e,t){e.cartesianItems.push(t.payload)},prepare:rt()},replaceCartesianGraphicalItem:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).cartesianItems.indexOf(n);o>-1&&(e.cartesianItems[o]=i)},prepare:rt()},removeCartesianGraphicalItem:{reducer(e,t){var r=zr(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},prepare:rt()},addPolarGraphicalItem:{reducer(e,t){e.polarItems.push(t.payload)},prepare:rt()},removePolarGraphicalItem:{reducer(e,t){var r=zr(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)},prepare:rt()},replacePolarGraphicalItem:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).polarItems.indexOf(n);o>-1&&(e.polarItems[o]=i)},prepare:rt()}}}),Dl=f_.actions,sV=Dl.addCartesianGraphicalItem,uV=Dl.replaceCartesianGraphicalItem,cV=Dl.removeCartesianGraphicalItem;Dl.addPolarGraphicalItem;Dl.removePolarGraphicalItem;Dl.replacePolarGraphicalItem;var dV=f_.reducer,fV=e=>{var t=xt(),r=y.useRef(null);return y.useLayoutEffect(()=>{r.current===null?t(sV(e)):r.current!==e&&t(uV({prev:r.current,next:e})),r.current=e},[t,e]),y.useLayoutEffect(()=>()=>{r.current&&(t(cV(r.current)),r.current=null)},[t]),null},hV=y.memo(fV),pV=["points"];function FE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function uv(e){for(var t=1;t{var P,j,_=uv(uv(uv({r:3},s),v),{},{index:E,cx:(P=S.x)!==null&&P!==void 0?P:void 0,cy:(j=S.y)!==null&&j!==void 0?j:void 0,dataKey:o,value:S.value,payload:S.payload,points:t});return y.createElement(bV,{key:"dot-".concat(E),option:r,dotProps:_,className:i})}),k={};return u&&d!=null&&(k.clipPath="url(#clipPath-".concat(m?"":"dots-").concat(d,")")),y.createElement(di,{zIndex:h},y.createElement(Ur,bf({className:n},k),x))}function BE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function UE(e){for(var t=1;t({top:e.top,bottom:e.bottom,left:e.left,right:e.right})),RV=H([DV,ai,oi],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),E0=()=>Ee(RV),$V=()=>Ee(W9);function WE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function cv(e){for(var t=1;t{var t=e.point,r=e.childIndex,n=e.mainColor,i=e.activeDot,o=e.dataKey,s=e.clipPath;if(i===!1||t.x==null||t.y==null)return null;var u={index:r,dataKey:o,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},d=cv(cv(cv({},u),Lf(i)),iy(i)),f;return y.isValidElement(i)?f=y.cloneElement(i,d):typeof i=="function"?f=i(d):f=y.createElement(o_,d),y.createElement(Ur,{className:"recharts-active-dot",clipPath:s},f)};function HE(e){var t=e.points,r=e.mainColor,n=e.activeDot,i=e.itemDataKey,o=e.clipPath,s=e.zIndex,u=s===void 0?nr.activeDot:s,d=Ee(cu),f=$V();if(t==null||f==null)return null;var h=t.find(m=>f.includes(m.payload));return Ut(h)?null:y.createElement(di,{zIndex:u},y.createElement(BV,{point:h,childIndex:Number(d),mainColor:r,dataKey:i,activeDot:n,clipPath:o}))}var UV=e=>{var t=e.chartData,r=xt(),n=yr();return y.useEffect(()=>n?()=>{}:(r(fE(t)),()=>{r(fE(void 0))}),[t,r,n]),null},KE={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},m_=Jt({name:"brush",initialState:KE,reducers:{setBrushSettings(e,t){return t.payload==null?KE:t.payload}}});m_.actions.setBrushSettings;var WV=m_.reducer;function HV(e){return(e%180+180)%180}var KV=function(t){var r=t.width,n=t.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=HV(i),s=o*Math.PI/180,u=Math.atan(n/r),d=s>u&&s{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=zr(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=zr(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=zr(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),Rl=v_.actions;Rl.addDot;Rl.removeDot;Rl.addArea;Rl.removeArea;Rl.addLine;Rl.removeLine;var qV=v_.reducer;function GV(e,t){return ZV(e)||XV(e,t)||QV(e,t)||YV()}function YV(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function QV(e,t){if(e){if(typeof e=="string")return VE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?VE(e,t):void 0}}function VE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=e.children,r=y.useState("".concat(Xs("recharts"),"-clip")),n=GV(r,1),i=n[0],o=E0();if(o==null)return null;var s=o.x,u=o.y,d=o.width,f=o.height;return y.createElement(JV.Provider,{value:i},y.createElement("defs",null,y.createElement("clipPath",{id:i},y.createElement("rect",{x:s,y:u,height:f,width:d}))),t)};function g_(e,t){if(t<1)return[];if(t===1)return e;for(var r=[],n=0;ne*i)return!1;var o=r();return e*(t-e*o/2-n)>=0&&e*(t+e*o/2-i)<=0}function nq(e,t){return g_(e,t+1)}function iq(e,t,r,n,i){for(var o=(n||[]).slice(),s=t.start,u=t.end,d=0,f=1,h=s,m=function(){var k=n==null?void 0:n[d];if(k===void 0)return{v:g_(n,f)};var S=d,E,P=()=>(E===void 0&&(E=r(k,S)),E),j=k.coordinate,_=d===0||fu(e,j,P,h,u);_||(d=0,h=s,f+=1),_&&(h=j+e*(P()/2+i),d+=f)},v;f<=o.length;)if(v=m(),v)return v.v;return[]}function aq(e,t,r,n,i){var o=(n||[]).slice(),s=o.length;if(s===0)return[];for(var u=t.start,d=t.end,f=1;f<=s;f++){for(var h=(s-1)%f,m=u,v=!0,x=function(){var O=n[S];if(O==null)return 0;var N=S,C,R=()=>(C===void 0&&(C=r(O,N)),C),z=O.coordinate,F=S===h||fu(e,z,R,m,d);if(!F)return v=!1,1;F&&(m=z+e*(R()/2+i))},k,S=h;S(S===void 0&&(S=r(x,v)),S);if(v===s-1){var P=e*(k.coordinate+e*E()/2-d);o[v]=k=Qt(Qt({},k),{},{tickCoord:P>0?k.coordinate-P*e:k.coordinate})}else o[v]=k=Qt(Qt({},k),{},{tickCoord:k.coordinate});if(k.tickCoord!=null){var j=fu(e,k.tickCoord,E,u,d);j&&(d=k.tickCoord-e*(E()/2+i),o[v]=Qt(Qt({},k),{},{isShow:!0}))}},h=s-1;h>=0;h--)f(h);return o}function cq(e,t,r,n,i,o){var s=(n||[]).slice(),u=s.length,d=t.start,f=t.end;if(o){var h=n[u-1];if(h!=null){var m=r(h,u-1),v=e*(h.coordinate+e*m/2-f);if(s[u-1]=h=Qt(Qt({},h),{},{tickCoord:v>0?h.coordinate-v*e:h.coordinate}),h.tickCoord!=null){var x=fu(e,h.tickCoord,()=>m,d,f);x&&(f=h.tickCoord-e*(m/2+i),s[u-1]=Qt(Qt({},h),{},{isShow:!0}))}}}for(var k=o?u-1:u,S=function(j){var _=s[j];if(_==null)return 1;var O=_,N,C=()=>(N===void 0&&(N=r(_,j)),N);if(j===0){var R=e*(O.coordinate-e*C()/2-d);s[j]=O=Qt(Qt({},O),{},{tickCoord:R<0?O.coordinate-R*e:O.coordinate})}else s[j]=O=Qt(Qt({},O),{},{tickCoord:O.coordinate});if(O.tickCoord!=null){var z=fu(e,O.tickCoord,C,d,f);z&&(d=O.tickCoord+e*(C()/2+i),s[j]=Qt(Qt({},O),{},{isShow:!0}))}},E=0;E{var R=typeof f=="function"?f(N.value,C):N.value;return k==="width"?tq(Ws(R,{fontSize:t,letterSpacing:r}),S,m):Ws(R,{fontSize:t,letterSpacing:r})[k]},P=i[0],j=i[1],_=i.length>=2&&P!=null&&j!=null?Lr(j.coordinate-P.coordinate):1,O=rq(o,_,k);return d==="equidistantPreserveStart"?iq(_,O,E,i,s):d==="equidistantPreserveEnd"?aq(_,O,E,i,s):(d==="preserveStart"||d==="preserveStartEnd"?x=cq(_,O,E,i,s,d==="preserveStartEnd"):x=uq(_,O,E,i,s),x.filter(N=>N.isShow))}var dq=e=>{var t=e.ticks,r=e.label,n=e.labelGapWithTick,i=n,o=e.tickSize,s=o===void 0?0:o,u=e.tickMargin,d=u===void 0?0:u,f=0;if(t){Array.from(t).forEach(x=>{if(x){var k=x.getBoundingClientRect();k.width>f&&(f=k.width)}});var h=r?r.getBoundingClientRect().width:0,m=s+d,v=f+m+h+(r?i:0);return Math.round(v)}return 0},fq={xAxis:{},yAxis:{}},y_=Jt({name:"renderedTicks",initialState:fq,reducers:{setRenderedTicks:(e,t)=>{var r=t.payload,n=r.axisType,i=r.axisId,o=r.ticks;e[n][i]=o},removeRenderedTicks:(e,t)=>{var r=t.payload,n=r.axisType,i=r.axisId;delete e[n][i]}}}),x_=y_.actions,hq=x_.setRenderedTicks,pq=x_.removeRenderedTicks,mq=y_.reducer,vq=["axisLine","width","height","className","hide","ticks","axisType","axisId"];function GE(e,t){return bq(e)||xq(e,t)||yq(e,t)||gq()}function gq(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function yq(e,t){if(e){if(typeof e=="string")return YE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?YE(e,t):void 0}}function YE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{if(n==null||r==null)return Pl;var o=t.map(s=>({value:s.value,coordinate:s.coordinate,offset:s.offset,index:s.index}));return i(hq({ticks:o,axisId:n,axisType:r})),()=>{i(pq({axisId:n,axisType:r}))}},[i,t,n,r]),null}var Iq=y.forwardRef((e,t)=>{var r=e.ticks,n=r===void 0?[]:r,i=e.tick,o=e.tickLine,s=e.stroke,u=e.tickFormatter,d=e.unit,f=e.padding,h=e.tickTextProps,m=e.orientation,v=e.mirror,x=e.x,k=e.y,S=e.width,E=e.height,P=e.tickSize,j=e.tickMargin,_=e.fontSize,O=e.letterSpacing,N=e.getTicksConfig,C=e.events,R=e.axisType,z=e.axisId,F=P0(ht(ht({},N),{},{ticks:n}),_,O),V=on(N),Q=Lf(i),B=Zj(V.textAnchor)?V.textAnchor:Cq(m,v),ue=jq(m,v),G={};typeof o=="object"&&(G=o);var le=ht(ht({},V),{},{fill:"none"},G),fe=F.map(ae=>ht({entry:ae},Oq(ae,x,k,S,E,m,P,v,j))),de=fe.map(ae=>{var X=ae.entry,M=ae.line;return y.createElement(Ur,{className:"recharts-cartesian-axis-tick",key:"tick-".concat(X.value,"-").concat(X.coordinate,"-").concat(X.tickCoord)},o&&y.createElement("line",Qa({},le,M,{className:Xe("recharts-cartesian-axis-tick-line",Za(o,"className"))})))}),Y=fe.map((ae,X)=>{var M,T,Z=ae.entry,se=ae.tick,te=ht(ht(ht(ht({verticalAnchor:ue},V),{},{textAnchor:B,stroke:"none",fill:s},se),{},{index:X,payload:Z,visibleTicksCount:F.length,tickFormatter:u,padding:f},h),{},{angle:(M=(T=h==null?void 0:h.angle)!==null&&T!==void 0?T:V.angle)!==null&&M!==void 0?M:0}),ce=ht(ht({},te),Q);return y.createElement(Ur,Qa({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(Z.value,"-").concat(Z.coordinate,"-").concat(Z.tickCoord)},R5(C,Z,X)),i&&y.createElement(_q,{option:i,tickProps:ce,value:"".concat(typeof u=="function"?u(Z.value,X):Z.value).concat(d||"")}))});return y.createElement("g",{className:"recharts-cartesian-axis-ticks recharts-".concat(R,"-ticks")},y.createElement(Nq,{ticks:F,axisId:z,axisType:R}),Y.length>0&&y.createElement(di,{zIndex:nr.label},y.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(R,"-tick-labels"),ref:t},Y)),de.length>0&&y.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(R,"-tick-lines")},de))}),Mq=y.forwardRef((e,t)=>{var r=e.axisLine,n=e.width,i=e.height,o=e.className,s=e.hide,u=e.ticks,d=e.axisType,f=e.axisId,h=wq(e,vq),m=y.useState(""),v=GE(m,2),x=v[0],k=v[1],S=y.useState(""),E=GE(S,2),P=E[0],j=E[1],_=y.useRef(null);y.useImperativeHandle(t,()=>({getCalculatedWidth:()=>{var N;return dq({ticks:_.current,label:(N=e.labelRef)===null||N===void 0?void 0:N.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin})}}));var O=y.useCallback(N=>{if(N){var C=N.getElementsByClassName("recharts-cartesian-axis-tick-value");_.current=C;var R=C[0];if(R){var z=window.getComputedStyle(R),F=z.fontSize,V=z.letterSpacing;(F!==x||V!==P)&&(k(F),j(V))}}},[x,P]);return s||n!=null&&n<=0||i!=null&&i<=0?null:y.createElement(di,{zIndex:e.zIndex},y.createElement(Ur,{className:Xe("recharts-cartesian-axis",o)},y.createElement(Aq,{x:e.x,y:e.y,width:n,height:i,orientation:e.orientation,mirror:e.mirror,axisLine:r,otherSvgProps:on(e)}),y.createElement(Iq,{ref:O,axisType:d,events:h,fontSize:x,getTicksConfig:e,height:e.height,letterSpacing:P,mirror:e.mirror,orientation:e.orientation,padding:e.padding,stroke:e.stroke,tick:e.tick,tickFormatter:e.tickFormatter,tickLine:e.tickLine,tickMargin:e.tickMargin,tickSize:e.tickSize,tickTextProps:e.tickTextProps,ticks:u,unit:e.unit,width:e.width,x:e.x,y:e.y,axisId:f}),y.createElement(nK,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},y.createElement(hK,{label:e.label,labelRef:e.labelRef}),e.children)))}),A0=y.forwardRef((e,t)=>{var r=Hr(e,ei);return y.createElement(Mq,Qa({},r,{ref:t}))});A0.displayName="CartesianAxis";var Tq=["x1","y1","x2","y2","key"],Dq=["offset"],Rq=["xAxisId","yAxisId"],$q=["xAxisId","yAxisId"];function XE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Xt(e){for(var t=1;t{var t=e.fill;if(!t||t==="none")return null;var r=e.fillOpacity,n=e.x,i=e.y,o=e.width,s=e.height,u=e.ry;return y.createElement("rect",{x:n,y:i,ry:u,width:o,height:s,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function b_(e){var t=e.option,r=e.lineItemProps,n;if(y.isValidElement(t))n=y.cloneElement(t,r);else if(typeof t=="function")n=t(r);else{var i,o=r.x1,s=r.y1,u=r.x2,d=r.y2,f=r.key,h=wf(r,Tq),m=(i=on(h))!==null&&i!==void 0?i:{};m.offset;var v=wf(m,Dq);n=y.createElement("line",Ca({},v,{x1:o,y1:s,x2:u,y2:d,fill:"none",key:f}))}return n}function Wq(e){var t=e.x,r=e.width,n=e.horizontal,i=n===void 0?!0:n,o=e.horizontalPoints;if(!i||!o||!o.length)return null;e.xAxisId,e.yAxisId;var s=wf(e,Rq),u=o.map((d,f)=>{var h=Xt(Xt({},s),{},{x1:t,y1:d,x2:t+r,y2:d,key:"line-".concat(f),index:f});return y.createElement(b_,{key:"line-".concat(f),option:i,lineItemProps:h})});return y.createElement("g",{className:"recharts-cartesian-grid-horizontal"},u)}function Hq(e){var t=e.y,r=e.height,n=e.vertical,i=n===void 0?!0:n,o=e.verticalPoints;if(!i||!o||!o.length)return null;e.xAxisId,e.yAxisId;var s=wf(e,$q),u=o.map((d,f)=>{var h=Xt(Xt({},s),{},{x1:d,y1:t,x2:d,y2:t+r,key:"line-".concat(f),index:f});return y.createElement(b_,{option:i,lineItemProps:h,key:"line-".concat(f)})});return y.createElement("g",{className:"recharts-cartesian-grid-vertical"},u)}function Kq(e){var t=e.horizontalFill,r=e.fillOpacity,n=e.x,i=e.y,o=e.width,s=e.height,u=e.horizontalPoints,d=e.horizontal,f=d===void 0?!0:d;if(!f||!t||!t.length||u==null)return null;var h=u.map(v=>Math.round(v+i-i)).sort((v,x)=>v-x);i!==h[0]&&h.unshift(0);var m=h.map((v,x)=>{var k=h[x+1],S=k==null,E=S?i+s-v:k-v;if(E<=0)return null;var P=x%t.length;return y.createElement("rect",{key:"react-".concat(x),y:v,x:n,height:E,width:o,stroke:"none",fill:t[P],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return y.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},m)}function Vq(e){var t=e.vertical,r=t===void 0?!0:t,n=e.verticalFill,i=e.fillOpacity,o=e.x,s=e.y,u=e.width,d=e.height,f=e.verticalPoints;if(!r||!n||!n.length)return null;var h=f.map(v=>Math.round(v+o-o)).sort((v,x)=>v-x);o!==h[0]&&h.unshift(0);var m=h.map((v,x)=>{var k=h[x+1],S=k==null,E=S?o+u-v:k-v;if(E<=0)return null;var P=x%n.length;return y.createElement("rect",{key:"react-".concat(x),x:v,y:s,width:E,height:d,stroke:"none",fill:n[P],fillOpacity:i,className:"recharts-cartesian-grid-bg"})});return y.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},m)}var qq=(e,t)=>{var r=e.xAxis,n=e.width,i=e.height,o=e.offset;return eO(P0(Xt(Xt(Xt({},ei),r),{},{ticks:tO(r),viewBox:{x:0,y:0,width:n,height:i}})),o.left,o.left+o.width,t)},Gq=(e,t)=>{var r=e.yAxis,n=e.width,i=e.height,o=e.offset;return eO(P0(Xt(Xt(Xt({},ei),r),{},{ticks:tO(r),viewBox:{x:0,y:0,width:n,height:i}})),o.top,o.top+o.height,t)},Yq={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:nr.grid};function w_(e){var t=uO(),r=cO(),n=sO(),i=Xt(Xt({},Hr(e,Yq)),{},{x:be(e.x)?e.x:n.left,y:be(e.y)?e.y:n.top,width:be(e.width)?e.width:n.width,height:be(e.height)?e.height:n.height}),o=i.xAxisId,s=i.yAxisId,u=i.x,d=i.y,f=i.width,h=i.height,m=i.syncWithTicks,v=i.horizontalValues,x=i.verticalValues,k=yr(),S=Ee(F=>Jk(F,"xAxis",o,k)),E=Ee(F=>Jk(F,"yAxis",s,k));if(!_n(f)||!_n(h)||!be(u)||!be(d))return null;var P=i.verticalCoordinatesGenerator||qq,j=i.horizontalCoordinatesGenerator||Gq,_=i.horizontalPoints,O=i.verticalPoints;if((!_||!_.length)&&typeof j=="function"){var N=v&&v.length,C=j({yAxis:E?Xt(Xt({},E),{},{ticks:N?v:E.ticks}):void 0,width:t??f,height:r??h,offset:n},N?!0:m);Vd(Array.isArray(C),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof C,"]")),Array.isArray(C)&&(_=C)}if((!O||!O.length)&&typeof P=="function"){var R=x&&x.length,z=P({xAxis:S?Xt(Xt({},S),{},{ticks:R?x:S.ticks}):void 0,width:t??f,height:r??h,offset:n},R?!0:m);Vd(Array.isArray(z),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof z,"]")),Array.isArray(z)&&(O=z)}return y.createElement(di,{zIndex:i.zIndex},y.createElement("g",{className:"recharts-cartesian-grid"},y.createElement(Uq,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),y.createElement(Kq,Ca({},i,{horizontalPoints:_})),y.createElement(Vq,Ca({},i,{verticalPoints:O})),y.createElement(Wq,Ca({},i,{offset:n,horizontalPoints:_,xAxis:S,yAxis:E})),y.createElement(Hq,Ca({},i,{offset:n,verticalPoints:O,xAxis:S,yAxis:E}))))}w_.displayName="CartesianGrid";var Qq={},S_=Jt({name:"errorBars",initialState:Qq,reducers:{addErrorBar:(e,t)=>{var r=t.payload,n=r.itemId,i=r.errorBar;e[n]||(e[n]=[]),e[n].push(i)},replaceErrorBar:(e,t)=>{var r=t.payload,n=r.itemId,i=r.prev,o=r.next;e[n]&&(e[n]=e[n].map(s=>s.dataKey===i.dataKey&&s.direction===i.direction?o:s))},removeErrorBar:(e,t)=>{var r=t.payload,n=r.itemId,i=r.errorBar;e[n]&&(e[n]=e[n].filter(o=>o.dataKey!==i.dataKey||o.direction!==i.direction))}}}),O0=S_.actions;O0.addErrorBar;O0.replaceErrorBar;O0.removeErrorBar;var Xq=S_.reducer;function k_(e,t){var r,n,i=Ee(f=>si(f,e)),o=Ee(f=>ui(f,t)),s=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:St.allowDataOverflow,u=(n=o==null?void 0:o.allowDataOverflow)!==null&&n!==void 0?n:kt.allowDataOverflow,d=s||u;return{needClip:d,needClipX:s,needClipY:u}}function Zq(e){var t=e.xAxisId,r=e.yAxisId,n=e.clipPathId,i=E0(),o=k_(t,r),s=o.needClipX,u=o.needClipY,d=o.needClip,f=Ee(_=>lj(_,t,!1)),h=Ee(_=>sj(_,r,!1));if(!d||!i)return null;var m=i.x,v=i.y,x=i.width,k=i.height,S=s&&f?Math.min(f[0],f[1]):m-x/2,E=u&&h?Math.min(h[0],h[1]):v-k/2,P=s&&f?Math.abs(f[1]-f[0]):x*2,j=u&&h?Math.abs(h[1]-h[0]):k*2;return y.createElement("clipPath",{id:"clipPath-".concat(n)},y.createElement("rect",{x:S,y:E,width:P,height:j}))}function Jq(e){var t=Lf(e),r=3,n=2;if(t!=null){var i=t.r,o=t.strokeWidth,s=Number(i),u=Number(o);return(Number.isNaN(s)||s<0)&&(s=r),(Number.isNaN(u)||u<0)&&(u=n),{r:s,strokeWidth:u}}return{r,strokeWidth:n}}function C0(e,t){var r,n;return(r=(n=e.graphicalItems.cartesianItems.find(i=>i.id===t))===null||n===void 0?void 0:n.xAxisId)!==null&&r!==void 0?r:h_}function j0(e,t){var r,n;return(r=(n=e.graphicalItems.cartesianItems.find(i=>i.id===t))===null||n===void 0?void 0:n.yAxisId)!==null&&r!==void 0?r:h_}var E_=(e,t,r)=>vj(e,"xAxis",C0(e,t),r),P_=(e,t,r)=>mj(e,"xAxis",C0(e,t),r),A_=(e,t,r)=>vj(e,"yAxis",j0(e,t),r),O_=(e,t,r)=>mj(e,"yAxis",j0(e,t),r),eG=H([ot,E_,A_,P_,O_],(e,t,r,n,i)=>Mn(e,"xAxis")?Kd(t,n,!1):Kd(r,i,!1)),tG=(e,t)=>t,C_=H([DC,tG],(e,t)=>e.filter(r=>r.type==="area").find(r=>r.id===t)),j_=e=>{var t=ot(e),r=Mn(t,"xAxis");return r?"yAxis":"xAxis"},rG=(e,t)=>{var r=j_(e);return r==="yAxis"?j0(e,t):C0(e,t)},nG=(e,t,r)=>KC(e,j_(e),rG(e,t),r),iG=H([C_,nG],(e,t)=>{var r;if(!(e==null||t==null)){var n=e.stackId,i=jy(e);if(!(n==null||i==null)){var o=(r=t[n])===null||r===void 0?void 0:r.stackedData,s=o==null?void 0:o.find(u=>u.key===i);if(s!=null)return s.map(u=>[u[0],u[1]])}}}),aG=H([ot,E_,A_,P_,O_,iG,j6,eG,C_,V6],(e,t,r,n,i,o,s,u,d,f)=>{var h=s.chartData,m=s.dataStartIndex,v=s.dataEndIndex;if(!(d==null||e!=="horizontal"&&e!=="vertical"||t==null||r==null||n==null||i==null||n.length===0||i.length===0||u==null)){var x=d.data,k;if(x&&x.length>0?k=x:k=h==null?void 0:h.slice(m,v+1),k!=null)return NG({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataStartIndex:m,areaSettings:d,stackedData:o,displayedData:k,chartBaseValue:f,bandSize:u})}}),oG=["animationElapsedTime","isAnimating","isEntrance","layout","isRange","stroke","connectNulls"],lG=["id","baseLine"];function Hs(){return Hs=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.y||0));return be(i)?h=Math.max(i,h):i&&Array.isArray(i)&&i.length&&(h=Math.max(...i.map(m=>m.y||0),h)),be(h)?y.createElement("rect",{x:um.x||0));return be(i)?h=Math.max(i,h):i&&Array.isArray(i)&&i.length&&(h=Math.max(...i.map(m=>m.x||0),h)),be(h)?y.createElement("rect",{x:0,y:ue==null?[]:t===1?e.flatMap(r=>r.status==="removed"?[]:[r.next]):e.flatMap(r=>r.status==="matched"?[wl(wl({},r.next),{},{x:Yn(r.prev.x,r.next.x,t),y:Yn(r.prev.y,r.next.y,t)})]:r.status==="added"?[r.next]:[]),N_={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",animationMatchBy:S0,animationInterpolateFn:xG,connectNulls:!1,dot:!1,fill:"#3182bd",fillOpacity:.6,hide:!1,isAnimationActive:"auto",legendType:"line",stroke:"#3182bd",strokeWidth:1,type:"linear",label:!1,shape:fG,xAxisId:0,yAxisId:0,zIndex:nr.area};function kf(e,t){return e&&e!=="none"?e:t}var bG=e=>{var t=e.dataKey,r=e.name,n=e.stroke,i=e.fill,o=e.legendType,s=e.hide;return[{inactive:s,dataKey:t,type:o,color:kf(n,i),value:rO(r,t),payload:e}]},wG=y.memo(e=>{var t=e.dataKey,r=e.data,n=e.stroke,i=e.strokeWidth,o=e.fill,s=e.name,u=e.hide,d=e.unit,f=e.tooltipType,h=e.id,m={dataDefinedOnItem:r,getPosition:Pl,settings:{stroke:n,strokeWidth:i,fill:o,dataKey:t,nameKey:void 0,name:rO(s,t),hide:u,type:f,color:kf(n,o),unit:d,graphicalItemId:h}};return y.createElement(MK,{tooltipEntrySettings:m})});function SG(e){var t=e.clipPathId,r=e.points,n=e.props,i=n.needClip,o=n.dot,s=n.dataKey,u=on(n);return y.createElement(SV,{points:r,dot:o,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:s,baseProps:u,needClip:i,clipPathId:t})}function kG(e){var t=e.showLabels,r=e.children,n=e.points,i=n.map(o=>{var s,u,d={x:(s=o.x)!==null&&s!==void 0?s:0,y:(u=o.y)!==null&&u!==void 0?u:0,width:0,lowerWidth:0,upperWidth:0,height:0};return wl(wl({},d),{},{value:o.value,payload:o.payload,parentViewBox:void 0,viewBox:d,fill:void 0})});return y.createElement(yK,{value:t?i:void 0},r)}function EG(e){var t=e.points,r=e.baseLine,n=e.needClip,i=e.clipPathId,o=e.props,s=e.animationElapsedTime,u=e.isAnimating,d=e.isEntrance,f=o.layout,h=o.type,m=o.stroke,v=o.connectNulls,x=o.isRange,k=o.shape,S=o.id,E=__(o,hG),P=Br(E),j=wl(wl({},P),{},{id:S,points:t,connectNulls:v,type:h,baseLine:r,layout:f,stroke:m,isRange:x,animationElapsedTime:s,isAnimating:u,isEntrance:d});return y.createElement(y.Fragment,null,(t==null?void 0:t.length)>1&&y.createElement(Ur,{clipPath:n?"url(#clipPath-".concat(i,")"):void 0},y.createElement(IK,{option:k,DefaultShape:N_.shape,shapeProps:j})),y.createElement(SG,{points:t,props:E,clipPathId:i}))}function PG(e,t,r){if(be(e)){var n=be(t)?t:void 0;return Yn(n,e,r)}if(Ut(e)||Cn(e)){var i=be(t)?t:void 0;return Yn(i,0,r)}return e}function AG(e){var t=e.needClip,r=e.clipPathId,n=e.props,i=e.previousPointsRef,o=e.previousBaselineRef,s=n.points,u=n.baseLine,d=n.isAnimationActive,f=n.animationBegin,h=n.animationDuration,m=n.animationEasing,v=n.animationMatchBy,x=n.animationInterpolateFn,k=y.useMemo(()=>({points:s,baseLine:u}),[s,u]),S=c_(k,o),E=my(),P=QK(n.onAnimationStart,n.onAnimationEnd),j=P.isAnimating,_=P.handleAnimationStart,O=P.handleAnimationEnd,N=S.startValue;if(E==null)return null;var C;return Array.isArray(u)&&Array.isArray(N)?C=Pg(N,u,v):Array.isArray(u)?C=Pg(null,u,v):C=null,y.createElement(XK,{animationInput:k,animationIdPrefix:"recharts-area-",items:s,previousItemsRef:i,isAnimationActive:d,animationBegin:f,animationDuration:h,animationEasing:m,onAnimationStart:_,onAnimationEnd:O,animationInterpolateFn:x,animationMatchBy:v,layout:E},(R,z,F)=>{var V;return z===1?V=u:Array.isArray(u)?V=x(C,z,E):V=F?u:PG(u,N,z),S.syncStepValue(V,z),y.createElement(kG,{showLabels:!j,points:s},n.children,y.createElement(EG,{points:R,baseLine:V,needClip:t,clipPathId:r,props:n,animationElapsedTime:z,isAnimating:j||z<1,isEntrance:F}),y.createElement(wK,{label:n.label}))})}function OG(e){var t=e.needClip,r=e.clipPathId,n=e.props,i=y.useRef(null),o=y.useRef();return y.createElement(AG,{needClip:t,clipPathId:r,props:n,previousPointsRef:i,previousBaselineRef:o})}class CG extends y.PureComponent{render(){var t=this.props,r=t.hide,n=t.dot,i=t.points,o=t.className,s=t.top,u=t.left,d=t.needClip,f=t.xAxisId,h=t.yAxisId,m=t.width,v=t.height,x=t.id,k=t.baseLine,S=t.zIndex;if(r)return null;var E=Xe("recharts-area",o),P=x,j=Jq(n),_=j.r,O=j.strokeWidth,N=s_(n),C=_*2+O,R=d?"url(#clipPath-".concat(N?"":"dots-").concat(P,")"):void 0;return y.createElement(di,{zIndex:S},y.createElement(Ur,{className:E},d&&y.createElement("defs",null,y.createElement(Zq,{clipPathId:P,xAxisId:f,yAxisId:h}),!N&&y.createElement("clipPath",{id:"clipPath-dots-".concat(P)},y.createElement("rect",{x:u-C/2,y:s-C/2,width:m+C,height:v+C}))),y.createElement(OG,{needClip:d,clipPathId:P,props:this.props})),y.createElement(HE,{points:i,mainColor:kf(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:R}),this.props.isRange&&Array.isArray(k)&&y.createElement(HE,{points:k,mainColor:kf(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:R}))}}function jG(e){var t,r=e.activeDot,n=e.animationBegin,i=e.animationDuration,o=e.animationEasing,s=e.connectNulls,u=e.dot,d=e.fill,f=e.fillOpacity,h=e.hide,m=e.isAnimationActive,v=e.legendType,x=e.stroke,k=e.xAxisId,S=e.yAxisId,E=__(e,pG),P=Al(),j=zj(),_=k_(k,S),O=_.needClip,N=yr(),C=(t=Ee(le=>aG(le,e.id,N)))!==null&&t!==void 0?t:{},R=C.points,z=C.isRange,F=C.baseLine,V=E0();if(P!=="horizontal"&&P!=="vertical"||V==null||j!=="AreaChart"&&j!=="ComposedChart")return null;var Q=V.height,B=V.width,ue=V.x,G=V.y;return!R||!R.length?null:y.createElement(CG,Sf({},E,{activeDot:r,animationBegin:n,animationDuration:i,animationEasing:o,baseLine:F,connectNulls:s,dot:u,fill:d,fillOpacity:f,height:Q,hide:h,layout:P,isAnimationActive:m,isRange:z,legendType:v,needClip:O,points:R,stroke:x,width:B,left:ue,top:G,xAxisId:k,yAxisId:S}))}var _G=(e,t,r,n,i)=>{var o=r??t;if(be(o))return o;var s=e==="horizontal"?i:n,u=s.scale.domain();if(s.type==="number"){var d=Math.max(u[0],u[1]),f=Math.min(u[0],u[1]);return o==="dataMin"?f:o==="dataMax"||d<0?d:Math.max(Math.min(u[0],u[1]),0)}return o==="dataMin"?u[0]:o==="dataMax"?u[1]:u[0]};function NG(e){var t=e.areaSettings,r=t.connectNulls,n=t.baseValue,i=t.dataKey,o=e.stackedData,s=e.layout,u=e.chartBaseValue,d=e.xAxis,f=e.yAxis,h=e.displayedData,m=e.dataStartIndex,v=e.xAxisTicks,x=e.yAxisTicks,k=e.bandSize,S=o&&o.length,E=_G(s,u,n,d,f),P=s==="horizontal",j=!1,_=h.map((N,C)=>{var R,z,F,V;if(S)V=o[m+C];else{var Q=Nt(N,i);Array.isArray(Q)?(V=Q,j=!0):V=[E,Q]}var B=(R=(z=V)===null||z===void 0?void 0:z[1])!==null&&R!==void 0?R:null,ue=B==null||S&&!r&&Nt(N,i)==null;if(P){var G;return{x:Gw({axis:d,ticks:v,bandSize:k,entry:N,index:C}),y:ue?null:(G=f.scale.map(B))!==null&&G!==void 0?G:null,value:V,payload:N}}return{x:ue?null:(F=d.scale.map(B))!==null&&F!==void 0?F:null,y:Gw({axis:f,ticks:x,bandSize:k,entry:N,index:C}),value:V,payload:N}}),O;return S||j?O=_.map(N=>{var C,R=Array.isArray(N.value)?N.value[0]:null;if(P){var z;return{x:N.x,y:R!=null&&N.y!=null&&(z=f.scale.map(R))!==null&&z!==void 0?z:null,payload:N.payload}}return{x:R!=null&&(C=d.scale.map(R))!==null&&C!==void 0?C:null,y:N.y,payload:N.payload}}):O=P?f.scale.map(E):d.scale.map(E),{points:_,baseLine:O??0,isRange:j}}function IG(e){var t=Hr(e,N_),r=yr();return y.createElement(oV,{id:t.id,type:"area"},n=>y.createElement(y.Fragment,null,y.createElement(TK,{legendPayload:bG(t)}),y.createElement(wG,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:n}),y.createElement(hV,{type:"area",id:n,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:mL(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:r,connectNulls:t.connectNulls}),y.createElement(jG,Sf({},t,{id:n}))))}var I_=y.memo(IG,oh);I_.displayName="Area";var MG=["domain","range"],TG=["domain","range"];function eP(e,t){if(e==null)return{};var r,n,i=DG(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{if(s!=null)return nP(nP({},o),{},{type:s})},[o,s]);return y.useLayoutEffect(()=>{u!=null&&(r.current===null?t(OV(u)):r.current!==u&&t(CV({prev:r.current,next:u})),r.current=u)},[u,t]),y.useLayoutEffect(()=>()=>{r.current&&(t(jV(r.current)),r.current=null)},[t]),null}var HG=e=>{var t=e.xAxisId,r=e.className,n=Ee(iO),i=yr(),o="xAxis",s=Ee(v=>pj(v,o,t,i)),u=Ee(v=>E7(v,t)),d=Ee(v=>_7(v,t)),f=Ee(v=>NC(v,t));if(u==null||d==null||f==null)return null;e.dangerouslySetInnerHTML,e.ticks,e.scale;var h=Og(e,$G);f.id,f.scale;var m=Og(f,LG);return y.createElement(A0,Ag({},h,m,{x:d.x,y:d.y,width:u.width,height:u.height,className:Xe("recharts-".concat(o," ").concat(o),r),viewBox:n,ticks:s,axisType:o,axisId:t}))},KG={allowDataOverflow:St.allowDataOverflow,allowDecimals:St.allowDecimals,allowDuplicatedCategory:St.allowDuplicatedCategory,angle:St.angle,axisLine:ei.axisLine,height:St.height,hide:!1,includeHidden:St.includeHidden,interval:St.interval,label:!1,minTickGap:St.minTickGap,mirror:St.mirror,orientation:St.orientation,padding:St.padding,reversed:St.reversed,scale:St.scale,tick:St.tick,tickCount:St.tickCount,tickLine:ei.tickLine,tickSize:ei.tickSize,type:St.type,niceTicks:St.niceTicks,xAxisId:0},VG=e=>{var t=Hr(e,KG);return y.createElement(y.Fragment,null,y.createElement(WG,{allowDataOverflow:t.allowDataOverflow,allowDecimals:t.allowDecimals,allowDuplicatedCategory:t.allowDuplicatedCategory,angle:t.angle,dataKey:t.dataKey,domain:t.domain,height:t.height,hide:t.hide,id:t.xAxisId,includeHidden:t.includeHidden,interval:t.interval,minTickGap:t.minTickGap,mirror:t.mirror,name:t.name,orientation:t.orientation,padding:t.padding,reversed:t.reversed,scale:t.scale,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,niceTicks:t.niceTicks}),y.createElement(HG,t))},Cg=y.memo(VG,M_);Cg.displayName="XAxis";var qG=["type"],GG=["dangerouslySetInnerHTML","ticks","scale"],YG=["id","scale"];function jg(){return jg=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if(s!=null)return aP(aP({},o),{},{type:s})},[s,o]);return y.useLayoutEffect(()=>{u!=null&&(r.current===null?t(_V(u)):r.current!==u&&t(NV({prev:r.current,next:u})),r.current=u)},[u,t]),y.useLayoutEffect(()=>()=>{r.current&&(t(IV(r.current)),r.current=null)},[t]),null}function tY(e){var t=e.yAxisId,r=e.className,n=e.width,i=e.label,o=y.useRef(null),s=y.useRef(null),u=Ee(iO),d=yr(),f=xt(),h="yAxis",m=Ee(P=>M7(P,t)),v=Ee(P=>I7(P,t)),x=Ee(P=>pj(P,h,t,d)),k=Ee(P=>IC(P,t));if(y.useLayoutEffect(()=>{if(!(n!=="auto"||!m||w0(i)||y.isValidElement(i)||k==null)){var P=o.current;if(P){var j=P.getCalculatedWidth();Math.round(m.width)!==Math.round(j)&&f(MV({id:t,width:j}))}}},[x,m,f,i,t,n,k]),m==null||v==null||k==null)return null;e.dangerouslySetInnerHTML,e.ticks,e.scale;var S=_g(e,GG);k.id,k.scale;var E=_g(k,YG);return y.createElement(A0,jg({},S,E,{ref:o,labelRef:s,x:v.x,y:v.y,tickTextProps:n==="auto"?{width:void 0}:{width:n},width:m.width,height:m.height,className:Xe("recharts-".concat(h," ").concat(h),r),viewBox:u,ticks:x,axisType:h,axisId:t}))}var rY={allowDataOverflow:kt.allowDataOverflow,allowDecimals:kt.allowDecimals,allowDuplicatedCategory:kt.allowDuplicatedCategory,angle:kt.angle,axisLine:ei.axisLine,hide:!1,includeHidden:kt.includeHidden,interval:kt.interval,label:!1,minTickGap:kt.minTickGap,mirror:kt.mirror,orientation:kt.orientation,padding:kt.padding,reversed:kt.reversed,scale:kt.scale,tick:kt.tick,tickCount:kt.tickCount,tickLine:ei.tickLine,tickSize:ei.tickSize,type:kt.type,niceTicks:kt.niceTicks,width:kt.width,yAxisId:0},nY=e=>{var t=Hr(e,rY);return y.createElement(y.Fragment,null,y.createElement(eY,{interval:t.interval,id:t.yAxisId,scale:t.scale,type:t.type,domain:t.domain,allowDataOverflow:t.allowDataOverflow,dataKey:t.dataKey,allowDuplicatedCategory:t.allowDuplicatedCategory,allowDecimals:t.allowDecimals,tickCount:t.tickCount,padding:t.padding,includeHidden:t.includeHidden,reversed:t.reversed,ticks:t.ticks,width:t.width,orientation:t.orientation,mirror:t.mirror,hide:t.hide,unit:t.unit,name:t.name,angle:t.angle,minTickGap:t.minTickGap,tick:t.tick,tickFormatter:t.tickFormatter,niceTicks:t.niceTicks}),y.createElement(tY,t))},T_=y.memo(nY,M_);T_.displayName="YAxis";var iY=(e,t)=>t,_0=H([iY,ot,VO,Mt,Mj,ci,tW,Ht],sW);function aY(e){return"getBBox"in e.currentTarget&&typeof e.currentTarget.getBBox=="function"}function N0(e){var t=e.currentTarget.getBoundingClientRect(),r,n;if(aY(e)){var i=e.currentTarget.getBBox();r=i.width>0?t.width/i.width:1,n=i.height>0?t.height/i.height:1}else{var o=e.currentTarget;r=o.offsetWidth>0?t.width/o.offsetWidth:1,n=o.offsetHeight>0?t.height/o.offsetHeight:1}var s=(u,d)=>({relativeX:Math.round((u-t.left)/r),relativeY:Math.round((d-t.top)/n)});return"touches"in e?Array.from(e.touches).map(u=>s(u.clientX,u.clientY)):s(e.clientX,e.clientY)}var D_=Cr("mouseClick"),R_=Eu();R_.startListening({actionCreator:D_,effect:(e,t)=>{var r=e.payload,n=_0(t.getState(),N0(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(G7({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var Ng=Cr("mouseMove"),$_=Eu(),Lo=null,ga=null,dv=null;$_.startListening({actionCreator:Ng,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=n.eventSettings,o=i.throttleDelay,s=i.throttledEvents,u=s==="all"||(s==null?void 0:s.includes("mousemove"));Lo!==null&&(cancelAnimationFrame(Lo),Lo=null),ga!==null&&(typeof o!="number"||!u)&&(clearTimeout(ga),ga=null),dv=N0(r);var d=()=>{var f=t.getState(),h=$u(f,f.tooltip.settings.shared);if(!dv){Lo=null,ga=null;return}if(h==="axis"){var m=_0(f,dv);(m==null?void 0:m.activeIndex)!=null?t.dispatch(kj({activeIndex:m.activeIndex,activeDataKey:void 0,activeCoordinate:m.activeCoordinate})):t.dispatch(Sj())}Lo=null,ga=null};if(!u){d();return}o==="raf"?Lo=requestAnimationFrame(d):typeof o=="number"&&ga===null&&(ga=setTimeout(d,o))}});function oY(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":e==="children"&&typeof t=="object"&&t!==null?"<>":t}var oP={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index",baseValue:void 0,reverseStackOrder:!1},L_=Jt({name:"rootProps",initialState:oP,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:oP.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className,e.baseValue=t.payload.baseValue,e.reverseStackOrder=t.payload.reverseStackOrder}}}),lY=L_.reducer,sY=L_.actions.updateOptions,uY=null,cY={updatePolarOptions:(e,t)=>e===null?t.payload:(e.startAngle=t.payload.startAngle,e.endAngle=t.payload.endAngle,e.cx=t.payload.cx,e.cy=t.payload.cy,e.innerRadius=t.payload.innerRadius,e.outerRadius=t.payload.outerRadius,e)},z_=Jt({name:"polarOptions",initialState:uY,reducers:cY});z_.actions.updatePolarOptions;var dY=z_.reducer,F_=Cr("keyDown"),B_=Cr("focus"),U_=Cr("blur"),Ah=Eu(),zo=null,ya=null,gd=null;Ah.startListening({actionCreator:F_,effect:(e,t)=>{gd=e.payload,zo!==null&&(cancelAnimationFrame(zo),zo=null);var r=t.getState(),n=r.eventSettings,i=n.throttleDelay,o=n.throttledEvents,s=o==="all"||o.includes("keydown");ya!==null&&(typeof i!="number"||!s)&&(clearTimeout(ya),ya=null);var u=()=>{try{var d=t.getState(),f=d.rootProps.accessibilityLayer!==!1;if(!f)return;var h=d.tooltip.keyboardInteraction,m=gd;if(m!=="ArrowRight"&&m!=="ArrowLeft"&&m!=="Enter")return;var v=Us(h,Ya(d),xl(d),bl(d)),x=v==null?-1:Number(v),k=!Number.isFinite(x)||x<0,S=ci(d),E=Ya(d),P=$u(d,d.tooltip.settings.shared);if(m==="Enter"){if(k)return;var j=gf(d,P,"hover",String(h.index));t.dispatch(vf({active:!h.active,activeIndex:h.index,activeCoordinate:j}));return}var _=L7(d),O=_==="left-to-right"?1:-1,N=m==="ArrowRight"?1:-1,C;if(k){var R=xl(d),z=bl(d),F=N*O,V=le=>({active:!1,index:String(le),dataKey:void 0,graphicalItemId:void 0,coordinate:void 0});if(C=-1,F>0){for(var Q=0;Q=0;B--)if(Us(V(B),E,R,z)!=null){C=B;break}if(C<0)return}else{C=x+N*O;var ue=(S==null?void 0:S.length)||E.length;if(ue===0||C>=ue||C<0)return}var G=gf(d,P,"hover",String(C));t.dispatch(vf({active:!0,activeIndex:C.toString(),activeCoordinate:G}))}finally{zo=null,ya=null}};if(!s){u();return}i==="raf"?zo=requestAnimationFrame(u):typeof i=="number"&&ya===null&&(u(),gd=null,ya=setTimeout(()=>{gd?u():(ya=null,zo=null)},i))}});Ah.startListening({actionCreator:B_,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var i=r.tooltip.keyboardInteraction;if(!i.active&&i.index==null){var o="0",s=$u(r,r.tooltip.settings.shared),u=gf(r,s,"hover",String(o));t.dispatch(vf({active:!0,activeIndex:o,activeCoordinate:u}))}}}});Ah.startListening({actionCreator:U_,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var i=r.tooltip.keyboardInteraction;i.active&&t.dispatch(vf({active:!1,activeIndex:i.index,activeCoordinate:i.coordinate}))}}});function W_(e){e.persist();var t=e.currentTarget;return new Proxy(e,{get:(r,n)=>{if(n==="currentTarget")return t;var i=Reflect.get(r,n);return typeof i=="function"?i.bind(r):i}})}var Rr=Cr("externalEvent"),H_=Eu(),yd=new Map,Rs=new Map,fv=new Map;H_.startListening({actionCreator:Rr,effect:(e,t)=>{var r=e.payload,n=r.handler,i=r.reactEvent;if(n!=null){var o=i.type,s=W_(i);fv.set(o,{handler:n,reactEvent:s});var u=yd.get(o);u!==void 0&&(cancelAnimationFrame(u),yd.delete(o));var d=t.getState(),f=d.eventSettings,h=f.throttleDelay,m=f.throttledEvents,v=m,x=v==="all"||(v==null?void 0:v.includes(o)),k=Rs.get(o);k!==void 0&&(typeof h!="number"||!x)&&(clearTimeout(k),Rs.delete(o));var S=()=>{var j=fv.get(o);try{if(!j)return;var _=j.handler,O=j.reactEvent,N=t.getState(),C={activeCoordinate:F9(N),activeDataKey:$9(N),activeIndex:cu(N),activeLabel:Rj(N),activeTooltipIndex:cu(N),isTooltipActive:B9(N)};_&&_(C,O)}finally{yd.delete(o),Rs.delete(o),fv.delete(o)}};if(!x){S();return}if(h==="raf"){var E=requestAnimationFrame(S);yd.set(o,E)}else if(typeof h=="number"){if(!Rs.has(o)){S();var P=setTimeout(S,h);Rs.set(o,P)}}else S()}}});var fY=H([Tl],e=>e.tooltipItemPayloads),hY=H([fY,(e,t)=>t,(e,t,r)=>r],(e,t,r)=>{if(t!=null){var n=e.find(o=>o.settings.graphicalItemId===r);if(n!=null){var i=n.getPosition;if(i!=null)return i(t)}}}),K_=Cr("touchMove"),V_=Eu(),xa=null,Ti=null,lP=null,$s=null;V_.startListening({actionCreator:K_,effect:(e,t)=>{var r=e.payload;if(!(r.touches==null||r.touches.length===0)){$s=W_(r);var n=t.getState(),i=n.eventSettings,o=i.throttleDelay,s=i.throttledEvents,u=s==="all"||s.includes("touchmove");xa!==null&&(cancelAnimationFrame(xa),xa=null),Ti!==null&&(typeof o!="number"||!u)&&(clearTimeout(Ti),Ti=null),lP=Array.from(r.touches).map(f=>N0({clientX:f.clientX,clientY:f.clientY,currentTarget:r.currentTarget}));var d=()=>{if($s!=null){var f=t.getState(),h=$u(f,f.tooltip.settings.shared);if(h==="axis"){var m,v=(m=lP)===null||m===void 0?void 0:m[0];if(v==null){xa=null,Ti=null;return}var x=_0(f,v);(x==null?void 0:x.activeIndex)!=null&&t.dispatch(kj({activeIndex:x.activeIndex,activeDataKey:void 0,activeCoordinate:x.activeCoordinate}))}else if(h==="item"){var k,S=$s.touches[0];if(document.elementFromPoint==null||S==null)return;var E=document.elementFromPoint(S.clientX,S.clientY);if(!E||!E.getAttribute)return;var P=E.getAttribute(SL),j=(k=E.getAttribute(kL))!==null&&k!==void 0?k:void 0,_=to(f).find(C=>C.id===j);if(P==null||_==null||j==null)return;var O=_.dataKey,N=hY(f,P,j);t.dispatch(q7({activeDataKey:O,activeIndex:P,activeCoordinate:N,activeGraphicalItemId:j}))}xa=null,Ti=null}};if(!u){d();return}o==="raf"?xa=requestAnimationFrame(d):typeof o=="number"&&Ti===null&&(d(),$s=null,Ti=setTimeout(()=>{$s?d():(Ti=null,xa=null)},o))}}});var q_={throttleDelay:"raf",throttledEvents:["mousemove","touchmove","pointermove","scroll","wheel"]},G_=Jt({name:"eventSettings",initialState:q_,reducers:{setEventSettings:(e,t)=>{t.payload.throttleDelay!=null&&(e.throttleDelay=t.payload.throttleDelay),t.payload.throttledEvents!=null&&(e.throttledEvents=t.payload.throttledEvents)}}}),pY=G_.actions.setEventSettings,mY=G_.reducer,vY=P2({brush:WV,cartesianAxis:TV,chartData:zW,errorBars:Xq,eventSettings:mY,graphicalItems:dV,layout:oL,legend:bz,options:TW,polarAxis:kK,polarOptions:dY,referenceElements:qV,renderedTicks:mq,rootProps:lY,tooltip:Y7,zIndex:wW}),gY=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return N4({reducer:vY,preloadedState:t,middleware:n=>{var i;return n({serializableCheck:!1,immutableCheck:!["commonjs","es6","production"].includes((i="es6")!==null&&i!==void 0?i:"")}).concat([R_.middleware,$_.middleware,Ah.middleware,H_.middleware,V_.middleware])},enhancers:n=>{var i=n;return typeof n=="function"&&(i=n()),i.concat(F2({type:"raf"}))},devTools:{serialize:{replacer:oY},name:"recharts-".concat(r)}})};function yY(e){var t=e.preloadedState,r=e.children,n=e.reduxStoreName,i=yr(),o=y.useRef(null);if(i)return r;o.current==null&&(o.current=gY(t,n));var s=oy;return y.createElement(Rz,{context:s,store:o.current},r)}function xY(e){var t=e.layout,r=e.margin,n=xt(),i=yr();return y.useEffect(()=>{i||(n(nL(t)),n(rL(r)))},[n,i,t,r]),null}var bY=y.memo(xY,oh);function wY(e){var t=xt();return y.useEffect(()=>{t(sY(e))},[t,e]),null}var SY=e=>{var t=xt();return y.useEffect(()=>{t(pY(e))},[t,e]),null},kY=y.memo(SY,oh);function sP(e){var t=e.zIndex,r=e.isPanorama,n=y.useRef(null),i=xt();return y.useLayoutEffect(()=>(n.current&&i(xW({zIndex:t,element:n.current,isPanorama:r})),()=>{i(bW({zIndex:t,isPanorama:r}))}),[i,t,r]),y.createElement("g",{tabIndex:-1,ref:n,className:"recharts-zIndex-layer_".concat(t)})}function uP(e){var t=e.children,r=e.isPanorama,n=Ee(cW);if(!n||n.length===0)return t;var i=n.filter(s=>s<0),o=n.filter(s=>s>0);return y.createElement(y.Fragment,null,i.map(s=>y.createElement(sP,{key:s,zIndex:s,isPanorama:r})),t,o.map(s=>y.createElement(sP,{key:s,zIndex:s,isPanorama:r})))}var EY=["children"];function PY(e,t){if(e==null)return{};var r,n,i=AY(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{var r=uO(),n=cO(),i=bO();if(!_n(r)||!_n(n))return null;var o=e.children,s=e.otherAttributes,u=e.title,d=e.desc,f,h;return s!=null&&(typeof s.tabIndex=="number"?f=s.tabIndex:f=i?0:void 0,typeof s.role=="string"?h=s.role:h=i?"application":void 0),y.createElement(WA,Ef({},s,{title:u,desc:d,role:h,tabIndex:f,width:r,height:n,style:OY,ref:t}),o)}),jY=e=>{var t=e.children,r=Ee(th);if(!r)return null;var n=r.width,i=r.height,o=r.y,s=r.x;return y.createElement(WA,{width:n,height:i,x:s,y:o},t)},cP=y.forwardRef((e,t)=>{var r=e.children,n=PY(e,EY),i=yr();return i?y.createElement(jY,null,y.createElement(uP,{isPanorama:!0},r)):y.createElement(CY,Ef({ref:t},n),y.createElement(uP,{isPanorama:!1},r))});function _Y(e,t){return TY(e)||MY(e,t)||IY(e,t)||NY()}function NY(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function IY(e,t){if(e){if(typeof e=="string")return dP(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?dP(e,t):void 0}}function dP(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{if(n!=null){var s=n.getBoundingClientRect(),u=s.width/n.offsetWidth;Fe(u)&&u!==o&&e(aL(u))}},[n,e,o]),i}function fP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function RY(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r(GW(),null);function Af(e){if(typeof e=="number")return e;if(typeof e=="string"){var t=parseFloat(e);if(!Number.isNaN(t))return t}return 0}var KY=y.forwardRef((e,t)=>{var r,n,i=y.useRef(null),o=y.useState({containerWidth:Af((r=e.style)===null||r===void 0?void 0:r.width),containerHeight:Af((n=e.style)===null||n===void 0?void 0:n.height)}),s=Pf(o,2),u=s[0],d=s[1],f=y.useCallback((m,v)=>{d(x=>{var k=Math.round(m),S=Math.round(v);return x.containerWidth===k&&x.containerHeight===S?x:{containerWidth:k,containerHeight:S}})},[]),h=y.useCallback(m=>{if(typeof t=="function"&&t(m),i.current!=null&&(i.current.disconnect(),i.current=null),m!=null&&typeof ResizeObserver<"u"){var v=m.getBoundingClientRect(),x=v.width,k=v.height;f(x,k);var S=P=>{var j=P[0];if(j!=null){var _=j.contentRect,O=_.width,N=_.height;f(O,N)}},E=new ResizeObserver(S);E.observe(m),i.current=E}},[t,f]);return y.useEffect(()=>()=>{var m=i.current;m!=null&&m.disconnect()},[f]),y.createElement(y.Fragment,null,y.createElement(Au,{width:u.containerWidth,height:u.containerHeight}),y.createElement("div",Zi({ref:h},e)))}),VY=y.forwardRef((e,t)=>{var r=e.width,n=e.height,i=y.useState({containerWidth:Af(r),containerHeight:Af(n)}),o=Pf(i,2),s=o[0],u=o[1],d=y.useCallback((h,m)=>{u(v=>{var x=Math.round(h),k=Math.round(m);return v.containerWidth===x&&v.containerHeight===k?v:{containerWidth:x,containerHeight:k}})},[]),f=y.useCallback(h=>{if(typeof t=="function"&&t(h),h!=null){var m=h.getBoundingClientRect(),v=m.width,x=m.height;d(v,x)}},[t,d]);return y.createElement(y.Fragment,null,y.createElement(Au,{width:s.containerWidth,height:s.containerHeight}),y.createElement("div",Zi({ref:f},e)))}),qY=y.forwardRef((e,t)=>{var r=e.width,n=e.height;return y.createElement(y.Fragment,null,y.createElement(Au,{width:r,height:n}),y.createElement("div",Zi({ref:t},e)))}),GY=y.forwardRef((e,t)=>{var r=e.width,n=e.height;return typeof r=="string"||typeof n=="string"?y.createElement(VY,Zi({},e,{ref:t})):typeof r=="number"&&typeof n=="number"?y.createElement(qY,Zi({},e,{width:r,height:n,ref:t})):y.createElement(y.Fragment,null,y.createElement(Au,{width:r,height:n}),y.createElement("div",Zi({ref:t},e)))});function YY(e){return e?KY:GY}var QY=y.forwardRef((e,t)=>{var r=e.children,n=e.className,i=e.height,o=e.onClick,s=e.onContextMenu,u=e.onDoubleClick,d=e.onMouseDown,f=e.onMouseEnter,h=e.onMouseLeave,m=e.onMouseMove,v=e.onMouseUp,x=e.onTouchEnd,k=e.onTouchMove,S=e.onTouchStart,E=e.style,P=e.width,j=e.responsive,_=e.dispatchTouchEvents,O=_===void 0?!0:_,N=y.useRef(null),C=xt(),R=y.useState(null),z=Pf(R,2),F=z[0],V=z[1],Q=y.useState(null),B=Pf(Q,2),ue=B[0],G=B[1],le=DY(),fe=hy(),de=(fe==null?void 0:fe.width)>0?fe.width:P,Y=(fe==null?void 0:fe.height)>0?fe.height:i,ae=y.useCallback(Pe=>{le(Pe),typeof t=="function"&&t(Pe),V(Pe),G(Pe),Pe!=null&&(N.current=Pe)},[le,t,V,G]),X=y.useCallback(Pe=>{C(D_(Pe)),C(Rr({handler:o,reactEvent:Pe}))},[C,o]),M=y.useCallback(Pe=>{C(Ng(Pe)),C(Rr({handler:f,reactEvent:Pe}))},[C,f]),T=y.useCallback(Pe=>{C(Sj()),C(Rr({handler:h,reactEvent:Pe}))},[C,h]),Z=y.useCallback(Pe=>{C(Ng(Pe)),C(Rr({handler:m,reactEvent:Pe}))},[C,m]),se=y.useCallback(()=>{C(B_())},[C]),te=y.useCallback(()=>{C(U_())},[C]),ce=y.useCallback(Pe=>{C(F_(Pe.key))},[C]),ge=y.useCallback(Pe=>{C(Rr({handler:s,reactEvent:Pe}))},[C,s]),_e=y.useCallback(Pe=>{C(Rr({handler:u,reactEvent:Pe}))},[C,u]),J=y.useCallback(Pe=>{C(Rr({handler:d,reactEvent:Pe}))},[C,d]),we=y.useCallback(Pe=>{C(Rr({handler:v,reactEvent:Pe}))},[C,v]),Ae=y.useCallback(Pe=>{C(Rr({handler:S,reactEvent:Pe}))},[C,S]),ne=y.useCallback(Pe=>{O&&C(K_(Pe)),C(Rr({handler:k,reactEvent:Pe}))},[C,O,k]),lt=y.useCallback(Pe=>{C(Rr({handler:x,reactEvent:Pe}))},[C,x]),$e=YY(j);return y.createElement(Hj.Provider,{value:F},y.createElement(c5.Provider,{value:ue},y.createElement($e,{width:de??(E==null?void 0:E.width),height:Y??(E==null?void 0:E.height),className:Xe("recharts-wrapper",n),style:RY({position:"relative",cursor:"default",width:de,height:Y},E),onClick:X,onContextMenu:ge,onDoubleClick:_e,onFocus:se,onBlur:te,onKeyDown:ce,onMouseDown:J,onMouseEnter:M,onMouseLeave:T,onMouseMove:Z,onMouseUp:we,onTouchEnd:lt,onTouchMove:ne,onTouchStart:Ae,ref:ae},y.createElement(HY,null),r)))}),XY=["width","height","responsive","children","className","style","compact","title","desc"];function ZY(e,t){if(e==null)return{};var r,n,i=JY(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{var r=e.width,n=e.height,i=e.responsive,o=e.children,s=e.className,u=e.style,d=e.compact,f=e.title,h=e.desc,m=ZY(e,XY),v=on(m);return d?y.createElement(y.Fragment,null,y.createElement(Au,{width:r,height:n}),y.createElement(cP,{otherAttributes:v,title:f,desc:h},o)):y.createElement(QY,{className:s,style:u,width:r,height:n,responsive:i??!1,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},y.createElement(cP,{otherAttributes:v,title:f,desc:h,ref:t},y.createElement(eq,null,o)))});function Ig(){return Ig=Object.assign?Object.assign.bind():function(e){for(var t=1;ty.createElement(lQ,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:sQ,tooltipPayloadSearcher:IW,categoricalChartProps:e,ref:t}));const cQ="rgba(130,130,150,0.14)",hv="rgba(130,130,150,0.85)";function dQ(e){if(e<=0)return 10;const t=Math.pow(10,Math.floor(Math.log10(e))),r=e/t;return(r<=1?1:r<=2?2:r<=5?5:10)*t}function Y_(e,t){return`${t==="%"?Math.round(e):e>=1e3?`${(e/1e3).toFixed(1)}k`:Math.round(e).toString()}${t}`}function fQ({active:e,payload:t,unit:r,label:n}){return!e||!(t!=null&&t.length)?null:b.jsxs("div",{className:"rounded-lg border border-border/70 bg-popover/95 px-3 py-2 shadow-xl backdrop-blur",children:[Number.isFinite(n)&&b.jsx("div",{className:"mb-1 border-b border-border/40 pb-1 font-mono text-[10px] text-muted-foreground/80",children:new Date(n).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),b.jsx("div",{className:"space-y-1",children:t.map(i=>b.jsxs("div",{className:"flex items-center gap-2 text-[11px] font-mono",children:[b.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:i.color}}),b.jsx("span",{className:"uppercase tracking-wider text-muted-foreground",children:i.name}),b.jsx("span",{className:"ml-auto pl-3 font-bold tabular-nums text-foreground",children:Y_(i.value,r)})]},i.dataKey))})]})}function Q_({data:e,series:t,unit:r="%",yMode:n="percent",height:i=176,showTime:o=!1}){var h,m;const s=e.reduce((v,x)=>t.reduce((k,S)=>Math.max(k,Number(x[S.key])||0),v),0),u=n==="percent"?Math.min(100,Math.max(25,Math.ceil(s*1.2/25)*25)):Math.max(dQ(s*1.15),10),d=e.length>1?Number((h=e[e.length-1])==null?void 0:h.t)-Number((m=e[0])==null?void 0:m.t):0,f=v=>new Date(v).toLocaleTimeString("de-DE",d<=10*6e4?{hour:"2-digit",minute:"2-digit",second:"2-digit"}:{hour:"2-digit",minute:"2-digit"});return b.jsx("div",{style:{height:i},className:"w-full",children:b.jsx(rz,{width:"100%",height:"100%",children:b.jsxs(uQ,{data:e,margin:{top:8,right:6,bottom:0,left:-12},children:[b.jsx("defs",{children:t.map(v=>b.jsxs("linearGradient",{id:`grad-${v.key}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[b.jsx("stop",{offset:"0%",stopColor:v.color,stopOpacity:.22}),b.jsx("stop",{offset:"100%",stopColor:v.color,stopOpacity:0})]},v.key))}),b.jsx(w_,{vertical:!1,stroke:cQ}),o?b.jsx(Cg,{dataKey:"t",type:"number",domain:["dataMin","dataMax"],tickFormatter:f,tickCount:5,minTickGap:40,interval:"preserveStartEnd",axisLine:!1,tickLine:!1,tick:{fontSize:10,fill:hv},height:18}):b.jsx(Cg,{dataKey:"t",hide:!0}),b.jsx(T_,{domain:[0,u],ticks:[0,u/2,u],tickFormatter:v=>Y_(v,r),width:42,axisLine:!1,tickLine:!1,tick:{fontSize:10,fill:hv}}),b.jsx(lH,{content:b.jsx(fQ,{unit:r}),cursor:{stroke:hv,strokeOpacity:.4,strokeDasharray:"3 3"}}),t.map(v=>b.jsx(I_,{type:"monotone",dataKey:v.key,name:v.label,stroke:v.color,strokeWidth:2,fill:`url(#grad-${v.key})`,dot:!1,activeDot:{r:3,strokeWidth:0},isAnimationActive:!1,connectNulls:!0},v.key))]})})})}const X_={"1h":60,"24h":1440},mP={live:"Live","1h":"1 h","24h":"24 h"};function Z_({value:e,onChange:t}){return b.jsx("div",{className:"flex rounded-lg border border-border/40 bg-background/30 p-0.5",children:Object.keys(mP).map(r=>b.jsx("button",{onClick:()=>t(r),className:Re("rounded-md px-2 py-0.5 text-[9px] font-bold uppercase tracking-wide transition-all cursor-pointer",e===r?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:mP[r]},r))})}const hQ=[{key:"cpu",label:"CPU",color:"#2dd4bf"},{key:"ram",label:"RAM",color:"#38bdf8"},{key:"gpu",label:"GPU",color:"#a78bfa"},{key:"disk",label:"Disk",color:"#fbbf24"}];function pQ(){var h,m,v,x;const{sys:e,hist:t}=J3(),[r,n]=y.useState("live"),i=DA(r==="live"?60:X_[r],r!=="live"),o=y.useMemo(()=>{var k;return r==="live"?t:(((k=i.data)==null?void 0:k.points)??[]).map(S=>({t:S.t*1e3,cpu:S.cpu,ram:S.ram,gpu:S.gpu,disk:S.disk}))},[r,t,i.data]),s=!!(e!=null&&e.gpu&&e.gpu.busy_percent!=null&&e.gpu.gtt_used!=null&&e.gpu.gtt_total!=null),u=hQ.filter(k=>k.key!=="gpu"||s),d={cpu:(h=e==null?void 0:e.cpu)==null?void 0:h.percent,ram:(m=e==null?void 0:e.ram)==null?void 0:m.percent,gpu:s?e.gpu.busy_percent:null,disk:(v=e==null?void 0:e.disk)==null?void 0:v.percent},f={cpu:(x=e==null?void 0:e.cpu)!=null&&x.cores?`${e.cpu.cores} Cores`:"",ram:e?`${No(e.ram.used)}/${No(e.ram.total)} GB`:"",gpu:s?`${No(e.gpu.gtt_used)}/${No(e.gpu.gtt_total)} GB`:"",disk:e!=null&&e.disk?`${No(e.disk.used)}/${No(e.disk.total)} GB`:""};return b.jsxs("div",{className:"flex flex-col justify-between mc-card p-5",children:[b.jsxs("div",{children:[b.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[b.jsx(HP,{className:"h-4.5 w-4.5 text-primary"}),b.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"System-Status"}),r==="live"&&b.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[b.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]}),b.jsx("div",{className:"ml-auto",children:b.jsx(Z_,{value:r,onChange:n})})]}),e?b.jsxs(b.Fragment,{children:[b.jsx("div",{className:"mb-2 grid grid-cols-2 gap-x-4 gap-y-1.5",children:u.map(k=>b.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[b.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full",style:{background:k.color}}),b.jsx("span",{className:"shrink-0 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:k.label}),b.jsxs("span",{className:"shrink-0 font-mono text-xs font-bold tabular-nums text-foreground",children:[Math.round(d[k.key]??0),"%"]}),f[k.key]&&b.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/60",children:f[k.key]})]},k.key))}),r!=="live"&&o.length===0&&b.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:i.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}),(r==="live"||o.length>0)&&b.jsx(Q_,{data:o,series:u,unit:"%",yMode:"percent",height:176,showTime:!0})]}):b.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:"Lade Systemdaten…"})]}),(e==null?void 0:e.temp)&&(e.temp.cpu||e.temp.gpu)&&b.jsxs("div",{className:"mt-3 flex gap-4 border-t border-border/30 pt-3 font-mono text-xs text-muted-foreground/80",children:[e.temp.cpu!=null&&b.jsxs("span",{children:["CPU Temp: ",e.temp.cpu," °C"]}),e.temp.gpu!=null&&b.jsxs("span",{children:["GPU Temp: ",e.temp.gpu," °C"]})]})]})}const vP=[{key:"prompt",label:"Prompt",color:"#f59e0b"},{key:"completion",label:"Antwort",color:"#2dd4bf"}];function mQ(){const{data:e}=$A(),t=V3(),[r,n]=y.useState("live"),i=DA(r==="live"?60:X_[r],r!=="live"),o=y.useMemo(()=>{var h;if(r==="live")return t;const d=((h=i.data)==null?void 0:h.points)??[],f=[];for(let m=1;mb.jsxs("div",{className:"flex items-center gap-1.5",children:[b.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:d.color}}),b.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:d.label}),b.jsx("span",{className:"font-mono text-xs font-bold tabular-nums text-foreground",children:Math.round((s==null?void 0:s[d.key])??0)})]},d.key))})]})]}),r!=="live"&&o.length===0?b.jsx("div",{className:"flex h-[150px] items-center justify-center text-xs text-muted-foreground",children:i.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}):e?b.jsx(Q_,{data:o,series:vP,unit:" tok/s",yMode:"auto",height:150,showTime:!0}):b.jsx("div",{className:"flex h-[150px] items-center justify-center text-xs text-muted-foreground",children:"Lade Durchsatz…"}),b.jsx("div",{className:"mt-2 border-t border-border/30 pt-2 text-[10px] text-muted-foreground/70",children:"Durchsatz aus dem Gateway abgeleitet (Prefill vs. Generierung). Flach bei Leerlauf."})]})}const Sl=[{key:"stt_ms",label:"STT",color:"#f59e0b"},{key:"vision_ms",label:"Sehen",color:"#a78bfa"},{key:"hirn_ms",label:"Hirn",color:"#2dd4bf"},{key:"gen_ms",label:"Antwort",color:"#60a5fa"}],ja=e=>e==null?"–":`${(e/1e3).toLocaleString("de-DE",{minimumFractionDigits:1,maximumFractionDigits:1})} s`;function vQ(e){const t=Math.max(0,Date.now()/1e3-e);return t<60?`vor ${Math.round(t)} s`:t<3600?`vor ${Math.round(t/60)} min`:`vor ${Math.round(t/3600)} h`}function Mg(e){return Sl.reduce((t,r)=>t+(e[r.key]??0),0)}function gQ(e){let t=null;for(const r of Sl){const n=e[r.key];n!=null&&(t==null||n>t.ms)&&(t={label:r.label,color:r.color,ms:n})}return t}function yQ({t:e,scale:t}){const r=Sl.map(n=>`${n.label} ${ja(e[n.key])}`).join(" · ")+(e.mem0_ms!=null?` (davon Mem0 ${ja(e.mem0_ms)})`:"");return b.jsxs("div",{className:"flex items-center gap-2.5",children:[b.jsx("span",{className:"w-14 shrink-0 text-right font-mono text-[10px] text-muted-foreground/60",children:vQ(e.ts)}),b.jsxs("div",{className:"relative h-4 flex-1 overflow-hidden rounded-sm bg-muted/25",title:r,children:[b.jsx("div",{className:"absolute inset-0 flex",children:Sl.map(n=>{const i=e[n.key];return!i||i<=0?null:b.jsx("div",{style:{width:`${i/t*100}%`,background:n.color},className:"h-full first:rounded-l-sm"},n.key)})}),e.error&&b.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-rose-500/15 text-[10px] font-semibold text-rose-300",children:"Fehler"})]}),b.jsx("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] font-semibold tabular-nums text-foreground",children:e.error?"–":ja(Mg(e))})]})}function xQ(){const{data:e}=j3(12),t=e??[],r=Math.max(1,...t.map(o=>Mg(o))),n=t[0],i=n?gQ(n):null;return b.jsxs("div",{className:"mc-card p-5",children:[b.jsxs("div",{className:"mb-3 flex items-start justify-between gap-3",children:[b.jsxs("div",{children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx(cT,{className:"h-4.5 w-4.5 text-primary"}),b.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"Latenz je Turn"}),b.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[b.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]})]}),n?b.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[b.jsx("span",{className:`font-space text-3xl font-bold tracking-tight tabular-nums ${n.error?"text-rose-400":"text-foreground"}`,children:n.error?"Fehler":ja(Mg(n))}),b.jsxs("span",{className:"text-xs text-muted-foreground",children:["letzter Turn",!n.error&&i&&b.jsxs(b.Fragment,{children:[" · Täter: ",b.jsx("span",{style:{color:i.color},className:"font-semibold",children:i.label})," ",ja(i.ms)]})]})]}):b.jsx("div",{className:"mt-2 text-xs text-muted-foreground",children:"Noch kein Voice-Turn aufgezeichnet."}),n&&!n.error&&b.jsxs("div",{className:"mt-0.5 font-mono text-[11px] text-muted-foreground/70",children:[Sl.filter(o=>n[o.key]!=null).map(o=>`${o.label} ${ja(n[o.key])}`).join(" · "),n.mem0_ms!=null&&b.jsxs("span",{className:"text-muted-foreground/50",children:[" · davon Mem0 ",ja(n.mem0_ms)]})]})]}),b.jsx("div",{className:"flex shrink-0 flex-col items-end gap-1 pt-1",children:Sl.map(o=>b.jsxs("div",{className:"flex items-center gap-1.5",children:[b.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:o.color}}),b.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:o.label})]},o.key))})]}),t.length>0?b.jsx("div",{className:"space-y-1.5",children:t.map(o=>b.jsx(yQ,{t:o,scale:r},o.id))}):b.jsx("div",{className:"flex h-[120px] items-center justify-center px-6 text-center text-xs text-muted-foreground",children:"Sprich einmal mit Lucy — dann erscheint hier der Zeit-Wasserfall pro Turn, damit man den einen Hänger sofort sieht."}),b.jsx("div",{className:"mt-3 border-t border-border/30 pt-2 text-[10px] leading-relaxed text-muted-foreground/70",children:'„Hirn" = Zeit bis zum ersten Wort (Agent + Mem0-Suche + Modell); Tool-Runden stecken in „Antwort". Reine Telegram-Turns laufen an MC2 vorbei und erscheinen hier nicht.'})]})}const Of=e=>window.dispatchEvent(new CustomEvent("open-system-drawer",{detail:{tab:e}}));function bQ({onNavigate:e}){var de,Y,ae,X;const{data:t}=RA(),{data:r}=Zg(),{data:n}=LA(),{data:i}=M3(),{data:o}=N3(),{data:s}=I3(),{data:u}=E3(),{data:d}=P3(),f=G3(),{showAlert:h,dialogElement:m}=Xg(),v=xu(),[x,k]=y.useState({});async function S(M,T){k(Z=>({...Z,[M]:!0}));try{if(T.kind==="loadModel")await Me(`/api/models/${encodeURIComponent(T.model)}/load`,{method:"POST"});else{const Z=await Me("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:T.service})});Z.ok||h("Reparatur nicht ganz geklappt",(Z.err||"Unbekannter Fehler")+(T.needsSudo?` + A`,",",",0,0,",",",",","Z"])),Q.x,Q.y,o,o,+(h<0),V.x,V.y,n,n,+(ue>180),+(h>0),C.x,C.y,o,o,+(h<0),R.x,R.y)}else O+=Lt(tk||(tk=Pa(["L",",","Z"])),t,r);return O},m6={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},v6=e=>{var t=Hr(e,m6),r=t.cx,n=t.cy,i=t.innerRadius,o=t.outerRadius,s=t.cornerRadius,u=t.forceCornerRadius,d=t.cornerIsExternal,f=t.startAngle,h=t.endAngle,m=t.className;if(o0&&Math.abs(f-h)<360?S=p6({cx:r,cy:n,innerRadius:i,outerRadius:o,cornerRadius:Math.min(k,x/2),forceCornerRadius:u,cornerIsExternal:d,startAngle:f,endAngle:h}):S=k2({cx:r,cy:n,innerRadius:i,outerRadius:o,startAngle:f,endAngle:h}),g.createElement("path",dy({},Br(t),{className:v,d:S}))};function y6(e,t,r){if(e==="horizontal")return[{x:t.x,y:r.top},{x:t.x,y:r.top+r.height}];if(e==="vertical")return[{x:r.left,y:t.y},{x:r.left+r.width,y:t.y}];if(iO(t)){if(e==="centric"){var n=t.cx,i=t.cy,o=t.innerRadius,s=t.outerRadius,u=t.angle,d=Bt(n,i,o,u),f=Bt(n,i,s,u);return[{x:d.x,y:d.y},{x:f.x,y:f.y}]}return S2(t)}}function g6(e){return gO(e)?NaN:Number(e)}function Qm(e){return e?(e=g6(e),e===1/0||e===-1/0?(e<0?-1:1)*Number.MAX_VALUE:e===e?e:0):e===0?e:0}function E2(e,t,r){r&&typeof r!="number"&&Kv(e,t,r)&&(t=r=void 0),e=Qm(e),t===void 0?(t=e,e=0):t=Qm(t),r=r===void 0?ee.chartData,yg=H([cn],e=>{var t=e.chartData!=null?e.chartData.length-1:0;return{chartData:e.chartData,computedData:e.computedData,dataEndIndex:t,dataStartIndex:0}}),lh=(e,t,r,n)=>n?yg(e):cn(e),x6=(e,t,r)=>r?yg(e):cn(e),b6=H([lh],e=>{var t=e.chartData,r=e.dataStartIndex,n=e.dataEndIndex;return t!=null?t.slice(r,n+1):[]});H([yg],e=>{var t=e.chartData,r=e.dataStartIndex,n=e.dataEndIndex;return t!=null?t.slice(r,n+1):[]});var w6=H([cn],e=>{var t=e.chartData,r=e.dataStartIndex,n=e.dataEndIndex;return t!=null?t.slice(r,n+1):[]});function gg(e,t){return P6(e)||E6(e,t)||k6(e,t)||S6()}function S6(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function k6(e,t){if(e){if(typeof e=="string")return rk(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?rk(e,t):void 0}}function rk(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);re.e^o.s<0?1:-1;for(n=o.d.length,i=e.d.length,t=0,r=ne.d[t]^o.s<0?1:-1;return n===i?0:n>i^o.s<0?1:-1};ve.decimalPlaces=ve.dp=function(){var e=this,t=e.d.length-1,r=(t-e.e)*nt;if(t=e.d[t],t)for(;t%10==0;t/=10)r--;return r<0?0:r};ve.dividedBy=ve.div=function(e){return Jn(this,new this.constructor(e))};ve.dividedToIntegerBy=ve.idiv=function(e){var t=this,r=t.constructor;return Ge(Jn(t,new r(e),0,1),r.precision)};ve.equals=ve.eq=function(e){return!this.cmp(e)};ve.exponent=function(){return gt(this)};ve.greaterThan=ve.gt=function(e){return this.cmp(e)>0};ve.greaterThanOrEqualTo=ve.gte=function(e){return this.cmp(e)>=0};ve.isInteger=ve.isint=function(){return this.e>this.d.length-2};ve.isNegative=ve.isneg=function(){return this.s<0};ve.isPositive=ve.ispos=function(){return this.s>0};ve.isZero=function(){return this.s===0};ve.lessThan=ve.lt=function(e){return this.cmp(e)<0};ve.lessThanOrEqualTo=ve.lte=function(e){return this.cmp(e)<1};ve.logarithm=ve.log=function(e){var t,r=this,n=r.constructor,i=n.precision,o=i+5;if(e===void 0)e=new n(10);else if(e=new n(e),e.s<1||e.eq(Pr))throw Error(Wr+"NaN");if(r.s<1)throw Error(Wr+(r.s?"NaN":"-Infinity"));return r.eq(Pr)?new n(0):(at=!1,t=Jn(iu(r,o),iu(e,o),o),at=!0,Ge(t,i))};ve.minus=ve.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?_2(t,e):O2(t,(e.s=-e.s,e))};ve.modulo=ve.mod=function(e){var t,r=this,n=r.constructor,i=n.precision;if(e=new n(e),!e.s)throw Error(Wr+"NaN");return r.s?(at=!1,t=Jn(r,e,0,1).times(e),at=!0,r.minus(t)):Ge(new n(r),i)};ve.naturalExponential=ve.exp=function(){return C2(this)};ve.naturalLogarithm=ve.ln=function(){return iu(this)};ve.negated=ve.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};ve.plus=ve.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?O2(t,e):_2(t,(e.s=-e.s,e))};ve.precision=ve.sd=function(e){var t,r,n,i=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Fa+e);if(t=gt(i)+1,n=i.d.length-1,r=n*nt+1,n=i.d[n],n){for(;n%10==0;n/=10)r--;for(n=i.d[0];n>=10;n/=10)r++}return e&&t>r?t:r};ve.squareRoot=ve.sqrt=function(){var e,t,r,n,i,o,s,u=this,d=u.constructor;if(u.s<1){if(!u.s)return new d(0);throw Error(Wr+"NaN")}for(e=gt(u),at=!1,i=Math.sqrt(+u),i==0||i==1/0?(t=Pn(u.d),(t.length+e)%2==0&&(t+="0"),i=Math.sqrt(t),e=Ol((e+1)/2)-(e<0||e%2),i==1/0?t="5e"+e:(t=i.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),n=new d(t)):n=new d(i.toString()),r=d.precision,i=s=r+3;;)if(o=n,n=o.plus(Jn(u,o,s+2)).times(.5),Pn(o.d).slice(0,s)===(t=Pn(n.d)).slice(0,s)){if(t=t.slice(s-3,s+1),i==s&&t=="4999"){if(Ge(o,r+1,0),o.times(o).eq(u)){n=o;break}}else if(t!="9999")break;s+=4}return at=!0,Ge(n,r)};ve.times=ve.mul=function(e){var t,r,n,i,o,s,u,d,f,h=this,m=h.constructor,v=h.d,x=(e=new m(e)).d;if(!h.s||!e.s)return new m(0);for(e.s*=h.s,r=h.e+e.e,d=v.length,f=x.length,d=0;){for(t=0,i=d+n;i>n;)u=o[i]+x[n]*v[i-n-1]+t,o[i--]=u%jt|0,t=u/jt|0;o[i]=(o[i]+t)%jt|0}for(;!o[--s];)o.pop();return t?++r:o.shift(),e.d=o,e.e=r,at?Ge(e,m.precision):e};ve.toDecimalPlaces=ve.todp=function(e,t){var r=this,n=r.constructor;return r=new n(r),e===void 0?r:(Nn(e,0,Al),t===void 0?t=n.rounding:Nn(t,0,8),Ge(r,e+gt(r)+1,t))};ve.toExponential=function(e,t){var r,n=this,i=n.constructor;return e===void 0?r=Ga(n,!0):(Nn(e,0,Al),t===void 0?t=i.rounding:Nn(t,0,8),n=Ge(new i(n),e+1,t),r=Ga(n,!0,e+1)),r};ve.toFixed=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?Ga(i):(Nn(e,0,Al),t===void 0?t=o.rounding:Nn(t,0,8),n=Ge(new o(i),e+gt(i)+1,t),r=Ga(n.abs(),!1,e+gt(n)+1),i.isneg()&&!i.isZero()?"-"+r:r)};ve.toInteger=ve.toint=function(){var e=this,t=e.constructor;return Ge(new t(e),gt(e)+1,t.rounding)};ve.toNumber=function(){return+this};ve.toPower=ve.pow=function(e){var t,r,n,i,o,s,u=this,d=u.constructor,f=12,h=+(e=new d(e));if(!e.s)return new d(Pr);if(u=new d(u),!u.s){if(e.s<1)throw Error(Wr+"Infinity");return u}if(u.eq(Pr))return u;if(n=d.precision,e.eq(Pr))return Ge(u,n);if(t=e.e,r=e.d.length-1,s=t>=r,o=u.s,s){if((r=h<0?-h:h)<=A2){for(i=new d(Pr),t=Math.ceil(n/nt+4),at=!1;r%2&&(i=i.times(u),ak(i.d,t)),r=Ol(r/2),r!==0;)u=u.times(u),ak(u.d,t);return at=!0,e.s<0?new d(Pr).div(i):Ge(i,n)}}else if(o<0)throw Error(Wr+"NaN");return o=o<0&&e.d[Math.max(t,r)]&1?-1:1,u.s=1,at=!1,i=e.times(iu(u,n+f)),at=!0,i=C2(i),i.s=o,i};ve.toPrecision=function(e,t){var r,n,i=this,o=i.constructor;return e===void 0?(r=gt(i),n=Ga(i,r<=o.toExpNeg||r>=o.toExpPos)):(Nn(e,1,Al),t===void 0?t=o.rounding:Nn(t,0,8),i=Ge(new o(i),e,t),r=gt(i),n=Ga(i,e<=r||r<=o.toExpNeg,e)),n};ve.toSignificantDigits=ve.tosd=function(e,t){var r=this,n=r.constructor;return e===void 0?(e=n.precision,t=n.rounding):(Nn(e,1,Al),t===void 0?t=n.rounding:Nn(t,0,8)),Ge(new n(r),e,t)};ve.toString=ve.valueOf=ve.val=ve.toJSON=ve[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=gt(e),r=e.constructor;return Ga(e,t<=r.toExpNeg||t>=r.toExpPos)};function O2(e,t){var r,n,i,o,s,u,d,f,h=e.constructor,m=h.precision;if(!e.s||!t.s)return t.s||(t=new h(e)),at?Ge(t,m):t;if(d=e.d,f=t.d,s=e.e,i=t.e,d=d.slice(),o=s-i,o){for(o<0?(n=d,o=-o,u=f.length):(n=f,i=s,u=d.length),s=Math.ceil(m/nt),u=s>u?s+1:u+1,o>u&&(o=u,n.length=1),n.reverse();o--;)n.push(0);n.reverse()}for(u=d.length,o=f.length,u-o<0&&(o=u,n=f,f=d,d=n),r=0;o;)r=(d[--o]=d[o]+f[o]+r)/jt|0,d[o]%=jt;for(r&&(d.unshift(r),++i),u=d.length;d[--u]==0;)d.pop();return t.d=d,t.e=i,at?Ge(t,m):t}function Nn(e,t,r){if(e!==~~e||er)throw Error(Fa+e)}function Pn(e){var t,r,n,i=e.length-1,o="",s=e[0];if(i>0){for(o+=s,t=1;ts?1:-1;else for(u=d=0;ui[u]?1:-1;break}return d}function r(n,i,o){for(var s=0;o--;)n[o]-=s,s=n[o]1;)n.shift()}return function(n,i,o,s){var u,d,f,h,m,v,x,k,S,E,P,_,j,O,N,C,R,z,F=n.constructor,V=n.s==i.s?1:-1,Q=n.d,B=i.d;if(!n.s)return new F(n);if(!i.s)throw Error(Wr+"Division by zero");for(d=n.e-i.e,R=B.length,N=Q.length,x=new F(V),k=x.d=[],f=0;B[f]==(Q[f]||0);)++f;if(B[f]>(Q[f]||0)&&--d,o==null?_=o=F.precision:s?_=o+(gt(n)-gt(i))+1:_=o,_<0)return new F(0);if(_=_/nt+2|0,f=0,R==1)for(h=0,B=B[0],_++;(f1&&(B=e(B,h),Q=e(Q,h),R=B.length,N=Q.length),O=R,S=Q.slice(0,R),E=S.length;E=jt/2&&++C;do h=0,u=t(B,S,R,E),u<0?(P=S[0],R!=E&&(P=P*jt+(S[1]||0)),h=P/C|0,h>1?(h>=jt&&(h=jt-1),m=e(B,h),v=m.length,E=S.length,u=t(m,S,v,E),u==1&&(h--,r(m,R16)throw Error(xg+gt(e));if(!e.s)return new h(Pr);for(at=!1,u=m,s=new h(.03125);e.abs().gte(.1);)e=e.times(s),f+=5;for(n=Math.log(Sa(2,f))/Math.LN10*2+5|0,u+=n,r=i=o=new h(Pr),h.precision=u;;){if(i=Ge(i.times(e),u),r=r.times(++d),s=o.plus(Jn(i,r,u)),Pn(s.d).slice(0,u)===Pn(o.d).slice(0,u)){for(;f--;)o=Ge(o.times(o),u);return h.precision=m,t==null?(at=!0,Ge(o,m)):o}o=s}}function gt(e){for(var t=e.e*nt,r=e.d[0];r>=10;r/=10)t++;return t}function Xm(e,t,r){if(t>e.LN10.sd())throw at=!0,r&&(e.precision=r),Error(Wr+"LN10 precision limit exceeded");return Ge(new e(e.LN10),t)}function $i(e){for(var t="";e--;)t+="0";return t}function iu(e,t){var r,n,i,o,s,u,d,f,h,m=1,v=10,x=e,k=x.d,S=x.constructor,E=S.precision;if(x.s<1)throw Error(Wr+(x.s?"NaN":"-Infinity"));if(x.eq(Pr))return new S(0);if(t==null?(at=!1,f=E):f=t,x.eq(10))return t==null&&(at=!0),Xm(S,f);if(f+=v,S.precision=f,r=Pn(k),n=r.charAt(0),o=gt(x),Math.abs(o)<15e14){for(;n<7&&n!=1||n==1&&r.charAt(1)>3;)x=x.times(e),r=Pn(x.d),n=r.charAt(0),m++;o=gt(x),n>1?(x=new S("0."+r),o++):x=new S(n+"."+r.slice(1))}else return d=Xm(S,f+2,E).times(o+""),x=iu(new S(n+"."+r.slice(1)),f-v).plus(d),S.precision=E,t==null?(at=!0,Ge(x,E)):x;for(u=s=x=Jn(x.minus(Pr),x.plus(Pr),f),h=Ge(x.times(x),f),i=3;;){if(s=Ge(s.times(h),f),d=u.plus(Jn(s,new S(i),f)),Pn(d.d).slice(0,f)===Pn(u.d).slice(0,f))return u=u.times(2),o!==0&&(u=u.plus(Xm(S,f+2,E).times(o+""))),u=Jn(u,new S(m),f),S.precision=E,t==null?(at=!0,Ge(u,E)):u;u=d,i+=2}}function ik(e,t){var r,n,i;for((r=t.indexOf("."))>-1&&(t=t.replace(".","")),(n=t.search(/e/i))>0?(r<0&&(r=n),r+=+t.slice(n+1),t=t.substring(0,n)):r<0&&(r=t.length),n=0;t.charCodeAt(n)===48;)++n;for(i=t.length;t.charCodeAt(i-1)===48;)--i;if(t=t.slice(n,i),t){if(i-=n,r=r-n-1,e.e=Ol(r/nt),e.d=[],n=(r+1)%nt,r<0&&(n+=nt),ntf||e.e<-tf))throw Error(xg+r)}else e.s=0,e.e=0,e.d=[0];return e}function Ge(e,t,r){var n,i,o,s,u,d,f,h,m=e.d;for(s=1,o=m[0];o>=10;o/=10)s++;if(n=t-s,n<0)n+=nt,i=t,f=m[h=0];else{if(h=Math.ceil((n+1)/nt),o=m.length,h>=o)return e;for(f=o=m[h],s=1;o>=10;o/=10)s++;n%=nt,i=n-nt+s}if(r!==void 0&&(o=Sa(10,s-i-1),u=f/o%10|0,d=t<0||m[h+1]!==void 0||f%o,d=r<4?(u||d)&&(r==0||r==(e.s<0?3:2)):u>5||u==5&&(r==4||d||r==6&&(n>0?i>0?f/Sa(10,s-i):0:m[h-1])%10&1||r==(e.s<0?8:7))),t<1||!m[0])return d?(o=gt(e),m.length=1,t=t-o-1,m[0]=Sa(10,(nt-t%nt)%nt),e.e=Ol(-t/nt)||0):(m.length=1,m[0]=e.e=e.s=0),e;if(n==0?(m.length=h,o=1,h--):(m.length=h+1,o=Sa(10,nt-n),m[h]=i>0?(f/Sa(10,s-i)%Sa(10,i)|0)*o:0),d)for(;;)if(h==0){(m[0]+=o)==jt&&(m[0]=1,++e.e);break}else{if(m[h]+=o,m[h]!=jt)break;m[h--]=0,o=1}for(n=m.length;m[--n]===0;)m.pop();if(at&&(e.e>tf||e.e<-tf))throw Error(xg+gt(e));return e}function _2(e,t){var r,n,i,o,s,u,d,f,h,m,v=e.constructor,x=v.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new v(e),at?Ge(t,x):t;if(d=e.d,m=t.d,n=t.e,f=e.e,d=d.slice(),s=f-n,s){for(h=s<0,h?(r=d,s=-s,u=m.length):(r=m,n=f,u=d.length),i=Math.max(Math.ceil(x/nt),u)+2,s>i&&(s=i,r.length=1),r.reverse(),i=s;i--;)r.push(0);r.reverse()}else{for(i=d.length,u=m.length,h=i0;--i)d[u++]=0;for(i=m.length;i>s;){if(d[--i]0?o=o.charAt(0)+"."+o.slice(1)+$i(n):s>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(i<0?"e":"e+")+i):i<0?(o="0."+$i(-i-1)+o,r&&(n=r-s)>0&&(o+=$i(n))):i>=s?(o+=$i(i+1-s),r&&(n=r-i-1)>0&&(o=o+"."+$i(n))):((n=i+1)0&&(i+1===s&&(o+="."),o+=$i(n))),e.s<0?"-"+o:o}function ak(e,t){if(e.length>t)return e.length=t,!0}function j2(e){var t,r,n;function i(o){var s=this;if(!(s instanceof i))return new i(o);if(s.constructor=i,o instanceof i){s.s=o.s,s.e=o.e,s.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(Fa+o);if(o>0)s.s=1;else if(o<0)o=-o,s.s=-1;else{s.s=0,s.e=0,s.d=[0];return}if(o===~~o&&o<1e7){s.e=0,s.d=[o];return}return ik(s,o.toString())}else if(typeof o!="string")throw Error(Fa+o);if(o.charCodeAt(0)===45?(o=o.slice(1),s.s=-1):s.s=1,C6.test(o))ik(s,o);else throw Error(Fa+o)}if(i.prototype=ve,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=j2,i.config=i.set=_6,e===void 0&&(e={}),e)for(n=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=i[t+1]&&n<=i[t+2])this[r]=n;else throw Error(Fa+r+": "+n);if((n=e[r="LN10"])!==void 0)if(n==Math.LN10)this[r]=new this(n);else throw Error(Fa+r+": "+n);return this}var bg=j2(O6);Pr=new bg(1);const Ue=bg;function N2(e){var t;return e===0?t=1:t=Math.floor(new Ue(e).abs().log(10).toNumber())+1,t}function I2(e,t,r){for(var n=new Ue(e),i=0,o=[];n.lt(t)&&i<1e5;)o.push(n.toNumber()),n=n.add(r),i++;return o}function au(e,t){return M6(e)||I6(e,t)||N6(e,t)||j6()}function j6(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function N6(e,t){if(e){if(typeof e=="string")return ok(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ok(e,t):void 0}}function ok(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=au(e,2),r=t[0],n=t[1],i=r,o=n;return r>n&&(i=n,o=r),[i,o]},wg=(e,t,r)=>{if(e.lte(0))return new Ue(0);var n=N2(e.toNumber()),i=new Ue(10).pow(n),o=e.div(i),s=n!==1?.05:.1,u=new Ue(Math.ceil(o.div(s).toNumber())).add(r).mul(s),d=u.mul(i);return t?new Ue(d.toNumber()):new Ue(Math.ceil(d.toNumber()))},T2=(e,t,r)=>{var n;if(e.lte(0))return new Ue(0);var i=[1,2,2.5,5],o=e.toNumber(),s=Math.floor(new Ue(o).abs().log(10).toNumber()),u=new Ue(10).pow(s),d=e.div(u).toNumber(),f=i.findIndex(x=>x>=d-1e-10);if(f===-1&&(u=u.mul(10),f=0),f+=r,f>=i.length){var h=Math.floor(f/i.length);f%=i.length,u=u.mul(new Ue(10).pow(h))}var m=(n=i[f])!==null&&n!==void 0?n:1,v=new Ue(m).mul(u);return t?v:new Ue(Math.ceil(v.toNumber()))},T6=(e,t,r)=>{var n=new Ue(1),i=new Ue(e);if(!i.isint()&&r){var o=Math.abs(e);o<1?(n=new Ue(10).pow(N2(e)-1),i=new Ue(Math.floor(i.div(n).toNumber())).mul(n)):o>1&&(i=new Ue(Math.floor(e)))}else e===0?i=new Ue(Math.floor((t-1)/2)):r||(i=new Ue(Math.floor(e)));for(var s=Math.floor((t-1)/2),u=[],d=0;d4&&arguments[4]!==void 0?arguments[4]:0,s=arguments.length>5&&arguments[5]!==void 0?arguments[5]:wg;if(!Number.isFinite((r-t)/(n-1)))return{step:new Ue(0),tickMin:new Ue(0),tickMax:new Ue(0)};var u=s(new Ue(r).sub(t).div(n-1),i,o),d;t<=0&&r>=0?d=new Ue(0):(d=new Ue(t).add(r).div(2),d=d.sub(new Ue(d).mod(u)));var f=Math.ceil(d.sub(t).div(u).toNumber()),h=Math.ceil(new Ue(r).sub(d).div(u).toNumber()),m=f+h+1;return m>n?D2(t,r,n,i,o+1,s):(m0?h+(n-m):h,f=r>0?f:f+(n-m)),{step:u,tickMin:d.sub(new Ue(f).mul(u)),tickMax:d.add(new Ue(h).mul(u))})},lk=function(t){var r=au(t,2),n=r[0],i=r[1],o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"auto",d=Math.max(o,2),f=M2([n,i]),h=au(f,2),m=h[0],v=h[1];if(m===-1/0||v===1/0){var x=v===1/0?[m,...Array(o-1).fill(1/0)]:[...Array(o-1).fill(-1/0),v];return n>i?x.reverse():x}if(m===v)return T6(m,o,s);var k=u==="snap125"?T2:wg,S=D2(m,v,d,s,0,k),E=S.step,P=S.tickMin,_=S.tickMax,j=I2(P,_.add(new Ue(.1).mul(E)),E);return n>i?j.reverse():j},sk=function(t,r){var n=au(t,2),i=n[0],o=n[1],s=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"auto",d=M2([i,o]),f=au(d,2),h=f[0],m=f[1];if(h===-1/0||m===1/0)return[i,o];if(h===m)return[h];var v=u==="snap125"?T2:wg,x=Math.max(r,2),k=v(new Ue(m).sub(h).div(x-1),s,0),S=[...I2(new Ue(h),new Ue(m),k),m];return s===!1&&(S=S.map(E=>Math.round(E))),i>o?S.reverse():S},D6=e=>e.rootProps.barCategoryGap,sh=e=>e.rootProps.stackOffset,R2=e=>e.rootProps.reverseStackOrder,Sg=e=>e.options.chartName,kg=e=>e.rootProps.syncId,$2=e=>e.rootProps.syncMethod,Eg=e=>e.options.eventEmitter,R6=e=>e.rootProps.baseValue,nr={grid:-100,barBackground:-50,area:100,cursorRectangle:200,bar:300,line:400,axis:500,scatter:600,activeBar:1e3,cursorLine:1100,activeDot:1200,label:2e3},va={allowDecimals:!1,allowDataOverflow:!1,angleAxisId:0,reversed:!1,scale:"auto",tick:!0,type:"auto"},gn={allowDataOverflow:!1,allowDecimals:!1,allowDuplicatedCategory:!0,includeHidden:!1,radiusAxisId:0,reversed:!1,scale:"auto",tick:!0,tickCount:5,type:"auto"},uh=(e,t)=>{if(!(!e||!t))return e!=null&&e.reversed?[t[1],t[0]]:t};function ch(e,t,r){if(r!=="auto")return r;if(e!=null)return Mn(e,t)?"category":"number"}function uk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function rf(e){for(var t=1;t{if(t!=null)return e.polarAxis.angleAxis[t]},Pg=H([F6,l2],(e,t)=>{var r;if(e!=null)return e;var n=(r=ch(t,"angleAxis",ck.type))!==null&&r!==void 0?r:"category";return rf(rf({},ck),{},{type:n})}),B6=(e,t)=>e.polarAxis.radiusAxis[t],Ag=H([B6,l2],(e,t)=>{var r;if(e!=null)return e;var n=(r=ch(t,"radiusAxis",dk.type))!==null&&r!==void 0?r:"category";return rf(rf({},dk),{},{type:n})}),dh=e=>e.polarOptions,Og=H([ai,oi,Ht],l6),L2=H([dh,Og],(e,t)=>{if(e!=null)return ea(e.innerRadius,t,0)}),z2=H([dh,Og],(e,t)=>{if(e!=null)return ea(e.outerRadius,t,t*.8)}),U6=e=>{if(e==null)return[0,0];var t=e.startAngle,r=e.endAngle;return[t,r]},F2=H([dh],U6);H([Pg,F2],uh);var B2=H([Og,L2,z2],(e,t,r)=>{if(!(e==null||t==null||r==null))return[t,r]});H([Ag,B2],uh);var U2=H([ot,dh,L2,z2,ai,oi],(e,t,r,n,i,o)=>{if(!(e!=="centric"&&e!=="radial"||t==null||r==null||n==null)){var s=t.cx,u=t.cy,d=t.startAngle,f=t.endAngle;return{cx:ea(s,i,i/2),cy:ea(u,o,o/2),innerRadius:r,outerRadius:n,startAngle:d,endAngle:f,clockWise:!1}}}),It=(e,t)=>t,fh=(e,t,r)=>r;function Cg(e){return e==null?void 0:e.id}function W2(e,t,r){var n=t.chartData,i=n===void 0?[]:n,o=r.allowDuplicatedCategory,s=r.dataKey,u=new Map;return e.forEach(d=>{var f,h=(f=d.data)!==null&&f!==void 0?f:i;if(!(h==null||h.length===0)){var m=Cg(d);h.forEach((v,x)=>{var k=s==null||o?x:String(Nt(v,s,null)),S=Nt(v,d.dataKey,0),E;u.has(k)?E=u.get(k):E={},Object.assign(E,{[m]:S}),u.set(k,E)})}}),Array.from(u.values())}function _g(e){return"stackId"in e&&e.stackId!=null&&e.dataKey!=null}var hh=(e,t)=>e===t?!0:e==null||t==null?!1:e[0]===t[0]&&e[1]===t[1];function ph(e,t){return Array.isArray(e)&&Array.isArray(t)&&e.length===0&&t.length===0?!0:e===t}function W6(e,t){if(e.length===t.length){for(var r=0;r{var t=ot(e);return t==="horizontal"?"xAxis":t==="vertical"?"yAxis":t==="centric"?"angleAxis":"radiusAxis"},Cl=e=>e.tooltip.settings.axisId;function jg(e){if(e!=null){var t=e.ticks,r=e.bandwidth,n=e.range(),i=[Math.min(...n),Math.max(...n)];return{domain:()=>e.domain(),range:(function(o){function s(){return o.apply(this,arguments)}return s.toString=function(){return o.toString()},s})(()=>i),rangeMin:()=>i[0],rangeMax:()=>i[1],isInRange(o){var s=i[0],u=i[1];return s<=u?o>=s&&o<=u:o>=u&&o<=s},bandwidth:r?()=>r.call(e):void 0,ticks:t?o=>t.call(e,o):void 0,map:(o,s)=>{var u=e(o);if(u!=null){if(e.bandwidth&&s!==null&&s!==void 0&&s.position){var d=e.bandwidth();switch(s.position){case"middle":u+=d/2;break;case"end":u+=d;break}}return u}}}}}var H6=(e,t)=>{if(t!=null)switch(e){case"linear":{if(!An(t)){for(var r,n,i=0;in)&&(n=o))}return r!==void 0&&n!==void 0?[r,n]:void 0}return t}default:return t}};function Xi(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function K6(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function Ng(e){let t,r,n;e.length!==2?(t=Xi,r=(u,d)=>Xi(e(u),d),n=(u,d)=>e(u)-d):(t=e===Xi||e===K6?e:V6,r=e,n=e);function i(u,d,f=0,h=u.length){if(f>>1;r(u[m],d)<0?f=m+1:h=m}while(f>>1;r(u[m],d)<=0?f=m+1:h=m}while(ff&&n(u[m-1],d)>-n(u[m],d)?m-1:m}return{left:i,center:s,right:o}}function V6(){return 0}function H2(e){return e===null?NaN:+e}function*q6(e,t){for(let r of e)r!=null&&(r=+r)>=r&&(yield r)}const G6=Ng(Xi),ju=G6.right;Ng(H2).center;class fk extends Map{constructor(t,r=X6){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:r}}),t!=null)for(const[n,i]of t)this.set(n,i)}get(t){return super.get(hk(this,t))}has(t){return super.has(hk(this,t))}set(t,r){return super.set(Y6(this,t),r)}delete(t){return super.delete(Q6(this,t))}}function hk({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):r}function Y6({_intern:e,_key:t},r){const n=t(r);return e.has(n)?e.get(n):(e.set(n,r),r)}function Q6({_intern:e,_key:t},r){const n=t(r);return e.has(n)&&(r=e.get(n),e.delete(n)),r}function X6(e){return e!==null&&typeof e=="object"?e.valueOf():e}function Z6(e=Xi){if(e===Xi)return K2;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,r)=>{const n=e(t,r);return n||n===0?n:(e(r,r)===0)-(e(t,t)===0)}}function K2(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const J6=Math.sqrt(50),e8=Math.sqrt(10),t8=Math.sqrt(2);function nf(e,t,r){const n=(t-e)/Math.max(0,r),i=Math.floor(Math.log10(n)),o=n/Math.pow(10,i),s=o>=J6?10:o>=e8?5:o>=t8?2:1;let u,d,f;return i<0?(f=Math.pow(10,-i)/s,u=Math.round(e*f),d=Math.round(t*f),u/ft&&--d,f=-f):(f=Math.pow(10,i)*s,u=Math.round(e/f),d=Math.round(t/f),u*ft&&--d),d0))return[];if(e===t)return[e];const n=t=i))return[];const u=o-i+1,d=new Array(u);if(n)if(s<0)for(let f=0;f=n)&&(r=n);else{let n=-1;for(let i of e)(i=t(i,++n,e))!=null&&(r=i)&&(r=i)}return r}function mk(e,t){let r;if(t===void 0)for(const n of e)n!=null&&(r>n||r===void 0&&n>=n)&&(r=n);else{let n=-1;for(let i of e)(i=t(i,++n,e))!=null&&(r>i||r===void 0&&i>=i)&&(r=i)}return r}function V2(e,t,r=0,n=1/0,i){if(t=Math.floor(t),r=Math.floor(Math.max(0,r)),n=Math.floor(Math.min(e.length-1,n)),!(r<=t&&t<=n))return e;for(i=i===void 0?K2:Z6(i);n>r;){if(n-r>600){const d=n-r+1,f=t-r+1,h=Math.log(d),m=.5*Math.exp(2*h/3),v=.5*Math.sqrt(h*m*(d-m)/d)*(f-d/2<0?-1:1),x=Math.max(r,Math.floor(t-f*m/d+v)),k=Math.min(n,Math.floor(t+(d-f)*m/d+v));V2(e,t,x,k,i)}const o=e[t];let s=r,u=n;for(Ns(e,r,t),i(e[n],o)>0&&Ns(e,r,n);s0;)--u}i(e[r],o)===0?Ns(e,r,u):(++u,Ns(e,u,n)),u<=t&&(r=u+1),t<=u&&(n=u-1)}return e}function Ns(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function r8(e,t,r){if(e=Float64Array.from(q6(e)),!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return mk(e);if(t>=1)return pk(e);var n,i=(n-1)*t,o=Math.floor(i),s=pk(V2(e,o).subarray(0,o+1)),u=mk(e.subarray(o+1));return s+(u-s)*(i-o)}}function n8(e,t,r=H2){if(!(!(n=e.length)||isNaN(t=+t))){if(t<=0||n<2)return+r(e[0],0,e);if(t>=1)return+r(e[n-1],n-1,e);var n,i=(n-1)*t,o=Math.floor(i),s=+r(e[o],o,e),u=+r(e[o+1],o+1,e);return s+(u-s)*(i-o)}}function i8(e,t,r){e=+e,t=+t,r=(i=arguments.length)<2?(t=e,e=0,1):i<3?1:+r;for(var n=-1,i=Math.max(0,Math.ceil((t-e)/r))|0,o=new Array(i);++n>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):r===8?fd(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):r===4?fd(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=l8.exec(e))?new yr(t[1],t[2],t[3],1):(t=s8.exec(e))?new yr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=u8.exec(e))?fd(t[1],t[2],t[3],t[4]):(t=c8.exec(e))?fd(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=d8.exec(e))?Sk(t[1],t[2]/100,t[3]/100,1):(t=f8.exec(e))?Sk(t[1],t[2]/100,t[3]/100,t[4]):vk.hasOwnProperty(e)?xk(vk[e]):e==="transparent"?new yr(NaN,NaN,NaN,0):null}function xk(e){return new yr(e>>16&255,e>>8&255,e&255,1)}function fd(e,t,r,n){return n<=0&&(e=t=r=NaN),new yr(e,t,r,n)}function m8(e){return e instanceof Nu||(e=su(e)),e?(e=e.rgb(),new yr(e.r,e.g,e.b,e.opacity)):new yr}function vy(e,t,r,n){return arguments.length===1?m8(e):new yr(e,t,r,n??1)}function yr(e,t,r,n){this.r=+e,this.g=+t,this.b=+r,this.opacity=+n}Tg(yr,vy,G2(Nu,{brighter(e){return e=e==null?af:Math.pow(af,e),new yr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?ou:Math.pow(ou,e),new yr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new yr(Ba(this.r),Ba(this.g),Ba(this.b),of(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:bk,formatHex:bk,formatHex8:v8,formatRgb:wk,toString:wk}));function bk(){return`#${Aa(this.r)}${Aa(this.g)}${Aa(this.b)}`}function v8(){return`#${Aa(this.r)}${Aa(this.g)}${Aa(this.b)}${Aa((isNaN(this.opacity)?1:this.opacity)*255)}`}function wk(){const e=of(this.opacity);return`${e===1?"rgb(":"rgba("}${Ba(this.r)}, ${Ba(this.g)}, ${Ba(this.b)}${e===1?")":`, ${e})`}`}function of(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Ba(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Aa(e){return e=Ba(e),(e<16?"0":"")+e.toString(16)}function Sk(e,t,r,n){return n<=0?e=t=r=NaN:r<=0||r>=1?e=t=NaN:t<=0&&(e=NaN),new an(e,t,r,n)}function Y2(e){if(e instanceof an)return new an(e.h,e.s,e.l,e.opacity);if(e instanceof Nu||(e=su(e)),!e)return new an;if(e instanceof an)return e;e=e.rgb();var t=e.r/255,r=e.g/255,n=e.b/255,i=Math.min(t,r,n),o=Math.max(t,r,n),s=NaN,u=o-i,d=(o+i)/2;return u?(t===o?s=(r-n)/u+(r0&&d<1?0:s,new an(s,u,d,e.opacity)}function y8(e,t,r,n){return arguments.length===1?Y2(e):new an(e,t,r,n??1)}function an(e,t,r,n){this.h=+e,this.s=+t,this.l=+r,this.opacity=+n}Tg(an,y8,G2(Nu,{brighter(e){return e=e==null?af:Math.pow(af,e),new an(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?ou:Math.pow(ou,e),new an(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*t,i=2*r-n;return new yr(Zm(e>=240?e-240:e+120,i,n),Zm(e,i,n),Zm(e<120?e+240:e-120,i,n),this.opacity)},clamp(){return new an(kk(this.h),hd(this.s),hd(this.l),of(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=of(this.opacity);return`${e===1?"hsl(":"hsla("}${kk(this.h)}, ${hd(this.s)*100}%, ${hd(this.l)*100}%${e===1?")":`, ${e})`}`}}));function kk(e){return e=(e||0)%360,e<0?e+360:e}function hd(e){return Math.max(0,Math.min(1,e||0))}function Zm(e,t,r){return(e<60?t+(r-t)*e/60:e<180?r:e<240?t+(r-t)*(240-e)/60:t)*255}const Dg=e=>()=>e;function g8(e,t){return function(r){return e+r*t}}function x8(e,t,r){return e=Math.pow(e,r),t=Math.pow(t,r)-e,r=1/r,function(n){return Math.pow(e+n*t,r)}}function b8(e){return(e=+e)==1?Q2:function(t,r){return r-t?x8(t,r,e):Dg(isNaN(t)?r:t)}}function Q2(e,t){var r=t-e;return r?g8(e,r):Dg(isNaN(e)?t:e)}const Ek=(function e(t){var r=b8(t);function n(i,o){var s=r((i=vy(i)).r,(o=vy(o)).r),u=r(i.g,o.g),d=r(i.b,o.b),f=Q2(i.opacity,o.opacity);return function(h){return i.r=s(h),i.g=u(h),i.b=d(h),i.opacity=f(h),i+""}}return n.gamma=e,n})(1);function w8(e,t){t||(t=[]);var r=e?Math.min(t.length,e.length):0,n=t.slice(),i;return function(o){for(i=0;ir&&(o=t.slice(r,o),u[s]?u[s]+=o:u[++s]=o),(n=n[0])===(i=i[0])?u[s]?u[s]+=i:u[++s]=i:(u[++s]=null,d.push({i:s,x:lf(n,i)})),r=Jm.lastIndex;return rt&&(r=e,e=t,t=r),function(n){return Math.max(e,Math.min(t,n))}}function I8(e,t,r){var n=e[0],i=e[1],o=t[0],s=t[1];return i2?M8:I8,d=f=null,m}function m(v){return v==null||isNaN(v=+v)?o:(d||(d=u(e.map(n),t,r)))(n(s(v)))}return m.invert=function(v){return s(i((f||(f=u(t,e.map(n),lf)))(v)))},m.domain=function(v){return arguments.length?(e=Array.from(v,sf),h()):e.slice()},m.range=function(v){return arguments.length?(t=Array.from(v),h()):t.slice()},m.rangeRound=function(v){return t=Array.from(v),r=Rg,h()},m.clamp=function(v){return arguments.length?(s=v?!0:ir,h()):s!==ir},m.interpolate=function(v){return arguments.length?(r=v,h()):r},m.unknown=function(v){return arguments.length?(o=v,m):o},function(v,x){return n=v,i=x,h()}}function $g(){return mh()(ir,ir)}function T8(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function uf(e,t){if(!isFinite(e)||e===0)return null;var r=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),n=e.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+e.slice(r+1)]}function ml(e){return e=uf(Math.abs(e)),e?e[1]:NaN}function D8(e,t){return function(r,n){for(var i=r.length,o=[],s=0,u=e[0],d=0;i>0&&u>0&&(d+u+1>n&&(u=Math.max(1,n-d)),o.push(r.substring(i-=u,i+u)),!((d+=u+1)>n));)u=e[s=(s+1)%e.length];return o.reverse().join(t)}}function R8(e){return function(t){return t.replace(/[0-9]/g,function(r){return e[+r]})}}var $8=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function uu(e){if(!(t=$8.exec(e)))throw new Error("invalid format: "+e);var t;return new Lg({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}uu.prototype=Lg.prototype;function Lg(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}Lg.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function L8(e){e:for(var t=e.length,r=1,n=-1,i;r0&&(n=0);break}return n>0?e.slice(0,n)+e.slice(i+1):e}var cf;function z8(e,t){var r=uf(e,t);if(!r)return cf=void 0,e.toPrecision(t);var n=r[0],i=r[1],o=i-(cf=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=n.length;return o===s?n:o>s?n+new Array(o-s+1).join("0"):o>0?n.slice(0,o)+"."+n.slice(o):"0."+new Array(1-o).join("0")+uf(e,Math.max(0,t+o-1))[0]}function Ak(e,t){var r=uf(e,t);if(!r)return e+"";var n=r[0],i=r[1];return i<0?"0."+new Array(-i).join("0")+n:n.length>i+1?n.slice(0,i+1)+"."+n.slice(i+1):n+new Array(i-n.length+2).join("0")}const Ok={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:T8,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Ak(e*100,t),r:Ak,s:z8,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Ck(e){return e}var _k=Array.prototype.map,jk=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function F8(e){var t=e.grouping===void 0||e.thousands===void 0?Ck:D8(_k.call(e.grouping,Number),e.thousands+""),r=e.currency===void 0?"":e.currency[0]+"",n=e.currency===void 0?"":e.currency[1]+"",i=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?Ck:R8(_k.call(e.numerals,String)),s=e.percent===void 0?"%":e.percent+"",u=e.minus===void 0?"−":e.minus+"",d=e.nan===void 0?"NaN":e.nan+"";function f(m,v){m=uu(m);var x=m.fill,k=m.align,S=m.sign,E=m.symbol,P=m.zero,_=m.width,j=m.comma,O=m.precision,N=m.trim,C=m.type;C==="n"?(j=!0,C="g"):Ok[C]||(O===void 0&&(O=12),N=!0,C="g"),(P||x==="0"&&k==="=")&&(P=!0,x="0",k="=");var R=(v&&v.prefix!==void 0?v.prefix:"")+(E==="$"?r:E==="#"&&/[boxX]/.test(C)?"0"+C.toLowerCase():""),z=(E==="$"?n:/[%p]/.test(C)?s:"")+(v&&v.suffix!==void 0?v.suffix:""),F=Ok[C],V=/[defgprs%]/.test(C);O=O===void 0?6:/[gprs]/.test(C)?Math.max(1,Math.min(21,O)):Math.max(0,Math.min(20,O));function Q(B){var ue=R,G=z,le,fe,de;if(C==="c")G=F(B)+G,B="";else{B=+B;var Y=B<0||1/B<0;if(B=isNaN(B)?d:F(Math.abs(B),O),N&&(B=L8(B)),Y&&+B==0&&S!=="+"&&(Y=!1),ue=(Y?S==="("?S:u:S==="-"||S==="("?"":S)+ue,G=(C==="s"&&!isNaN(B)&&cf!==void 0?jk[8+cf/3]:"")+G+(Y&&S==="("?")":""),V){for(le=-1,fe=B.length;++lede||de>57){G=(de===46?i+B.slice(le+1):B.slice(le))+G,B=B.slice(0,le);break}}}j&&!P&&(B=t(B,1/0));var ae=ue.length+B.length+G.length,X=ae<_?new Array(_-ae+1).join(x):"";switch(j&&P&&(B=t(X+B,X.length?_-G.length:1/0),X=""),k){case"<":B=ue+B+G+X;break;case"=":B=ue+X+B+G;break;case"^":B=X.slice(0,ae=X.length>>1)+ue+B+G+X.slice(ae);break;default:B=X+ue+B+G;break}return o(B)}return Q.toString=function(){return m+""},Q}function h(m,v){var x=Math.max(-8,Math.min(8,Math.floor(ml(v)/3)))*3,k=Math.pow(10,-x),S=f((m=uu(m),m.type="f",m),{suffix:jk[8+x/3]});return function(E){return S(k*E)}}return{format:f,formatPrefix:h}}var pd,zg,X2;B8({thousands:",",grouping:[3],currency:["$",""]});function B8(e){return pd=F8(e),zg=pd.format,X2=pd.formatPrefix,pd}function U8(e){return Math.max(0,-ml(Math.abs(e)))}function W8(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ml(t)/3)))*3-ml(Math.abs(e)))}function H8(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,ml(t)-ml(e))+1}function Z2(e,t,r,n){var i=py(e,t,r),o;switch(n=uu(n??",f"),n.type){case"s":{var s=Math.max(Math.abs(e),Math.abs(t));return n.precision==null&&!isNaN(o=W8(i,s))&&(n.precision=o),X2(n,s)}case"":case"e":case"g":case"p":case"r":{n.precision==null&&!isNaN(o=H8(i,Math.max(Math.abs(e),Math.abs(t))))&&(n.precision=o-(n.type==="e"));break}case"f":case"%":{n.precision==null&&!isNaN(o=U8(i))&&(n.precision=o-(n.type==="%")*2);break}}return zg(n)}function ta(e){var t=e.domain;return e.ticks=function(r){var n=t();return fy(n[0],n[n.length-1],r??10)},e.tickFormat=function(r,n){var i=t();return Z2(i[0],i[i.length-1],r??10,n)},e.nice=function(r){r==null&&(r=10);var n=t(),i=0,o=n.length-1,s=n[i],u=n[o],d,f,h=10;for(u0;){if(f=hy(s,u,r),f===d)return n[i]=s,n[o]=u,t(n);if(f>0)s=Math.floor(s/f)*f,u=Math.ceil(u/f)*f;else if(f<0)s=Math.ceil(s*f)/f,u=Math.floor(u*f)/f;else break;d=f}return e},e}function J2(){var e=$g();return e.copy=function(){return Iu(e,J2())},Kr.apply(e,arguments),ta(e)}function eC(e){var t;function r(n){return n==null||isNaN(n=+n)?t:n}return r.invert=r,r.domain=r.range=function(n){return arguments.length?(e=Array.from(n,sf),r):e.slice()},r.unknown=function(n){return arguments.length?(t=n,r):t},r.copy=function(){return eC(e).unknown(t)},e=arguments.length?Array.from(e,sf):[0,1],ta(r)}function tC(e,t){e=e.slice();var r=0,n=e.length-1,i=e[r],o=e[n],s;return oMath.pow(e,t)}function Y8(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function Mk(e){return(t,r)=>-e(-t,r)}function Fg(e){const t=e(Nk,Ik),r=t.domain;let n=10,i,o;function s(){return i=Y8(n),o=G8(n),r()[0]<0?(i=Mk(i),o=Mk(o),e(K8,V8)):e(Nk,Ik),t}return t.base=function(u){return arguments.length?(n=+u,s()):n},t.domain=function(u){return arguments.length?(r(u),s()):r()},t.ticks=u=>{const d=r();let f=d[0],h=d[d.length-1];const m=h0){for(;v<=x;++v)for(k=1;kh)break;P.push(S)}}else for(;v<=x;++v)for(k=n-1;k>=1;--k)if(S=v>0?k/o(-v):k*o(v),!(Sh)break;P.push(S)}P.length*2{if(u==null&&(u=10),d==null&&(d=n===10?"s":","),typeof d!="function"&&(!(n%1)&&(d=uu(d)).precision==null&&(d.trim=!0),d=zg(d)),u===1/0)return d;const f=Math.max(1,n*u/t.ticks().length);return h=>{let m=h/o(Math.round(i(h)));return m*nr(tC(r(),{floor:u=>o(Math.floor(i(u))),ceil:u=>o(Math.ceil(i(u)))})),t}function rC(){const e=Fg(mh()).domain([1,10]);return e.copy=()=>Iu(e,rC()).base(e.base()),Kr.apply(e,arguments),e}function Tk(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function Dk(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function Bg(e){var t=1,r=e(Tk(t),Dk(t));return r.constant=function(n){return arguments.length?e(Tk(t=+n),Dk(t)):t},ta(r)}function nC(){var e=Bg(mh());return e.copy=function(){return Iu(e,nC()).constant(e.constant())},Kr.apply(e,arguments)}function Rk(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Q8(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function X8(e){return e<0?-e*e:e*e}function Ug(e){var t=e(ir,ir),r=1;function n(){return r===1?e(ir,ir):r===.5?e(Q8,X8):e(Rk(r),Rk(1/r))}return t.exponent=function(i){return arguments.length?(r=+i,n()):r},ta(t)}function Wg(){var e=Ug(mh());return e.copy=function(){return Iu(e,Wg()).exponent(e.exponent())},Kr.apply(e,arguments),e}function Z8(){return Wg.apply(null,arguments).exponent(.5)}function $k(e){return Math.sign(e)*e*e}function J8(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function iC(){var e=$g(),t=[0,1],r=!1,n;function i(o){var s=J8(e(o));return isNaN(s)?n:r?Math.round(s):s}return i.invert=function(o){return e.invert($k(o))},i.domain=function(o){return arguments.length?(e.domain(o),i):e.domain()},i.range=function(o){return arguments.length?(e.range((t=Array.from(o,sf)).map($k)),i):t.slice()},i.rangeRound=function(o){return i.range(o).round(!0)},i.round=function(o){return arguments.length?(r=!!o,i):r},i.clamp=function(o){return arguments.length?(e.clamp(o),i):e.clamp()},i.unknown=function(o){return arguments.length?(n=o,i):n},i.copy=function(){return iC(e.domain(),t).round(r).clamp(e.clamp()).unknown(n)},Kr.apply(i,arguments),ta(i)}function aC(){var e=[],t=[],r=[],n;function i(){var s=0,u=Math.max(1,t.length);for(r=new Array(u-1);++s0?r[u-1]:e[0],u=r?[n[r-1],t]:[n[f-1],n[f]]},s.unknown=function(d){return arguments.length&&(o=d),s},s.thresholds=function(){return n.slice()},s.copy=function(){return oC().domain([e,t]).range(i).unknown(o)},Kr.apply(ta(s),arguments)}function lC(){var e=[.5],t=[0,1],r,n=1;function i(o){return o!=null&&o<=o?t[ju(e,o,0,n)]:r}return i.domain=function(o){return arguments.length?(e=Array.from(o),n=Math.min(e.length,t.length-1),i):e.slice()},i.range=function(o){return arguments.length?(t=Array.from(o),n=Math.min(e.length,t.length-1),i):t.slice()},i.invertExtent=function(o){var s=t.indexOf(o);return[e[s-1],e[s]]},i.unknown=function(o){return arguments.length?(r=o,i):r},i.copy=function(){return lC().domain(e).range(t).unknown(r)},Kr.apply(i,arguments)}const ev=new Date,tv=new Date;function Et(e,t,r,n){function i(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return i.floor=o=>(e(o=new Date(+o)),o),i.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),i.round=o=>{const s=i(o),u=i.ceil(o);return o-s(t(o=new Date(+o),s==null?1:Math.floor(s)),o),i.range=(o,s,u)=>{const d=[];if(o=i.ceil(o),u=u==null?1:Math.floor(u),!(o0))return d;let f;do d.push(f=new Date(+o)),t(o,u),e(o);while(fEt(s=>{if(s>=s)for(;e(s),!o(s);)s.setTime(s-1)},(s,u)=>{if(s>=s)if(u<0)for(;++u<=0;)for(;t(s,-1),!o(s););else for(;--u>=0;)for(;t(s,1),!o(s););}),r&&(i.count=(o,s)=>(ev.setTime(+o),tv.setTime(+s),e(ev),e(tv),Math.floor(r(ev,tv))),i.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?i.filter(n?s=>n(s)%o===0:s=>i.count(0,s)%o===0):i)),i}const df=Et(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);df.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Et(t=>{t.setTime(Math.floor(t/e)*e)},(t,r)=>{t.setTime(+t+r*e)},(t,r)=>(r-t)/e):df);df.range;const Qn=1e3,Fr=Qn*60,Xn=Fr*60,ri=Xn*24,Hg=ri*7,Lk=ri*30,rv=ri*365,Oa=Et(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*Qn)},(e,t)=>(t-e)/Qn,e=>e.getUTCSeconds());Oa.range;const Kg=Et(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Qn)},(e,t)=>{e.setTime(+e+t*Fr)},(e,t)=>(t-e)/Fr,e=>e.getMinutes());Kg.range;const Vg=Et(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Fr)},(e,t)=>(t-e)/Fr,e=>e.getUTCMinutes());Vg.range;const qg=Et(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*Qn-e.getMinutes()*Fr)},(e,t)=>{e.setTime(+e+t*Xn)},(e,t)=>(t-e)/Xn,e=>e.getHours());qg.range;const Gg=Et(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Xn)},(e,t)=>(t-e)/Xn,e=>e.getUTCHours());Gg.range;const Mu=Et(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Fr)/ri,e=>e.getDate()-1);Mu.range;const vh=Et(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ri,e=>e.getUTCDate()-1);vh.range;const sC=Et(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ri,e=>Math.floor(e/ri));sC.range;function Ja(e){return Et(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,r)=>{t.setDate(t.getDate()+r*7)},(t,r)=>(r-t-(r.getTimezoneOffset()-t.getTimezoneOffset())*Fr)/Hg)}const yh=Ja(0),ff=Ja(1),eB=Ja(2),tB=Ja(3),vl=Ja(4),rB=Ja(5),nB=Ja(6);yh.range;ff.range;eB.range;tB.range;vl.range;rB.range;nB.range;function eo(e){return Et(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCDate(t.getUTCDate()+r*7)},(t,r)=>(r-t)/Hg)}const gh=eo(0),hf=eo(1),iB=eo(2),aB=eo(3),yl=eo(4),oB=eo(5),lB=eo(6);gh.range;hf.range;iB.range;aB.range;yl.range;oB.range;lB.range;const Yg=Et(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());Yg.range;const Qg=Et(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());Qg.range;const ni=Et(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());ni.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Et(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,r)=>{t.setFullYear(t.getFullYear()+r*e)});ni.range;const ii=Et(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());ii.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Et(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,r)=>{t.setUTCFullYear(t.getUTCFullYear()+r*e)});ii.range;function uC(e,t,r,n,i,o){const s=[[Oa,1,Qn],[Oa,5,5*Qn],[Oa,15,15*Qn],[Oa,30,30*Qn],[o,1,Fr],[o,5,5*Fr],[o,15,15*Fr],[o,30,30*Fr],[i,1,Xn],[i,3,3*Xn],[i,6,6*Xn],[i,12,12*Xn],[n,1,ri],[n,2,2*ri],[r,1,Hg],[t,1,Lk],[t,3,3*Lk],[e,1,rv]];function u(f,h,m){const v=hE).right(s,v);if(x===s.length)return e.every(py(f/rv,h/rv,m));if(x===0)return df.every(Math.max(py(f,h,m),1));const[k,S]=s[v/s[x-1][2]53)return null;"w"in ne||(ne.w=1),"Z"in ne?($e=iv(Is(ne.y,0,1)),Ee=$e.getUTCDay(),$e=Ee>4||Ee===0?hf.ceil($e):hf($e),$e=vh.offset($e,(ne.V-1)*7),ne.y=$e.getUTCFullYear(),ne.m=$e.getUTCMonth(),ne.d=$e.getUTCDate()+(ne.w+6)%7):($e=nv(Is(ne.y,0,1)),Ee=$e.getDay(),$e=Ee>4||Ee===0?ff.ceil($e):ff($e),$e=Mu.offset($e,(ne.V-1)*7),ne.y=$e.getFullYear(),ne.m=$e.getMonth(),ne.d=$e.getDate()+(ne.w+6)%7)}else("W"in ne||"U"in ne)&&("w"in ne||(ne.w="u"in ne?ne.u%7:"W"in ne?1:0),Ee="Z"in ne?iv(Is(ne.y,0,1)).getUTCDay():nv(Is(ne.y,0,1)).getDay(),ne.m=0,ne.d="W"in ne?(ne.w+6)%7+ne.W*7-(Ee+5)%7:ne.w+ne.U*7-(Ee+6)%7);return"Z"in ne?(ne.H+=ne.Z/100|0,ne.M+=ne.Z%100,iv(ne)):nv(ne)}}function z(J,we,Ae,ne){for(var lt=0,$e=we.length,Ee=Ae.length,vt,lr;lt<$e;){if(ne>=Ee)return-1;if(vt=we.charCodeAt(lt++),vt===37){if(vt=we.charAt(lt++),lr=N[vt in zk?we.charAt(lt++):vt],!lr||(ne=lr(J,Ae,ne))<0)return-1}else if(vt!=Ae.charCodeAt(ne++))return-1}return ne}function F(J,we,Ae){var ne=f.exec(we.slice(Ae));return ne?(J.p=h.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function V(J,we,Ae){var ne=x.exec(we.slice(Ae));return ne?(J.w=k.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function Q(J,we,Ae){var ne=m.exec(we.slice(Ae));return ne?(J.w=v.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function B(J,we,Ae){var ne=P.exec(we.slice(Ae));return ne?(J.m=_.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function ue(J,we,Ae){var ne=S.exec(we.slice(Ae));return ne?(J.m=E.get(ne[0].toLowerCase()),Ae+ne[0].length):-1}function G(J,we,Ae){return z(J,t,we,Ae)}function le(J,we,Ae){return z(J,r,we,Ae)}function fe(J,we,Ae){return z(J,n,we,Ae)}function de(J){return s[J.getDay()]}function Y(J){return o[J.getDay()]}function ae(J){return d[J.getMonth()]}function X(J){return u[J.getMonth()]}function M(J){return i[+(J.getHours()>=12)]}function T(J){return 1+~~(J.getMonth()/3)}function Z(J){return s[J.getUTCDay()]}function se(J){return o[J.getUTCDay()]}function te(J){return d[J.getUTCMonth()]}function ce(J){return u[J.getUTCMonth()]}function ye(J){return i[+(J.getUTCHours()>=12)]}function je(J){return 1+~~(J.getUTCMonth()/3)}return{format:function(J){var we=C(J+="",j);return we.toString=function(){return J},we},parse:function(J){var we=R(J+="",!1);return we.toString=function(){return J},we},utcFormat:function(J){var we=C(J+="",O);return we.toString=function(){return J},we},utcParse:function(J){var we=R(J+="",!0);return we.toString=function(){return J},we}}}var zk={"-":"",_:" ",0:"0"},Tt=/^\s*\d+/,hB=/^%/,pB=/[\\^$*+?|[\]().{}]/g;function Ke(e,t,r){var n=e<0?"-":"",i=(n?-e:e)+"",o=i.length;return n+(o[t.toLowerCase(),r]))}function vB(e,t,r){var n=Tt.exec(t.slice(r,r+1));return n?(e.w=+n[0],r+n[0].length):-1}function yB(e,t,r){var n=Tt.exec(t.slice(r,r+1));return n?(e.u=+n[0],r+n[0].length):-1}function gB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.U=+n[0],r+n[0].length):-1}function xB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.V=+n[0],r+n[0].length):-1}function bB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.W=+n[0],r+n[0].length):-1}function Fk(e,t,r){var n=Tt.exec(t.slice(r,r+4));return n?(e.y=+n[0],r+n[0].length):-1}function Bk(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function wB(e,t,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(r,r+6));return n?(e.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function SB(e,t,r){var n=Tt.exec(t.slice(r,r+1));return n?(e.q=n[0]*3-3,r+n[0].length):-1}function kB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.m=n[0]-1,r+n[0].length):-1}function Uk(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.d=+n[0],r+n[0].length):-1}function EB(e,t,r){var n=Tt.exec(t.slice(r,r+3));return n?(e.m=0,e.d=+n[0],r+n[0].length):-1}function Wk(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.H=+n[0],r+n[0].length):-1}function PB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.M=+n[0],r+n[0].length):-1}function AB(e,t,r){var n=Tt.exec(t.slice(r,r+2));return n?(e.S=+n[0],r+n[0].length):-1}function OB(e,t,r){var n=Tt.exec(t.slice(r,r+3));return n?(e.L=+n[0],r+n[0].length):-1}function CB(e,t,r){var n=Tt.exec(t.slice(r,r+6));return n?(e.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function _B(e,t,r){var n=hB.exec(t.slice(r,r+1));return n?r+n[0].length:-1}function jB(e,t,r){var n=Tt.exec(t.slice(r));return n?(e.Q=+n[0],r+n[0].length):-1}function NB(e,t,r){var n=Tt.exec(t.slice(r));return n?(e.s=+n[0],r+n[0].length):-1}function Hk(e,t){return Ke(e.getDate(),t,2)}function IB(e,t){return Ke(e.getHours(),t,2)}function MB(e,t){return Ke(e.getHours()%12||12,t,2)}function TB(e,t){return Ke(1+Mu.count(ni(e),e),t,3)}function cC(e,t){return Ke(e.getMilliseconds(),t,3)}function DB(e,t){return cC(e,t)+"000"}function RB(e,t){return Ke(e.getMonth()+1,t,2)}function $B(e,t){return Ke(e.getMinutes(),t,2)}function LB(e,t){return Ke(e.getSeconds(),t,2)}function zB(e){var t=e.getDay();return t===0?7:t}function FB(e,t){return Ke(yh.count(ni(e)-1,e),t,2)}function dC(e){var t=e.getDay();return t>=4||t===0?vl(e):vl.ceil(e)}function BB(e,t){return e=dC(e),Ke(vl.count(ni(e),e)+(ni(e).getDay()===4),t,2)}function UB(e){return e.getDay()}function WB(e,t){return Ke(ff.count(ni(e)-1,e),t,2)}function HB(e,t){return Ke(e.getFullYear()%100,t,2)}function KB(e,t){return e=dC(e),Ke(e.getFullYear()%100,t,2)}function VB(e,t){return Ke(e.getFullYear()%1e4,t,4)}function qB(e,t){var r=e.getDay();return e=r>=4||r===0?vl(e):vl.ceil(e),Ke(e.getFullYear()%1e4,t,4)}function GB(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+Ke(t/60|0,"0",2)+Ke(t%60,"0",2)}function Kk(e,t){return Ke(e.getUTCDate(),t,2)}function YB(e,t){return Ke(e.getUTCHours(),t,2)}function QB(e,t){return Ke(e.getUTCHours()%12||12,t,2)}function XB(e,t){return Ke(1+vh.count(ii(e),e),t,3)}function fC(e,t){return Ke(e.getUTCMilliseconds(),t,3)}function ZB(e,t){return fC(e,t)+"000"}function JB(e,t){return Ke(e.getUTCMonth()+1,t,2)}function eU(e,t){return Ke(e.getUTCMinutes(),t,2)}function tU(e,t){return Ke(e.getUTCSeconds(),t,2)}function rU(e){var t=e.getUTCDay();return t===0?7:t}function nU(e,t){return Ke(gh.count(ii(e)-1,e),t,2)}function hC(e){var t=e.getUTCDay();return t>=4||t===0?yl(e):yl.ceil(e)}function iU(e,t){return e=hC(e),Ke(yl.count(ii(e),e)+(ii(e).getUTCDay()===4),t,2)}function aU(e){return e.getUTCDay()}function oU(e,t){return Ke(hf.count(ii(e)-1,e),t,2)}function lU(e,t){return Ke(e.getUTCFullYear()%100,t,2)}function sU(e,t){return e=hC(e),Ke(e.getUTCFullYear()%100,t,2)}function uU(e,t){return Ke(e.getUTCFullYear()%1e4,t,4)}function cU(e,t){var r=e.getUTCDay();return e=r>=4||r===0?yl(e):yl.ceil(e),Ke(e.getUTCFullYear()%1e4,t,4)}function dU(){return"+0000"}function Vk(){return"%"}function qk(e){return+e}function Gk(e){return Math.floor(+e/1e3)}var Do,pC,mC;fU({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function fU(e){return Do=fB(e),pC=Do.format,Do.parse,mC=Do.utcFormat,Do.utcParse,Do}function hU(e){return new Date(e)}function pU(e){return e instanceof Date?+e:+new Date(+e)}function Xg(e,t,r,n,i,o,s,u,d,f){var h=$g(),m=h.invert,v=h.domain,x=f(".%L"),k=f(":%S"),S=f("%I:%M"),E=f("%I %p"),P=f("%a %d"),_=f("%b %d"),j=f("%B"),O=f("%Y");function N(C){return(d(C)t(i/(e.length-1)))},r.quantiles=function(n){return Array.from({length:n+1},(i,o)=>r8(e,o/n))},r.copy=function(){return xC(t).domain(e)},li.apply(r,arguments)}function bh(){var e=0,t=.5,r=1,n=1,i,o,s,u,d,f=ir,h,m=!1,v;function x(S){return isNaN(S=+S)?v:(S=.5+((S=+h(S))-o)*(n*S{if(e!=null){var n=e.scale,i=e.type;if(n==="auto")return i==="category"&&r&&(r.indexOf("LineChart")>=0||r.indexOf("AreaChart")>=0||r.indexOf("ComposedChart")>=0&&!t)?"point":i==="category"?"band":"linear";if(typeof n=="string")return wU(n)?n:"point"}};function SU(e,t){for(var r=0,n=e.length,i=e[0]t)?r=o+1:n=o}return r}function PC(e,t){if(e){var r=t??e.domain(),n=r.map(o=>{var s;return(s=e(o))!==null&&s!==void 0?s:0}),i=e.range();if(!(r.length===0||i.length<2))return o=>{var s,u,d=SU(n,o);if(d<=0)return r[0];if(d>=r.length)return r[r.length-1];var f=(s=n[d-1])!==null&&s!==void 0?s:0,h=(u=n[d])!==null&&u!==void 0?u:0;return Math.abs(o-f)<=Math.abs(o-h)?r[d-1]:r[d]}}}function kU(e){if(e!=null)return"invert"in e&&typeof e.invert=="function"?e.invert.bind(e):PC(e,void 0)}function Qk(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function pf(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);re.cartesianAxis.xAxis[t],si=(e,t)=>{var r=OC(e,t);return r??St},kt={allowDataOverflow:!1,allowDecimals:!0,allowDuplicatedCategory:!0,angle:0,dataKey:void 0,domain:xy,hide:!0,id:0,includeHidden:!1,interval:"preserveEnd",minTickGap:5,mirror:!1,name:void 0,orientation:"left",padding:{top:0,bottom:0},reversed:!1,scale:"auto",tick:!0,tickCount:5,tickFormatter:void 0,ticks:void 0,type:"number",unit:void 0,niceTicks:"auto",width:Pu},CC=(e,t)=>e.cartesianAxis.yAxis[t],ui=(e,t)=>{var r=CC(e,t);return r??kt},NU={domain:[0,"auto"],includeHidden:!1,reversed:!1,allowDataOverflow:!1,allowDuplicatedCategory:!1,dataKey:void 0,id:0,name:"",range:[64,64],scale:"auto",type:"number",unit:""},t0=(e,t)=>{var r=e.cartesianAxis.zAxis[t];return r??NU},or=(e,t,r)=>{switch(t){case"xAxis":return si(e,r);case"yAxis":return ui(e,r);case"zAxis":return t0(e,r);case"angleAxis":return Pg(e,r);case"radiusAxis":return Ag(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},IU=(e,t,r)=>{switch(t){case"xAxis":return si(e,r);case"yAxis":return ui(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},Tu=(e,t,r)=>{switch(t){case"xAxis":return si(e,r);case"yAxis":return ui(e,r);case"angleAxis":return Pg(e,r);case"radiusAxis":return Ag(e,r);default:throw new Error("Unexpected axis type: ".concat(t))}},_C=e=>e.graphicalItems.cartesianItems.some(t=>t.type==="bar")||e.graphicalItems.polarItems.some(t=>t.type==="radialBar");function jC(e,t){return r=>{switch(e){case"xAxis":return"xAxisId"in r&&r.xAxisId===t;case"yAxis":return"yAxisId"in r&&r.yAxisId===t;case"zAxis":return"zAxisId"in r&&r.zAxisId===t;case"angleAxis":return"angleAxisId"in r&&r.angleAxisId===t;case"radiusAxis":return"radiusAxisId"in r&&r.radiusAxisId===t;default:return!1}}}var NC=e=>e.graphicalItems.cartesianItems,MU=H([It,fh],jC),IC=(e,t,r)=>e.filter(r).filter(n=>(t==null?void 0:t.includeHidden)===!0?!0:!n.hide),jl=H([NC,or,MU],IC,{memoizeOptions:{resultEqualityCheck:ph}}),MC=H([jl],e=>e.filter(t=>t.type==="area"||t.type==="bar").filter(_g)),TC=e=>e.filter(t=>!("stackId"in t)||t.stackId===void 0),TU=H([jl],TC),DC=e=>e.map(t=>t.data).filter(Boolean).flat(1),DU=H([jl],e=>e.some(t=>!t.data)),RC=H([jl],DC,{memoizeOptions:{resultEqualityCheck:ph}}),$C=(e,t)=>{var r=t.chartData,n=r===void 0?[]:r,i=t.dataStartIndex,o=t.dataEndIndex;return e.length>0?e:n.slice(i,o+1)},r0=H([RC,lh],$C),RU=(e,t,r)=>(t==null?void 0:t.dataKey)!=null?e.map(n=>({value:Nt(n,t.dataKey)})):r.length>0?r.map(n=>n.dataKey).flatMap(n=>e.map(i=>({value:Nt(i,n)}))):e.map(n=>({value:n})),LC=(e,t,r,n,i,o)=>{var s=n.chartData,u=s===void 0?[]:s,d=n.dataStartIndex,f=n.dataEndIndex,h=RU(e,t,r);if(i&&(t==null?void 0:t.dataKey)!=null&&o.length>0){var m=u.slice(d,f+1),v=m.map(x=>({value:Nt(x,t.dataKey)})).filter(x=>x.value!=null);return[...v,...h]}return h},Du=H([r0,or,jl,lh,DU,RC],LC);function Xo(e){if(_n(e)||e instanceof Date){var t=Number(e);if(Fe(t))return t}}function Zk(e){if(Array.isArray(e)){var t=[Xo(e[0]),Xo(e[1])];return An(t)?t:void 0}var r=Xo(e);if(r!=null)return[r,r]}function In(e){return e.map(Xo).filter(vr)}function $U(e,t){var r=Xo(e),n=Xo(t);return r==null&&n==null?0:r==null?-1:n==null?1:r-n}var LU=H([Du],e=>e==null?void 0:e.map(t=>t.value).sort($U));function zC(e,t){switch(e){case"xAxis":return t.direction==="x";case"yAxis":return t.direction==="y";default:return!1}}function zU(e,t,r){if(!r)return[];if(!r.length)return[];var n;if(typeof t=="number"&&!Cn(t))n=t;else if(Array.isArray(t)){var i=In(t);i.length>0&&(n=Math.max(...i))}return n==null?[]:In(r.flatMap(o=>{var s=Nt(e,o.dataKey),u,d;if(Array.isArray(s)){var f=AC(s,2);u=f[0],d=f[1]}else u=d=s;if(!(!Fe(u)||!Fe(d)))return[n-u,n+d]}))}var Pt=e=>{var t=Mt(e),r=Cl(e);return Tu(e,t,r)},gl=H([Pt],e=>e==null?void 0:e.dataKey),FU=H([MC,lh,Pt],W2),FC=(e,t,r,n)=>{var i={},o=t.reduce((s,u)=>{if(u.stackId==null)return s;var d=s[u.stackId];return d==null&&(d=[]),d.push(u),s[u.stackId]=d,s},i);return Object.fromEntries(Object.entries(o).map(s=>{var u=AC(s,2),d=u[0],f=u[1],h=n?[...f].reverse():f,m=h.map(Cg);return[d,{stackedData:i4(e,m,r),graphicalItems:h}]}))},BC=H([FU,MC,sh,R2],FC),UC=(e,t,r,n)=>{var i=t.dataStartIndex,o=t.dataEndIndex;if(n==null&&r!=="zAxis")return s4(e,i,o)},BU=H([or],e=>e.allowDataOverflow),n0=e=>{var t;if(e==null||!("domain"in e))return xy;if(e.domain!=null)return e.domain;if("ticks"in e&&e.ticks!=null){if(e.type==="number"){var r=In(e.ticks);return[Math.min(...r),Math.max(...r)]}if(e.type==="category")return e.ticks.map(String)}return(t=e==null?void 0:e.domain)!==null&&t!==void 0?t:xy},WC=H([or],n0),HC=H([WC,BU],P2),UU=H([BC,cn,It,HC],UC,{memoizeOptions:{resultEqualityCheck:hh}}),i0=e=>e.errorBars,WU=(e,t,r)=>e.flatMap(n=>t[n.id]).filter(Boolean).filter(n=>zC(r,n)),mf=function(){for(var t=arguments.length,r=new Array(t),n=0;n5&&arguments[5]!==void 0?arguments[5]:[],u,d;if(n.length>0&&n.forEach(f=>{var h,m=f.data!=null?[...f.data]:s,v=(h=i[f.id])===null||h===void 0?void 0:h.filter(x=>zC(o,x));m.forEach(x=>{var k,S=Nt(x,(k=r.dataKey)!==null&&k!==void 0?k:f.dataKey),E=zU(x,S,v);if(E.length>=2){var P=Math.min(...E),_=Math.max(...E);(u==null||Pd)&&(d=_)}var j=Zk(S);j!=null&&(u=u==null?j[0]:Math.min(u,j[0]),d=d==null?j[1]:Math.max(d,j[1]))})}),(r==null?void 0:r.dataKey)!=null&&n.length===0&&t.forEach(f=>{var h=Zk(Nt(f,r.dataKey));h!=null&&(u=u==null?h[0]:Math.min(u,h[0]),d=d==null?h[1]:Math.max(d,h[1]))}),Fe(u)&&Fe(d))return[u,d]},HU=H([r0,or,TU,i0,It,b6],KC,{memoizeOptions:{resultEqualityCheck:hh}});function KU(e){var t=e.value;if(_n(t)||t instanceof Date)return t}var VU=(e,t,r)=>{var n=e.map(KU).filter(i=>i!=null);return r&&(t.dataKey==null||t.allowDuplicatedCategory&&rO(n))?E2(0,e.length):t.allowDuplicatedCategory?n:Array.from(new Set(n))},VC=e=>e.referenceElements.dots,Nl=(e,t,r)=>e.filter(n=>n.ifOverflow==="extendDomain").filter(n=>t==="xAxis"?n.xAxisId===r:n.yAxisId===r),qU=H([VC,It,fh],Nl),qC=e=>e.referenceElements.areas,GU=H([qC,It,fh],Nl),GC=e=>e.referenceElements.lines,YU=H([GC,It,fh],Nl),YC=(e,t)=>{if(e!=null){var r=In(e.map(n=>t==="xAxis"?n.x:n.y));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},QU=H(qU,It,YC),QC=(e,t)=>{if(e!=null){var r=In(e.flatMap(n=>[t==="xAxis"?n.x1:n.y1,t==="xAxis"?n.x2:n.y2]));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},XU=H([GU,It],QC);function ZU(e){var t;if(e.x!=null)return In([e.x]);var r=(t=e.segment)===null||t===void 0?void 0:t.map(n=>n.x);return r==null||r.length===0?[]:In(r)}function JU(e){var t;if(e.y!=null)return In([e.y]);var r=(t=e.segment)===null||t===void 0?void 0:t.map(n=>n.y);return r==null||r.length===0?[]:In(r)}var XC=(e,t)=>{if(e!=null){var r=e.flatMap(n=>t==="xAxis"?ZU(n):JU(n));if(r.length!==0)return[Math.min(...r),Math.max(...r)]}},e7=H([YU,It],XC),t7=H(QU,e7,XU,(e,t,r)=>mf(e,r,t)),ZC=(e,t,r,n,i,o,s,u)=>{if(r!=null)return r;var d=s==="vertical"&&u==="xAxis"||s==="horizontal"&&u==="yAxis",f=d?mf(n,o,i):mf(o,i);return A6(t,f,e.allowDataOverflow)},r7=H([or,WC,HC,UU,HU,t7,ot,It],ZC,{memoizeOptions:{resultEqualityCheck:hh}}),n7=[0,1],JC=(e,t,r,n,i,o,s)=>{if(!((e==null||r==null||r.length===0)&&s===void 0)){var u=e.dataKey,d=e.type,f=Mn(t,o);if(f&&u==null){var h;return E2(0,(h=r==null?void 0:r.length)!==null&&h!==void 0?h:0)}return d==="category"?VU(n,e,f):i==="expand"&&!f?n7:s}},a0=H([or,ot,r0,Du,sh,It,r7],JC),Il=H([or,_C,Sg],EC),e_=(e,t,r)=>{var n=t.niceTicks;if(n!=="none"){var i=n0(t),o=Array.isArray(i)&&(i[0]==="auto"||i[1]==="auto");if((n==="snap125"||n==="adaptive")&&t!=null&&t.tickCount&&An(e)){if(o)return lk(e,t.tickCount,t.allowDecimals,n);if(t.type==="number")return sk(e,t.tickCount,t.allowDecimals,n)}if(n==="auto"&&r==="linear"&&t!=null&&t.tickCount){if(o&&An(e))return lk(e,t.tickCount,t.allowDecimals,"adaptive");if(t.type==="number"&&An(e))return sk(e,t.tickCount,t.allowDecimals,"adaptive")}}},o0=H([a0,Tu,Il],e_),t_=(e,t,r,n)=>{if(n!=="angleAxis"&&(e==null?void 0:e.type)==="number"&&An(t)&&Array.isArray(r)&&r.length>0){var i,o,s=t[0],u=(i=r[0])!==null&&i!==void 0?i:0,d=t[1],f=(o=r[r.length-1])!==null&&o!==void 0?o:0;return[Math.min(s,u),Math.max(d,f)]}return t},i7=H([or,a0,o0,It],t_),a7=H(Du,or,(e,t)=>{if(!(!t||t.type!=="number")){var r=1/0,n=Array.from(In(e.map(m=>m.value))).sort((m,v)=>m-v),i=n[0],o=n[n.length-1];if(i==null||o==null)return 1/0;var s=o-i;if(s===0)return 1/0;for(var u=0;ui,(e,t,r,n,i)=>{if(!Fe(e))return 0;var o=t==="vertical"?n.height:n.width;if(i==="gap")return e*o/2;if(i==="no-gap"){var s=ea(r,e*o),u=e*o/2;return u-s-(u-s)/o*s}return 0}),o7=(e,t,r)=>{var n=si(e,t);return n==null||typeof n.padding!="string"?0:r_(e,"xAxis",t,r,n.padding)},l7=(e,t,r)=>{var n=ui(e,t);return n==null||typeof n.padding!="string"?0:r_(e,"yAxis",t,r,n.padding)},s7=H(si,o7,(e,t)=>{var r,n;if(e==null)return{left:0,right:0};var i=e.padding;return typeof i=="string"?{left:t,right:t}:{left:((r=i.left)!==null&&r!==void 0?r:0)+t,right:((n=i.right)!==null&&n!==void 0?n:0)+t}}),u7=H(ui,l7,(e,t)=>{var r,n;if(e==null)return{top:0,bottom:0};var i=e.padding;return typeof i=="string"?{top:t,bottom:t}:{top:((r=i.top)!==null&&r!==void 0?r:0)+t,bottom:((n=i.bottom)!==null&&n!==void 0?n:0)+t}}),n_=H([Ht,s7,th,eh,(e,t,r)=>r],(e,t,r,n,i)=>{var o=n.padding;return i?[o.left,r.width-o.right]:[e.left+t.left,e.left+e.width-t.right]}),i_=H([Ht,ot,u7,th,eh,(e,t,r)=>r],(e,t,r,n,i,o)=>{var s=i.padding;return o?[n.height-s.bottom,s.top]:t==="horizontal"?[e.top+e.height-r.bottom,e.top+r.top]:[e.top+r.top,e.top+e.height-r.bottom]}),Ru=(e,t,r,n)=>{var i;switch(t){case"xAxis":return n_(e,r,n);case"yAxis":return i_(e,r,n);case"zAxis":return(i=t0(e,r))===null||i===void 0?void 0:i.range;case"angleAxis":return F2(e);case"radiusAxis":return B2(e,r);default:return}},a_=H([or,Ru],uh),c7=H([Il,i7],H6),l0=H([or,Il,c7,a_],e0),o_=(e,t,r,n)=>{if(!(r==null||r.dataKey==null)){var i=r.type,o=r.scale,s=Mn(e,n);if(s&&(i==="number"||o!=="auto"))return t.map(u=>u.value)}},s0=H([ot,Du,Tu,It],o_),wh=H([l0],jg);H([l0],kU);H([l0,LU],PC);H([jl,i0,It],WU);function l_(e,t){return e.idt.id?1:0}var Sh=(e,t)=>t,kh=(e,t,r)=>r,d7=H(Zf,Sh,kh,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(l_)),f7=H(Jf,Sh,kh,(e,t,r)=>e.filter(n=>n.orientation===t).filter(n=>n.mirror===r).sort(l_)),s_=(e,t)=>({width:e.width,height:t.height}),h7=(e,t)=>{var r=typeof t.width=="number"?t.width:Pu;return{width:r,height:e.height}},p7=H(Ht,si,s_),m7=(e,t,r)=>{switch(t){case"top":return e.top;case"bottom":return r-e.bottom;default:return 0}},v7=(e,t,r)=>{switch(t){case"left":return e.left;case"right":return r-e.right;default:return 0}},y7=H(oi,Ht,d7,Sh,kh,(e,t,r,n,i)=>{var o={},s;return r.forEach(u=>{var d=s_(t,u);s==null&&(s=m7(t,n,e));var f=n==="top"&&!i||n==="bottom"&&i;o[u.id]=s-Number(f)*d.height,s+=(f?-1:1)*d.height}),o}),g7=H(ai,Ht,f7,Sh,kh,(e,t,r,n,i)=>{var o={},s;return r.forEach(u=>{var d=h7(t,u);s==null&&(s=v7(t,n,e));var f=n==="left"&&!i||n==="right"&&i;o[u.id]=s-Number(f)*d.width,s+=(f?-1:1)*d.width}),o}),x7=(e,t)=>{var r=si(e,t);if(r!=null)return y7(e,r.orientation,r.mirror)},b7=H([Ht,si,x7,(e,t)=>t],(e,t,r,n)=>{if(t!=null){var i=r==null?void 0:r[n];return i==null?{x:e.left,y:0}:{x:e.left,y:i}}}),w7=(e,t)=>{var r=ui(e,t);if(r!=null)return g7(e,r.orientation,r.mirror)},S7=H([Ht,ui,w7,(e,t)=>t],(e,t,r,n)=>{if(t!=null){var i=r==null?void 0:r[n];return i==null?{x:0,y:e.top}:{x:i,y:e.top}}}),k7=H(Ht,ui,(e,t)=>{var r=typeof t.width=="number"?t.width:Pu;return{width:r,height:e.height}}),u_=(e,t,r,n)=>{if(r!=null){var i=r.allowDuplicatedCategory,o=r.type,s=r.dataKey,u=Mn(e,n),d=t.map(h=>h.value),f=d.filter(h=>h!=null);if(s&&u&&o==="category"&&i&&rO(f))return d}},u0=H([ot,Du,or,It],u_),Jk=H([ot,IU,Il,wh,u0,s0,Ru,o0,It],(e,t,r,n,i,o,s,u,d)=>{if(t!=null){var f=Mn(e,d);return{angle:t.angle,interval:t.interval,minTickGap:t.minTickGap,orientation:t.orientation,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,axisType:d,categoricalDomain:o,duplicateDomain:i,isCategorical:f,niceTicks:u,range:s,realScaleType:r,scale:n}}}),E7=(e,t,r,n,i,o,s,u,d)=>{if(!(t==null||n==null)){var f=Mn(e,d),h=t.type,m=t.ticks,v=t.tickCount,x=r==="scaleBand"&&typeof n.bandwidth=="function"?n.bandwidth()/2:2,k=h==="category"&&n.bandwidth?n.bandwidth()/x:0;k=d==="angleAxis"&&o!=null&&o.length>=2?Lr(o[0]-o[1])*2*k:k;var S=m||i;return S?S.map((E,P)=>{var _=s?s.indexOf(E):E,j=n.map(_);return Fe(j)?{index:P,coordinate:j+k,value:E,offset:k}:null}).filter(vr):f&&u?u.map((E,P)=>{var _=n.map(E);return Fe(_)?{coordinate:_+k,value:E,index:P,offset:k}:null}).filter(vr):n.ticks?n.ticks(v).map((E,P)=>{var _=n.map(E);return Fe(_)?{coordinate:_+k,value:E,index:P,offset:k}:null}).filter(vr):n.domain().map((E,P)=>{var _=n.map(E);return Fe(_)?{coordinate:_+k,value:s?s[E]:E,index:P,offset:k}:null}).filter(vr)}},c_=H([ot,Tu,Il,wh,o0,Ru,u0,s0,It],E7),P7=(e,t,r,n,i,o,s)=>{if(!(t==null||r==null||n==null||n[0]===n[1])){var u=Mn(e,s),d=t.tickCount,f=0;return f=s==="angleAxis"&&(n==null?void 0:n.length)>=2?Lr(n[0]-n[1])*2*f:f,u&&o?o.map((h,m)=>{var v=r.map(h);return Fe(v)?{coordinate:v+f,value:h,index:m,offset:f}:null}).filter(vr):r.ticks?r.ticks(d).map((h,m)=>{var v=r.map(h);return Fe(v)?{coordinate:v+f,value:h,index:m,offset:f}:null}).filter(vr):r.domain().map((h,m)=>{var v=r.map(h);return Fe(v)?{coordinate:v+f,value:i?i[h]:h,index:m,offset:f}:null}).filter(vr)}},d_=H([ot,Tu,wh,Ru,u0,s0,It],P7),f_=H(or,wh,(e,t)=>{if(!(e==null||t==null))return pf(pf({},e),{},{scale:t})}),A7=H([or,Il,a0,a_],e0),O7=H([A7],jg);H((e,t,r)=>t0(e,r),O7,(e,t)=>{if(!(e==null||t==null))return pf(pf({},e),{},{scale:t})});var C7=H([ot,Zf,Jf],(e,t,r)=>{switch(e){case"horizontal":return t.some(n=>n.reversed)?"right-to-left":"left-to-right";case"vertical":return r.some(n=>n.reversed)?"bottom-to-top":"top-to-bottom";case"centric":case"radial":return"left-to-right";default:return}}),_7=(e,t,r)=>{var n;return(n=e.renderedTicks[t])===null||n===void 0?void 0:n[r]};H([_7],e=>{if(!(!e||e.length===0))return t=>{var r,n=1/0,i=e[0];for(var o of e){var s=Math.abs(o.coordinate-t);se.options.defaultTooltipEventType,p_=e=>e.options.validateTooltipEventTypes;function m_(e,t,r){if(e==null)return t;var n=e?"axis":"item";return r==null?t:r.includes(n)?n:t}function $u(e,t){var r=h_(e),n=p_(e);return m_(t,r,n)}function j7(e){return ke(t=>$u(t,e))}var v_=(e,t)=>{var r,n=Number(t);if(!(Cn(n)||t==null))return n>=0?e==null||(r=e[n])===null||r===void 0?void 0:r.value:void 0},N7=e=>e.tooltip.settings,zi={active:!1,index:null,dataKey:void 0,graphicalItemId:void 0,coordinate:void 0},I7={itemInteraction:{click:zi,hover:zi},axisInteraction:{click:zi,hover:zi},keyboardInteraction:zi,syncInteraction:{active:!1,index:null,dataKey:void 0,label:void 0,coordinate:void 0,sourceViewBox:void 0,graphicalItemId:void 0},tooltipItemPayloads:[],settings:{shared:void 0,trigger:"hover",axisId:0,active:!1,defaultIndex:void 0}},y_=Jt({name:"tooltip",initialState:I7,reducers:{addTooltipEntrySettings:{reducer(e,t){e.tooltipItemPayloads.push(t.payload)},prepare:rt()},replaceTooltipEntrySettings:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).tooltipItemPayloads.indexOf(n);o>-1&&(e.tooltipItemPayloads[o]=i)},prepare:rt()},removeTooltipEntrySettings:{reducer(e,t){var r=zr(e).tooltipItemPayloads.indexOf(t.payload);r>-1&&e.tooltipItemPayloads.splice(r,1)},prepare:rt()},setTooltipSettingsState(e,t){e.settings=t.payload},setActiveMouseOverItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.itemInteraction.hover.active=!0,e.itemInteraction.hover.index=t.payload.activeIndex,e.itemInteraction.hover.dataKey=t.payload.activeDataKey,e.itemInteraction.hover.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.hover.coordinate=t.payload.activeCoordinate},mouseLeaveChart(e){e.itemInteraction.hover.active=!1,e.axisInteraction.hover.active=!1},mouseLeaveItem(e){e.itemInteraction.hover.active=!1},setActiveClickItemIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.itemInteraction.click.active=!0,e.keyboardInteraction.active=!1,e.itemInteraction.click.index=t.payload.activeIndex,e.itemInteraction.click.dataKey=t.payload.activeDataKey,e.itemInteraction.click.graphicalItemId=t.payload.activeGraphicalItemId,e.itemInteraction.click.coordinate=t.payload.activeCoordinate},setMouseOverAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.axisInteraction.hover.active=!0,e.keyboardInteraction.active=!1,e.axisInteraction.hover.index=t.payload.activeIndex,e.axisInteraction.hover.dataKey=t.payload.activeDataKey,e.axisInteraction.hover.coordinate=t.payload.activeCoordinate},setMouseClickAxisIndex(e,t){e.syncInteraction.active=!1,e.syncInteraction.sourceViewBox=void 0,e.keyboardInteraction.active=!1,e.axisInteraction.click.active=!0,e.axisInteraction.click.index=t.payload.activeIndex,e.axisInteraction.click.dataKey=t.payload.activeDataKey,e.axisInteraction.click.coordinate=t.payload.activeCoordinate},setSyncInteraction(e,t){e.syncInteraction=t.payload},setKeyboardInteraction(e,t){e.keyboardInteraction.active=t.payload.active,e.keyboardInteraction.index=t.payload.activeIndex,e.keyboardInteraction.coordinate=t.payload.activeCoordinate}}}),Vr=y_.actions,M7=Vr.addTooltipEntrySettings,T7=Vr.replaceTooltipEntrySettings,D7=Vr.removeTooltipEntrySettings,R7=Vr.setTooltipSettingsState,$7=Vr.setActiveMouseOverItemIndex;Vr.mouseLeaveItem;var g_=Vr.mouseLeaveChart;Vr.setActiveClickItemIndex;var x_=Vr.setMouseOverAxisIndex,L7=Vr.setMouseClickAxisIndex,zs=Vr.setSyncInteraction,vf=Vr.setKeyboardInteraction,z7=y_.reducer;function eE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function md(e){for(var t=1;t{if(t==null)return zi;var i=W7(e,t,r);if(i==null)return zi;if(i.active)return i;if(e.keyboardInteraction.active)return e.keyboardInteraction;if(e.syncInteraction.active&&e.syncInteraction.index!=null)return e.syncInteraction;var o=e.settings.active===!0;if(H7(i)){if(o)return md(md({},i),{},{active:!0})}else if(n!=null)return{active:!0,coordinate:void 0,dataKey:void 0,index:n,graphicalItemId:void 0};return md(md({},zi),{},{coordinate:i.coordinate})};function K7(e){if(typeof e=="number")return Number.isFinite(e)?e:void 0;if(e instanceof Date){var t=e.valueOf();return Number.isFinite(t)?t:void 0}var r=Number(e);return Number.isFinite(r)?r:void 0}function V7(e,t){var r=K7(e),n=t[0],i=t[1];if(r===void 0)return!1;var o=Math.min(n,i),s=Math.max(n,i);return r>=o&&r<=s}function q7(e,t,r){if(r==null||t==null)return!0;var n=Nt(e,t);return n==null||!An(r)?!0:V7(n,r)}var Us=(e,t,r,n)=>{var i=e==null?void 0:e.index;if(i==null)return null;var o=Number(i);if(!Fe(o))return i;var s=0,u=1/0;t.length>0&&(u=t.length-1);var d=Math.max(s,Math.min(o,u)),f=t[d];return f==null||q7(f,r,n)?String(d):null},w_=(e,t,r,n,i,o,s)=>{if(o!=null){var u=s[0],d=u==null?void 0:u.getPosition(o);if(d!=null)return d;var f=i==null?void 0:i[Number(o)];if(f)switch(r){case"horizontal":return{x:f.coordinate,y:(n.top+t)/2};default:return{x:(n.left+e)/2,y:f.coordinate}}}},S_=(e,t,r,n)=>{if(t==="axis")return e.tooltipItemPayloads;if(e.tooltipItemPayloads.length===0)return[];var i;if(r==="hover"?i=e.itemInteraction.hover.graphicalItemId:i=e.itemInteraction.click.graphicalItemId,e.syncInteraction.active&&i==null)return e.tooltipItemPayloads;if(i==null&&(n!=null||e.keyboardInteraction.active)){var o=e.tooltipItemPayloads[0];return o!=null?[o]:[]}return e.tooltipItemPayloads.filter(s=>{var u;return((u=s.settings)===null||u===void 0?void 0:u.graphicalItemId)===i})},k_=e=>e.options.tooltipPayloadSearcher,Ml=e=>e.tooltip;function tE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function rE(e){for(var t=1;te(t)}function nE(e){if(typeof e=="string")return e}function e9(e){if(!(e==null||typeof e!="object")){var t="name"in e?X7(e.name):void 0,r="unit"in e?Z7(e.unit):void 0,n="dataKey"in e?J7(e.dataKey):void 0,i="payload"in e?e.payload:void 0,o="color"in e?nE(e.color):void 0,s="fill"in e?nE(e.fill):void 0;return{name:t,unit:r,dataKey:n,payload:i,color:o,fill:s}}}function t9(e,t){return e??t}var E_=(e,t,r,n,i,o,s)=>{if(!(t==null||o==null)){var u=r.chartData,d=r.computedData,f=r.dataStartIndex,h=r.dataEndIndex,m=[];return e.reduce((v,x)=>{var k,S=x.dataDefinedOnItem,E=x.settings,P=t9(S,u),_=Array.isArray(P)?YO(P,f,h):P,j=(k=E==null?void 0:E.dataKey)!==null&&k!==void 0?k:n,O=E==null?void 0:E.nameKey,N;if(n&&Array.isArray(_)&&!Array.isArray(_[0])&&s==="axis"?N=nO(_,n,i):N=o(_,t,d,O),Array.isArray(N))N.forEach(R=>{var z,F,V=e9(R),Q=V==null?void 0:V.name,B=V==null?void 0:V.dataKey,ue=V==null?void 0:V.payload,G=rE(rE({},E),{},{name:Q,unit:V==null?void 0:V.unit,color:(z=V==null?void 0:V.color)!==null&&z!==void 0?z:E==null?void 0:E.color,fill:(F=V==null?void 0:V.fill)!==null&&F!==void 0?F:E==null?void 0:E.fill});v.push(Xw({tooltipEntrySettings:G,dataKey:B,payload:ue,value:Nt(ue,B),name:Q==null?void 0:String(Q)}))});else{var C;v.push(Xw({tooltipEntrySettings:E,dataKey:j,payload:N,value:Nt(N,j),name:(C=Nt(N,O))!==null&&C!==void 0?C:E==null?void 0:E.name}))}return v},m)}},c0=H([Pt,_C,Sg],EC),r9=H([e=>e.graphicalItems.cartesianItems,e=>e.graphicalItems.polarItems],(e,t)=>[...e,...t]),n9=H([Mt,Cl],jC),to=H([r9,Pt,n9],IC,{memoizeOptions:{resultEqualityCheck:ph}}),i9=H([to],e=>e.filter(_g)),P_=H([to],DC,{memoizeOptions:{resultEqualityCheck:ph}}),a9=H([to],e=>e.some(t=>!t.data)),Ya=H([P_,cn],$C),o9=H([i9,cn,Pt],W2),d0=H([Ya,Pt,to,cn,a9,P_],LC),A_=H([Pt],n0),l9=H([Pt],e=>e.allowDataOverflow),O_=H([A_,l9],P2),s9=H([to],e=>e.filter(_g)),u9=H([o9,s9,sh,R2],FC),c9=H([u9,cn,Mt,O_],UC),d9=H([to],TC),f9=H([Ya,Pt,d9,i0,Mt,w6],KC,{memoizeOptions:{resultEqualityCheck:hh}}),h9=H([VC,Mt,Cl],Nl),p9=H([h9,Mt],YC),m9=H([qC,Mt,Cl],Nl),v9=H([m9,Mt],QC),y9=H([GC,Mt,Cl],Nl),g9=H([y9,Mt],XC),x9=H([p9,g9,v9],mf),b9=H([Pt,A_,O_,c9,f9,x9,ot,Mt],ZC),xl=H([Pt,ot,Ya,d0,sh,Mt,b9],JC),w9=H([xl,Pt,c0],e_),S9=H([Pt,xl,w9,Mt],t_),C_=e=>{var t=Mt(e),r=Cl(e),n=!1;return Ru(e,t,r,n)},__=H([Pt,C_],uh),k9=H([Pt,c0,S9,__],e0),j_=H([k9],jg),E9=H([ot,d0,Pt,Mt],u_),P9=H([ot,d0,Pt,Mt],o_),A9=(e,t,r,n,i,o,s,u)=>{if(t){var d=t.type,f=Mn(e,u);if(n){var h=r==="scaleBand"&&n.bandwidth?n.bandwidth()/2:2,m=d==="category"&&n.bandwidth?n.bandwidth()/h:0;return m=u==="angleAxis"&&i!=null&&(i==null?void 0:i.length)>=2?Lr(i[0]-i[1])*2*m:m,f&&s?s.map((v,x)=>{var k=n.map(v);return Fe(k)?{coordinate:k+m,value:v,index:x,offset:m}:null}).filter(vr):n.domain().map((v,x)=>{var k=n.map(v);return Fe(k)?{coordinate:k+m,value:o?o[v]:v,index:x,offset:m}:null}).filter(vr)}}},ci=H([ot,Pt,c0,j_,C_,E9,P9,Mt],A9),f0=H([h_,p_,N7],(e,t,r)=>m_(r.shared,e,t)),N_=e=>e.tooltip.settings.trigger,h0=e=>e.tooltip.settings.defaultIndex,Lu=H([Ml,f0,N_,h0],b_),cu=H([Lu,Ya,gl,xl],Us),I_=H([ci,cu],v_),O9=H([Lu],e=>{if(e)return e.dataKey}),C9=H([Lu],e=>{if(e)return e.graphicalItemId}),M_=H([Ml,f0,N_,h0],S_),_9=H([ai,oi,ot,Ht,ci,h0,M_],w_),j9=H([Lu,_9],(e,t)=>e!=null&&e.coordinate?e.coordinate:t),N9=H([Lu],e=>{var t;return(t=e==null?void 0:e.active)!==null&&t!==void 0?t:!1}),I9=H([M_,cu,cn,gl,I_,k_,f0],E_),M9=H([I9],e=>{if(e!=null){var t=e.map(r=>r.payload).filter(r=>r!=null);return Array.from(new Set(t))}});function iE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function aE(e){for(var t=1;tke(Pt),L9=()=>{var e=$9(),t=ke(ci),r=ke(j_);return Kd(!e||!r?void 0:aE(aE({},e),{},{scale:r}),t)};function oE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Ro(e){for(var t=1;t{var i=t.find(o=>o&&o.index===r);if(i){if(e==="horizontal")return{x:i.coordinate,y:n.relativeY};if(e==="vertical")return{x:n.relativeX,y:i.coordinate}}return{x:0,y:0}},W9=(e,t,r,n)=>{var i=t.find(f=>f&&f.index===r);if(i){if(e==="centric"){var o=i.coordinate,s=n.radius;return Ro(Ro(Ro({},n),Bt(n.cx,n.cy,s,o)),{},{angle:o,radius:s})}var u=i.coordinate,d=n.angle;return Ro(Ro(Ro({},n),Bt(n.cx,n.cy,u,d)),{},{angle:d,radius:u})}return{angle:0,clockWise:!1,cx:0,cy:0,endAngle:0,innerRadius:0,outerRadius:0,radius:0,startAngle:0,x:0,y:0}};function H9(e,t){var r=e.relativeX,n=e.relativeY;return r>=t.left&&r<=t.left+t.width&&n>=t.top&&n<=t.top+t.height}var T_=(e,t,r,n,i)=>{var o,s=(o=t==null?void 0:t.length)!==null&&o!==void 0?o:0;if(s<=1||e==null)return 0;if(n==="angleAxis"&&i!=null&&Math.abs(Math.abs(i[1]-i[0])-360)<=1e-6)for(var u=0;u0?(d=r[u-1])===null||d===void 0?void 0:d.coordinate:(f=r[s-1])===null||f===void 0?void 0:f.coordinate,k=(h=r[u])===null||h===void 0?void 0:h.coordinate,S=u>=s-1?(m=r[0])===null||m===void 0?void 0:m.coordinate:(v=r[u+1])===null||v===void 0?void 0:v.coordinate,E=void 0;if(!(x==null||k==null||S==null))if(Lr(k-x)!==Lr(S-k)){var P=[];if(Lr(S-k)===Lr(i[1]-i[0])){E=S;var _=k+i[1]-i[0];P[0]=Math.min(_,(_+x)/2),P[1]=Math.max(_,(_+x)/2)}else{E=x;var j=S+i[1]-i[0];P[0]=Math.min(k,(j+k)/2),P[1]=Math.max(k,(j+k)/2)}var O=[Math.min(k,(E+k)/2),Math.max(k,(E+k)/2)];if(e>O[0]&&e<=O[1]||e>=P[0]&&e<=P[1]){var N;return(N=r[u])===null||N===void 0?void 0:N.index}}else{var C=Math.min(x,S),R=Math.max(x,S);if(e>(C+k)/2&&e<=(R+k)/2){var z;return(z=r[u])===null||z===void 0?void 0:z.index}}}else if(t)for(var F=0;F(V.coordinate+B.coordinate)/2||F>0&&F(V.coordinate+B.coordinate)/2&&e<=(V.coordinate+Q.coordinate)/2)return V.index}}return-1},D_=()=>ke(Sg),p0=(e,t)=>t,R_=(e,t,r)=>r,m0=(e,t,r,n)=>n,K9=H(ci,e=>Bf(e,t=>t.coordinate)),v0=H([Ml,p0,R_,m0],b_),y0=H([v0,Ya,gl,xl],Us),V9=(e,t,r)=>{if(t!=null){var n=Ml(e);return t==="axis"?r==="hover"?n.axisInteraction.hover.dataKey:n.axisInteraction.click.dataKey:r==="hover"?n.itemInteraction.hover.dataKey:n.itemInteraction.click.dataKey}},$_=H([Ml,p0,R_,m0],S_),yf=H([ai,oi,ot,Ht,ci,m0,$_],w_),q9=H([v0,yf],(e,t)=>{var r;return(r=e.coordinate)!==null&&r!==void 0?r:t}),L_=H([ci,y0],v_),G9=H([$_,y0,cn,gl,L_,k_,p0],E_),Y9=H([v0,y0],(e,t)=>({isActive:e.active&&t!=null,activeIndex:t})),Q9=(e,t,r,n,i,o,s)=>{if(!(!e||!r||!n||!i)&&H9(e,s)){var u=u4(e,t),d=T_(u,o,i,r,n),f=U9(t,i,d,e);return{activeIndex:String(d),activeCoordinate:f}}},X9=(e,t,r,n,i,o,s)=>{if(!(!e||!n||!i||!o||!r)){var u=f6(e,r);if(u){var d=c4(u,t),f=T_(d,s,o,n,i),h=W9(t,o,f,u);return{activeIndex:String(f),activeCoordinate:h}}}},Z9=(e,t,r,n,i,o,s,u)=>{if(!(!e||!t||!n||!i||!o))return t==="horizontal"||t==="vertical"?Q9(e,t,n,i,o,s,u):X9(e,t,r,n,i,o,s)},J9=H(e=>e.zIndex.zIndexMap,(e,t)=>t,(e,t,r)=>r,(e,t,r)=>{if(t!=null){var n=e[t];if(n!=null)return r?n.panoramaElement:n.element}}),eW=H(e=>e.zIndex.zIndexMap,e=>{var t=Object.keys(e).map(n=>parseInt(n,10)).concat(Object.values(nr)),r=Array.from(new Set(t));return r.sort((n,i)=>n-i)},{memoizeOptions:{resultEqualityCheck:W6}});function lE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function sE(e){for(var t=1;tsE(sE({},e),{},{[t]:{element:void 0,panoramaElement:void 0,consumers:0}}),iW)},oW=new Set(Object.values(nr));function lW(e){return oW.has(e)}var z_=Jt({name:"zIndex",initialState:aW,reducers:{registerZIndexPortal:{reducer:(e,t)=>{var r=t.payload.zIndex;e.zIndexMap[r]?e.zIndexMap[r].consumers+=1:e.zIndexMap[r]={consumers:1,element:void 0,panoramaElement:void 0}},prepare:rt()},unregisterZIndexPortal:{reducer:(e,t)=>{var r=t.payload.zIndex;e.zIndexMap[r]&&(e.zIndexMap[r].consumers-=1,e.zIndexMap[r].consumers<=0&&!lW(r)&&delete e.zIndexMap[r])},prepare:rt()},registerZIndexPortalElement:{reducer:(e,t)=>{var r=t.payload,n=r.zIndex,i=r.element,o=r.isPanorama;e.zIndexMap[n]?o?e.zIndexMap[n].panoramaElement=i:e.zIndexMap[n].element=i:e.zIndexMap[n]={consumers:0,element:o?void 0:i,panoramaElement:o?i:void 0}},prepare:rt()},unregisterZIndexPortalElement:{reducer:(e,t)=>{var r=t.payload.zIndex;e.zIndexMap[r]&&(t.payload.isPanorama?e.zIndexMap[r].panoramaElement=void 0:e.zIndexMap[r].element=void 0)},prepare:rt()}}}),Eh=z_.actions,sW=Eh.registerZIndexPortal,av=Eh.unregisterZIndexPortal,uW=Eh.registerZIndexPortalElement,cW=Eh.unregisterZIndexPortalElement,dW=z_.reducer;function di(e){var t=e.zIndex,r=e.children,n=G4(),i=n&&t!==void 0&&t!==0,o=gr(),s=g.useRef(void 0),u=g.useRef(new Set),d=xt(),f=ke(m=>J9(m,t,o));if(g.useLayoutEffect(()=>{if(!i){var m=u.current;m.forEach(x=>{d(av({zIndex:x}))}),m.clear(),s.current=void 0;return}if(u.current.has(t)||(d(sW({zIndex:t})),u.current.add(t)),f){s.current=f;var v=u.current;v.forEach(x=>{x!==t&&(d(av({zIndex:x})),v.delete(x))})}},[d,t,i,f]),g.useLayoutEffect(()=>{var m=u.current;return()=>{m.forEach(v=>{d(av({zIndex:v}))}),m.clear()}},[d]),!i)return r;var h=f??s.current;return h?If.createPortal(r,h):null}function by(){return by=Object.assign?Object.assign.bind():function(e){for(var t=1;tg.useContext(F_),ov={exports:{}},cE;function xW(){return cE||(cE=1,(function(e){var t=Object.prototype.hasOwnProperty,r="~";function n(){}Object.create&&(n.prototype=Object.create(null),new n().__proto__||(r=!1));function i(d,f,h){this.fn=d,this.context=f,this.once=h||!1}function o(d,f,h,m,v){if(typeof h!="function")throw new TypeError("The listener must be a function");var x=new i(h,m||d,v),k=r?r+f:f;return d._events[k]?d._events[k].fn?d._events[k]=[d._events[k],x]:d._events[k].push(x):(d._events[k]=x,d._eventsCount++),d}function s(d,f){--d._eventsCount===0?d._events=new n:delete d._events[f]}function u(){this._events=new n,this._eventsCount=0}u.prototype.eventNames=function(){var f=[],h,m;if(this._eventsCount===0)return f;for(m in h=this._events)t.call(h,m)&&f.push(r?m.slice(1):m);return Object.getOwnPropertySymbols?f.concat(Object.getOwnPropertySymbols(h)):f},u.prototype.listeners=function(f){var h=r?r+f:f,m=this._events[h];if(!m)return[];if(m.fn)return[m.fn];for(var v=0,x=m.length,k=new Array(x);v{if(t&&Array.isArray(e)){var r=Number.parseInt(t,10);if(!Cn(r))return e[r]}},kW={chartName:"",tooltipPayloadSearcher:()=>{},eventEmitter:void 0,defaultTooltipEventType:"axis"},B_=Jt({name:"options",initialState:kW,reducers:{createEventEmitter:e=>{e.eventEmitter==null&&(e.eventEmitter=Symbol("rechartsEventEmitter"))}}}),EW=B_.reducer,PW=B_.actions.createEventEmitter;function AW(e){return e.tooltip.syncInteraction}var OW={chartData:void 0,computedData:void 0,dataStartIndex:0,dataEndIndex:0},U_=Jt({name:"chartData",initialState:OW,reducers:{setChartData(e,t){if(e.chartData=t.payload,t.payload==null){e.dataStartIndex=0,e.dataEndIndex=0;return}t.payload.length>0&&e.dataEndIndex!==t.payload.length-1&&(e.dataEndIndex=t.payload.length-1)},setComputedData(e,t){e.computedData=t.payload},setDataStartEndIndexes(e,t){var r=t.payload,n=r.startIndex,i=r.endIndex;n!=null&&(e.dataStartIndex=n),i!=null&&(e.dataEndIndex=i)}}}),g0=U_.actions,fE=g0.setChartData,CW=g0.setDataStartEndIndexes;g0.setComputedData;var _W=U_.reducer,jW=["x","y"];function hE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function $o(e){for(var t=1;td.rootProps.className);g.useEffect(()=>{if(e==null)return El;var d=(f,h,m)=>{if(t!==m&&e===f){if(h.payload.active===!1){r(zs({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(n==="index"){var v;if(s&&h!==null&&h!==void 0&&(v=h.payload)!==null&&v!==void 0&&v.coordinate&&h.payload.sourceViewBox){var x=h.payload.coordinate,k=x.x,S=x.y,E=TW(x,jW),P=h.payload.sourceViewBox,_=P.x,j=P.y,O=P.width,N=P.height,C=$o($o({},E),{},{x:s.x+(O?(k-_)/O:0)*s.width,y:s.y+(N?(S-j)/N:0)*s.height});r($o($o({},h),{},{payload:$o($o({},h.payload),{},{coordinate:C})}))}else r(h);return}if(i!=null){var R;if(typeof n=="function"){var z={activeTooltipIndex:h.payload.index==null?void 0:Number(h.payload.index),isTooltipActive:h.payload.active,activeIndex:h.payload.index==null?void 0:Number(h.payload.index),activeLabel:h.payload.label,activeDataKey:h.payload.dataKey,activeCoordinate:h.payload.coordinate},F=n(i,z);R=i[F]}else n==="value"&&(R=i.find(de=>String(de.value)===h.payload.label));var V=h.payload.coordinate;if(V==null||s==null){r(zs({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:void 0,graphicalItemId:void 0}));return}if(R==null){r(zs({active:!1,coordinate:void 0,dataKey:void 0,index:null,label:void 0,sourceViewBox:h.payload.sourceViewBox,graphicalItemId:void 0}));return}var Q=V.x,B=V.y,ue=Math.min(Q,s.x+s.width),G=Math.min(B,s.y+s.height),le={x:o==="horizontal"?R.coordinate:ue,y:o==="horizontal"?G:R.coordinate},fe=zs({active:h.payload.active,coordinate:le,dataKey:h.payload.dataKey,index:String(R.index),label:h.payload.label,sourceViewBox:h.payload.sourceViewBox,graphicalItemId:h.payload.graphicalItemId});r(fe)}}};return du.on(wy,d),()=>{du.off(wy,d)}},[u,r,t,e,n,i,o,s])}function $W(){var e=ke(kg),t=ke(Eg),r=xt();g.useEffect(()=>{if(e==null)return El;var n=(i,o,s)=>{t!==s&&e===i&&r(CW(o))};return du.on(dE,n),()=>{du.off(dE,n)}},[r,t,e])}function LW(){var e=xt();g.useEffect(()=>{e(PW())},[e]),RW(),$W()}function zW(e,t,r,n,i,o){var s=ke(k=>V9(k,e,t)),u=ke(C9),d=ke(Eg),f=ke(kg),h=ke($2),m=ke(AW),v=(m==null?void 0:m.sourceViewBox)!=null,x=rh();g.useEffect(()=>{if(!v&&f!=null&&d!=null){var k=zs({active:o,coordinate:r,dataKey:s,index:i,label:typeof n=="number"?String(n):n,sourceViewBox:x,graphicalItemId:u});du.emit(wy,f,k,d)}},[v,r,s,u,i,n,d,f,h,o,x])}function pE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function mE(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r{R(R7({shared:_,trigger:j,axisId:C,active:i,defaultIndex:z}))},[R,_,j,C,i,z]);var F=rh(),V=v2(),Q=j7(_),B=(t=ke(Ae=>Y9(Ae,Q,j,z)))!==null&&t!==void 0?t:{},ue=B.activeIndex,G=B.isActive,le=ke(Ae=>G9(Ae,Q,j,z)),fe=ke(Ae=>L_(Ae,Q,j,z)),de=ke(Ae=>q9(Ae,Q,j,z)),Y=le,ae=gW(),X=(r=i??G)!==null&&r!==void 0?r:!1,M=Y5([Y,X]),T=WW(M,2),Z=T[0],se=T[1],te=Q==="axis"?fe:void 0;zW(Q,j,de,te,ue,X);var ce=N??ae;if(ce==null||F==null||Q==null)return null;var ye=Y??yE;X||(ye=yE),f&&ye.length&&(ye=g5(ye.filter(Ae=>Ae.value!=null&&(Ae.hide!==!0||n.includeHidden)),v,GW));var je=ye.length>0,J=mE(mE({},n),{},{payload:ye,label:te,active:X,activeIndex:ue,coordinate:de,accessibilityLayer:V}),we=g.createElement(oF,{allowEscapeViewBox:o,animationDuration:s,animationEasing:u,isAnimationActive:h,active:X,coordinate:de,hasPayload:je,offset:m,position:x,reverseDirection:k,useTranslate3d:S,viewBox:F,wrapperStyle:E,lastBoundingBox:Z,innerRef:se,hasPortalFromProps:!!N},YW(d,J));return g.createElement(g.Fragment,null,If.createPortal(we,ce),X&&g.createElement(yW,{cursor:P,tooltipEventType:Q,coordinate:de,payload:ye,index:ue}))}function ZW(e,t,r){return(t=JW(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function JW(e){var t=eH(e,"string");return typeof t=="symbol"?t:t+""}function eH(e,t){if(typeof e!="object"||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var n=r.call(e,t);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}class tH{constructor(t){ZW(this,"cache",new Map),this.maxSize=t}get(t){var r=this.cache.get(t);return r!==void 0&&(this.cache.delete(t),this.cache.set(t,r)),r}set(t,r){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxSize){var n=this.cache.keys().next().value;n!=null&&this.cache.delete(n)}this.cache.set(t,r)}clear(){this.cache.clear()}size(){return this.cache.size}}function gE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function rH(e){for(var t=1;t{try{var r=document.getElementById(bE);r||(r=document.createElement("span"),r.setAttribute("id",bE),r.setAttribute("aria-hidden","true"),document.body.appendChild(r)),Object.assign(r.style,lH,t),r.textContent="".concat(e);var n=r.getBoundingClientRect();return{width:n.width,height:n.height}}catch{return{width:0,height:0}}},Ws=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||_u.isSsr)return{width:0,height:0};if(!W_.enableCache)return wE(t,r);var n=sH(t,r),i=xE.get(n);if(i)return i;var o=wE(t,r);return xE.set(n,o),o},H_;function gf(e,t){return fH(e)||dH(e,t)||cH(e,t)||uH()}function uH(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cH(e,t){if(e){if(typeof e=="string")return SE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?SE(e,t):void 0}}function SE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);re.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=e.children,r=e.breakAll,n=e.style;try{var i=[];Ut(t)||(r?i=t.toString().split(""):i=t.toString().split(V_));var o=i.map(u=>({word:u,width:Ws(u,n).width})),s=r?0:Ws(" ",n).width;return{wordsWithComputedWidth:o,spaceWidth:s}}catch{return null}};function G_(e){return e==="start"||e==="middle"||e==="end"||e==="inherit"}function IH(e){return Ut(e)||typeof e=="string"||typeof e=="number"||typeof e=="boolean"}var Y_=(e,t,r,n)=>e.reduce((i,o)=>{var s=o.word,u=o.width,d=i[i.length-1];if(d&&u!=null&&(t==null||n||d.width+u+re.reduce((t,r)=>t.width>r.width?t:r),MH="…",_E=(e,t,r,n,i,o,s,u)=>{var d=e.slice(0,t),f=q_({breakAll:r,style:n,children:d+MH});if(!f)return[!1,[]];var h=Y_(f.wordsWithComputedWidth,o,s,u),m=h.length>i||Q_(h).width>Number(o);return[m,h]},TH=(e,t,r,n,i)=>{var o=e.maxLines,s=e.children,u=e.style,d=e.breakAll,f=be(o),h=String(s),m=Y_(t,n,r,i);if(!f||i)return m;var v=m.length>o||Q_(m).width>Number(n);if(!v)return m;for(var x=0,k=h.length-1,S=0,E;x<=k&&S<=h.length-1;){var P=Math.floor((x+k)/2),_=P-1,j=_E(h,_,d,u,o,n,r,i),O=OE(j,2),N=O[0],C=O[1],R=_E(h,P,d,u,o,n,r,i),z=OE(R,1),F=z[0];if(!N&&!F&&(x=P+1),N&&F&&(k=P-1),!N&&F){E=C;break}S++}return E||m},jE=e=>{var t=Ut(e)?[]:e.toString().split(V_);return[{words:t,width:void 0}]},DH=e=>{var t=e.width,r=e.scaleToFit,n=e.children,i=e.style,o=e.breakAll,s=e.maxLines;if((t||r)&&!_u.isSsr){var u,d,f=q_({breakAll:o,children:n,style:i});if(f){var h=f.wordsWithComputedWidth,m=f.spaceWidth;u=h,d=m}else return jE(n);return TH({breakAll:o,children:n,maxLines:s,style:i},u,d,t,!!r)}return jE(n)},X_="#808080",RH={angle:0,breakAll:!1,capHeight:"0.71em",fill:X_,lineHeight:"1em",scaleToFit:!1,textAnchor:"start",verticalAnchor:"end",x:0,y:0},x0=g.forwardRef((e,t)=>{var r=Hr(e,RH),n=r.x,i=r.y,o=r.lineHeight,s=r.capHeight,u=r.fill,d=r.scaleToFit,f=r.textAnchor,h=r.verticalAnchor,m=AE(r,PH),v=g.useMemo(()=>DH({breakAll:m.breakAll,children:m.children,maxLines:m.maxLines,scaleToFit:d,style:m.style,width:m.width}),[m.breakAll,m.children,m.maxLines,d,m.style,m.width]),x=m.dx,k=m.dy,S=m.angle,E=m.className,P=m.breakAll,_=AE(m,AH);if(!_n(n)||!_n(i)||v.length===0)return null;var j=Number(n)+(be(x)?x:0),O=Number(i)+(be(k)?k:0);if(!Fe(j)||!Fe(O))return null;var N;switch(h){case"start":N=lv("calc(".concat(s,")"));break;case"middle":N=lv("calc(".concat((v.length-1)/2," * -").concat(o," + (").concat(s," / 2))"));break;default:N=lv("calc(".concat(v.length-1," * -").concat(o,")"));break}var C=[],R=v[0];if(d&&R!=null){var z=R.width,F=m.width;C.push("scale(".concat(be(F)&&be(z)?F/z:1,")"))}return S&&C.push("rotate(".concat(S,", ").concat(j,", ").concat(O,")")),C.length&&(_.transform=C.join(" ")),g.createElement("text",Sy({},Br(_),{ref:t,x:j,y:O,className:Xe("recharts-text",E),textAnchor:f,fill:u.includes("url")?X_:u}),v.map((V,Q)=>{var B=V.words.join(P?"":" ");return g.createElement("tspan",{x:j,dy:Q===0?N:o,key:"".concat(B,"-").concat(Q)},B)}))});x0.displayName="Text";function NE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function xn(e){for(var t=1;t{var t=e.viewBox,r=e.position,n=e.offset,i=n===void 0?0:n,o=e.parentViewBox,s=hg(t),u=s.x,d=s.y,f=s.height,h=s.upperWidth,m=s.lowerWidth,v=u,x=u+(h-m)/2,k=(v+x)/2,S=(h+m)/2,E=v+h/2,P=f>=0?1:-1,_=P*i,j=P>0?"end":"start",O=P>0?"start":"end",N=h>=0?1:-1,C=N*i,R=N>0?"end":"start",z=N>0?"start":"end",F=o;if(r==="top"){var V={x:v+h/2,y:d-_,horizontalAnchor:"middle",verticalAnchor:j};return F&&(V.height=Math.max(d-F.y,0),V.width=h),V}if(r==="bottom"){var Q={x:x+m/2,y:d+f+_,horizontalAnchor:"middle",verticalAnchor:O};return F&&(Q.height=Math.max(F.y+F.height-(d+f),0),Q.width=m),Q}if(r==="left"){var B={x:k-C,y:d+f/2,horizontalAnchor:R,verticalAnchor:"middle"};return F&&(B.width=Math.max(B.x-F.x,0),B.height=f),B}if(r==="right"){var ue={x:k+S+C,y:d+f/2,horizontalAnchor:z,verticalAnchor:"middle"};return F&&(ue.width=Math.max(F.x+F.width-ue.x,0),ue.height=f),ue}var G=F?{width:S,height:f}:{};return r==="insideLeft"?xn({x:k+C,y:d+f/2,horizontalAnchor:z,verticalAnchor:"middle"},G):r==="insideRight"?xn({x:k+S-C,y:d+f/2,horizontalAnchor:R,verticalAnchor:"middle"},G):r==="insideTop"?xn({x:v+h/2,y:d+_,horizontalAnchor:"middle",verticalAnchor:O},G):r==="insideBottom"?xn({x:x+m/2,y:d+f-_,horizontalAnchor:"middle",verticalAnchor:j},G):r==="insideTopLeft"?xn({x:v+C,y:d+_,horizontalAnchor:z,verticalAnchor:O},G):r==="insideTopRight"?xn({x:v+h-C,y:d+_,horizontalAnchor:R,verticalAnchor:O},G):r==="insideBottomLeft"?xn({x:x+C,y:d+f-_,horizontalAnchor:z,verticalAnchor:j},G):r==="insideBottomRight"?xn({x:x+m-C,y:d+f-_,horizontalAnchor:R,verticalAnchor:j},G):r&&typeof r=="object"&&(be(r.x)||Ha(r.x))&&(be(r.y)||Ha(r.y))?xn({x:u+ea(r.x,S),y:d+ea(r.y,f),horizontalAnchor:"end",verticalAnchor:"end"},G):xn({x:E,y:d+f/2,horizontalAnchor:"middle",verticalAnchor:"middle"},G)},BH=["labelRef"],UH=["content"];function IE(e,t){if(e==null)return{};var r,n,i=WH(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{var t=e.x,r=e.y,n=e.upperWidth,i=e.lowerWidth,o=e.width,s=e.height,u=e.children,d=g.useMemo(()=>({x:t,y:r,upperWidth:n,lowerWidth:i,width:o,height:s}),[t,r,n,i,o,s]);return g.createElement(Z_.Provider,{value:d},u)},J_=()=>{var e=g.useContext(Z_),t=rh();return e||(t?hg(t):void 0)},GH=g.createContext(null),YH=()=>{var e=g.useContext(GH),t=ke(U2);return e||t},QH=e=>{var t=e.value,r=e.formatter,n=Ut(e.children)?t:e.children;return typeof r=="function"?r(n):n},b0=e=>e!=null&&typeof e=="function",XH=(e,t)=>{var r=Lr(t-e),n=Math.min(Math.abs(t-e),360);return r*n},ZH=(e,t,r,n,i)=>{var o=e.offset,s=e.className,u=i.cx,d=i.cy,f=i.innerRadius,h=i.outerRadius,m=i.startAngle,v=i.endAngle,x=i.clockWise,k=(f+h)/2,S=XH(m,v),E=S>=0?1:-1,P,_;switch(t){case"insideStart":P=m+E*o,_=x;break;case"insideEnd":P=v-E*o,_=!x;break;case"end":P=v+E*o,_=x;break;default:throw new Error("Unsupported position ".concat(t))}_=S<=0?_:!_;var j=Bt(u,d,k,P),O=Bt(u,d,k,P+(_?1:-1)*359),N="M".concat(j.x,",").concat(j.y,` + A`).concat(k,",").concat(k,",0,1,").concat(_?0:1,`, + `).concat(O.x,",").concat(O.y),C=Ut(e.id)?Xs("recharts-radial-line-"):e.id;return g.createElement("text",Gn({},n,{dominantBaseline:"central",className:Xe("recharts-radial-bar-label",s)}),g.createElement("defs",null,g.createElement("path",{id:C,d:N})),g.createElement("textPath",{xlinkHref:"#".concat(C)},r))},JH=(e,t,r)=>{var n=e.cx,i=e.cy,o=e.innerRadius,s=e.outerRadius,u=e.startAngle,d=e.endAngle,f=(u+d)/2;if(r==="outside"){var h=Bt(n,i,s+t,f),m=h.x,v=h.y;return{x:m,y:v,textAnchor:m>=n?"start":"end",verticalAnchor:"middle"}}if(r==="center")return{x:n,y:i,textAnchor:"middle",verticalAnchor:"middle"};if(r==="centerTop")return{x:n,y:i,textAnchor:"middle",verticalAnchor:"start"};if(r==="centerBottom")return{x:n,y:i,textAnchor:"middle",verticalAnchor:"end"};var x=(o+s)/2,k=Bt(n,i,x,f),S=k.x,E=k.y;return{x:S,y:E,textAnchor:"middle",verticalAnchor:"middle"}},Cd=e=>e!=null&&"cx"in e&&be(e.cx),eK={angle:0,offset:5,zIndex:nr.label,position:"middle",textBreakAll:!1};function tK(e){if(!Cd(e))return e;var t=e.cx,r=e.cy,n=e.outerRadius,i=n*2;return{x:t-n,y:r-n,width:i,upperWidth:i,lowerWidth:i,height:i}}function Li(e){var t=Hr(e,eK),r=t.viewBox,n=t.parentViewBox,i=t.position,o=t.value,s=t.children,u=t.content,d=t.className,f=d===void 0?"":d,h=t.textBreakAll,m=t.labelRef,v=YH(),x=J_(),k=i==="center"?x:v??x,S,E,P;r==null?S=k:Cd(r)?S=r:S=hg(r);var _=tK(S);if(!S||Ut(o)&&Ut(s)&&!g.isValidElement(u)&&typeof u!="function")return null;var j=Fs(Fs({},t),{},{viewBox:S});if(g.isValidElement(u)){j.labelRef;var O=IE(j,BH);return g.cloneElement(u,O)}if(typeof u=="function"){j.content;var N=IE(j,UH);if(E=g.createElement(u,N),g.isValidElement(E))return E}else E=QH(t);var C=Br(t);if(Cd(S)){if(i==="insideStart"||i==="insideEnd"||i==="end")return ZH(t,i,E,C,S);P=JH(S,t.offset,t.position)}else{if(!_)return null;var R=FH({viewBox:_,position:i,offset:t.offset,parentViewBox:Cd(n)?void 0:n});P=Fs(Fs({x:R.x,y:R.y,textAnchor:R.horizontalAnchor,verticalAnchor:R.verticalAnchor},R.width!==void 0?{width:R.width}:{}),R.height!==void 0?{height:R.height}:{})}return g.createElement(di,{zIndex:t.zIndex},g.createElement(x0,Gn({ref:m,className:Xe("recharts-label",f)},C,P,{textAnchor:G_(C.textAnchor)?C.textAnchor:P.textAnchor,breakAll:h}),E))}Li.displayName="Label";var rK=(e,t,r)=>{if(!e)return null;var n={viewBox:t,labelRef:r};return e===!0?g.createElement(Li,Gn({key:"label-implicit"},n)):_n(e)?g.createElement(Li,Gn({key:"label-implicit",value:e},n)):g.isValidElement(e)?e.type===Li?g.cloneElement(e,Fs({key:"label-implicit"},n)):g.createElement(Li,Gn({key:"label-implicit",content:e},n)):b0(e)?g.createElement(Li,Gn({key:"label-implicit",content:e},n)):e&&typeof e=="object"?g.createElement(Li,Gn({},e,{key:"label-implicit"},n)):null};function nK(e){var t=e.label,r=e.labelRef,n=J_();return rK(t,n,r)||null}var iK=["valueAccessor"],aK=["dataKey","clockWise","id","textBreakAll","zIndex"];function xf(){return xf=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=Array.isArray(e.value)?e.value[e.value.length-1]:e.value;if(IH(t))return t},ej=g.createContext(void 0),sK=ej.Provider,tj=g.createContext(void 0);tj.Provider;function uK(){return g.useContext(ej)}function cK(){return g.useContext(tj)}function _d(e){var t=e.valueAccessor,r=t===void 0?lK:t,n=TE(e,iK),i=n.dataKey;n.clockWise;var o=n.id,s=n.textBreakAll,u=n.zIndex,d=TE(n,aK),f=uK(),h=cK(),m=f||h;return!m||!m.length?null:g.createElement(di,{zIndex:u??nr.label},g.createElement(Ur,{className:"recharts-label-list"},m.map((v,x)=>{var k,S=Ut(i)?r(v,x):Nt(v.payload,i),E=Ut(o)?{}:{id:"".concat(o,"-").concat(x)};return g.createElement(Li,xf({key:"label-".concat(x)},Br(v),d,E,{fill:(k=n.fill)!==null&&k!==void 0?k:v.fill,parentViewBox:v.parentViewBox,value:S,textBreakAll:s,viewBox:v.viewBox,index:x,zIndex:0}))})))}_d.displayName="LabelList";function dK(e){var t=e.label;return t?t===!0?g.createElement(_d,{key:"labelList-implicit"}):g.isValidElement(t)||b0(t)?g.createElement(_d,{key:"labelList-implicit",content:t}):typeof t=="object"?g.createElement(_d,xf({key:"labelList-implicit"},t,{type:String(t.type)})):null:null}function ky(){return ky=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=e.cx,r=e.cy,n=e.r,i=e.className,o=Xe("recharts-dot",i);return be(t)&&be(r)&&be(n)?g.createElement("circle",ky({},on(e),ng(e),{className:o,cx:t,cy:r,r:n})):null},fK={radiusAxis:{},angleAxis:{}},nj=Jt({name:"polarAxis",initialState:fK,reducers:{addRadiusAxis(e,t){e.radiusAxis[t.payload.id]=t.payload},removeRadiusAxis(e,t){delete e.radiusAxis[t.payload.id]},addAngleAxis(e,t){e.angleAxis[t.payload.id]=t.payload},removeAngleAxis(e,t){delete e.angleAxis[t.payload.id]}}}),Ph=nj.actions;Ph.addRadiusAxis;Ph.removeRadiusAxis;Ph.addAngleAxis;Ph.removeAngleAxis;var hK=nj.reducer;function pK(e){return e&&typeof e=="object"&&"className"in e&&typeof e.className=="string"?e.className:""}var ij=e=>e&&typeof e=="object"&&"clipDot"in e?!!e.clipDot:!0;function DE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function RE(e){for(var t=1;t{n||(i.current===null?r(M7(t)):i.current!==t&&r(T7({prev:i.current,next:t})),i.current=t)},[t,r,n]),g.useLayoutEffect(()=>()=>{i.current&&(r(D7(i.current)),i.current=null)},[r]),null}function EK(e){var t=e.legendPayload,r=xt(),n=gr(),i=g.useRef(null);return g.useLayoutEffect(()=>{n||(i.current===null?r(lz(t)):i.current!==t&&r(sz({prev:i.current,next:t})),i.current=t)},[r,n,t]),g.useLayoutEffect(()=>()=>{i.current&&(r(uz(i.current)),i.current=null)},[r]),null}function PK(e,t){return _K(e)||CK(e,t)||OK(e,t)||AK()}function AK(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function OK(e,t){if(e){if(typeof e=="string")return $E(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?$E(e,t):void 0}}function $E(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r2&&arguments[2]!==void 0?arguments[2]:[],n=[];for(var i of r)n.push({status:"removed",prev:i});for(var o=0;oe[Math.floor(o*r)]);return S0(n,t)}function IK(e,t){var r=t.map((n,i)=>e[i]);return S0(r,t)}function MK(e,t){for(var r=new Map,n=0;n{var x=r(m,v);if(x!=null){var k=n.get(x);if(k!==void 0)return i.add(x),k}}),s=[];for(var u of n){var d=PK(u,2),f=d[0],h=d[1];i.has(f)||s.push(h)}return S0(o,t,s)}function Ey(e,t,r){return t==null?null:e==null?t.map(n=>({status:"added",next:n})):r===w0?NK(e,t):r===jK?IK(e,t):TK(e,t,r)}function oj(e,t){var r=g.useRef(e),n=g.useRef(t.current),i=g.useRef(!0);r.current!==e&&(r.current=e,n.current=t.current,i.current=!1);var o=g.useCallback(function(s,u){var d=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(u===0){i.current=!0;return}u===1&&(n.current=s),u>0&&i.current&&d&&(t.current=s)},[t]);return{startValue:n.current,syncStepValue:o}}function DK(e,t){return zK(e)||LK(e,t)||$K(e,t)||RK()}function RK(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function $K(e,t){if(e){if(typeof e=="string")return LE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?LE(e,t):void 0}}function LE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{typeof e=="function"&&e(),o(!0)},[e]),u=g.useCallback(()=>{typeof t=="function"&&t(),o(!1)},[t]);return{isAnimating:i,handleAnimationStart:s,handleAnimationEnd:u}}function BK(e){var t,r=e.animationInput,n=e.animationIdPrefix,i=e.items,o=e.previousItemsRef,s=e.isAnimationActive,u=e.animationBegin,d=e.animationDuration,f=e.animationEasing,h=e.onAnimationStart,m=e.onAnimationEnd,v=e.animationInterpolateFn,x=e.animationMatchBy,k=e.shouldUpdatePreviousRef,S=e.children,E=e.layout,P=w2(r,n),_=oj(P,o),j=(t=_.startValue)!==null&&t!==void 0?t:null,O=Ey(j,i,x??w0);return g.createElement(b2,{animationId:P,begin:u,duration:d,isActive:s,easing:f,onAnimationEnd:m,onAnimationStart:h,key:P},N=>{var C=j==null,R=i==null?i:v(O,N,E),z=k?k(N):N>0;return _.syncStepValue(R,N,z),R==null?null:S(R,N,C)})}var sv;function UK(e,t){return VK(e)||KK(e,t)||HK(e,t)||WK()}function WK(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function HK(e,t){if(e){if(typeof e=="string")return zE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?zE(e,t):void 0}}function zE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{var e=g.useState(()=>Xs("uid-")),t=UK(e,1),r=t[0];return r},lj=(sv=Cf.useId)!==null&&sv!==void 0?sv:qK;function GK(e,t){var r=lj();return t||(e?"".concat(e,"-").concat(r):r)}var YK=g.createContext(void 0),QK=e=>{var t=e.id,r=e.type,n=e.children,i=GK("recharts-".concat(r),t);return g.createElement(YK.Provider,{value:i},n(i))},XK={cartesianItems:[],polarItems:[]},sj=Jt({name:"graphicalItems",initialState:XK,reducers:{addCartesianGraphicalItem:{reducer(e,t){e.cartesianItems.push(t.payload)},prepare:rt()},replaceCartesianGraphicalItem:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).cartesianItems.indexOf(n);o>-1&&(e.cartesianItems[o]=i)},prepare:rt()},removeCartesianGraphicalItem:{reducer(e,t){var r=zr(e).cartesianItems.indexOf(t.payload);r>-1&&e.cartesianItems.splice(r,1)},prepare:rt()},addPolarGraphicalItem:{reducer(e,t){e.polarItems.push(t.payload)},prepare:rt()},removePolarGraphicalItem:{reducer(e,t){var r=zr(e).polarItems.indexOf(t.payload);r>-1&&e.polarItems.splice(r,1)},prepare:rt()},replacePolarGraphicalItem:{reducer(e,t){var r=t.payload,n=r.prev,i=r.next,o=zr(e).polarItems.indexOf(n);o>-1&&(e.polarItems[o]=i)},prepare:rt()}}}),Tl=sj.actions,ZK=Tl.addCartesianGraphicalItem,JK=Tl.replaceCartesianGraphicalItem,eV=Tl.removeCartesianGraphicalItem;Tl.addPolarGraphicalItem;Tl.removePolarGraphicalItem;Tl.replacePolarGraphicalItem;var tV=sj.reducer,rV=e=>{var t=xt(),r=g.useRef(null);return g.useLayoutEffect(()=>{r.current===null?t(ZK(e)):r.current!==e&&t(JK({prev:r.current,next:e})),r.current=e},[t,e]),g.useLayoutEffect(()=>()=>{r.current&&(t(eV(r.current)),r.current=null)},[t]),null},nV=g.memo(rV),iV=["points"];function FE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function uv(e){for(var t=1;t{var P,_,j=uv(uv(uv({r:3},s),v),{},{index:E,cx:(P=S.x)!==null&&P!==void 0?P:void 0,cy:(_=S.y)!==null&&_!==void 0?_:void 0,dataKey:o,value:S.value,payload:S.payload,points:t});return g.createElement(cV,{key:"dot-".concat(E),option:r,dotProps:j,className:i})}),k={};return u&&d!=null&&(k.clipPath="url(#clipPath-".concat(m?"":"dots-").concat(d,")")),g.createElement(di,{zIndex:h},g.createElement(Ur,bf({className:n},k),x))}function BE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function UE(e){for(var t=1;t({top:e.top,bottom:e.bottom,left:e.left,right:e.right})),AV=H([PV,ai,oi],(e,t,r)=>{if(!(!e||t==null||r==null))return{x:e.left,y:e.top,width:Math.max(0,t-e.left-e.right),height:Math.max(0,r-e.top-e.bottom)}}),k0=()=>ke(AV),OV=()=>ke(M9);function WE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function cv(e){for(var t=1;t{var t=e.point,r=e.childIndex,n=e.mainColor,i=e.activeDot,o=e.dataKey,s=e.clipPath;if(i===!1||t.x==null||t.y==null)return null;var u={index:r,dataKey:o,cx:t.x,cy:t.y,r:4,fill:n??"none",strokeWidth:2,stroke:"#fff",payload:t.payload,value:t.value},d=cv(cv(cv({},u),Lf(i)),ng(i)),f;return g.isValidElement(i)?f=g.cloneElement(i,d):typeof i=="function"?f=i(d):f=g.createElement(rj,d),g.createElement(Ur,{className:"recharts-active-dot",clipPath:s},f)};function HE(e){var t=e.points,r=e.mainColor,n=e.activeDot,i=e.itemDataKey,o=e.clipPath,s=e.zIndex,u=s===void 0?nr.activeDot:s,d=ke(cu),f=OV();if(t==null||f==null)return null;var h=t.find(m=>f.includes(m.payload));return Ut(h)?null:g.createElement(di,{zIndex:u},g.createElement(NV,{point:h,childIndex:Number(d),mainColor:r,dataKey:i,activeDot:n,clipPath:o}))}var IV=e=>{var t=e.chartData,r=xt(),n=gr();return g.useEffect(()=>n?()=>{}:(r(fE(t)),()=>{r(fE(void 0))}),[t,r,n]),null},KE={x:0,y:0,width:0,height:0,padding:{top:0,right:0,bottom:0,left:0}},dj=Jt({name:"brush",initialState:KE,reducers:{setBrushSettings(e,t){return t.payload==null?KE:t.payload}}});dj.actions.setBrushSettings;var MV=dj.reducer;function TV(e){return(e%180+180)%180}var DV=function(t){var r=t.width,n=t.height,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=TV(i),s=o*Math.PI/180,u=Math.atan(n/r),d=s>u&&s{e.dots.push(t.payload)},removeDot:(e,t)=>{var r=zr(e).dots.findIndex(n=>n===t.payload);r!==-1&&e.dots.splice(r,1)},addArea:(e,t)=>{e.areas.push(t.payload)},removeArea:(e,t)=>{var r=zr(e).areas.findIndex(n=>n===t.payload);r!==-1&&e.areas.splice(r,1)},addLine:(e,t)=>{e.lines.push(t.payload)},removeLine:(e,t)=>{var r=zr(e).lines.findIndex(n=>n===t.payload);r!==-1&&e.lines.splice(r,1)}}}),Dl=fj.actions;Dl.addDot;Dl.removeDot;Dl.addArea;Dl.removeArea;Dl.addLine;Dl.removeLine;var $V=fj.reducer;function LV(e,t){return UV(e)||BV(e,t)||FV(e,t)||zV()}function zV(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function FV(e,t){if(e){if(typeof e=="string")return VE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?VE(e,t):void 0}}function VE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{var t=e.children,r=g.useState("".concat(Xs("recharts"),"-clip")),n=LV(r,1),i=n[0],o=k0();if(o==null)return null;var s=o.x,u=o.y,d=o.width,f=o.height;return g.createElement(WV.Provider,{value:i},g.createElement("defs",null,g.createElement("clipPath",{id:i},g.createElement("rect",{x:s,y:u,height:f,width:d}))),t)};function hj(e,t){if(t<1)return[];if(t===1)return e;for(var r=[],n=0;ne*i)return!1;var o=r();return e*(t-e*o/2-n)>=0&&e*(t+e*o/2-i)<=0}function qV(e,t){return hj(e,t+1)}function GV(e,t,r,n,i){for(var o=(n||[]).slice(),s=t.start,u=t.end,d=0,f=1,h=s,m=function(){var k=n==null?void 0:n[d];if(k===void 0)return{v:hj(n,f)};var S=d,E,P=()=>(E===void 0&&(E=r(k,S)),E),_=k.coordinate,j=d===0||fu(e,_,P,h,u);j||(d=0,h=s,f+=1),j&&(h=_+e*(P()/2+i),d+=f)},v;f<=o.length;)if(v=m(),v)return v.v;return[]}function YV(e,t,r,n,i){var o=(n||[]).slice(),s=o.length;if(s===0)return[];for(var u=t.start,d=t.end,f=1;f<=s;f++){for(var h=(s-1)%f,m=u,v=!0,x=function(){var O=n[S];if(O==null)return 0;var N=S,C,R=()=>(C===void 0&&(C=r(O,N)),C),z=O.coordinate,F=S===h||fu(e,z,R,m,d);if(!F)return v=!1,1;F&&(m=z+e*(R()/2+i))},k,S=h;S(S===void 0&&(S=r(x,v)),S);if(v===s-1){var P=e*(k.coordinate+e*E()/2-d);o[v]=k=Qt(Qt({},k),{},{tickCoord:P>0?k.coordinate-P*e:k.coordinate})}else o[v]=k=Qt(Qt({},k),{},{tickCoord:k.coordinate});if(k.tickCoord!=null){var _=fu(e,k.tickCoord,E,u,d);_&&(d=k.tickCoord-e*(E()/2+i),o[v]=Qt(Qt({},k),{},{isShow:!0}))}},h=s-1;h>=0;h--)f(h);return o}function eq(e,t,r,n,i,o){var s=(n||[]).slice(),u=s.length,d=t.start,f=t.end;if(o){var h=n[u-1];if(h!=null){var m=r(h,u-1),v=e*(h.coordinate+e*m/2-f);if(s[u-1]=h=Qt(Qt({},h),{},{tickCoord:v>0?h.coordinate-v*e:h.coordinate}),h.tickCoord!=null){var x=fu(e,h.tickCoord,()=>m,d,f);x&&(f=h.tickCoord-e*(m/2+i),s[u-1]=Qt(Qt({},h),{},{isShow:!0}))}}}for(var k=o?u-1:u,S=function(_){var j=s[_];if(j==null)return 1;var O=j,N,C=()=>(N===void 0&&(N=r(j,_)),N);if(_===0){var R=e*(O.coordinate-e*C()/2-d);s[_]=O=Qt(Qt({},O),{},{tickCoord:R<0?O.coordinate-R*e:O.coordinate})}else s[_]=O=Qt(Qt({},O),{},{tickCoord:O.coordinate});if(O.tickCoord!=null){var z=fu(e,O.tickCoord,C,d,f);z&&(d=O.tickCoord+e*(C()/2+i),s[_]=Qt(Qt({},O),{},{isShow:!0}))}},E=0;E{var R=typeof f=="function"?f(N.value,C):N.value;return k==="width"?KV(Ws(R,{fontSize:t,letterSpacing:r}),S,m):Ws(R,{fontSize:t,letterSpacing:r})[k]},P=i[0],_=i[1],j=i.length>=2&&P!=null&&_!=null?Lr(_.coordinate-P.coordinate):1,O=VV(o,j,k);return d==="equidistantPreserveStart"?GV(j,O,E,i,s):d==="equidistantPreserveEnd"?YV(j,O,E,i,s):(d==="preserveStart"||d==="preserveStartEnd"?x=eq(j,O,E,i,s,d==="preserveStartEnd"):x=JV(j,O,E,i,s),x.filter(N=>N.isShow))}var tq=e=>{var t=e.ticks,r=e.label,n=e.labelGapWithTick,i=n,o=e.tickSize,s=o===void 0?0:o,u=e.tickMargin,d=u===void 0?0:u,f=0;if(t){Array.from(t).forEach(x=>{if(x){var k=x.getBoundingClientRect();k.width>f&&(f=k.width)}});var h=r?r.getBoundingClientRect().width:0,m=s+d,v=f+m+h+(r?i:0);return Math.round(v)}return 0},rq={xAxis:{},yAxis:{}},pj=Jt({name:"renderedTicks",initialState:rq,reducers:{setRenderedTicks:(e,t)=>{var r=t.payload,n=r.axisType,i=r.axisId,o=r.ticks;e[n][i]=o},removeRenderedTicks:(e,t)=>{var r=t.payload,n=r.axisType,i=r.axisId;delete e[n][i]}}}),mj=pj.actions,nq=mj.setRenderedTicks,iq=mj.removeRenderedTicks,aq=pj.reducer,oq=["axisLine","width","height","className","hide","ticks","axisType","axisId"];function GE(e,t){return cq(e)||uq(e,t)||sq(e,t)||lq()}function lq(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function sq(e,t){if(e){if(typeof e=="string")return YE(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?YE(e,t):void 0}}function YE(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{if(n==null||r==null)return El;var o=t.map(s=>({value:s.value,coordinate:s.coordinate,offset:s.offset,index:s.index}));return i(nq({ticks:o,axisId:n,axisType:r})),()=>{i(iq({axisId:n,axisType:r}))}},[i,t,n,r]),null}var Sq=g.forwardRef((e,t)=>{var r=e.ticks,n=r===void 0?[]:r,i=e.tick,o=e.tickLine,s=e.stroke,u=e.tickFormatter,d=e.unit,f=e.padding,h=e.tickTextProps,m=e.orientation,v=e.mirror,x=e.x,k=e.y,S=e.width,E=e.height,P=e.tickSize,_=e.tickMargin,j=e.fontSize,O=e.letterSpacing,N=e.getTicksConfig,C=e.events,R=e.axisType,z=e.axisId,F=E0(ht(ht({},N),{},{ticks:n}),j,O),V=on(N),Q=Lf(i),B=G_(V.textAnchor)?V.textAnchor:gq(m,v),ue=xq(m,v),G={};typeof o=="object"&&(G=o);var le=ht(ht({},V),{},{fill:"none"},G),fe=F.map(ae=>ht({entry:ae},yq(ae,x,k,S,E,m,P,v,_))),de=fe.map(ae=>{var X=ae.entry,M=ae.line;return g.createElement(Ur,{className:"recharts-cartesian-axis-tick",key:"tick-".concat(X.value,"-").concat(X.coordinate,"-").concat(X.tickCoord)},o&&g.createElement("line",Qa({},le,M,{className:Xe("recharts-cartesian-axis-tick-line",Za(o,"className"))})))}),Y=fe.map((ae,X)=>{var M,T,Z=ae.entry,se=ae.tick,te=ht(ht(ht(ht({verticalAnchor:ue},V),{},{textAnchor:B,stroke:"none",fill:s},se),{},{index:X,payload:Z,visibleTicksCount:F.length,tickFormatter:u,padding:f},h),{},{angle:(M=(T=h==null?void 0:h.angle)!==null&&T!==void 0?T:V.angle)!==null&&M!==void 0?M:0}),ce=ht(ht({},te),Q);return g.createElement(Ur,Qa({className:"recharts-cartesian-axis-tick-label",key:"tick-label-".concat(Z.value,"-").concat(Z.coordinate,"-").concat(Z.tickCoord)},A$(C,Z,X)),i&&g.createElement(bq,{option:i,tickProps:ce,value:"".concat(typeof u=="function"?u(Z.value,X):Z.value).concat(d||"")}))});return g.createElement("g",{className:"recharts-cartesian-axis-ticks recharts-".concat(R,"-ticks")},g.createElement(wq,{ticks:F,axisId:z,axisType:R}),Y.length>0&&g.createElement(di,{zIndex:nr.label},g.createElement("g",{className:"recharts-cartesian-axis-tick-labels recharts-".concat(R,"-tick-labels"),ref:t},Y)),de.length>0&&g.createElement("g",{className:"recharts-cartesian-axis-tick-lines recharts-".concat(R,"-tick-lines")},de))}),kq=g.forwardRef((e,t)=>{var r=e.axisLine,n=e.width,i=e.height,o=e.className,s=e.hide,u=e.ticks,d=e.axisType,f=e.axisId,h=dq(e,oq),m=g.useState(""),v=GE(m,2),x=v[0],k=v[1],S=g.useState(""),E=GE(S,2),P=E[0],_=E[1],j=g.useRef(null);g.useImperativeHandle(t,()=>({getCalculatedWidth:()=>{var N;return tq({ticks:j.current,label:(N=e.labelRef)===null||N===void 0?void 0:N.current,labelGapWithTick:5,tickSize:e.tickSize,tickMargin:e.tickMargin})}}));var O=g.useCallback(N=>{if(N){var C=N.getElementsByClassName("recharts-cartesian-axis-tick-value");j.current=C;var R=C[0];if(R){var z=window.getComputedStyle(R),F=z.fontSize,V=z.letterSpacing;(F!==x||V!==P)&&(k(F),_(V))}}},[x,P]);return s||n!=null&&n<=0||i!=null&&i<=0?null:g.createElement(di,{zIndex:e.zIndex},g.createElement(Ur,{className:Xe("recharts-cartesian-axis",o)},g.createElement(vq,{x:e.x,y:e.y,width:n,height:i,orientation:e.orientation,mirror:e.mirror,axisLine:r,otherSvgProps:on(e)}),g.createElement(Sq,{ref:O,axisType:d,events:h,fontSize:x,getTicksConfig:e,height:e.height,letterSpacing:P,mirror:e.mirror,orientation:e.orientation,padding:e.padding,stroke:e.stroke,tick:e.tick,tickFormatter:e.tickFormatter,tickLine:e.tickLine,tickMargin:e.tickMargin,tickSize:e.tickSize,tickTextProps:e.tickTextProps,ticks:u,unit:e.unit,width:e.width,x:e.x,y:e.y,axisId:f}),g.createElement(qH,{x:e.x,y:e.y,width:e.width,height:e.height,lowerWidth:e.width,upperWidth:e.width},g.createElement(nK,{label:e.label,labelRef:e.labelRef}),e.children)))}),P0=g.forwardRef((e,t)=>{var r=Hr(e,ei);return g.createElement(kq,Qa({},r,{ref:t}))});P0.displayName="CartesianAxis";var Eq=["x1","y1","x2","y2","key"],Pq=["offset"],Aq=["xAxisId","yAxisId"],Oq=["xAxisId","yAxisId"];function XE(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function Xt(e){for(var t=1;t{var t=e.fill;if(!t||t==="none")return null;var r=e.fillOpacity,n=e.x,i=e.y,o=e.width,s=e.height,u=e.ry;return g.createElement("rect",{x:n,y:i,ry:u,width:o,height:s,stroke:"none",fill:t,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function vj(e){var t=e.option,r=e.lineItemProps,n;if(g.isValidElement(t))n=g.cloneElement(t,r);else if(typeof t=="function")n=t(r);else{var i,o=r.x1,s=r.y1,u=r.x2,d=r.y2,f=r.key,h=wf(r,Eq),m=(i=on(h))!==null&&i!==void 0?i:{};m.offset;var v=wf(m,Pq);n=g.createElement("line",Ca({},v,{x1:o,y1:s,x2:u,y2:d,fill:"none",key:f}))}return n}function Mq(e){var t=e.x,r=e.width,n=e.horizontal,i=n===void 0?!0:n,o=e.horizontalPoints;if(!i||!o||!o.length)return null;e.xAxisId,e.yAxisId;var s=wf(e,Aq),u=o.map((d,f)=>{var h=Xt(Xt({},s),{},{x1:t,y1:d,x2:t+r,y2:d,key:"line-".concat(f),index:f});return g.createElement(vj,{key:"line-".concat(f),option:i,lineItemProps:h})});return g.createElement("g",{className:"recharts-cartesian-grid-horizontal"},u)}function Tq(e){var t=e.y,r=e.height,n=e.vertical,i=n===void 0?!0:n,o=e.verticalPoints;if(!i||!o||!o.length)return null;e.xAxisId,e.yAxisId;var s=wf(e,Oq),u=o.map((d,f)=>{var h=Xt(Xt({},s),{},{x1:d,y1:t,x2:d,y2:t+r,key:"line-".concat(f),index:f});return g.createElement(vj,{option:i,lineItemProps:h,key:"line-".concat(f)})});return g.createElement("g",{className:"recharts-cartesian-grid-vertical"},u)}function Dq(e){var t=e.horizontalFill,r=e.fillOpacity,n=e.x,i=e.y,o=e.width,s=e.height,u=e.horizontalPoints,d=e.horizontal,f=d===void 0?!0:d;if(!f||!t||!t.length||u==null)return null;var h=u.map(v=>Math.round(v+i-i)).sort((v,x)=>v-x);i!==h[0]&&h.unshift(0);var m=h.map((v,x)=>{var k=h[x+1],S=k==null,E=S?i+s-v:k-v;if(E<=0)return null;var P=x%t.length;return g.createElement("rect",{key:"react-".concat(x),y:v,x:n,height:E,width:o,stroke:"none",fill:t[P],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return g.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},m)}function Rq(e){var t=e.vertical,r=t===void 0?!0:t,n=e.verticalFill,i=e.fillOpacity,o=e.x,s=e.y,u=e.width,d=e.height,f=e.verticalPoints;if(!r||!n||!n.length)return null;var h=f.map(v=>Math.round(v+o-o)).sort((v,x)=>v-x);o!==h[0]&&h.unshift(0);var m=h.map((v,x)=>{var k=h[x+1],S=k==null,E=S?o+u-v:k-v;if(E<=0)return null;var P=x%n.length;return g.createElement("rect",{key:"react-".concat(x),x:v,y:s,width:E,height:d,stroke:"none",fill:n[P],fillOpacity:i,className:"recharts-cartesian-grid-bg"})});return g.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},m)}var $q=(e,t)=>{var r=e.xAxis,n=e.width,i=e.height,o=e.offset;return QO(E0(Xt(Xt(Xt({},ei),r),{},{ticks:XO(r),viewBox:{x:0,y:0,width:n,height:i}})),o.left,o.left+o.width,t)},Lq=(e,t)=>{var r=e.yAxis,n=e.width,i=e.height,o=e.offset;return QO(E0(Xt(Xt(Xt({},ei),r),{},{ticks:XO(r),viewBox:{x:0,y:0,width:n,height:i}})),o.top,o.top+o.height,t)},zq={horizontal:!0,vertical:!0,horizontalPoints:[],verticalPoints:[],stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[],xAxisId:0,yAxisId:0,syncWithTicks:!1,zIndex:nr.grid};function yj(e){var t=a2(),r=o2(),n=i2(),i=Xt(Xt({},Hr(e,zq)),{},{x:be(e.x)?e.x:n.left,y:be(e.y)?e.y:n.top,width:be(e.width)?e.width:n.width,height:be(e.height)?e.height:n.height}),o=i.xAxisId,s=i.yAxisId,u=i.x,d=i.y,f=i.width,h=i.height,m=i.syncWithTicks,v=i.horizontalValues,x=i.verticalValues,k=gr(),S=ke(F=>Jk(F,"xAxis",o,k)),E=ke(F=>Jk(F,"yAxis",s,k));if(!jn(f)||!jn(h)||!be(u)||!be(d))return null;var P=i.verticalCoordinatesGenerator||$q,_=i.horizontalCoordinatesGenerator||Lq,j=i.horizontalPoints,O=i.verticalPoints;if((!j||!j.length)&&typeof _=="function"){var N=v&&v.length,C=_({yAxis:E?Xt(Xt({},E),{},{ticks:N?v:E.ticks}):void 0,width:t??f,height:r??h,offset:n},N?!0:m);Vd(Array.isArray(C),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(typeof C,"]")),Array.isArray(C)&&(j=C)}if((!O||!O.length)&&typeof P=="function"){var R=x&&x.length,z=P({xAxis:S?Xt(Xt({},S),{},{ticks:R?x:S.ticks}):void 0,width:t??f,height:r??h,offset:n},R?!0:m);Vd(Array.isArray(z),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(typeof z,"]")),Array.isArray(z)&&(O=z)}return g.createElement(di,{zIndex:i.zIndex},g.createElement("g",{className:"recharts-cartesian-grid"},g.createElement(Iq,{fill:i.fill,fillOpacity:i.fillOpacity,x:i.x,y:i.y,width:i.width,height:i.height,ry:i.ry}),g.createElement(Dq,Ca({},i,{horizontalPoints:j})),g.createElement(Rq,Ca({},i,{verticalPoints:O})),g.createElement(Mq,Ca({},i,{offset:n,horizontalPoints:j,xAxis:S,yAxis:E})),g.createElement(Tq,Ca({},i,{offset:n,verticalPoints:O,xAxis:S,yAxis:E}))))}yj.displayName="CartesianGrid";var Fq={},gj=Jt({name:"errorBars",initialState:Fq,reducers:{addErrorBar:(e,t)=>{var r=t.payload,n=r.itemId,i=r.errorBar;e[n]||(e[n]=[]),e[n].push(i)},replaceErrorBar:(e,t)=>{var r=t.payload,n=r.itemId,i=r.prev,o=r.next;e[n]&&(e[n]=e[n].map(s=>s.dataKey===i.dataKey&&s.direction===i.direction?o:s))},removeErrorBar:(e,t)=>{var r=t.payload,n=r.itemId,i=r.errorBar;e[n]&&(e[n]=e[n].filter(o=>o.dataKey!==i.dataKey||o.direction!==i.direction))}}}),A0=gj.actions;A0.addErrorBar;A0.replaceErrorBar;A0.removeErrorBar;var Bq=gj.reducer;function xj(e,t){var r,n,i=ke(f=>si(f,e)),o=ke(f=>ui(f,t)),s=(r=i==null?void 0:i.allowDataOverflow)!==null&&r!==void 0?r:St.allowDataOverflow,u=(n=o==null?void 0:o.allowDataOverflow)!==null&&n!==void 0?n:kt.allowDataOverflow,d=s||u;return{needClip:d,needClipX:s,needClipY:u}}function Uq(e){var t=e.xAxisId,r=e.yAxisId,n=e.clipPathId,i=k0(),o=xj(t,r),s=o.needClipX,u=o.needClipY,d=o.needClip,f=ke(j=>n_(j,t,!1)),h=ke(j=>i_(j,r,!1));if(!d||!i)return null;var m=i.x,v=i.y,x=i.width,k=i.height,S=s&&f?Math.min(f[0],f[1]):m-x/2,E=u&&h?Math.min(h[0],h[1]):v-k/2,P=s&&f?Math.abs(f[1]-f[0]):x*2,_=u&&h?Math.abs(h[1]-h[0]):k*2;return g.createElement("clipPath",{id:"clipPath-".concat(n)},g.createElement("rect",{x:S,y:E,width:P,height:_}))}function Wq(e){var t=Lf(e),r=3,n=2;if(t!=null){var i=t.r,o=t.strokeWidth,s=Number(i),u=Number(o);return(Number.isNaN(s)||s<0)&&(s=r),(Number.isNaN(u)||u<0)&&(u=n),{r:s,strokeWidth:u}}return{r,strokeWidth:n}}function O0(e,t){var r,n;return(r=(n=e.graphicalItems.cartesianItems.find(i=>i.id===t))===null||n===void 0?void 0:n.xAxisId)!==null&&r!==void 0?r:uj}function C0(e,t){var r,n;return(r=(n=e.graphicalItems.cartesianItems.find(i=>i.id===t))===null||n===void 0?void 0:n.yAxisId)!==null&&r!==void 0?r:uj}var bj=(e,t,r)=>f_(e,"xAxis",O0(e,t),r),wj=(e,t,r)=>d_(e,"xAxis",O0(e,t),r),Sj=(e,t,r)=>f_(e,"yAxis",C0(e,t),r),kj=(e,t,r)=>d_(e,"yAxis",C0(e,t),r),Hq=H([ot,bj,Sj,wj,kj],(e,t,r,n,i)=>Mn(e,"xAxis")?Kd(t,n,!1):Kd(r,i,!1)),Kq=(e,t)=>t,Ej=H([NC,Kq],(e,t)=>e.filter(r=>r.type==="area").find(r=>r.id===t)),Pj=e=>{var t=ot(e),r=Mn(t,"xAxis");return r?"yAxis":"xAxis"},Vq=(e,t)=>{var r=Pj(e);return r==="yAxis"?C0(e,t):O0(e,t)},qq=(e,t,r)=>BC(e,Pj(e),Vq(e,t),r),Gq=H([Ej,qq],(e,t)=>{var r;if(!(e==null||t==null)){var n=e.stackId,i=Cg(e);if(!(n==null||i==null)){var o=(r=t[n])===null||r===void 0?void 0:r.stackedData,s=o==null?void 0:o.find(u=>u.key===i);if(s!=null)return s.map(u=>[u[0],u[1]])}}}),Yq=H([ot,bj,Sj,wj,kj,Gq,x6,Hq,Ej,R6],(e,t,r,n,i,o,s,u,d,f)=>{var h=s.chartData,m=s.dataStartIndex,v=s.dataEndIndex;if(!(d==null||e!=="horizontal"&&e!=="vertical"||t==null||r==null||n==null||i==null||n.length===0||i.length===0||u==null)){var x=d.data,k;if(x&&x.length>0?k=x:k=h==null?void 0:h.slice(m,v+1),k!=null)return wG({layout:e,xAxis:t,yAxis:r,xAxisTicks:n,yAxisTicks:i,dataStartIndex:m,areaSettings:d,stackedData:o,displayedData:k,chartBaseValue:f,bandSize:u})}}),Qq=["animationElapsedTime","isAnimating","isEntrance","layout","isRange","stroke","connectNulls"],Xq=["id","baseLine"];function Hs(){return Hs=Object.assign?Object.assign.bind():function(e){for(var t=1;tm.y||0));return be(i)?h=Math.max(i,h):i&&Array.isArray(i)&&i.length&&(h=Math.max(...i.map(m=>m.y||0),h)),be(h)?g.createElement("rect",{x:um.x||0));return be(i)?h=Math.max(i,h):i&&Array.isArray(i)&&i.length&&(h=Math.max(...i.map(m=>m.x||0),h)),be(h)?g.createElement("rect",{x:0,y:ue==null?[]:t===1?e.flatMap(r=>r.status==="removed"?[]:[r.next]):e.flatMap(r=>r.status==="matched"?[bl(bl({},r.next),{},{x:Yn(r.prev.x,r.next.x,t),y:Yn(r.prev.y,r.next.y,t)})]:r.status==="added"?[r.next]:[]),Oj={activeDot:!0,animationBegin:0,animationDuration:1500,animationEasing:"ease",animationMatchBy:w0,animationInterpolateFn:uG,connectNulls:!1,dot:!1,fill:"#3182bd",fillOpacity:.6,hide:!1,isAnimationActive:"auto",legendType:"line",stroke:"#3182bd",strokeWidth:1,type:"linear",label:!1,shape:rG,xAxisId:0,yAxisId:0,zIndex:nr.area};function kf(e,t){return e&&e!=="none"?e:t}var cG=e=>{var t=e.dataKey,r=e.name,n=e.stroke,i=e.fill,o=e.legendType,s=e.hide;return[{inactive:s,dataKey:t,type:o,color:kf(n,i),value:ZO(r,t),payload:e}]},dG=g.memo(e=>{var t=e.dataKey,r=e.data,n=e.stroke,i=e.strokeWidth,o=e.fill,s=e.name,u=e.hide,d=e.unit,f=e.tooltipType,h=e.id,m={dataDefinedOnItem:r,getPosition:El,settings:{stroke:n,strokeWidth:i,fill:o,dataKey:t,nameKey:void 0,name:ZO(s,t),hide:u,type:f,color:kf(n,o),unit:d,graphicalItemId:h}};return g.createElement(kK,{tooltipEntrySettings:m})});function fG(e){var t=e.clipPathId,r=e.points,n=e.props,i=n.needClip,o=n.dot,s=n.dataKey,u=on(n);return g.createElement(fV,{points:r,dot:o,className:"recharts-area-dots",dotClassName:"recharts-area-dot",dataKey:s,baseProps:u,needClip:i,clipPathId:t})}function hG(e){var t=e.showLabels,r=e.children,n=e.points,i=n.map(o=>{var s,u,d={x:(s=o.x)!==null&&s!==void 0?s:0,y:(u=o.y)!==null&&u!==void 0?u:0,width:0,lowerWidth:0,upperWidth:0,height:0};return bl(bl({},d),{},{value:o.value,payload:o.payload,parentViewBox:void 0,viewBox:d,fill:void 0})});return g.createElement(sK,{value:t?i:void 0},r)}function pG(e){var t=e.points,r=e.baseLine,n=e.needClip,i=e.clipPathId,o=e.props,s=e.animationElapsedTime,u=e.isAnimating,d=e.isEntrance,f=o.layout,h=o.type,m=o.stroke,v=o.connectNulls,x=o.isRange,k=o.shape,S=o.id,E=Aj(o,nG),P=Br(E),_=bl(bl({},P),{},{id:S,points:t,connectNulls:v,type:h,baseLine:r,layout:f,stroke:m,isRange:x,animationElapsedTime:s,isAnimating:u,isEntrance:d});return g.createElement(g.Fragment,null,(t==null?void 0:t.length)>1&&g.createElement(Ur,{clipPath:n?"url(#clipPath-".concat(i,")"):void 0},g.createElement(SK,{option:k,DefaultShape:Oj.shape,shapeProps:_})),g.createElement(fG,{points:t,props:E,clipPathId:i}))}function mG(e,t,r){if(be(e)){var n=be(t)?t:void 0;return Yn(n,e,r)}if(Ut(e)||Cn(e)){var i=be(t)?t:void 0;return Yn(i,0,r)}return e}function vG(e){var t=e.needClip,r=e.clipPathId,n=e.props,i=e.previousPointsRef,o=e.previousBaselineRef,s=n.points,u=n.baseLine,d=n.isAnimationActive,f=n.animationBegin,h=n.animationDuration,m=n.animationEasing,v=n.animationMatchBy,x=n.animationInterpolateFn,k=g.useMemo(()=>({points:s,baseLine:u}),[s,u]),S=oj(k,o),E=pg(),P=FK(n.onAnimationStart,n.onAnimationEnd),_=P.isAnimating,j=P.handleAnimationStart,O=P.handleAnimationEnd,N=S.startValue;if(E==null)return null;var C;return Array.isArray(u)&&Array.isArray(N)?C=Ey(N,u,v):Array.isArray(u)?C=Ey(null,u,v):C=null,g.createElement(BK,{animationInput:k,animationIdPrefix:"recharts-area-",items:s,previousItemsRef:i,isAnimationActive:d,animationBegin:f,animationDuration:h,animationEasing:m,onAnimationStart:j,onAnimationEnd:O,animationInterpolateFn:x,animationMatchBy:v,layout:E},(R,z,F)=>{var V;return z===1?V=u:Array.isArray(u)?V=x(C,z,E):V=F?u:mG(u,N,z),S.syncStepValue(V,z),g.createElement(hG,{showLabels:!_,points:s},n.children,g.createElement(pG,{points:R,baseLine:V,needClip:t,clipPathId:r,props:n,animationElapsedTime:z,isAnimating:_||z<1,isEntrance:F}),g.createElement(dK,{label:n.label}))})}function yG(e){var t=e.needClip,r=e.clipPathId,n=e.props,i=g.useRef(null),o=g.useRef();return g.createElement(vG,{needClip:t,clipPathId:r,props:n,previousPointsRef:i,previousBaselineRef:o})}class gG extends g.PureComponent{render(){var t=this.props,r=t.hide,n=t.dot,i=t.points,o=t.className,s=t.top,u=t.left,d=t.needClip,f=t.xAxisId,h=t.yAxisId,m=t.width,v=t.height,x=t.id,k=t.baseLine,S=t.zIndex;if(r)return null;var E=Xe("recharts-area",o),P=x,_=Wq(n),j=_.r,O=_.strokeWidth,N=ij(n),C=j*2+O,R=d?"url(#clipPath-".concat(N?"":"dots-").concat(P,")"):void 0;return g.createElement(di,{zIndex:S},g.createElement(Ur,{className:E},d&&g.createElement("defs",null,g.createElement(Uq,{clipPathId:P,xAxisId:f,yAxisId:h}),!N&&g.createElement("clipPath",{id:"clipPath-dots-".concat(P)},g.createElement("rect",{x:u-C/2,y:s-C/2,width:m+C,height:v+C}))),g.createElement(yG,{needClip:d,clipPathId:P,props:this.props})),g.createElement(HE,{points:i,mainColor:kf(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:R}),this.props.isRange&&Array.isArray(k)&&g.createElement(HE,{points:k,mainColor:kf(this.props.stroke,this.props.fill),itemDataKey:this.props.dataKey,activeDot:this.props.activeDot,clipPath:R}))}}function xG(e){var t,r=e.activeDot,n=e.animationBegin,i=e.animationDuration,o=e.animationEasing,s=e.connectNulls,u=e.dot,d=e.fill,f=e.fillOpacity,h=e.hide,m=e.isAnimationActive,v=e.legendType,x=e.stroke,k=e.xAxisId,S=e.yAxisId,E=Aj(e,iG),P=Pl(),_=D_(),j=xj(k,S),O=j.needClip,N=gr(),C=(t=ke(le=>Yq(le,e.id,N)))!==null&&t!==void 0?t:{},R=C.points,z=C.isRange,F=C.baseLine,V=k0();if(P!=="horizontal"&&P!=="vertical"||V==null||_!=="AreaChart"&&_!=="ComposedChart")return null;var Q=V.height,B=V.width,ue=V.x,G=V.y;return!R||!R.length?null:g.createElement(gG,Sf({},E,{activeDot:r,animationBegin:n,animationDuration:i,animationEasing:o,baseLine:F,connectNulls:s,dot:u,fill:d,fillOpacity:f,height:Q,hide:h,layout:P,isAnimationActive:m,isRange:z,legendType:v,needClip:O,points:R,stroke:x,width:B,left:ue,top:G,xAxisId:k,yAxisId:S}))}var bG=(e,t,r,n,i)=>{var o=r??t;if(be(o))return o;var s=e==="horizontal"?i:n,u=s.scale.domain();if(s.type==="number"){var d=Math.max(u[0],u[1]),f=Math.min(u[0],u[1]);return o==="dataMin"?f:o==="dataMax"||d<0?d:Math.max(Math.min(u[0],u[1]),0)}return o==="dataMin"?u[0]:o==="dataMax"?u[1]:u[0]};function wG(e){var t=e.areaSettings,r=t.connectNulls,n=t.baseValue,i=t.dataKey,o=e.stackedData,s=e.layout,u=e.chartBaseValue,d=e.xAxis,f=e.yAxis,h=e.displayedData,m=e.dataStartIndex,v=e.xAxisTicks,x=e.yAxisTicks,k=e.bandSize,S=o&&o.length,E=bG(s,u,n,d,f),P=s==="horizontal",_=!1,j=h.map((N,C)=>{var R,z,F,V;if(S)V=o[m+C];else{var Q=Nt(N,i);Array.isArray(Q)?(V=Q,_=!0):V=[E,Q]}var B=(R=(z=V)===null||z===void 0?void 0:z[1])!==null&&R!==void 0?R:null,ue=B==null||S&&!r&&Nt(N,i)==null;if(P){var G;return{x:Gw({axis:d,ticks:v,bandSize:k,entry:N,index:C}),y:ue?null:(G=f.scale.map(B))!==null&&G!==void 0?G:null,value:V,payload:N}}return{x:ue?null:(F=d.scale.map(B))!==null&&F!==void 0?F:null,y:Gw({axis:f,ticks:x,bandSize:k,entry:N,index:C}),value:V,payload:N}}),O;return S||_?O=j.map(N=>{var C,R=Array.isArray(N.value)?N.value[0]:null;if(P){var z;return{x:N.x,y:R!=null&&N.y!=null&&(z=f.scale.map(R))!==null&&z!==void 0?z:null,payload:N.payload}}return{x:R!=null&&(C=d.scale.map(R))!==null&&C!==void 0?C:null,y:N.y,payload:N.payload}}):O=P?f.scale.map(E):d.scale.map(E),{points:j,baseLine:O??0,isRange:_}}function SG(e){var t=Hr(e,Oj),r=gr();return g.createElement(QK,{id:t.id,type:"area"},n=>g.createElement(g.Fragment,null,g.createElement(EK,{legendPayload:cG(t)}),g.createElement(dG,{dataKey:t.dataKey,data:t.data,stroke:t.stroke,strokeWidth:t.strokeWidth,fill:t.fill,name:t.name,hide:t.hide,unit:t.unit,tooltipType:t.tooltipType,id:n}),g.createElement(nV,{type:"area",id:n,data:t.data,dataKey:t.dataKey,xAxisId:t.xAxisId,yAxisId:t.yAxisId,zAxisId:0,stackId:a4(t.stackId),hide:t.hide,barSize:void 0,baseValue:t.baseValue,isPanorama:r,connectNulls:t.connectNulls}),g.createElement(xG,Sf({},t,{id:n}))))}var Cj=g.memo(SG,oh);Cj.displayName="Area";var kG=["domain","range"],EG=["domain","range"];function eP(e,t){if(e==null)return{};var r,n,i=PG(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{if(s!=null)return nP(nP({},o),{},{type:s})},[o,s]);return g.useLayoutEffect(()=>{u!=null&&(r.current===null?t(yV(u)):r.current!==u&&t(gV({prev:r.current,next:u})),r.current=u)},[u,t]),g.useLayoutEffect(()=>()=>{r.current&&(t(xV(r.current)),r.current=null)},[t]),null}var TG=e=>{var t=e.xAxisId,r=e.className,n=ke(e2),i=gr(),o="xAxis",s=ke(v=>c_(v,o,t,i)),u=ke(v=>p7(v,t)),d=ke(v=>b7(v,t)),f=ke(v=>OC(v,t));if(u==null||d==null||f==null)return null;e.dangerouslySetInnerHTML,e.ticks,e.scale;var h=Ay(e,OG);f.id,f.scale;var m=Ay(f,CG);return g.createElement(P0,Py({},h,m,{x:d.x,y:d.y,width:u.width,height:u.height,className:Xe("recharts-".concat(o," ").concat(o),r),viewBox:n,ticks:s,axisType:o,axisId:t}))},DG={allowDataOverflow:St.allowDataOverflow,allowDecimals:St.allowDecimals,allowDuplicatedCategory:St.allowDuplicatedCategory,angle:St.angle,axisLine:ei.axisLine,height:St.height,hide:!1,includeHidden:St.includeHidden,interval:St.interval,label:!1,minTickGap:St.minTickGap,mirror:St.mirror,orientation:St.orientation,padding:St.padding,reversed:St.reversed,scale:St.scale,tick:St.tick,tickCount:St.tickCount,tickLine:ei.tickLine,tickSize:ei.tickSize,type:St.type,niceTicks:St.niceTicks,xAxisId:0},RG=e=>{var t=Hr(e,DG);return g.createElement(g.Fragment,null,g.createElement(MG,{allowDataOverflow:t.allowDataOverflow,allowDecimals:t.allowDecimals,allowDuplicatedCategory:t.allowDuplicatedCategory,angle:t.angle,dataKey:t.dataKey,domain:t.domain,height:t.height,hide:t.hide,id:t.xAxisId,includeHidden:t.includeHidden,interval:t.interval,minTickGap:t.minTickGap,mirror:t.mirror,name:t.name,orientation:t.orientation,padding:t.padding,reversed:t.reversed,scale:t.scale,tick:t.tick,tickCount:t.tickCount,tickFormatter:t.tickFormatter,ticks:t.ticks,type:t.type,unit:t.unit,niceTicks:t.niceTicks}),g.createElement(TG,t))},Oy=g.memo(RG,_j);Oy.displayName="XAxis";var $G=["type"],LG=["dangerouslySetInnerHTML","ticks","scale"],zG=["id","scale"];function Cy(){return Cy=Object.assign?Object.assign.bind():function(e){for(var t=1;t{if(s!=null)return aP(aP({},o),{},{type:s})},[s,o]);return g.useLayoutEffect(()=>{u!=null&&(r.current===null?t(bV(u)):r.current!==u&&t(wV({prev:r.current,next:u})),r.current=u)},[u,t]),g.useLayoutEffect(()=>()=>{r.current&&(t(SV(r.current)),r.current=null)},[t]),null}function KG(e){var t=e.yAxisId,r=e.className,n=e.width,i=e.label,o=g.useRef(null),s=g.useRef(null),u=ke(e2),d=gr(),f=xt(),h="yAxis",m=ke(P=>k7(P,t)),v=ke(P=>S7(P,t)),x=ke(P=>c_(P,h,t,d)),k=ke(P=>CC(P,t));if(g.useLayoutEffect(()=>{if(!(n!=="auto"||!m||b0(i)||g.isValidElement(i)||k==null)){var P=o.current;if(P){var _=P.getCalculatedWidth();Math.round(m.width)!==Math.round(_)&&f(kV({id:t,width:_}))}}},[x,m,f,i,t,n,k]),m==null||v==null||k==null)return null;e.dangerouslySetInnerHTML,e.ticks,e.scale;var S=_y(e,LG);k.id,k.scale;var E=_y(k,zG);return g.createElement(P0,Cy({},S,E,{ref:o,labelRef:s,x:v.x,y:v.y,tickTextProps:n==="auto"?{width:void 0}:{width:n},width:m.width,height:m.height,className:Xe("recharts-".concat(h," ").concat(h),r),viewBox:u,ticks:x,axisType:h,axisId:t}))}var VG={allowDataOverflow:kt.allowDataOverflow,allowDecimals:kt.allowDecimals,allowDuplicatedCategory:kt.allowDuplicatedCategory,angle:kt.angle,axisLine:ei.axisLine,hide:!1,includeHidden:kt.includeHidden,interval:kt.interval,label:!1,minTickGap:kt.minTickGap,mirror:kt.mirror,orientation:kt.orientation,padding:kt.padding,reversed:kt.reversed,scale:kt.scale,tick:kt.tick,tickCount:kt.tickCount,tickLine:ei.tickLine,tickSize:ei.tickSize,type:kt.type,niceTicks:kt.niceTicks,width:kt.width,yAxisId:0},qG=e=>{var t=Hr(e,VG);return g.createElement(g.Fragment,null,g.createElement(HG,{interval:t.interval,id:t.yAxisId,scale:t.scale,type:t.type,domain:t.domain,allowDataOverflow:t.allowDataOverflow,dataKey:t.dataKey,allowDuplicatedCategory:t.allowDuplicatedCategory,allowDecimals:t.allowDecimals,tickCount:t.tickCount,padding:t.padding,includeHidden:t.includeHidden,reversed:t.reversed,ticks:t.ticks,width:t.width,orientation:t.orientation,mirror:t.mirror,hide:t.hide,unit:t.unit,name:t.name,angle:t.angle,minTickGap:t.minTickGap,tick:t.tick,tickFormatter:t.tickFormatter,niceTicks:t.niceTicks}),g.createElement(KG,t))},jj=g.memo(qG,_j);jj.displayName="YAxis";var GG=(e,t)=>t,_0=H([GG,ot,U2,Mt,__,ci,K9,Ht],Z9);function YG(e){return"getBBox"in e.currentTarget&&typeof e.currentTarget.getBBox=="function"}function j0(e){var t=e.currentTarget.getBoundingClientRect(),r,n;if(YG(e)){var i=e.currentTarget.getBBox();r=i.width>0?t.width/i.width:1,n=i.height>0?t.height/i.height:1}else{var o=e.currentTarget;r=o.offsetWidth>0?t.width/o.offsetWidth:1,n=o.offsetHeight>0?t.height/o.offsetHeight:1}var s=(u,d)=>({relativeX:Math.round((u-t.left)/r),relativeY:Math.round((d-t.top)/n)});return"touches"in e?Array.from(e.touches).map(u=>s(u.clientX,u.clientY)):s(e.clientX,e.clientY)}var Nj=Cr("mouseClick"),Ij=Eu();Ij.startListening({actionCreator:Nj,effect:(e,t)=>{var r=e.payload,n=_0(t.getState(),j0(r));(n==null?void 0:n.activeIndex)!=null&&t.dispatch(L7({activeIndex:n.activeIndex,activeDataKey:void 0,activeCoordinate:n.activeCoordinate}))}});var jy=Cr("mouseMove"),Mj=Eu(),Lo=null,ya=null,dv=null;Mj.startListening({actionCreator:jy,effect:(e,t)=>{var r=e.payload,n=t.getState(),i=n.eventSettings,o=i.throttleDelay,s=i.throttledEvents,u=s==="all"||(s==null?void 0:s.includes("mousemove"));Lo!==null&&(cancelAnimationFrame(Lo),Lo=null),ya!==null&&(typeof o!="number"||!u)&&(clearTimeout(ya),ya=null),dv=j0(r);var d=()=>{var f=t.getState(),h=$u(f,f.tooltip.settings.shared);if(!dv){Lo=null,ya=null;return}if(h==="axis"){var m=_0(f,dv);(m==null?void 0:m.activeIndex)!=null?t.dispatch(x_({activeIndex:m.activeIndex,activeDataKey:void 0,activeCoordinate:m.activeCoordinate})):t.dispatch(g_())}Lo=null,ya=null};if(!u){d();return}o==="raf"?Lo=requestAnimationFrame(d):typeof o=="number"&&ya===null&&(ya=setTimeout(d,o))}});function QG(e,t){return t instanceof HTMLElement?"HTMLElement <".concat(t.tagName,' class="').concat(t.className,'">'):t===window?"global.window":e==="children"&&typeof t=="object"&&t!==null?"<>":t}var oP={accessibilityLayer:!0,barCategoryGap:"10%",barGap:4,barSize:void 0,className:void 0,maxBarSize:void 0,stackOffset:"none",syncId:void 0,syncMethod:"index",baseValue:void 0,reverseStackOrder:!1},Tj=Jt({name:"rootProps",initialState:oP,reducers:{updateOptions:(e,t)=>{var r;e.accessibilityLayer=t.payload.accessibilityLayer,e.barCategoryGap=t.payload.barCategoryGap,e.barGap=(r=t.payload.barGap)!==null&&r!==void 0?r:oP.barGap,e.barSize=t.payload.barSize,e.maxBarSize=t.payload.maxBarSize,e.stackOffset=t.payload.stackOffset,e.syncId=t.payload.syncId,e.syncMethod=t.payload.syncMethod,e.className=t.payload.className,e.baseValue=t.payload.baseValue,e.reverseStackOrder=t.payload.reverseStackOrder}}}),XG=Tj.reducer,ZG=Tj.actions.updateOptions,JG=null,eY={updatePolarOptions:(e,t)=>e===null?t.payload:(e.startAngle=t.payload.startAngle,e.endAngle=t.payload.endAngle,e.cx=t.payload.cx,e.cy=t.payload.cy,e.innerRadius=t.payload.innerRadius,e.outerRadius=t.payload.outerRadius,e)},Dj=Jt({name:"polarOptions",initialState:JG,reducers:eY});Dj.actions.updatePolarOptions;var tY=Dj.reducer,Rj=Cr("keyDown"),$j=Cr("focus"),Lj=Cr("blur"),Ah=Eu(),zo=null,ga=null,yd=null;Ah.startListening({actionCreator:Rj,effect:(e,t)=>{yd=e.payload,zo!==null&&(cancelAnimationFrame(zo),zo=null);var r=t.getState(),n=r.eventSettings,i=n.throttleDelay,o=n.throttledEvents,s=o==="all"||o.includes("keydown");ga!==null&&(typeof i!="number"||!s)&&(clearTimeout(ga),ga=null);var u=()=>{try{var d=t.getState(),f=d.rootProps.accessibilityLayer!==!1;if(!f)return;var h=d.tooltip.keyboardInteraction,m=yd;if(m!=="ArrowRight"&&m!=="ArrowLeft"&&m!=="Enter")return;var v=Us(h,Ya(d),gl(d),xl(d)),x=v==null?-1:Number(v),k=!Number.isFinite(x)||x<0,S=ci(d),E=Ya(d),P=$u(d,d.tooltip.settings.shared);if(m==="Enter"){if(k)return;var _=yf(d,P,"hover",String(h.index));t.dispatch(vf({active:!h.active,activeIndex:h.index,activeCoordinate:_}));return}var j=C7(d),O=j==="left-to-right"?1:-1,N=m==="ArrowRight"?1:-1,C;if(k){var R=gl(d),z=xl(d),F=N*O,V=le=>({active:!1,index:String(le),dataKey:void 0,graphicalItemId:void 0,coordinate:void 0});if(C=-1,F>0){for(var Q=0;Q=0;B--)if(Us(V(B),E,R,z)!=null){C=B;break}if(C<0)return}else{C=x+N*O;var ue=(S==null?void 0:S.length)||E.length;if(ue===0||C>=ue||C<0)return}var G=yf(d,P,"hover",String(C));t.dispatch(vf({active:!0,activeIndex:C.toString(),activeCoordinate:G}))}finally{zo=null,ga=null}};if(!s){u();return}i==="raf"?zo=requestAnimationFrame(u):typeof i=="number"&&ga===null&&(u(),yd=null,ga=setTimeout(()=>{yd?u():(ga=null,zo=null)},i))}});Ah.startListening({actionCreator:$j,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var i=r.tooltip.keyboardInteraction;if(!i.active&&i.index==null){var o="0",s=$u(r,r.tooltip.settings.shared),u=yf(r,s,"hover",String(o));t.dispatch(vf({active:!0,activeIndex:o,activeCoordinate:u}))}}}});Ah.startListening({actionCreator:Lj,effect:(e,t)=>{var r=t.getState(),n=r.rootProps.accessibilityLayer!==!1;if(n){var i=r.tooltip.keyboardInteraction;i.active&&t.dispatch(vf({active:!1,activeIndex:i.index,activeCoordinate:i.coordinate}))}}});function zj(e){e.persist();var t=e.currentTarget;return new Proxy(e,{get:(r,n)=>{if(n==="currentTarget")return t;var i=Reflect.get(r,n);return typeof i=="function"?i.bind(r):i}})}var Rr=Cr("externalEvent"),Fj=Eu(),gd=new Map,Ds=new Map,fv=new Map;Fj.startListening({actionCreator:Rr,effect:(e,t)=>{var r=e.payload,n=r.handler,i=r.reactEvent;if(n!=null){var o=i.type,s=zj(i);fv.set(o,{handler:n,reactEvent:s});var u=gd.get(o);u!==void 0&&(cancelAnimationFrame(u),gd.delete(o));var d=t.getState(),f=d.eventSettings,h=f.throttleDelay,m=f.throttledEvents,v=m,x=v==="all"||(v==null?void 0:v.includes(o)),k=Ds.get(o);k!==void 0&&(typeof h!="number"||!x)&&(clearTimeout(k),Ds.delete(o));var S=()=>{var _=fv.get(o);try{if(!_)return;var j=_.handler,O=_.reactEvent,N=t.getState(),C={activeCoordinate:j9(N),activeDataKey:O9(N),activeIndex:cu(N),activeLabel:I_(N),activeTooltipIndex:cu(N),isTooltipActive:N9(N)};j&&j(C,O)}finally{gd.delete(o),Ds.delete(o),fv.delete(o)}};if(!x){S();return}if(h==="raf"){var E=requestAnimationFrame(S);gd.set(o,E)}else if(typeof h=="number"){if(!Ds.has(o)){S();var P=setTimeout(S,h);Ds.set(o,P)}}else S()}}});var rY=H([Ml],e=>e.tooltipItemPayloads),nY=H([rY,(e,t)=>t,(e,t,r)=>r],(e,t,r)=>{if(t!=null){var n=e.find(o=>o.settings.graphicalItemId===r);if(n!=null){var i=n.getPosition;if(i!=null)return i(t)}}}),Bj=Cr("touchMove"),Uj=Eu(),xa=null,Ti=null,lP=null,Rs=null;Uj.startListening({actionCreator:Bj,effect:(e,t)=>{var r=e.payload;if(!(r.touches==null||r.touches.length===0)){Rs=zj(r);var n=t.getState(),i=n.eventSettings,o=i.throttleDelay,s=i.throttledEvents,u=s==="all"||s.includes("touchmove");xa!==null&&(cancelAnimationFrame(xa),xa=null),Ti!==null&&(typeof o!="number"||!u)&&(clearTimeout(Ti),Ti=null),lP=Array.from(r.touches).map(f=>j0({clientX:f.clientX,clientY:f.clientY,currentTarget:r.currentTarget}));var d=()=>{if(Rs!=null){var f=t.getState(),h=$u(f,f.tooltip.settings.shared);if(h==="axis"){var m,v=(m=lP)===null||m===void 0?void 0:m[0];if(v==null){xa=null,Ti=null;return}var x=_0(f,v);(x==null?void 0:x.activeIndex)!=null&&t.dispatch(x_({activeIndex:x.activeIndex,activeDataKey:void 0,activeCoordinate:x.activeCoordinate}))}else if(h==="item"){var k,S=Rs.touches[0];if(document.elementFromPoint==null||S==null)return;var E=document.elementFromPoint(S.clientX,S.clientY);if(!E||!E.getAttribute)return;var P=E.getAttribute(f4),_=(k=E.getAttribute(h4))!==null&&k!==void 0?k:void 0,j=to(f).find(C=>C.id===_);if(P==null||j==null||_==null)return;var O=j.dataKey,N=nY(f,P,_);t.dispatch($7({activeDataKey:O,activeIndex:P,activeCoordinate:N,activeGraphicalItemId:_}))}xa=null,Ti=null}};if(!u){d();return}o==="raf"?xa=requestAnimationFrame(d):typeof o=="number"&&Ti===null&&(d(),Rs=null,Ti=setTimeout(()=>{Rs?d():(Ti=null,xa=null)},o))}}});var Wj={throttleDelay:"raf",throttledEvents:["mousemove","touchmove","pointermove","scroll","wheel"]},Hj=Jt({name:"eventSettings",initialState:Wj,reducers:{setEventSettings:(e,t)=>{t.payload.throttleDelay!=null&&(e.throttleDelay=t.payload.throttleDelay),t.payload.throttledEvents!=null&&(e.throttledEvents=t.payload.throttledEvents)}}}),iY=Hj.actions.setEventSettings,aY=Hj.reducer,oY=wO({brush:MV,cartesianAxis:EV,chartData:_W,errorBars:Bq,eventSettings:aY,graphicalItems:tV,layout:QL,legend:cz,options:EW,polarAxis:hK,polarOptions:tY,referenceElements:$V,renderedTicks:aq,rootProps:XG,tooltip:z7,zIndex:dW}),lY=function(t){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Chart";return wL({reducer:oY,preloadedState:t,middleware:n=>{var i;return n({serializableCheck:!1,immutableCheck:!["commonjs","es6","production"].includes((i="es6")!==null&&i!==void 0?i:"")}).concat([Ij.middleware,Mj.middleware,Ah.middleware,Fj.middleware,Uj.middleware])},enhancers:n=>{var i=n;return typeof n=="function"&&(i=n()),i.concat(RO({type:"raf"}))},devTools:{serialize:{replacer:QG},name:"recharts-".concat(r)}})};function sY(e){var t=e.preloadedState,r=e.children,n=e.reduxStoreName,i=gr(),o=g.useRef(null);if(i)return r;o.current==null&&(o.current=lY(t,n));var s=ag;return g.createElement(Az,{context:s,store:o.current},r)}function uY(e){var t=e.layout,r=e.margin,n=xt(),i=gr();return g.useEffect(()=>{i||(n(qL(t)),n(VL(r)))},[n,i,t,r]),null}var cY=g.memo(uY,oh);function dY(e){var t=xt();return g.useEffect(()=>{t(ZG(e))},[t,e]),null}var fY=e=>{var t=xt();return g.useEffect(()=>{t(iY(e))},[t,e]),null},hY=g.memo(fY,oh);function sP(e){var t=e.zIndex,r=e.isPanorama,n=g.useRef(null),i=xt();return g.useLayoutEffect(()=>(n.current&&i(uW({zIndex:t,element:n.current,isPanorama:r})),()=>{i(cW({zIndex:t,isPanorama:r}))}),[i,t,r]),g.createElement("g",{tabIndex:-1,ref:n,className:"recharts-zIndex-layer_".concat(t)})}function uP(e){var t=e.children,r=e.isPanorama,n=ke(eW);if(!n||n.length===0)return t;var i=n.filter(s=>s<0),o=n.filter(s=>s>0);return g.createElement(g.Fragment,null,i.map(s=>g.createElement(sP,{key:s,zIndex:s,isPanorama:r})),t,o.map(s=>g.createElement(sP,{key:s,zIndex:s,isPanorama:r})))}var pY=["children"];function mY(e,t){if(e==null)return{};var r,n,i=vY(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{var r=a2(),n=o2(),i=v2();if(!jn(r)||!jn(n))return null;var o=e.children,s=e.otherAttributes,u=e.title,d=e.desc,f,h;return s!=null&&(typeof s.tabIndex=="number"?f=s.tabIndex:f=i?0:void 0,typeof s.role=="string"?h=s.role:h=i?"application":void 0),g.createElement(zA,Ef({},s,{title:u,desc:d,role:h,tabIndex:f,width:r,height:n,style:yY,ref:t}),o)}),xY=e=>{var t=e.children,r=ke(th);if(!r)return null;var n=r.width,i=r.height,o=r.y,s=r.x;return g.createElement(zA,{width:n,height:i,x:s,y:o},t)},cP=g.forwardRef((e,t)=>{var r=e.children,n=mY(e,pY),i=gr();return i?g.createElement(xY,null,g.createElement(uP,{isPanorama:!0},r)):g.createElement(gY,Ef({ref:t},n),g.createElement(uP,{isPanorama:!1},r))});function bY(e,t){return EY(e)||kY(e,t)||SY(e,t)||wY()}function wY(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function SY(e,t){if(e){if(typeof e=="string")return dP(e,t);var r={}.toString.call(e).slice(8,-1);return r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set"?Array.from(e):r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?dP(e,t):void 0}}function dP(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r{if(n!=null){var s=n.getBoundingClientRect(),u=s.width/n.offsetWidth;Fe(u)&&u!==o&&e(YL(u))}},[n,e,o]),i}function fP(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(e,i).enumerable})),r.push.apply(r,n)}return r}function AY(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=Array(t);r(LW(),null);function Af(e){if(typeof e=="number")return e;if(typeof e=="string"){var t=parseFloat(e);if(!Number.isNaN(t))return t}return 0}var DY=g.forwardRef((e,t)=>{var r,n,i=g.useRef(null),o=g.useState({containerWidth:Af((r=e.style)===null||r===void 0?void 0:r.width),containerHeight:Af((n=e.style)===null||n===void 0?void 0:n.height)}),s=Pf(o,2),u=s[0],d=s[1],f=g.useCallback((m,v)=>{d(x=>{var k=Math.round(m),S=Math.round(v);return x.containerWidth===k&&x.containerHeight===S?x:{containerWidth:k,containerHeight:S}})},[]),h=g.useCallback(m=>{if(typeof t=="function"&&t(m),i.current!=null&&(i.current.disconnect(),i.current=null),m!=null&&typeof ResizeObserver<"u"){var v=m.getBoundingClientRect(),x=v.width,k=v.height;f(x,k);var S=P=>{var _=P[0];if(_!=null){var j=_.contentRect,O=j.width,N=j.height;f(O,N)}},E=new ResizeObserver(S);E.observe(m),i.current=E}},[t,f]);return g.useEffect(()=>()=>{var m=i.current;m!=null&&m.disconnect()},[f]),g.createElement(g.Fragment,null,g.createElement(Au,{width:u.containerWidth,height:u.containerHeight}),g.createElement("div",Zi({ref:h},e)))}),RY=g.forwardRef((e,t)=>{var r=e.width,n=e.height,i=g.useState({containerWidth:Af(r),containerHeight:Af(n)}),o=Pf(i,2),s=o[0],u=o[1],d=g.useCallback((h,m)=>{u(v=>{var x=Math.round(h),k=Math.round(m);return v.containerWidth===x&&v.containerHeight===k?v:{containerWidth:x,containerHeight:k}})},[]),f=g.useCallback(h=>{if(typeof t=="function"&&t(h),h!=null){var m=h.getBoundingClientRect(),v=m.width,x=m.height;d(v,x)}},[t,d]);return g.createElement(g.Fragment,null,g.createElement(Au,{width:s.containerWidth,height:s.containerHeight}),g.createElement("div",Zi({ref:f},e)))}),$Y=g.forwardRef((e,t)=>{var r=e.width,n=e.height;return g.createElement(g.Fragment,null,g.createElement(Au,{width:r,height:n}),g.createElement("div",Zi({ref:t},e)))}),LY=g.forwardRef((e,t)=>{var r=e.width,n=e.height;return typeof r=="string"||typeof n=="string"?g.createElement(RY,Zi({},e,{ref:t})):typeof r=="number"&&typeof n=="number"?g.createElement($Y,Zi({},e,{width:r,height:n,ref:t})):g.createElement(g.Fragment,null,g.createElement(Au,{width:r,height:n}),g.createElement("div",Zi({ref:t},e)))});function zY(e){return e?DY:LY}var FY=g.forwardRef((e,t)=>{var r=e.children,n=e.className,i=e.height,o=e.onClick,s=e.onContextMenu,u=e.onDoubleClick,d=e.onMouseDown,f=e.onMouseEnter,h=e.onMouseLeave,m=e.onMouseMove,v=e.onMouseUp,x=e.onTouchEnd,k=e.onTouchMove,S=e.onTouchStart,E=e.style,P=e.width,_=e.responsive,j=e.dispatchTouchEvents,O=j===void 0?!0:j,N=g.useRef(null),C=xt(),R=g.useState(null),z=Pf(R,2),F=z[0],V=z[1],Q=g.useState(null),B=Pf(Q,2),ue=B[0],G=B[1],le=PY(),fe=fg(),de=(fe==null?void 0:fe.width)>0?fe.width:P,Y=(fe==null?void 0:fe.height)>0?fe.height:i,ae=g.useCallback(Ee=>{le(Ee),typeof t=="function"&&t(Ee),V(Ee),G(Ee),Ee!=null&&(N.current=Ee)},[le,t,V,G]),X=g.useCallback(Ee=>{C(Nj(Ee)),C(Rr({handler:o,reactEvent:Ee}))},[C,o]),M=g.useCallback(Ee=>{C(jy(Ee)),C(Rr({handler:f,reactEvent:Ee}))},[C,f]),T=g.useCallback(Ee=>{C(g_()),C(Rr({handler:h,reactEvent:Ee}))},[C,h]),Z=g.useCallback(Ee=>{C(jy(Ee)),C(Rr({handler:m,reactEvent:Ee}))},[C,m]),se=g.useCallback(()=>{C($j())},[C]),te=g.useCallback(()=>{C(Lj())},[C]),ce=g.useCallback(Ee=>{C(Rj(Ee.key))},[C]),ye=g.useCallback(Ee=>{C(Rr({handler:s,reactEvent:Ee}))},[C,s]),je=g.useCallback(Ee=>{C(Rr({handler:u,reactEvent:Ee}))},[C,u]),J=g.useCallback(Ee=>{C(Rr({handler:d,reactEvent:Ee}))},[C,d]),we=g.useCallback(Ee=>{C(Rr({handler:v,reactEvent:Ee}))},[C,v]),Ae=g.useCallback(Ee=>{C(Rr({handler:S,reactEvent:Ee}))},[C,S]),ne=g.useCallback(Ee=>{O&&C(Bj(Ee)),C(Rr({handler:k,reactEvent:Ee}))},[C,O,k]),lt=g.useCallback(Ee=>{C(Rr({handler:x,reactEvent:Ee}))},[C,x]),$e=zY(_);return g.createElement(F_.Provider,{value:F},g.createElement(e$.Provider,{value:ue},g.createElement($e,{width:de??(E==null?void 0:E.width),height:Y??(E==null?void 0:E.height),className:Xe("recharts-wrapper",n),style:AY({position:"relative",cursor:"default",width:de,height:Y},E),onClick:X,onContextMenu:ye,onDoubleClick:je,onFocus:se,onBlur:te,onKeyDown:ce,onMouseDown:J,onMouseEnter:M,onMouseLeave:T,onMouseMove:Z,onMouseUp:we,onTouchEnd:lt,onTouchMove:ne,onTouchStart:Ae,ref:ae},g.createElement(TY,null),r)))}),BY=["width","height","responsive","children","className","style","compact","title","desc"];function UY(e,t){if(e==null)return{};var r,n,i=WY(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n{var r=e.width,n=e.height,i=e.responsive,o=e.children,s=e.className,u=e.style,d=e.compact,f=e.title,h=e.desc,m=UY(e,BY),v=on(m);return d?g.createElement(g.Fragment,null,g.createElement(Au,{width:r,height:n}),g.createElement(cP,{otherAttributes:v,title:f,desc:h},o)):g.createElement(FY,{className:s,style:u,width:r,height:n,responsive:i??!1,onClick:e.onClick,onMouseLeave:e.onMouseLeave,onMouseEnter:e.onMouseEnter,onMouseMove:e.onMouseMove,onMouseDown:e.onMouseDown,onMouseUp:e.onMouseUp,onContextMenu:e.onContextMenu,onDoubleClick:e.onDoubleClick,onTouchStart:e.onTouchStart,onTouchMove:e.onTouchMove,onTouchEnd:e.onTouchEnd},g.createElement(cP,{otherAttributes:v,title:f,desc:h,ref:t},g.createElement(HV,null,o)))});function Ny(){return Ny=Object.assign?Object.assign.bind():function(e){for(var t=1;tg.createElement(XY,{chartName:"AreaChart",defaultTooltipEventType:"axis",validateTooltipEventTypes:ZY,tooltipPayloadSearcher:SW,categoricalChartProps:e,ref:t}));const eQ="rgba(130,130,150,0.14)",hv="rgba(130,130,150,0.85)";function tQ(e){if(e<=0)return 10;const t=Math.pow(10,Math.floor(Math.log10(e))),r=e/t;return(r<=1?1:r<=2?2:r<=5?5:10)*t}function Kj(e,t){return`${t==="%"?Math.round(e):e>=1e3?`${(e/1e3).toFixed(1)}k`:Math.round(e).toString()}${t}`}function rQ({active:e,payload:t,unit:r,label:n}){return!e||!(t!=null&&t.length)?null:w.jsxs("div",{className:"rounded-lg border border-border/70 bg-popover/95 px-3 py-2 shadow-xl backdrop-blur",children:[Number.isFinite(n)&&w.jsx("div",{className:"mb-1 border-b border-border/40 pb-1 font-mono text-[10px] text-muted-foreground/80",children:new Date(n).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit",second:"2-digit"})}),w.jsx("div",{className:"space-y-1",children:t.map(i=>w.jsxs("div",{className:"flex items-center gap-2 text-[11px] font-mono",children:[w.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:i.color}}),w.jsx("span",{className:"uppercase tracking-wider text-muted-foreground",children:i.name}),w.jsx("span",{className:"ml-auto pl-3 font-bold tabular-nums text-foreground",children:Kj(i.value,r)})]},i.dataKey))})]})}function nQ({data:e,series:t,unit:r="%",yMode:n="percent",height:i=176,showTime:o=!1}){var h,m;const s=e.reduce((v,x)=>t.reduce((k,S)=>Math.max(k,Number(x[S.key])||0),v),0),u=n==="percent"?Math.min(100,Math.max(25,Math.ceil(s*1.2/25)*25)):Math.max(tQ(s*1.15),10),d=e.length>1?Number((h=e[e.length-1])==null?void 0:h.t)-Number((m=e[0])==null?void 0:m.t):0,f=v=>new Date(v).toLocaleTimeString("de-DE",d<=10*6e4?{hour:"2-digit",minute:"2-digit",second:"2-digit"}:{hour:"2-digit",minute:"2-digit"});return w.jsx("div",{style:{height:i},className:"w-full",children:w.jsx(V4,{width:"100%",height:"100%",children:w.jsxs(JY,{data:e,margin:{top:8,right:6,bottom:0,left:-12},children:[w.jsx("defs",{children:t.map(v=>w.jsxs("linearGradient",{id:`grad-${v.key}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[w.jsx("stop",{offset:"0%",stopColor:v.color,stopOpacity:.22}),w.jsx("stop",{offset:"100%",stopColor:v.color,stopOpacity:0})]},v.key))}),w.jsx(yj,{vertical:!1,stroke:eQ}),o?w.jsx(Oy,{dataKey:"t",type:"number",domain:["dataMin","dataMax"],tickFormatter:f,tickCount:5,minTickGap:40,interval:"preserveStartEnd",axisLine:!1,tickLine:!1,tick:{fontSize:10,fill:hv},height:18}):w.jsx(Oy,{dataKey:"t",hide:!0}),w.jsx(jj,{domain:[0,u],ticks:[0,u/2,u],tickFormatter:v=>Kj(v,r),width:42,axisLine:!1,tickLine:!1,tick:{fontSize:10,fill:hv}}),w.jsx(XW,{content:w.jsx(rQ,{unit:r}),cursor:{stroke:hv,strokeOpacity:.4,strokeDasharray:"3 3"}}),t.map(v=>w.jsx(Cj,{type:"monotone",dataKey:v.key,name:v.label,stroke:v.color,strokeWidth:2,fill:`url(#grad-${v.key})`,dot:!1,activeDot:{r:3,strokeWidth:0},isAnimationActive:!1,connectNulls:!0},v.key))]})})})}const iQ={"1h":60,"24h":1440},mP={live:"Live","1h":"1 h","24h":"24 h"};function aQ({value:e,onChange:t}){return w.jsx("div",{className:"flex rounded-lg border border-border/40 bg-background/30 p-0.5",children:Object.keys(mP).map(r=>w.jsx("button",{onClick:()=>t(r),className:Re("rounded-md px-2 py-0.5 text-[9px] font-bold uppercase tracking-wide transition-all cursor-pointer",e===r?"bg-primary text-primary-foreground":"text-muted-foreground hover:text-foreground"),children:mP[r]},r))})}const oQ=[{key:"cpu",label:"CPU",color:"#2dd4bf"},{key:"ram",label:"RAM",color:"#38bdf8"},{key:"gpu",label:"GPU",color:"#a78bfa"},{key:"disk",label:"Disk",color:"#fbbf24"}];function lQ(){var h,m,v,x;const{sys:e,hist:t}=W3(),[r,n]=g.useState("live"),i=x3(r==="live"?60:iQ[r],r!=="live"),o=g.useMemo(()=>{var k;return r==="live"?t:(((k=i.data)==null?void 0:k.points)??[]).map(S=>({t:S.t*1e3,cpu:S.cpu,ram:S.ram,gpu:S.gpu,disk:S.disk}))},[r,t,i.data]),s=!!(e!=null&&e.gpu&&e.gpu.busy_percent!=null&&e.gpu.gtt_used!=null&&e.gpu.gtt_total!=null),u=oQ.filter(k=>k.key!=="gpu"||s),d={cpu:(h=e==null?void 0:e.cpu)==null?void 0:h.percent,ram:(m=e==null?void 0:e.ram)==null?void 0:m.percent,gpu:s?e.gpu.busy_percent:null,disk:(v=e==null?void 0:e.disk)==null?void 0:v.percent},f={cpu:(x=e==null?void 0:e.cpu)!=null&&x.cores?`${e.cpu.cores} Cores`:"",ram:e?`${No(e.ram.used)}/${No(e.ram.total)} GB`:"",gpu:s?`${No(e.gpu.gtt_used)}/${No(e.gpu.gtt_total)} GB`:"",disk:e!=null&&e.disk?`${No(e.disk.used)}/${No(e.disk.total)} GB`:""};return w.jsxs("div",{className:"flex flex-col justify-between mc-card p-5",children:[w.jsxs("div",{children:[w.jsxs("div",{className:"mb-3 flex items-center gap-2",children:[w.jsx(WP,{className:"h-4.5 w-4.5 text-primary"}),w.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"System-Status"}),r==="live"&&w.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[w.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]}),w.jsx("div",{className:"ml-auto",children:w.jsx(aQ,{value:r,onChange:n})})]}),e?w.jsxs(w.Fragment,{children:[w.jsx("div",{className:"mb-2 grid grid-cols-2 gap-x-4 gap-y-1.5",children:u.map(k=>w.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[w.jsx("span",{className:"h-2 w-2 shrink-0 rounded-full",style:{background:k.color}}),w.jsx("span",{className:"shrink-0 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:k.label}),w.jsxs("span",{className:"shrink-0 font-mono text-xs font-bold tabular-nums text-foreground",children:[Math.round(d[k.key]??0),"%"]}),f[k.key]&&w.jsx("span",{className:"truncate font-mono text-[10px] text-muted-foreground/60",children:f[k.key]})]},k.key))}),r!=="live"&&o.length===0&&w.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:i.isLoading?"Verlauf wird geladen …":"Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."}),(r==="live"||o.length>0)&&w.jsx(nQ,{data:o,series:u,unit:"%",yMode:"percent",height:176,showTime:!0})]}):w.jsx("div",{className:"flex h-44 items-center justify-center text-xs text-muted-foreground",children:"Lade Systemdaten…"})]}),(e==null?void 0:e.temp)&&(e.temp.cpu||e.temp.gpu)&&w.jsxs("div",{className:"mt-3 flex gap-4 border-t border-border/30 pt-3 font-mono text-xs text-muted-foreground/80",children:[e.temp.cpu!=null&&w.jsxs("span",{children:["CPU Temp: ",e.temp.cpu," °C"]}),e.temp.gpu!=null&&w.jsxs("span",{children:["GPU Temp: ",e.temp.gpu," °C"]})]})]})}const wl=[{key:"stt_ms",label:"STT",color:"#f59e0b"},{key:"vision_ms",label:"Sehen",color:"#a78bfa"},{key:"hirn_ms",label:"Hirn",color:"#2dd4bf"},{key:"gen_ms",label:"Antwort",color:"#60a5fa"}],_a=e=>e==null?"–":`${(e/1e3).toLocaleString("de-DE",{minimumFractionDigits:1,maximumFractionDigits:1})} s`;function sQ(e){const t=Math.max(0,Date.now()/1e3-e);return t<60?`vor ${Math.round(t)} s`:t<3600?`vor ${Math.round(t/60)} min`:`vor ${Math.round(t/3600)} h`}function Iy(e){return wl.reduce((t,r)=>t+(e[r.key]??0),0)}function uQ(e){let t=null;for(const r of wl){const n=e[r.key];n!=null&&(t==null||n>t.ms)&&(t={label:r.label,color:r.color,ms:n})}return t}function cQ({t:e,scale:t}){const r=wl.map(n=>`${n.label} ${_a(e[n.key])}`).join(" · ")+(e.mem0_ms!=null?` (davon Mem0 ${_a(e.mem0_ms)})`:"");return w.jsxs("div",{className:"flex items-center gap-2.5",children:[w.jsx("span",{className:"w-14 shrink-0 text-right font-mono text-[10px] text-muted-foreground/60",children:sQ(e.ts)}),w.jsxs("div",{className:"relative h-4 flex-1 overflow-hidden rounded-sm bg-muted/25",title:r,children:[w.jsx("div",{className:"absolute inset-0 flex",children:wl.map(n=>{const i=e[n.key];return!i||i<=0?null:w.jsx("div",{style:{width:`${i/t*100}%`,background:n.color},className:"h-full first:rounded-l-sm"},n.key)})}),e.error&&w.jsx("div",{className:"absolute inset-0 flex items-center justify-center bg-rose-500/15 text-[10px] font-semibold text-rose-300",children:"Fehler"})]}),w.jsx("span",{className:"w-12 shrink-0 text-right font-mono text-[11px] font-semibold tabular-nums text-foreground",children:e.error?"–":_a(Iy(e))})]})}function dQ(){const{data:e}=g3(12),t=e??[],r=Math.max(1,...t.map(o=>Iy(o))),n=t[0],i=n?uQ(n):null;return w.jsxs("div",{className:"mc-card p-5",children:[w.jsxs("div",{className:"mb-3 flex items-start justify-between gap-3",children:[w.jsxs("div",{children:[w.jsxs("div",{className:"flex items-center gap-2",children:[w.jsx(tT,{className:"h-4.5 w-4.5 text-primary"}),w.jsx("h2",{className:"text-sm font-semibold uppercase tracking-wide text-foreground",children:"Latenz je Turn"}),w.jsxs("span",{className:"ml-1 inline-flex items-center gap-1 text-[10px] font-medium text-muted-foreground/70",children:[w.jsx("span",{className:"h-1.5 w-1.5 rounded-full bg-emerald-500 animate-pulse"})," live"]})]}),n?w.jsxs("div",{className:"mt-2 flex items-baseline gap-2",children:[w.jsx("span",{className:`font-space text-3xl font-bold tracking-tight tabular-nums ${n.error?"text-rose-400":"text-foreground"}`,children:n.error?"Fehler":_a(Iy(n))}),w.jsxs("span",{className:"text-xs text-muted-foreground",children:["letzter Turn",!n.error&&i&&w.jsxs(w.Fragment,{children:[" · Täter: ",w.jsx("span",{style:{color:i.color},className:"font-semibold",children:i.label})," ",_a(i.ms)]})]})]}):w.jsx("div",{className:"mt-2 text-xs text-muted-foreground",children:"Noch kein Voice-Turn aufgezeichnet."}),n&&!n.error&&w.jsxs("div",{className:"mt-0.5 font-mono text-[11px] text-muted-foreground/70",children:[wl.filter(o=>n[o.key]!=null).map(o=>`${o.label} ${_a(n[o.key])}`).join(" · "),n.mem0_ms!=null&&w.jsxs("span",{className:"text-muted-foreground/50",children:[" · davon Mem0 ",_a(n.mem0_ms)]})]})]}),w.jsx("div",{className:"flex shrink-0 flex-col items-end gap-1 pt-1",children:wl.map(o=>w.jsxs("div",{className:"flex items-center gap-1.5",children:[w.jsx("span",{className:"h-2 w-2 rounded-full",style:{background:o.color}}),w.jsx("span",{className:"text-[11px] font-semibold uppercase tracking-wider text-muted-foreground",children:o.label})]},o.key))})]}),t.length>0?w.jsx("div",{className:"space-y-1.5",children:t.map(o=>w.jsx(cQ,{t:o,scale:r},o.id))}):w.jsx("div",{className:"flex h-[120px] items-center justify-center px-6 text-center text-xs text-muted-foreground",children:"Sprich einmal mit Lucy — dann erscheint hier der Zeit-Wasserfall pro Turn, damit man den einen Hänger sofort sieht."}),w.jsx("div",{className:"mt-3 border-t border-border/30 pt-2 text-[10px] leading-relaxed text-muted-foreground/70",children:'„Hirn" = Zeit bis zum ersten Wort (Agent + Mem0-Suche + Modell); Tool-Runden stecken in „Antwort". Reine Telegram-Turns laufen an MC2 vorbei und erscheinen hier nicht.'})]})}const Of=e=>window.dispatchEvent(new CustomEvent("open-system-drawer",{detail:{tab:e}}));function fQ({onNavigate:e}){var de,Y,ae,X;const{data:t}=TA(),{data:r}=Xy(),{data:n}=DA(),{data:i}=E3(),{data:o}=S3(),{data:s}=k3(),{data:u}=p3(),{data:d}=m3(),f=z3(),{showAlert:h,dialogElement:m}=Qy(),v=xu(),[x,k]=g.useState({});async function S(M,T){k(Z=>({...Z,[M]:!0}));try{if(T.kind==="loadModel")await Me(`/api/models/${encodeURIComponent(T.model)}/load`,{method:"POST"});else{const Z=await Me("/api/maintenance/restart",{method:"POST",body:JSON.stringify({service:T.service})});Z.ok||h("Reparatur nicht ganz geklappt",(Z.err||"Unbekannter Fehler")+(T.needsSudo?` -Tipp: Dafür wird evtl. das Box-Passwort gebraucht (oben rechts hinterlegen).`:""))}v.invalidateQueries({queryKey:De.health}),v.invalidateQueries({queryKey:De.services}),v.invalidateQueries({queryKey:De.models})}catch(Z){h("Reparatur fehlgeschlagen",String((Z==null?void 0:Z.message)||Z))}finally{k(Z=>({...Z,[M]:!1}))}}const E=((de=t==null?void 0:t.running)==null?void 0:de.length)??0,P=(r==null?void 0:r.services.filter(M=>M.ok).length)??0,j=(r==null?void 0:r.services.length)??0,_=j-P,O=(i==null?void 0:i.length)??0,N=(n?(n.os>0?1:0)+(n.engine>0?1:0)+(n.swap>0?1:0)+(n.models>0?1:0):0)+(((Y=n==null?void 0:n.components)==null?void 0:Y.filter(M=>M.update===!0).length)??0),C=u!=null&&u.available?u.open_count:0,R=d!=null&&d.available?d.items.filter(M=>M.status==="blocked").length:0,z=s?[s.gateway,s.memory,s.desktop_gateway]:[],F=z.filter(M=>M==null?void 0:M.ok).length,V=s?s.gateway.ok?s.memory.ok?s.desktop_gateway.ok?"":"Desktop-Gateway":"Gedächtnis-Leitung":"Modell-Leitung":"",Q=(ae=t==null?void 0:t.models)==null?void 0:ae.find(M=>M.role==="hermes"),B=Q!=null&&Q.name?(X=Q.name.split("/").pop())==null?void 0:X.replace(/\.gguf$/i,""):"",ue=i?i.filter(M=>["auto","agent","hermes"].includes(M.source)).length:0,G=r==null?void 0:r.services.filter(M=>!M.ok).map(M=>M.name).join(", "),le=n?[n.os>0&&"OS",n.engine>0&&"Engine",n.swap>0&&"Swap",n.models>0&&"Modelle"].filter(Boolean):[],fe=le.length>0?le.join(" + "):"";return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{children:[b.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Cockpit"}),b.jsx("p",{className:"text-sm text-muted-foreground",children:"Deine Box auf einen Blick — Details hinter jeder Kachel."})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 items-start",children:[b.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[b.jsx(wQ,{verdict:f.verdict,memory:f.memory,warns:f.warns,problems:f.problems}),b.jsx(X3,{}),b.jsxs("section",{children:[b.jsx(xd,{children:"Leistung"}),b.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[b.jsx(pQ,{}),b.jsx(mQ,{})]}),b.jsx("div",{className:"mt-4",children:b.jsx(xQ,{})})]}),b.jsxs("section",{children:[b.jsx(xd,{children:"Bereiche"}),b.jsxs("div",{className:"grid gap-4 grid-cols-2 md:grid-cols-3",children:[b.jsx(Io,{icon:Ug,title:"Auftragsbuch",value:u!=null&&u.available?C:"—",unit:C===1?"Vorschlag":"Vorschläge",tone:u?R>0||C>0?"warn":"ok":"loading",hint:R>0?`${R} Karte${R===1?"":"n"} wartet auf deine Antwort`:C>0?`${C} offene Patches`:"Keine ausstehenden Vorschläge",onClick:()=>e("auftraege")}),b.jsx(Io,{icon:UP,title:"Modelle",value:E,unit:"warm",tone:E>0?"ok":"muted",hint:B?`Hirn: ${B}`:"Kein Hermes-Modell geladen",onClick:()=>e("models")}),b.jsx(Io,{icon:Bg,title:"Gedächtnis",value:i?O:"…",unit:"Notizen",tone:i?"ok":"loading",hint:i?`${O} Fakten (${ue} auto gelernt)`:"Gedächtnis-Pool laden...",onClick:()=>e("memory")}),b.jsx(Io,{icon:Nf,title:"Dienste",value:r?`${P}/${j}`:"…",unit:"laufen",tone:r?_>0?"warn":"ok":"loading",hint:G?`Ausfall: ${G}`:"Alle Dienste online",onClick:()=>Of("maintenance")}),b.jsx(Io,{icon:Hg,title:"Updates",value:n?N>0?N:"0":"…",unit:N>0?"bereit":"aktuell",tone:n?N>0?"warn":"ok":"loading",hint:N>0?`Verfügbar: ${fe}`:"Alles auf dem neuesten Stand",onClick:()=>Of("maintenance")}),b.jsx(Io,{icon:Wg,title:"Verbinden",value:s?`${F}/${z.length}`:"…",unit:"Leitungen",tone:s?F===z.length?"ok":"warn":"loading",hint:V?`Gestört: ${V}`:"Hermes Desktop & IDEs bereit",onClick:()=>e("connect")})]})]})]}),b.jsxs("div",{className:"space-y-6",children:[b.jsx(SQ,{problems:f.problems,pendingCount:N,openAuftraege:C,blockedIdeen:R,busy:x,onRepair:S,onNavigate:e}),b.jsxs("section",{children:[b.jsx(xd,{children:"Anstehendes"}),b.jsx(Z3,{})]}),b.jsxs("section",{children:[b.jsx(xd,{children:"Werkzeuge & Diagnose"}),b.jsx(kQ,{agent:o,svcErrors:_,onNavigate:e})]})]})]}),m]})}function xd({children:e}){return b.jsx("p",{className:"mb-2 ml-0.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:e})}function wQ({verdict:e,memory:t,warns:r,problems:n}){const i=r.length?`${r[0].label}: ${r[0].detail}${r.length>1?` (+${r.length-1} weitere)`:""}`:t.status==="full"?t.text:"Nichts Schlimmes — nur ein Hinweis.",o=n.length?`${n[0].label}: ${n[0].detail}${n.length>1?` (+${n.length-1} weitere)`:""}`:"Ein wichtiger Dienst hakt.",s={loading:{ring:"border-border/60 bg-card/45",icon:_f,iconCls:"text-muted-foreground animate-spin",title:"Box wird geprüft …",sub:"Einen Moment."},gut:{ring:"border-emerald-500/40 bg-emerald-500/5",icon:hT,iconCls:"text-emerald-400",title:"Box gesund",sub:"Alle wichtigen Dienste laufen."},warn:{ring:"border-amber-500/40 bg-amber-500/5",icon:Gs,iconCls:"text-amber-400",title:"Kleinigkeit an der Box",sub:i},problem:{ring:"border-red-500/50 bg-red-500/5",icon:Gs,iconCls:"text-red-400",title:"Box braucht Hilfe",sub:o}}[e],u=s.icon,d={ok:"text-emerald-400",warn:"text-amber-400",full:"text-red-400",unknown:"text-muted-foreground"}[t.status],f={ok:"bg-emerald-500",warn:"bg-amber-500",full:"bg-red-500",unknown:"bg-muted-foreground/40"}[t.status];return b.jsxs("div",{className:Re("flex flex-col gap-4 rounded-2xl border p-5 shadow-lg shadow-black/15 backdrop-blur-md transition-colors sm:flex-row sm:items-center sm:justify-between h-full",s.ring),children:[b.jsxs("div",{className:"flex items-center gap-3",children:[b.jsx("div",{className:"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-border/40 bg-background/30",children:b.jsx(u,{className:Re("h-6 w-6",s.iconCls)})}),b.jsxs("div",{className:"min-w-0",children:[b.jsx("h2",{className:"text-base font-bold tracking-tight text-foreground",children:s.title}),b.jsx("p",{className:"text-xs text-muted-foreground",children:s.sub})]})]}),b.jsxs("div",{className:"w-full max-w-[16rem] rounded-xl border border-border/30 bg-background/20 p-3",children:[b.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-[11px]",children:[b.jsxs("span",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-wider text-muted-foreground",children:[b.jsx(fT,{className:"h-3.5 w-3.5"})," Speicher"]}),b.jsx("span",{className:Re("font-mono font-bold",d),children:t.status==="unknown"?"—":`${t.usedGb.toFixed(1)} / ${t.totalGb.toFixed(1)} GB`})]}),b.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full border border-border/30 bg-background/50",children:b.jsx("div",{className:Re("h-full rounded-full transition-all duration-500",f),style:{width:`${t.pct}%`}})})]})]})}function SQ({problems:e,pendingCount:t,openAuftraege:r,blockedIdeen:n,busy:i,onRepair:o,onNavigate:s}){const u=t>0,d=r>0,f=n>0,h=e.length===0&&!u&&!d&&!f;return b.jsx("div",{className:"h-full flex flex-col justify-between",children:h?b.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-4 h-full",children:[b.jsx(tT,{className:"h-5 w-5 shrink-0 text-emerald-400"}),b.jsxs("div",{children:[b.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu tun"}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Alles läuft. Du musst gerade nichts abnicken."})]})]}):b.jsxs("div",{className:"space-y-2 h-full flex flex-col justify-center",children:[e.map(m=>b.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-2xl border border-red-500/25 bg-red-500/5 p-4",children:[b.jsxs("div",{className:"flex min-w-0 items-center gap-3 w-full",children:[b.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:b.jsx(m.icon,{className:"h-4.5 w-4.5"})}),b.jsxs("div",{className:"min-w-0 flex-1",children:[b.jsx("p",{className:"text-sm font-bold text-foreground",children:m.label}),b.jsx("p",{className:"truncate text-xs text-muted-foreground",children:m.detail})]})]}),m.repair&&b.jsxs("button",{onClick:()=>m.repair&&o(m.id,m.repair),disabled:!!i[m.id],className:"flex h-9 shrink-0 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-60 w-full sm:w-auto justify-center",children:[i[m.id]?b.jsx(_f,{className:"h-3.5 w-3.5 animate-spin"}):b.jsx(_T,{className:"h-3.5 w-3.5"}),m.repair.label]})]},m.id)),f&&b.jsxs("button",{onClick:()=>s("auftraege"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:bg-red-500/10 cursor-pointer",children:[b.jsxs("div",{className:"flex items-center gap-3",children:[b.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:b.jsx(WP,{className:"h-4.5 w-4.5"})}),b.jsxs("div",{children:[b.jsxs("p",{className:"text-sm font-bold text-foreground",children:[n," Karte",n===1?"":"n"," braucht deine Antwort"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Die Box hängt an einer Frage und wartet auf dich."})]})]}),b.jsx(Ko,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),d&&b.jsxs("button",{onClick:()=>s("auftraege"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-primary/30 bg-primary/5 p-4 text-left transition-all hover:bg-primary/10 cursor-pointer",children:[b.jsxs("div",{className:"flex items-center gap-3",children:[b.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-primary/30 bg-background/30 text-primary",children:b.jsx(Ug,{className:"h-4.5 w-4.5"})}),b.jsxs("div",{children:[b.jsxs("p",{className:"text-sm font-bold text-foreground",children:[r," Vorschl",r===1?"ag":"äge"," im Auftragsbuch"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Annehmen oder ablehnen."})]})]}),b.jsx(Ko,{className:"h-4 w-4 shrink-0 text-primary/70"})]}),u&&b.jsxs("button",{onClick:()=>Of("maintenance"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-left transition-all hover:bg-amber-500/10 cursor-pointer",children:[b.jsxs("div",{className:"flex items-center gap-3",children:[b.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-amber-500/30 bg-background/30 text-amber-300",children:b.jsx(Hg,{className:"h-4.5 w-4.5"})}),b.jsxs("div",{children:[b.jsxs("p",{className:"text-sm font-bold text-foreground",children:[t," Update",t===1?"":"s"," bereit"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Ansehen und entscheiden."})]})]}),b.jsx(Ko,{className:"h-4 w-4 shrink-0 text-amber-300/70"})]})]})})}function kQ({agent:e,svcErrors:t,onNavigate:r}){const n=[{label:"Hermes Agent",status:e?e.gateway_reachable?"Bereit":"Offline":"…",tone:e?e.gateway_reachable?"ok":"alert":"loading",action:()=>r("agent")},{label:"Konsole (Box-Shell)",status:e?e.box_console_reachable?"Bereit":"Offline":"…",tone:e?e.box_console_reachable?"ok":"warn":"loading",action:()=>r("konsole")},{label:"Systemlogs & Diagnose",status:t>0?`${t} Fehler`:"Keine Fehler",tone:t>0?"alert":"ok",action:()=>Of("logs")},{label:"Wissens-Vault",status:"Öffnen",tone:"muted",action:()=>r("wissen")},{label:"Chronik & Zeitmaschine",status:"Öffnen",tone:"muted",action:()=>r("chronik")}];return b.jsx("div",{className:"rounded-2xl border border-border/60 bg-card/30 p-4 space-y-3 shadow-sm",children:b.jsx("div",{className:"divide-y divide-border/20",children:n.map((i,o)=>{const s={loading:"bg-muted-foreground/45 animate-pulse",ok:"bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.4)]",warn:"bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.4)]",alert:"bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.4)]",muted:"bg-muted-foreground/30"}[i.tone];return b.jsxs("button",{onClick:i.action,className:"w-full py-2.5 px-1.5 flex items-center justify-between text-left hover:bg-card/45 rounded-lg transition-all group cursor-pointer text-xs",children:[b.jsx("span",{className:"text-muted-foreground group-hover:text-foreground transition-colors font-medium",children:i.label}),b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("span",{className:Re("text-[10px] font-semibold font-mono",i.tone==="ok"?"text-emerald-400":i.tone==="warn"?"text-amber-400":i.tone==="alert"?"text-red-400":"text-muted-foreground/60"),children:i.status}),b.jsx("span",{className:Re("h-1.5 w-1.5 rounded-full",s)})]})]},o)})})})}const EQ=y.lazy(()=>sn(()=>import("./ModelsView-CoGGXlnQ.js"),__vite__mapDeps([0,1,2,3,4])).then(e=>({default:e.ModelsView}))),PQ=y.lazy(()=>sn(()=>import("./ConnectView-DegkAqmm.js"),__vite__mapDeps([5,6,7,8])).then(e=>({default:e.ConnectView}))),AQ=y.lazy(()=>sn(()=>import("./MemoryView-DNCBwc-V.js"),__vite__mapDeps([9,8,10,11])).then(e=>({default:e.MemoryView}))),OQ=y.lazy(()=>sn(()=>import("./AgentView-BsfE1obV.js"),[]).then(e=>({default:e.AgentView}))),CQ=y.lazy(()=>sn(()=>import("./KonsoleView-BbOvz3DQ.js"),[]).then(e=>({default:e.KonsoleView}))),jQ=y.lazy(()=>sn(()=>import("./GuideView-DqsY9Wr1.js"),__vite__mapDeps([12,11,3,4])).then(e=>({default:e.GuideView}))),_Q=y.lazy(()=>sn(()=>import("./AuftragsbuchView-DPitmBxF.js"),__vite__mapDeps([13,14])).then(e=>({default:e.AuftragsbuchView}))),NQ=y.lazy(()=>sn(()=>import("./IdeenView-lXJC70fR.js"),__vite__mapDeps([15,14,10,1,4,2])).then(e=>({default:e.IdeenView}))),IQ=y.lazy(()=>sn(()=>import("./ChronikView-DKRwHk9a.js"),__vite__mapDeps([16,2])).then(e=>({default:e.ChronikView}))),MQ=y.lazy(()=>sn(()=>import("./EigenlebenView-nhdxSyQi.js"),__vite__mapDeps([17,11,7])).then(e=>({default:e.EigenlebenView}))),TQ=y.lazy(()=>sn(()=>import("./WissenView-Czc4UCXS.js"),__vite__mapDeps([18,6])).then(e=>({default:e.WissenView})));function DQ(){return b.jsx("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:b.jsx(_f,{className:"h-5 w-5 animate-spin","aria-label":"Lädt …"})})}const RQ=/Mac|iPhone|iPad/.test(navigator.platform);function $Q(){q3(),k3();const[e,t]=y.useState(()=>{const S=window.location.hash.slice(1);return qo.some(E=>E.id===S)?S:"dashboard"}),r=y.useCallback(S=>{window.location.hash.slice(1)===S?t(S):window.location.hash=S},[]),[n,i]=y.useState(()=>localStorage.getItem("mc_sidebar_collapsed")==="true"),[o,s]=y.useState(!1),[u,d]=y.useState(!1),[f,h]=y.useState("maintenance"),{data:m,isError:v}=TA(),{data:x}=$f();y.useEffect(()=>{document.documentElement.classList.add("dark")},[]),y.useEffect(()=>{const S=E=>{var j;h(((j=E.detail)==null?void 0:j.tab)||"maintenance"),d(!0)};return window.addEventListener("open-system-drawer",S),()=>window.removeEventListener("open-system-drawer",S)},[]),y.useEffect(()=>{const S=E=>{var j;const P=(j=E.detail)==null?void 0:j.view;P&&r(P)};return window.addEventListener("mc-navigate",S),()=>window.removeEventListener("mc-navigate",S)},[r]),y.useEffect(()=>{const S=()=>{const E=window.location.hash.slice(1);qo.some(P=>P.id===E)&&t(E)};return window.addEventListener("hashchange",S),()=>window.removeEventListener("hashchange",S)},[]),y.useEffect(()=>{s(!1)},[e]);const k=qo.find(S=>S.id===e);return b.jsxs("div",{className:"flex h-full relative",children:[b.jsx("div",{className:"fixed inset-0 -z-50 pointer-events-none",style:{backgroundColor:"hsl(224,30%,6%)",backgroundImage:["radial-gradient(45% 40% at 12% 8%, hsl(172 72% 50% / 0.10), transparent 70%)","radial-gradient(50% 45% at 88% 92%, hsl(270 70% 60% / 0.10), transparent 70%)","radial-gradient(40% 35% at 75% 30%, hsl(239 70% 62% / 0.07), transparent 70%)"].join(", ")}}),b.jsx(LR,{onNavigate:r}),b.jsx(U3,{open:u,onClose:()=>d(!1),defaultTab:f}),b.jsx("aside",{className:Re("hidden md:flex shrink-0 flex-col border-r border-border/40 bg-card/45 backdrop-blur-md transition-all duration-300 ease-in-out",n?"w-16":"w-60"),children:b.jsx(gP,{collapsed:n,onToggleCollapse:()=>{i(S=>{const E=!S;return localStorage.setItem("mc_sidebar_collapsed",E.toString()),E})},view:e,health:m,backendDown:v,sysStatus:x})}),b.jsxs("div",{className:Re("md:hidden fixed inset-0 z-50 transition-opacity duration-200",o?"opacity-100":"pointer-events-none opacity-0"),"aria-hidden":!o,children:[b.jsx("div",{className:"absolute inset-0 bg-black/60",onClick:()=>s(!1)}),b.jsx("aside",{className:Re("absolute inset-y-0 left-0 flex w-72 max-w-[85vw] flex-col border-r border-border/40 bg-[hsl(224,28%,8%)] transition-transform duration-300 ease-in-out",o?"translate-x-0":"-translate-x-full"),children:b.jsx(gP,{collapsed:!1,onClose:()=>s(!1),view:e,health:m,backendDown:v,sysStatus:x})})]}),b.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[b.jsxs("header",{className:"flex h-14 shrink-0 items-center justify-between gap-3 border-b border-border/40 px-4 md:px-6 bg-card/20 backdrop-blur-sm",children:[b.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[b.jsx("button",{onClick:()=>s(!0),className:"md:hidden p-1.5 -ml-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation öffnen",children:b.jsx(xT,{className:"h-5 w-5","aria-hidden":"true"})}),b.jsx("div",{className:"truncate text-xs font-medium text-muted-foreground tracking-wide uppercase font-sans",children:k.hint})]}),b.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[b.jsx(b3,{}),b.jsx("a",{href:"https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2/src/branch/main/docs/BEDIENUNG.md",target:"_blank",rel:"noopener",className:"hidden sm:flex h-8 items-center rounded-md border border-border/40 bg-background/40 px-2.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer font-semibold",title:"Bedien-Anleitung",children:"Hilfe"}),b.jsxs("button",{onClick:()=>{const S=new KeyboardEvent("keydown",{key:"k",metaKey:!0});document.dispatchEvent(S)},className:"flex items-center gap-2 rounded-md border border-border/40 bg-background/40 px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer",children:[b.jsx(lT,{className:"h-3.5 w-3.5"}),b.jsx("span",{className:"hidden sm:inline",children:"Suchen"}),b.jsx("kbd",{className:"hidden sm:inline rounded bg-muted px-1.5 py-0.5 font-mono text-[9px]",children:RQ?"⌘K":"Strg+K"})]})]})]}),b.jsx("main",{className:"flex-1 overflow-y-auto p-4 md:p-6 scrollbar-thin",children:b.jsxs(y.Suspense,{fallback:b.jsx(DQ,{}),children:[e==="dashboard"&&b.jsx(bQ,{onNavigate:S=>r(S)}),e==="ideen"&&b.jsx(NQ,{}),e==="auftraege"&&b.jsx(_Q,{}),e==="models"&&b.jsx(EQ,{}),e==="connect"&&b.jsx(PQ,{}),e==="memory"&&b.jsx(AQ,{}),e==="wissen"&&b.jsx(TQ,{}),e==="chronik"&&b.jsx(IQ,{}),e==="eigenleben"&&b.jsx(MQ,{}),e==="agent"&&b.jsx(OQ,{}),e==="konsole"&&b.jsx(CQ,{}),e==="guide"&&b.jsx(jQ,{})]})})]})]})}function gP({collapsed:e,onToggleCollapse:t,onClose:r,view:n,health:i,backendDown:o,sysStatus:s}){var u,d,f,h,m;return b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:Re("flex items-center py-4 border-b border-border/40 shrink-0",e?"flex-col gap-3 px-2":"justify-between px-5"),children:[b.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[b.jsx("div",{className:"h-7 w-7 rounded-lg bg-primary shadow-md shadow-primary/20 shrink-0"}),!e&&b.jsxs("div",{className:"leading-tight",children:[b.jsx("div",{className:"text-sm font-semibold tracking-wide font-space",children:"Mission Control"}),b.jsx("div",{className:"text-xs text-muted-foreground",children:"2.0"})]})]}),t&&b.jsx("button",{onClick:t,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":e?"Seitenleiste ausklappen":"Seitenleiste einklappen",title:e?"Maximieren":"Minimieren",children:e?b.jsx(Ko,{className:"h-4 w-4","aria-hidden":"true"}):b.jsx(nT,{className:"h-4 w-4","aria-hidden":"true"})}),r&&b.jsx("button",{onClick:r,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation schließen",children:b.jsx(bu,{className:"h-4 w-4","aria-hidden":"true"})})]}),b.jsx("nav",{className:"flex-1 space-y-1 px-3 py-4 overflow-y-auto",children:(()=>{let v=null;return qo.map(x=>{const k=x.group!==v;return v=x.group,b.jsxs("div",{className:"space-y-1",children:[k&&(e?v!==qo[0].group&&b.jsx("div",{className:"my-3 border-t border-border/30"}):b.jsx("div",{className:"mt-5 mb-1.5 px-3 text-[10px] font-bold uppercase tracking-widest text-muted-foreground/40 first:mt-0 select-none",children:x.group})),b.jsxs("a",{href:`#${x.id}`,onClick:r,"aria-current":n===x.id?"page":void 0,className:Re("flex w-full items-center rounded-md text-sm transition-all cursor-pointer",e?"justify-center p-2.5":"gap-3 px-3 py-2",n===x.id?e?"nav-active-collapsed":"nav-active":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),title:e?x.label:void 0,"aria-label":e?x.label:void 0,children:[b.jsx(x.icon,{className:"h-4.5 w-4.5 shrink-0","aria-hidden":"true"}),!e&&b.jsx("span",{className:"truncate",children:x.label})]})]},x.id)})})()}),b.jsx("div",{className:Re("py-3 text-xs text-muted-foreground border-t border-border/40 shrink-0",e?"px-2 text-center":"px-5"),children:e?b.jsx("div",{className:"flex justify-center",children:b.jsx("span",{className:Re("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",o||!i?"bg-red-500":i.engine_reachable?i.brain&&!i.brain.ready?"bg-amber-500 animate-pulse":"bg-emerald-500 animate-pulse":"bg-amber-500"),title:o?"Zentrale antwortet nicht — Anzeigen evtl. veraltet":i?i.engine_reachable?i.brain&&!i.brain.ready?`Hirn offline (${i.brain.model??"fast"})`:"Engine + Hirn online":"Engine offline":"Backend offline"})}):b.jsxs("div",{className:"space-y-2 text-left",children:[o?b.jsxs("span",{className:"flex items-center gap-2 text-red-400",children:[b.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500 animate-pulse"}),b.jsx("span",{className:"truncate",children:"Zentrale antwortet nicht"})]}):i?b.jsxs(b.Fragment,{children:[b.jsxs("span",{className:"flex items-center gap-2",children:[b.jsx("span",{className:Re("h-2 w-2 rounded-full animate-pulse",i.engine_reachable?"bg-emerald-500":"bg-amber-500")}),b.jsxs("span",{className:"truncate",children:["Engine ",i.engine_reachable?"online":"offline"]})]}),i.brain&&!i.brain.ready&&b.jsxs("span",{className:"flex items-center gap-2 text-amber-400",title:`Agent-Hirn '${i.brain.model??"fast"}' lädt nicht/abgestürzt`,children:[b.jsx("span",{className:"h-2 w-2 rounded-full bg-amber-500 animate-pulse"}),b.jsxs("span",{className:"truncate",children:["Hirn offline",i.brain.model?` (${i.brain.model})`:""]})]})]}):b.jsxs("span",{className:"flex items-center gap-2",children:[b.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"})," ",b.jsx("span",{className:"truncate",children:"Backend offline"})]}),(s==null?void 0:s.versions)&&b.jsxs("div",{className:"space-y-1 text-[9px] text-muted-foreground/60 mt-2 pt-2 border-t border-border/30",children:[b.jsxs("div",{className:"truncate",title:s.versions.mc2?`${s.versions.mc2.branch}-${s.versions.mc2.hash}${s.versions.mc2.dirty?"*":""} (${s.versions.mc2.date})`:"nicht gefunden",children:[b.jsx("strong",{children:"MC2:"})," ",s.versions.mc2?`${s.versions.mc2.hash}${s.versions.mc2.dirty?"*":""}`:"—"]}),b.jsxs("div",{className:"truncate",title:((u=s.versions.engine)==null?void 0:u.type)==="git"?`${s.versions.engine.branch}-${s.versions.engine.hash}${s.versions.engine.dirty?"*":""} (${s.versions.engine.date})`:((d=s.versions.engine)==null?void 0:d.version_text)||"unbekannt",children:[b.jsx("strong",{children:"Engine:"})," ",((f=s.versions.engine)==null?void 0:f.type)==="git"?`${s.versions.engine.hash}${s.versions.engine.dirty?"*":""}`:((m=(h=s.versions.engine)==null?void 0:h.version_text)==null?void 0:m.split(" ").pop())||"—"]}),b.jsxs("div",{className:"truncate",title:s.versions.hermes_agent?`${s.versions.hermes_agent.branch}-${s.versions.hermes_agent.hash}${s.versions.hermes_agent.dirty?"*":""} (${s.versions.hermes_agent.date})`:"nicht gefunden",children:[b.jsx("strong",{children:"Hermes Agent:"})," ",s.versions.hermes_agent?`${s.versions.hermes_agent.hash}${s.versions.hermes_agent.dirty?"*":""}`:"—"]})]})]})})]})}class LQ extends Rg.Component{constructor(){super(...arguments);ws(this,"state",{error:null})}static getDerivedStateFromError(r){return{error:r}}componentDidCatch(r,n){console.error("Unbehandelter UI-Fehler:",r,n.componentStack)}render(){return this.state.error?b.jsx("div",{className:"min-h-screen flex items-center justify-center bg-neutral-950 text-neutral-200 p-8",children:b.jsxs("div",{className:"max-w-lg space-y-4 text-center",children:[b.jsx("div",{className:"text-2xl",children:"Da ist etwas schiefgelaufen."}),b.jsx("div",{className:"text-sm text-neutral-400 break-all",children:this.state.error.message}),b.jsx("button",{className:"px-4 py-2 rounded-lg bg-neutral-800 hover:bg-neutral-700 border border-neutral-700",onClick:()=>window.location.reload(),children:"Neu laden"})]})}):this.props.children}}const zQ=new IM({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});oM.createRoot(document.getElementById("root")).render(b.jsx(Rg.StrictMode,{children:b.jsx(LQ,{children:b.jsx(MM,{client:zQ,children:b.jsx($Q,{})})})}));export{BQ as $,jT as A,Bg as B,tT as C,rT as D,Cv as E,XQ as F,LA as G,fT as H,JQ as I,I3 as J,W1 as K,_f as L,Ko as M,iT as N,M3 as O,V1 as P,qQ as Q,CT as R,ET as S,Gs as T,VP as U,aT as V,Kg as W,bu as X,N3 as Y,sT as Z,sn as _,_3 as a,jf as a0,QM as a1,_T as a2,Vo as a3,OT as a4,As as a5,Nf as a6,UP as a7,Wg as a8,yT as a9,pk as aA,Dg as aB,cT as aa,E3 as ab,P3 as ac,nX as ad,Ug as ae,HQ as af,WP as ag,uT as ah,A3 as ai,pT as aj,XM as ak,wT as al,Hg as am,hT as an,O3 as ao,VQ as ap,K1 as aq,KQ as ar,gT as as,lf as at,Rg as au,su as av,Ek as aw,L8 as ax,My as ay,mk as az,Xg as b,ke as c,tX as d,Re as e,Mm as f,Me as g,YQ as h,WQ as i,b as j,ZM as k,RA as l,GQ as m,$f as n,QQ as o,eX as p,De as q,y as r,UQ as s,ZQ as t,xu as u,No as v,BR as w,HP as x,ST as y,rX as z}; +Tipp: Dafür wird evtl. das Box-Passwort gebraucht (oben rechts hinterlegen).`:""))}v.invalidateQueries({queryKey:De.health}),v.invalidateQueries({queryKey:De.services}),v.invalidateQueries({queryKey:De.models})}catch(Z){h("Reparatur fehlgeschlagen",String((Z==null?void 0:Z.message)||Z))}finally{k(Z=>({...Z,[M]:!1}))}}const E=((de=t==null?void 0:t.running)==null?void 0:de.length)??0,P=(r==null?void 0:r.services.filter(M=>M.ok).length)??0,_=(r==null?void 0:r.services.length)??0,j=_-P,O=(i==null?void 0:i.length)??0,N=(n?(n.os>0?1:0)+(n.engine>0?1:0)+(n.swap>0?1:0)+(n.models>0?1:0):0)+(((Y=n==null?void 0:n.components)==null?void 0:Y.filter(M=>M.update===!0).length)??0),C=u!=null&&u.available?u.open_count:0,R=d!=null&&d.available?d.items.filter(M=>M.status==="blocked").length:0,z=s?[s.gateway,s.memory,s.desktop_gateway]:[],F=z.filter(M=>M==null?void 0:M.ok).length,V=s?s.gateway.ok?s.memory.ok?s.desktop_gateway.ok?"":"Desktop-Gateway":"Gedächtnis-Leitung":"Modell-Leitung":"",Q=(ae=t==null?void 0:t.models)==null?void 0:ae.find(M=>M.role==="hermes"),B=Q!=null&&Q.name?(X=Q.name.split("/").pop())==null?void 0:X.replace(/\.gguf$/i,""):"",ue=i?i.filter(M=>["auto","agent","hermes"].includes(M.source)).length:0,G=r==null?void 0:r.services.filter(M=>!M.ok).map(M=>M.name).join(", "),le=n?[n.os>0&&"OS",n.engine>0&&"Engine",n.swap>0&&"Swap",n.models>0&&"Modelle"].filter(Boolean):[],fe=le.length>0?le.join(" + "):"";return w.jsxs("div",{className:"space-y-6",children:[w.jsxs("div",{children:[w.jsx("h1",{className:"bg-gradient-to-r from-foreground via-foreground to-primary bg-clip-text font-space text-2xl font-bold tracking-tight text-transparent",children:"Cockpit"}),w.jsx("p",{className:"text-sm text-muted-foreground",children:"Deine Box auf einen Blick — Details hinter jeder Kachel."})]}),w.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6 items-start",children:[w.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[w.jsx(hQ,{verdict:f.verdict,memory:f.memory,warns:f.warns,problems:f.problems}),w.jsxs("section",{children:[w.jsx(xd,{children:"Leistung"}),w.jsx("div",{className:"grid gap-4 md:grid-cols-1",children:w.jsx(lQ,{})}),w.jsx("div",{className:"mt-4",children:w.jsx(dQ,{})})]}),w.jsxs("section",{children:[w.jsx(xd,{children:"Bereiche"}),w.jsxs("div",{className:"grid gap-4 grid-cols-2 md:grid-cols-3",children:[w.jsx(Io,{icon:By,title:"Auftragsbuch",value:u!=null&&u.available?C:"—",unit:C===1?"Vorschlag":"Vorschläge",tone:u?R>0||C>0?"warn":"ok":"loading",hint:R>0?`${R} Karte${R===1?"":"n"} wartet auf deine Antwort`:C>0?`${C} offene Patches`:"Keine ausstehenden Vorschläge",onClick:()=>e("auftraege")}),w.jsx(Io,{icon:BP,title:"Modelle",value:E,unit:"warm",tone:E>0?"ok":"muted",hint:B?`Hirn: ${B}`:"Kein Hermes-Modell geladen",onClick:()=>e("models")}),w.jsx(Io,{icon:Fy,title:"Gedächtnis",value:i?O:"…",unit:"Notizen",tone:i?"ok":"loading",hint:i?`${O} Fakten (${ue} auto gelernt)`:"Gedächtnis-Pool laden...",onClick:()=>e("memory")}),w.jsx(Io,{icon:Nf,title:"Dienste",value:r?`${P}/${_}`:"…",unit:"laufen",tone:r?j>0?"warn":"ok":"loading",hint:G?`Ausfall: ${G}`:"Alle Dienste online",onClick:()=>Of("maintenance")}),w.jsx(Io,{icon:Wy,title:"Updates",value:n?N>0?N:"0":"…",unit:N>0?"bereit":"aktuell",tone:n?N>0?"warn":"ok":"loading",hint:N>0?`Verfügbar: ${fe}`:"Alles auf dem neuesten Stand",onClick:()=>Of("maintenance")}),w.jsx(Io,{icon:Uy,title:"Verbinden",value:s?`${F}/${z.length}`:"…",unit:"Leitungen",tone:s?F===z.length?"ok":"warn":"loading",hint:V?`Gestört: ${V}`:"Hermes Desktop & IDEs bereit",onClick:()=>e("connect")})]})]})]}),w.jsxs("div",{className:"space-y-6",children:[w.jsx(pQ,{problems:f.problems,pendingCount:N,openAuftraege:C,blockedIdeen:R,busy:x,onRepair:S,onNavigate:e}),w.jsxs("section",{children:[w.jsx(xd,{children:"Anstehendes"}),w.jsx(U3,{})]}),w.jsxs("section",{children:[w.jsx(xd,{children:"Werkzeuge & Diagnose"}),w.jsx(mQ,{agent:o,svcErrors:j,onNavigate:e})]})]})]}),m]})}function xd({children:e}){return w.jsx("p",{className:"mb-2 ml-0.5 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/60",children:e})}function hQ({verdict:e,memory:t,warns:r,problems:n}){const i=r.length?`${r[0].label}: ${r[0].detail}${r.length>1?` (+${r.length-1} weitere)`:""}`:t.status==="full"?t.text:"Nichts Schlimmes — nur ein Hinweis.",o=n.length?`${n[0].label}: ${n[0].detail}${n.length>1?` (+${n.length-1} weitere)`:""}`:"Ein wichtiger Dienst hakt.",s={loading:{ring:"border-border/60 bg-card/45",icon:jf,iconCls:"text-muted-foreground animate-spin",title:"Box wird geprüft …",sub:"Einen Moment."},gut:{ring:"border-emerald-500/40 bg-emerald-500/5",icon:iT,iconCls:"text-emerald-400",title:"Box gesund",sub:"Alle wichtigen Dienste laufen."},warn:{ring:"border-amber-500/40 bg-amber-500/5",icon:Gs,iconCls:"text-amber-400",title:"Kleinigkeit an der Box",sub:i},problem:{ring:"border-red-500/50 bg-red-500/5",icon:Gs,iconCls:"text-red-400",title:"Box braucht Hilfe",sub:o}}[e],u=s.icon,d={ok:"text-emerald-400",warn:"text-amber-400",full:"text-red-400",unknown:"text-muted-foreground"}[t.status],f={ok:"bg-emerald-500",warn:"bg-amber-500",full:"bg-red-500",unknown:"bg-muted-foreground/40"}[t.status];return w.jsxs("div",{className:Re("flex flex-col gap-4 rounded-2xl border p-5 shadow-lg shadow-black/15 backdrop-blur-md transition-colors sm:flex-row sm:items-center sm:justify-between h-full",s.ring),children:[w.jsxs("div",{className:"flex items-center gap-3",children:[w.jsx("div",{className:"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl border border-border/40 bg-background/30",children:w.jsx(u,{className:Re("h-6 w-6",s.iconCls)})}),w.jsxs("div",{className:"min-w-0",children:[w.jsx("h2",{className:"text-base font-bold tracking-tight text-foreground",children:s.title}),w.jsx("p",{className:"text-xs text-muted-foreground",children:s.sub})]})]}),w.jsxs("div",{className:"w-full max-w-[16rem] rounded-xl border border-border/30 bg-background/20 p-3",children:[w.jsxs("div",{className:"mb-1.5 flex items-center justify-between text-[11px]",children:[w.jsxs("span",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-wider text-muted-foreground",children:[w.jsx(nT,{className:"h-3.5 w-3.5"})," Speicher"]}),w.jsx("span",{className:Re("font-mono font-bold",d),children:t.status==="unknown"?"—":`${t.usedGb.toFixed(1)} / ${t.totalGb.toFixed(1)} GB`})]}),w.jsx("div",{className:"h-2 w-full overflow-hidden rounded-full border border-border/30 bg-background/50",children:w.jsx("div",{className:Re("h-full rounded-full transition-all duration-500",f),style:{width:`${t.pct}%`}})})]})]})}function pQ({problems:e,pendingCount:t,openAuftraege:r,blockedIdeen:n,busy:i,onRepair:o,onNavigate:s}){const u=t>0,d=r>0,f=n>0,h=e.length===0&&!u&&!d&&!f;return w.jsx("div",{className:"h-full flex flex-col justify-between",children:h?w.jsxs("div",{className:"flex items-center gap-3 rounded-2xl border border-emerald-500/25 bg-emerald-500/5 p-4 h-full",children:[w.jsx(qM,{className:"h-5 w-5 shrink-0 text-emerald-400"}),w.jsxs("div",{children:[w.jsx("p",{className:"text-sm font-semibold text-foreground",children:"Nichts zu tun"}),w.jsx("p",{className:"text-xs text-muted-foreground",children:"Alles läuft. Du musst gerade nichts abnicken."})]})]}):w.jsxs("div",{className:"space-y-2 h-full flex flex-col justify-center",children:[e.map(m=>w.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3 rounded-2xl border border-red-500/25 bg-red-500/5 p-4",children:[w.jsxs("div",{className:"flex min-w-0 items-center gap-3 w-full",children:[w.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:w.jsx(m.icon,{className:"h-4.5 w-4.5"})}),w.jsxs("div",{className:"min-w-0 flex-1",children:[w.jsx("p",{className:"text-sm font-bold text-foreground",children:m.label}),w.jsx("p",{className:"truncate text-xs text-muted-foreground",children:m.detail})]})]}),m.repair&&w.jsxs("button",{onClick:()=>m.repair&&o(m.id,m.repair),disabled:!!i[m.id],className:"flex h-9 shrink-0 items-center gap-1.5 rounded-lg border border-red-500/40 bg-red-500/10 px-3 text-[11px] font-bold uppercase tracking-wide text-red-300 transition-all hover:bg-red-500/20 cursor-pointer disabled:opacity-60 w-full sm:w-auto justify-center",children:[i[m.id]?w.jsx(jf,{className:"h-3.5 w-3.5 animate-spin"}):w.jsx(bT,{className:"h-3.5 w-3.5"}),m.repair.label]})]},m.id)),f&&w.jsxs("button",{onClick:()=>s("auftraege"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-red-500/30 bg-red-500/5 p-4 text-left transition-all hover:bg-red-500/10 cursor-pointer",children:[w.jsxs("div",{className:"flex items-center gap-3",children:[w.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-red-500/30 bg-background/30 text-red-300",children:w.jsx(UP,{className:"h-4.5 w-4.5"})}),w.jsxs("div",{children:[w.jsxs("p",{className:"text-sm font-bold text-foreground",children:[n," Karte",n===1?"":"n"," braucht deine Antwort"]}),w.jsx("p",{className:"text-xs text-muted-foreground",children:"Die Box hängt an einer Frage und wartet auf dich."})]})]}),w.jsx(Bs,{className:"h-4 w-4 shrink-0 text-red-300/70"})]}),d&&w.jsxs("button",{onClick:()=>s("auftraege"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-primary/30 bg-primary/5 p-4 text-left transition-all hover:bg-primary/10 cursor-pointer",children:[w.jsxs("div",{className:"flex items-center gap-3",children:[w.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-primary/30 bg-background/30 text-primary",children:w.jsx(By,{className:"h-4.5 w-4.5"})}),w.jsxs("div",{children:[w.jsxs("p",{className:"text-sm font-bold text-foreground",children:[r," Vorschl",r===1?"ag":"äge"," im Auftragsbuch"]}),w.jsx("p",{className:"text-xs text-muted-foreground",children:"Annehmen oder ablehnen."})]})]}),w.jsx(Bs,{className:"h-4 w-4 shrink-0 text-primary/70"})]}),u&&w.jsxs("button",{onClick:()=>Of("maintenance"),className:"flex w-full items-center justify-between gap-3 rounded-2xl border border-amber-500/30 bg-amber-500/5 p-4 text-left transition-all hover:bg-amber-500/10 cursor-pointer",children:[w.jsxs("div",{className:"flex items-center gap-3",children:[w.jsx("span",{className:"flex h-9 w-9 shrink-0 items-center justify-center rounded-lg border border-amber-500/30 bg-background/30 text-amber-300",children:w.jsx(Wy,{className:"h-4.5 w-4.5"})}),w.jsxs("div",{children:[w.jsxs("p",{className:"text-sm font-bold text-foreground",children:[t," Update",t===1?"":"s"," bereit"]}),w.jsx("p",{className:"text-xs text-muted-foreground",children:"Ansehen und entscheiden."})]})]}),w.jsx(Bs,{className:"h-4 w-4 shrink-0 text-amber-300/70"})]})]})})}function mQ({agent:e,svcErrors:t,onNavigate:r}){const n=[{label:"Hermes Agent",status:e?e.gateway_reachable?"Bereit":"Offline":"…",tone:e?e.gateway_reachable?"ok":"alert":"loading",action:()=>r("agent")},{label:"Konsole (Box-Shell)",status:e?e.box_console_reachable?"Bereit":"Offline":"…",tone:e?e.box_console_reachable?"ok":"warn":"loading",action:()=>r("konsole")},{label:"Systemlogs & Diagnose",status:t>0?`${t} Fehler`:"Keine Fehler",tone:t>0?"alert":"ok",action:()=>Of("logs")},{label:"Wissens-Vault",status:"Öffnen",tone:"muted",action:()=>r("wissen")},{label:"Chronik & Zeitmaschine",status:"Öffnen",tone:"muted",action:()=>r("chronik")}];return w.jsx("div",{className:"rounded-2xl border border-border/60 bg-card/30 p-4 space-y-3 shadow-sm",children:w.jsx("div",{className:"divide-y divide-border/20",children:n.map((i,o)=>{const s={loading:"bg-muted-foreground/45 animate-pulse",ok:"bg-emerald-500 shadow-[0_0_8px_rgba(16,185,129,0.4)]",warn:"bg-amber-500 shadow-[0_0_8px_rgba(245,158,11,0.4)]",alert:"bg-red-500 shadow-[0_0_8px_rgba(239,68,68,0.4)]",muted:"bg-muted-foreground/30"}[i.tone];return w.jsxs("button",{onClick:i.action,className:"w-full py-2.5 px-1.5 flex items-center justify-between text-left hover:bg-card/45 rounded-lg transition-all group cursor-pointer text-xs",children:[w.jsx("span",{className:"text-muted-foreground group-hover:text-foreground transition-colors font-medium",children:i.label}),w.jsxs("div",{className:"flex items-center gap-2",children:[w.jsx("span",{className:Re("text-[10px] font-semibold font-mono",i.tone==="ok"?"text-emerald-400":i.tone==="warn"?"text-amber-400":i.tone==="alert"?"text-red-400":"text-muted-foreground/60"),children:i.status}),w.jsx("span",{className:Re("h-1.5 w-1.5 rounded-full",s)})]})]},o)})})})}const vQ=g.lazy(()=>sn(()=>import("./ModelsView-Dqag6LQ7.js"),__vite__mapDeps([0,1,2,3,4,5])).then(e=>({default:e.ModelsView}))),yQ=g.lazy(()=>sn(()=>import("./ConnectView-DTJvmfv6.js"),__vite__mapDeps([6,4,7,8,9])).then(e=>({default:e.ConnectView}))),gQ=g.lazy(()=>sn(()=>import("./MemoryView-4uLiE0nS.js"),__vite__mapDeps([10,9,11,12])).then(e=>({default:e.MemoryView}))),xQ=g.lazy(()=>sn(()=>import("./AgentView-ChtY_-hS.js"),[]).then(e=>({default:e.AgentView}))),bQ=g.lazy(()=>sn(()=>import("./KonsoleView-TyxWGq5c.js"),[]).then(e=>({default:e.KonsoleView}))),wQ=g.lazy(()=>sn(()=>import("./GuideView-D88tSftX.js"),__vite__mapDeps([13,12,3,5])).then(e=>({default:e.GuideView}))),SQ=g.lazy(()=>sn(()=>import("./AuftragsbuchView-D_PNalAe.js"),__vite__mapDeps([14,15,4])).then(e=>({default:e.AuftragsbuchView}))),kQ=g.lazy(()=>sn(()=>import("./IdeenView-6hSlKBsS.js"),__vite__mapDeps([16,15,11,1,5,4,2])).then(e=>({default:e.IdeenView}))),EQ=g.lazy(()=>sn(()=>import("./ChronikView-gK7ROOGU.js"),__vite__mapDeps([17,2])).then(e=>({default:e.ChronikView}))),PQ=g.lazy(()=>sn(()=>import("./EigenlebenView-BSzH0Ym2.js"),__vite__mapDeps([18,4,12,8])).then(e=>({default:e.EigenlebenView}))),AQ=g.lazy(()=>sn(()=>import("./WissenView-DIk50fMS.js"),__vite__mapDeps([19,7])).then(e=>({default:e.WissenView})));function OQ(){return w.jsx("div",{className:"flex h-64 items-center justify-center text-muted-foreground",children:w.jsx(jf,{className:"h-5 w-5 animate-spin","aria-label":"Lädt …"})})}const CQ=/Mac|iPhone|iPad/.test(navigator.platform);function _Q(){L3(),h3();const[e,t]=g.useState(()=>{const S=window.location.hash.slice(1);return Vo.some(E=>E.id===S)?S:"dashboard"}),r=g.useCallback(S=>{window.location.hash.slice(1)===S?t(S):window.location.hash=S},[]),[n,i]=g.useState(()=>localStorage.getItem("mc_sidebar_collapsed")==="true"),[o,s]=g.useState(!1),[u,d]=g.useState(!1),[f,h]=g.useState("maintenance"),{data:m,isError:v}=MA(),{data:x}=$f();g.useEffect(()=>{document.documentElement.classList.add("dark")},[]),g.useEffect(()=>{const S=E=>{var _;h(((_=E.detail)==null?void 0:_.tab)||"maintenance"),d(!0)};return window.addEventListener("open-system-drawer",S),()=>window.removeEventListener("open-system-drawer",S)},[]),g.useEffect(()=>{const S=E=>{var _;const P=(_=E.detail)==null?void 0:_.view;P&&r(P)};return window.addEventListener("mc-navigate",S),()=>window.removeEventListener("mc-navigate",S)},[r]),g.useEffect(()=>{const S=()=>{const E=window.location.hash.slice(1);Vo.some(P=>P.id===E)&&t(E)};return window.addEventListener("hashchange",S),()=>window.removeEventListener("hashchange",S)},[]),g.useEffect(()=>{s(!1)},[e]);const k=Vo.find(S=>S.id===e);return w.jsxs("div",{className:"flex h-full relative",children:[w.jsx("div",{className:"fixed inset-0 -z-50 pointer-events-none",style:{backgroundColor:"hsl(224,30%,6%)",backgroundImage:["radial-gradient(45% 40% at 12% 8%, hsl(172 72% 50% / 0.10), transparent 70%)","radial-gradient(50% 45% at 88% 92%, hsl(270 70% 60% / 0.10), transparent 70%)","radial-gradient(40% 35% at 75% 30%, hsl(239 70% 62% / 0.07), transparent 70%)"].join(", ")}}),w.jsx(CR,{onNavigate:r}),w.jsx(M3,{open:u,onClose:()=>d(!1),defaultTab:f}),w.jsx("aside",{className:Re("hidden md:flex shrink-0 flex-col border-r border-border/40 bg-card/45 backdrop-blur-md transition-all duration-300 ease-in-out",n?"w-16":"w-60"),children:w.jsx(vP,{collapsed:n,onToggleCollapse:()=>{i(S=>{const E=!S;return localStorage.setItem("mc_sidebar_collapsed",E.toString()),E})},view:e,health:m,backendDown:v,sysStatus:x})}),w.jsxs("div",{className:Re("md:hidden fixed inset-0 z-50 transition-opacity duration-200",o?"opacity-100":"pointer-events-none opacity-0"),"aria-hidden":!o,children:[w.jsx("div",{className:"absolute inset-0 bg-black/60",onClick:()=>s(!1)}),w.jsx("aside",{className:Re("absolute inset-y-0 left-0 flex w-72 max-w-[85vw] flex-col border-r border-border/40 bg-[hsl(224,28%,8%)] transition-transform duration-300 ease-in-out",o?"translate-x-0":"-translate-x-full"),children:w.jsx(vP,{collapsed:!1,onClose:()=>s(!1),view:e,health:m,backendDown:v,sysStatus:x})})]}),w.jsxs("div",{className:"flex min-w-0 flex-1 flex-col",children:[w.jsxs("header",{className:"flex h-14 shrink-0 items-center justify-between gap-3 border-b border-border/40 px-4 md:px-6 bg-card/20 backdrop-blur-sm",children:[w.jsxs("div",{className:"flex min-w-0 items-center gap-3",children:[w.jsx("button",{onClick:()=>s(!0),className:"md:hidden p-1.5 -ml-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation öffnen",children:w.jsx(cT,{className:"h-5 w-5","aria-hidden":"true"})}),w.jsx("div",{className:"truncate text-xs font-medium text-muted-foreground tracking-wide uppercase font-sans",children:k.hint})]}),w.jsxs("div",{className:"flex shrink-0 items-center gap-2",children:[w.jsx(c3,{}),w.jsx("a",{href:"https://git.tobisniceshomelab.ddnsfree.com/Hitonabi/mission-control-v2/src/branch/main/docs/BEDIENUNG.md",target:"_blank",rel:"noopener",className:"hidden sm:flex h-8 items-center rounded-md border border-border/40 bg-background/40 px-2.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer font-semibold",title:"Bedien-Anleitung",children:"Hilfe"}),w.jsxs("button",{onClick:()=>{const S=new KeyboardEvent("keydown",{key:"k",metaKey:!0});document.dispatchEvent(S)},className:"flex items-center gap-2 rounded-md border border-border/40 bg-background/40 px-2.5 py-1.5 text-xs text-muted-foreground hover:bg-accent hover:text-accent-foreground transition-all cursor-pointer",children:[w.jsx(ZM,{className:"h-3.5 w-3.5"}),w.jsx("span",{className:"hidden sm:inline",children:"Suchen"}),w.jsx("kbd",{className:"hidden sm:inline rounded bg-muted px-1.5 py-0.5 font-mono text-[9px]",children:CQ?"⌘K":"Strg+K"})]})]})]}),w.jsx("main",{className:"flex-1 overflow-y-auto p-4 md:p-6 scrollbar-thin",children:w.jsxs(g.Suspense,{fallback:w.jsx(OQ,{}),children:[e==="dashboard"&&w.jsx(fQ,{onNavigate:S=>r(S)}),e==="ideen"&&w.jsx(kQ,{}),e==="auftraege"&&w.jsx(SQ,{}),e==="models"&&w.jsx(vQ,{}),e==="connect"&&w.jsx(yQ,{}),e==="memory"&&w.jsx(gQ,{}),e==="wissen"&&w.jsx(AQ,{}),e==="chronik"&&w.jsx(EQ,{}),e==="eigenleben"&&w.jsx(PQ,{}),e==="agent"&&w.jsx(xQ,{}),e==="konsole"&&w.jsx(bQ,{}),e==="guide"&&w.jsx(wQ,{})]})})]})]})}function vP({collapsed:e,onToggleCollapse:t,onClose:r,view:n,health:i,backendDown:o,sysStatus:s}){var u,d,f,h,m;return w.jsxs(w.Fragment,{children:[w.jsxs("div",{className:Re("flex items-center py-4 border-b border-border/40 shrink-0",e?"flex-col gap-3 px-2":"justify-between px-5"),children:[w.jsxs("div",{className:"flex items-center gap-2 overflow-hidden",children:[w.jsx("div",{className:"h-7 w-7 rounded-lg bg-primary shadow-md shadow-primary/20 shrink-0"}),!e&&w.jsxs("div",{className:"leading-tight",children:[w.jsx("div",{className:"text-sm font-semibold tracking-wide font-space",children:"Mission Control"}),w.jsx("div",{className:"text-xs text-muted-foreground",children:"2.0"})]})]}),t&&w.jsx("button",{onClick:t,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":e?"Seitenleiste ausklappen":"Seitenleiste einklappen",title:e?"Maximieren":"Minimieren",children:e?w.jsx(Bs,{className:"h-4 w-4","aria-hidden":"true"}):w.jsx(GM,{className:"h-4 w-4","aria-hidden":"true"})}),r&&w.jsx("button",{onClick:r,className:"p-1 rounded-md hover:bg-accent text-muted-foreground transition-colors cursor-pointer","aria-label":"Navigation schließen",children:w.jsx(bu,{className:"h-4 w-4","aria-hidden":"true"})})]}),w.jsx("nav",{className:"flex-1 space-y-1 px-3 py-4 overflow-y-auto",children:(()=>{let v=null;return Vo.map(x=>{const k=x.group!==v;return v=x.group,w.jsxs("div",{className:"space-y-1",children:[k&&(e?v!==Vo[0].group&&w.jsx("div",{className:"my-3 border-t border-border/30"}):w.jsx("div",{className:"mt-5 mb-1.5 px-3 text-[10px] font-bold uppercase tracking-widest text-muted-foreground/40 first:mt-0 select-none",children:x.group})),w.jsxs("a",{href:`#${x.id}`,onClick:r,"aria-current":n===x.id?"page":void 0,className:Re("flex w-full items-center rounded-md text-sm transition-all cursor-pointer",e?"justify-center p-2.5":"gap-3 px-3 py-2",n===x.id?e?"nav-active-collapsed":"nav-active":"text-muted-foreground hover:bg-accent hover:text-accent-foreground"),title:e?x.label:void 0,"aria-label":e?x.label:void 0,children:[w.jsx(x.icon,{className:"h-4.5 w-4.5 shrink-0","aria-hidden":"true"}),!e&&w.jsx("span",{className:"truncate",children:x.label})]})]},x.id)})})()}),w.jsx("div",{className:Re("py-3 text-xs text-muted-foreground border-t border-border/40 shrink-0",e?"px-2 text-center":"px-5"),children:e?w.jsx("div",{className:"flex justify-center",children:w.jsx("span",{className:Re("h-2.5 w-2.5 rounded-full ring-2 ring-black/40",o||!i?"bg-red-500":i.engine_reachable?i.brain&&!i.brain.ready?"bg-amber-500 animate-pulse":"bg-emerald-500 animate-pulse":"bg-amber-500"),title:o?"Zentrale antwortet nicht — Anzeigen evtl. veraltet":i?i.engine_reachable?i.brain&&!i.brain.ready?`Hirn offline (${i.brain.model??"fast"})`:"Engine + Hirn online":"Engine offline":"Backend offline"})}):w.jsxs("div",{className:"space-y-2 text-left",children:[o?w.jsxs("span",{className:"flex items-center gap-2 text-red-400",children:[w.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500 animate-pulse"}),w.jsx("span",{className:"truncate",children:"Zentrale antwortet nicht"})]}):i?w.jsxs(w.Fragment,{children:[w.jsxs("span",{className:"flex items-center gap-2",children:[w.jsx("span",{className:Re("h-2 w-2 rounded-full animate-pulse",i.engine_reachable?"bg-emerald-500":"bg-amber-500")}),w.jsxs("span",{className:"truncate",children:["Engine ",i.engine_reachable?"online":"offline"]})]}),i.brain&&!i.brain.ready&&w.jsxs("span",{className:"flex items-center gap-2 text-amber-400",title:`Agent-Hirn '${i.brain.model??"fast"}' lädt nicht/abgestürzt`,children:[w.jsx("span",{className:"h-2 w-2 rounded-full bg-amber-500 animate-pulse"}),w.jsxs("span",{className:"truncate",children:["Hirn offline",i.brain.model?` (${i.brain.model})`:""]})]})]}):w.jsxs("span",{className:"flex items-center gap-2",children:[w.jsx("span",{className:"h-2 w-2 rounded-full bg-red-500"})," ",w.jsx("span",{className:"truncate",children:"Backend offline"})]}),(s==null?void 0:s.versions)&&w.jsxs("div",{className:"space-y-1 text-[9px] text-muted-foreground/60 mt-2 pt-2 border-t border-border/30",children:[w.jsxs("div",{className:"truncate",title:s.versions.mc2?`${s.versions.mc2.branch}-${s.versions.mc2.hash}${s.versions.mc2.dirty?"*":""} (${s.versions.mc2.date})`:"nicht gefunden",children:[w.jsx("strong",{children:"MC2:"})," ",s.versions.mc2?`${s.versions.mc2.hash}${s.versions.mc2.dirty?"*":""}`:"—"]}),w.jsxs("div",{className:"truncate",title:((u=s.versions.engine)==null?void 0:u.type)==="git"?`${s.versions.engine.branch}-${s.versions.engine.hash}${s.versions.engine.dirty?"*":""} (${s.versions.engine.date})`:((d=s.versions.engine)==null?void 0:d.version_text)||"unbekannt",children:[w.jsx("strong",{children:"Engine:"})," ",((f=s.versions.engine)==null?void 0:f.type)==="git"?`${s.versions.engine.hash}${s.versions.engine.dirty?"*":""}`:((m=(h=s.versions.engine)==null?void 0:h.version_text)==null?void 0:m.split(" ").pop())||"—"]}),w.jsxs("div",{className:"truncate",title:s.versions.hermes_agent?`${s.versions.hermes_agent.branch}-${s.versions.hermes_agent.hash}${s.versions.hermes_agent.dirty?"*":""} (${s.versions.hermes_agent.date})`:"nicht gefunden",children:[w.jsx("strong",{children:"Hermes Agent:"})," ",s.versions.hermes_agent?`${s.versions.hermes_agent.hash}${s.versions.hermes_agent.dirty?"*":""}`:"—"]})]})]})})]})}class jQ extends Dy.Component{constructor(){super(...arguments);bs(this,"state",{error:null})}static getDerivedStateFromError(r){return{error:r}}componentDidCatch(r,n){console.error("Unbehandelter UI-Fehler:",r,n.componentStack)}render(){return this.state.error?w.jsx("div",{className:"min-h-screen flex items-center justify-center bg-neutral-950 text-neutral-200 p-8",children:w.jsxs("div",{className:"max-w-lg space-y-4 text-center",children:[w.jsx("div",{className:"text-2xl",children:"Da ist etwas schiefgelaufen."}),w.jsx("div",{className:"text-sm text-neutral-400 break-all",children:this.state.error.message}),w.jsx("button",{className:"px-4 py-2 rounded-lg bg-neutral-800 hover:bg-neutral-700 border border-neutral-700",onClick:()=>window.location.reload(),children:"Neu laden"})]})}):this.props.children}}const NQ=new PM({defaultOptions:{queries:{retry:1,refetchOnWindowFocus:!1,staleTime:5e3}}});JI.createRoot(document.getElementById("root")).render(w.jsx(Dy.StrictMode,{children:w.jsx(jQ,{children:w.jsx(AM,{client:NQ,children:w.jsx(_Q,{})})})}));export{_f as $,xT as A,Fy as B,qM as C,HQ as D,Cv as E,DA as F,VQ as G,nT as H,k3 as I,U1 as J,Bs as K,jf as L,YM as M,E3 as N,FQ as O,K1 as P,gT as Q,KP as R,pT as S,Gs as T,QM as U,Hy as V,S3 as W,bu as X,JM as Y,MQ as Z,sn as _,b3 as a,bT as a0,Ko as a1,yT as a2,Ps as a3,Nf as a4,BP as a5,Uy as a6,uT as a7,tT as a8,p3 as a9,m3 as aa,QQ as ab,By as ac,RQ as ad,UP as ae,eT as af,$Q as ag,aT as ah,WM as ai,Wy as aj,iT as ak,v3 as al,zQ as am,H1 as an,LQ as ao,sT as ap,lf as aq,Dy as ar,su as as,Ek as at,C8 as au,Ig as av,mk as aw,pk as ax,Ty as ay,Qy as b,Pe as c,GQ as d,Re as e,Mm as f,Me as g,UQ as h,DQ as i,w as j,HM as k,TA as l,BQ as m,$f as n,WQ as o,qQ as p,De as q,g as r,TQ as s,KQ as t,xu as u,No as v,NR as w,WP as x,fT as y,YQ as z}; diff --git a/frontend/dist/assets/layers-C62c1z5s.js b/frontend/dist/assets/layers-DxeU1JZb.js similarity index 91% rename from frontend/dist/assets/layers-C62c1z5s.js rename to frontend/dist/assets/layers-DxeU1JZb.js index a84e80f..3611821 100644 --- a/frontend/dist/assets/layers-C62c1z5s.js +++ b/frontend/dist/assets/layers-DxeU1JZb.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-BChEIiQl.js";/** +import{c as a}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/rotate-ccw-CPYnjQ6M.js b/frontend/dist/assets/rotate-ccw-C_-gXN7Y.js similarity index 88% rename from frontend/dist/assets/rotate-ccw-CPYnjQ6M.js rename to frontend/dist/assets/rotate-ccw-C_-gXN7Y.js index 3c95b20..ed4f361 100644 --- a/frontend/dist/assets/rotate-ccw-CPYnjQ6M.js +++ b/frontend/dist/assets/rotate-ccw-C_-gXN7Y.js @@ -1,4 +1,4 @@ -import{c as t}from"./index-BChEIiQl.js";/** +import{c as t}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/send-CS1kRsDf.js b/frontend/dist/assets/send-pU4Gy5vX.js similarity index 90% rename from frontend/dist/assets/send-CS1kRsDf.js rename to frontend/dist/assets/send-pU4Gy5vX.js index 2fcdad7..ea1375e 100644 --- a/frontend/dist/assets/send-CS1kRsDf.js +++ b/frontend/dist/assets/send-pU4Gy5vX.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-BChEIiQl.js";/** +import{c as a}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/assets/zap-I2SMIyr4.js b/frontend/dist/assets/zap-BeUXRjSL.js similarity index 96% rename from frontend/dist/assets/zap-I2SMIyr4.js rename to frontend/dist/assets/zap-BeUXRjSL.js index 7eef42c..430c964 100644 --- a/frontend/dist/assets/zap-I2SMIyr4.js +++ b/frontend/dist/assets/zap-BeUXRjSL.js @@ -1,4 +1,4 @@ -import{c as a}from"./index-BChEIiQl.js";/** +import{c as a}from"./index-Cejiqiju.js";/** * @license lucide-react v0.460.0 - ISC * * This source code is licensed under the ISC license. diff --git a/frontend/dist/index.html b/frontend/dist/index.html index 134e2d3..bac817a 100644 --- a/frontend/dist/index.html +++ b/frontend/dist/index.html @@ -7,8 +7,8 @@ Mission Control 2.0 - - + +
diff --git a/frontend/src/components/dashboard/TokenPerformanceCard.tsx b/frontend/src/components/dashboard/TokenPerformanceCard.tsx deleted file mode 100644 index 94c0f88..0000000 --- a/frontend/src/components/dashboard/TokenPerformanceCard.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { useMemo, useState } from "react" -import { Activity } from "lucide-react" -import { useTokenStats, useMetricHistory } from "@/lib/queries" -import { useTokHistory } from "@/lib/metricsStore" -import { LiveAreaChart, type ChartSeries } from "./LiveAreaChart" -import { RangeSwitch, RANGE_MINUTES, type ChartRange } from "./RangeSwitch" - -const SERIES: ChartSeries[] = [ - { key: "prompt", label: "Prompt", color: "#f59e0b" }, - { key: "completion", label: "Antwort", color: "#2dd4bf" }, -] - -export function TokenPerformanceCard() { - const { data: ts } = useTokenStats() - const hist = useTokHistory() // Live-Durchsatz aus dem modul-globalen Store (~2 min) - const [range, setRange] = useState("live") - const histQ = useMetricHistory(range === "live" ? 60 : RANGE_MINUTES[range], range !== "live") - - // 1h/24h: Raten aus den Deltas der Gesamtzähler (tok/s zwischen zwei Sample-Punkten). - const chartData = useMemo(() => { - if (range === "live") return hist - const pts = histQ.data?.points ?? [] - const out: { t: number; prompt: number; completion: number }[] = [] - for (let i = 1; i < pts.length; i++) { - const a = pts[i - 1], b = pts[i] - if (a.tp == null || b.tp == null || a.tc == null || b.tc == null) continue - const dt = Math.max(b.t - a.t, 1) - out.push({ - t: b.t * 1000, - prompt: Math.max(0, (b.tp - a.tp) / dt), - completion: Math.max(0, (b.tc - a.tc) / dt), - }) - } - return out - }, [range, hist, histQ.data]) - - const last = hist[hist.length - 1] - const curRate = last ? Math.round(last.prompt + last.completion) : 0 - - return ( -
-
-
-
- -

Token-Durchsatz

- {range === "live" && ( - - live - - )} -
- {ts && ( -
- - {curRate.toLocaleString("de-DE")} - - tok/s aktuell -
- )} - {ts && ( -
-
- {ts.total_tokens.toLocaleString("de-DE")} Tokens gesamt · {ts.saved_eur.toLocaleString("de-DE", { minimumFractionDigits: 2 })} € gespart -
-
- Input {ts.prompt_tokens.toLocaleString("de-DE")} · Output {ts.completion_tokens.toLocaleString("de-DE")} -
-
- )} -
-
- -
- {SERIES.map((s) => ( -
- - {s.label} - - {Math.round((last?.[s.key as "prompt" | "completion"]) ?? 0)} - -
- ))} -
-
-
- - {range !== "live" && chartData.length === 0 ? ( -
- {histQ.isLoading ? "Verlauf wird geladen …" : "Noch kein Verlauf — der Sammler baut die Historie gerade erst auf."} -
- ) : ts ? ( - - ) : ( -
Lade Durchsatz…
- )} - -
- Durchsatz aus dem Gateway abgeleitet (Prefill vs. Generierung). Flach bei Leerlauf. -
-
- ) -} diff --git a/frontend/src/views/cockpit/CockpitView.tsx b/frontend/src/views/cockpit/CockpitView.tsx index dc47445..57791fa 100644 --- a/frontend/src/views/cockpit/CockpitView.tsx +++ b/frontend/src/views/cockpit/CockpitView.tsx @@ -13,10 +13,8 @@ import { useLucyHealth, type Repair } from "@/lib/useLucyHealth" import { useDialog } from "@/lib/useDialog" import { cn } from "@/lib/utils" import { CockpitTile } from "./CockpitTile" -import { MorgenlageCard } from "./MorgenlageCard" import { ErinnerungenCard } from "./ErinnerungenCard" import { SystemStatusCard } from "@/components/dashboard/SystemStatusCard" -import { TokenPerformanceCard } from "@/components/dashboard/TokenPerformanceCard" import { LatencyCard } from "@/components/dashboard/LatencyCard" // Öffnet die bestehende System-Schublade (Pflege/Logs) via globalem Event. @@ -115,15 +113,11 @@ export function CockpitView({ onNavigate }: { onNavigate: (v: string) => void }) {/* Status-Zeile */} - {/* Morgenlage — das jüngste Nacht-Gutachten (verschwindet, wenn keines da ist) */} - - {/* Leistung — die Live-Graphen */}
Leistung -
+
-
diff --git a/frontend/src/views/cockpit/MorgenlageCard.tsx b/frontend/src/views/cockpit/MorgenlageCard.tsx deleted file mode 100644 index 4c33258..0000000 --- a/frontend/src/views/cockpit/MorgenlageCard.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { useState } from "react" -import { Moon, ChevronDown, ChevronRight } from "lucide-react" -import { useChronik } from "@/lib/queries" - -// Morgenlage: das jüngste Verdikt des nächtlichen Chef-Gutachters (gpt-oss urteilt im -// Leerlauf über die autonome Arbeit; der Feed spiegelt es still in den Briefkasten). -// Keine Lage vorhanden → Karte verschwindet ganz (Ruhe statt leerer Fläche). -export function MorgenlageCard() { - // Standard-Takt & -Limit: teilt sich den Cache-Eintrag mit der Chronik-View - // (eigene Intervalle sind laut queries.ts-Regel tabu — kleinster Takt gewinnt eh). - const { data: items = [] } = useChronik() - const [open, setOpen] = useState(false) - const lage = items.find((i) => i.source === "chef-gutachter") - if (!lage) return null - - const when = new Date(lage.ts * 1000).toLocaleString("de-DE", { - weekday: "long", day: "2-digit", month: "2-digit", hour: "2-digit", minute: "2-digit", - }) - // VERDIKT-Zeile als Kurzfassung herausziehen (Raster des Chef-Gutachters). - const verdikt = lage.text.split("\n").find((l) => l.trim().startsWith("VERDIKT:"))?.replace(/^\s*VERDIKT:\s*/, "") - - return ( -
- - {open && ( -
- {lage.subject &&

{lage.subject}

} -

{lage.text}

-
- )} -
- ) -}