diff --git a/README.md b/README.md index e4626b620..fe4d4e41e 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,12 @@ v∆v - Multi-color support with color swatches - **Failure Analysis** - Document failed prints with notes and photos - **Project Page Editor** - View and edit embedded MakerWorld project pages with images, descriptions, and designer info +- **K-Profiles (Pressure Advance)** - Manage pressure advance settings directly on your printers + - View, edit, add, and delete K-profiles per printer + - Filter by nozzle size (0.2, 0.4, 0.6, 0.8mm) and flow type (High Flow, Standard) + - Search by profile name or filament + - Dual-nozzle support for H2 series (auto-detected from MQTT) + - Left/Right extruder column layout for dual-nozzle printers - **Cloud Profiles Sync** - Access your Bambu Cloud slicer presets - **File Manager** - Browse and manage files on your printer's SD card - **Re-print** - Send archived prints back to any connected printer @@ -430,6 +436,52 @@ When a scheduled print is ready to start: 4. Click "Edit" to modify the project page metadata 5. Changes are saved directly to the 3MF file +### K-Profiles (Pressure Advance) + +K-profiles store pressure advance (Linear Advance) settings for different filament and nozzle combinations. Bambusy lets you view and manage these settings directly on your printers. + +#### Viewing K-Profiles + +1. Go to **Settings** > **K-Profiles** +2. Select a connected printer from the dropdown +3. Choose a nozzle size (0.2, 0.4, 0.6, or 0.8mm) +4. Profiles are displayed with: + - K-value (pressure advance factor) + - Profile name and filament + - Flow type (HF = High Flow, S = Standard) + +#### Dual-Nozzle Printers (H2 Series) + +For dual-nozzle printers (H2D, H2C, H2S), Bambusy automatically detects the nozzle configuration and displays: +- **Left/Right columns** showing profiles for each extruder +- **Extruder filter** to show profiles for one extruder only +- **Extruder selector** when adding new profiles + +The nozzle count is auto-detected from MQTT temperature data when the printer connects. + +#### Editing K-Profiles + +1. Click on any profile card to open the edit modal +2. Modify the K-value (typical ranges: 0.01-0.06 for PLA, 0.02-0.10 for PETG) +3. Click **Save** to update the profile on the printer +4. Click the trash icon to delete a profile (with confirmation) + +#### Adding K-Profiles + +1. Click **Add Profile** in the header +2. Select a filament from the dropdown (populated from existing profiles on the printer) +3. Choose flow type (High Flow or Standard) and nozzle size +4. For dual-nozzle printers, select Left or Right extruder +5. Enter the K-value and click **Save** + +**Note:** Filaments must first be calibrated in Bambu Studio to appear in the dropdown. Bambusy reads the filament list from existing K-profiles on the printer. + +#### Filtering and Search + +- **Search**: Type to filter by profile name or filament ID +- **Extruder filter** (dual-nozzle only): Show All, Left Only, or Right Only +- **Flow type filter**: Show All, HF Only, or S Only + ### Smart Plug Integration Bambusy supports Tasmota-based smart plugs for automated power control. This is useful for: @@ -646,6 +698,7 @@ To fix the printer's clock: - [x] Energy monitoring and statistics - [x] Print scheduling and queuing - [x] Automatic finish photo capture +- [x] K-Profiles management (pressure advance) - [ ] Maintenance tracker - [ ] Notifications (email, push) - [ ] Mobile-optimized UI diff --git a/backend/app/api/routes/kprofiles.py b/backend/app/api/routes/kprofiles.py new file mode 100644 index 000000000..a1449cf1d --- /dev/null +++ b/backend/app/api/routes/kprofiles.py @@ -0,0 +1,148 @@ +"""API routes for K-profile (pressure advance) management.""" + +import logging + +from fastapi import APIRouter, Depends, HTTPException +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy import select + +from backend.app.core.database import get_db +from backend.app.models.printer import Printer +from backend.app.schemas.kprofile import ( + KProfile, + KProfileCreate, + KProfileDelete, + KProfilesResponse, +) +from backend.app.services.printer_manager import printer_manager + +logger = logging.getLogger(__name__) + +router = APIRouter(prefix="/printers/{printer_id}/kprofiles", tags=["kprofiles"]) + + +@router.get("/", response_model=KProfilesResponse) +async def get_kprofiles( + printer_id: int, + nozzle_diameter: str = "0.4", + db: AsyncSession = Depends(get_db), +): + """Get K-profiles from a printer. + + Args: + printer_id: ID of the printer + nozzle_diameter: Filter by nozzle diameter (default: "0.4") + """ + # Check printer exists + result = await db.execute(select(Printer).where(Printer.id == printer_id)) + printer = result.scalar_one_or_none() + if not printer: + raise HTTPException(404, "Printer not found") + + # Get MQTT client for printer + client = printer_manager.get_client(printer_id) + if not client or not client.state.connected: + raise HTTPException(400, "Printer not connected") + + # Request K-profiles from printer + profiles = await client.get_kprofiles(nozzle_diameter=nozzle_diameter) + + # Convert from MQTT dataclass to Pydantic schema + return KProfilesResponse( + profiles=[ + KProfile( + slot_id=p.slot_id, + extruder_id=p.extruder_id, + nozzle_id=p.nozzle_id, + nozzle_diameter=p.nozzle_diameter, + filament_id=p.filament_id, + name=p.name, + k_value=p.k_value, + n_coef=p.n_coef, + ams_id=p.ams_id, + tray_id=p.tray_id, + setting_id=p.setting_id, + ) + for p in profiles + ], + nozzle_diameter=nozzle_diameter, + ) + + +@router.post("/", response_model=dict) +async def set_kprofile( + printer_id: int, + profile: KProfileCreate, + db: AsyncSession = Depends(get_db), +): + """Create or update a K-profile on the printer. + + Args: + printer_id: ID of the printer + profile: K-profile data to set + """ + # Check printer exists + result = await db.execute(select(Printer).where(Printer.id == printer_id)) + printer = result.scalar_one_or_none() + if not printer: + raise HTTPException(404, "Printer not found") + + # Get MQTT client for printer + client = printer_manager.get_client(printer_id) + if not client or not client.state.connected: + raise HTTPException(400, "Printer not connected") + + # Send the K-profile to printer + success = client.set_kprofile( + filament_id=profile.filament_id, + name=profile.name, + k_value=profile.k_value, + nozzle_diameter=profile.nozzle_diameter, + nozzle_id=profile.nozzle_id, + extruder_id=profile.extruder_id, + setting_id=profile.setting_id, + slot_id=profile.slot_id, + ) + + if not success: + raise HTTPException(500, "Failed to send K-profile command") + + return {"success": True, "message": "K-profile set successfully"} + + +@router.delete("/", response_model=dict) +async def delete_kprofile( + printer_id: int, + profile: KProfileDelete, + db: AsyncSession = Depends(get_db), +): + """Delete a K-profile from the printer. + + Args: + printer_id: ID of the printer + profile: K-profile identification data for deletion + """ + # Check printer exists + result = await db.execute(select(Printer).where(Printer.id == printer_id)) + printer = result.scalar_one_or_none() + if not printer: + raise HTTPException(404, "Printer not found") + + # Get MQTT client for printer + client = printer_manager.get_client(printer_id) + if not client or not client.state.connected: + raise HTTPException(400, "Printer not connected") + + # Send the delete command to printer + success = client.delete_kprofile( + cali_idx=profile.slot_id, + filament_id=profile.filament_id, + nozzle_id=profile.nozzle_id, + nozzle_diameter=profile.nozzle_diameter, + extruder_id=profile.extruder_id, + ) + + if not success: + raise HTTPException(500, "Failed to send K-profile delete command") + + return {"success": True, "message": "K-profile deleted successfully"} diff --git a/backend/app/main.py b/backend/app/main.py index 8b7651816..52990b84f 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -54,7 +54,7 @@ from fastapi.responses import FileResponse from backend.app.core.database import init_db, async_session from sqlalchemy import select, or_ from backend.app.core.websocket import ws_manager -from backend.app.api.routes import printers, archives, websocket, filaments, cloud, smart_plugs, print_queue +from backend.app.api.routes import printers, archives, websocket, filaments, cloud, smart_plugs, print_queue, kprofiles from backend.app.api.routes import settings as settings_routes from backend.app.services.printer_manager import ( printer_manager, @@ -96,6 +96,7 @@ def register_expected_print(printer_id: int, filename: str, archive_id: int): _last_status_broadcast: dict[int, str] = {} +_nozzle_count_updated: set[int] = set() # Track printers where we've updated nozzle_count async def on_printer_status_change(printer_id: int, state: PrinterState): """Handle printer status changes - broadcast via WebSocket.""" @@ -107,6 +108,23 @@ async def on_printer_status_change(printer_id: int, state: PrinterState): nozzle_2_temp = round(temps.get("nozzle_2", 0)) if "nozzle_2" in temps else "" chamber_temp = round(temps.get("chamber", 0)) if "chamber" in temps else "" + # Auto-detect dual-nozzle printers from MQTT temperature data + if "nozzle_2" in temps and printer_id not in _nozzle_count_updated: + _nozzle_count_updated.add(printer_id) + # Update nozzle_count in database + async with async_session() as db: + from backend.app.models.printer import Printer + result = await db.execute( + select(Printer).where(Printer.id == printer_id) + ) + printer = result.scalar_one_or_none() + if printer and printer.nozzle_count != 2: + printer.nozzle_count = 2 + await db.commit() + logging.getLogger(__name__).info( + f"Auto-detected dual-nozzle printer {printer_id}, updated nozzle_count=2" + ) + status_key = ( f"{state.connected}:{state.state}:{state.progress}:{state.layer_num}:" f"{nozzle_temp}:{bed_temp}:{nozzle_2_temp}:{chamber_temp}" @@ -736,6 +754,7 @@ app.include_router(settings_routes.router, prefix=app_settings.api_prefix) app.include_router(cloud.router, prefix=app_settings.api_prefix) app.include_router(smart_plugs.router, prefix=app_settings.api_prefix) app.include_router(print_queue.router, prefix=app_settings.api_prefix) +app.include_router(kprofiles.router, prefix=app_settings.api_prefix) app.include_router(websocket.router, prefix=app_settings.api_prefix) diff --git a/backend/app/models/printer.py b/backend/app/models/printer.py index 85c95bdc1..ef8a0e127 100644 --- a/backend/app/models/printer.py +++ b/backend/app/models/printer.py @@ -14,6 +14,7 @@ class Printer(Base): ip_address: Mapped[str] = mapped_column(String(45)) access_code: Mapped[str] = mapped_column(String(20)) model: Mapped[str | None] = mapped_column(String(50)) + nozzle_count: Mapped[int] = mapped_column(default=1) # 1 or 2, auto-detected from MQTT is_active: Mapped[bool] = mapped_column(Boolean, default=True) auto_archive: Mapped[bool] = mapped_column(Boolean, default=True) created_at: Mapped[datetime] = mapped_column( diff --git a/backend/app/schemas/kprofile.py b/backend/app/schemas/kprofile.py new file mode 100644 index 000000000..9aab67b9d --- /dev/null +++ b/backend/app/schemas/kprofile.py @@ -0,0 +1,52 @@ +"""Pydantic schemas for K-profile (pressure advance) management.""" + +from pydantic import BaseModel + + +class KProfile(BaseModel): + """A pressure advance (K) calibration profile stored on the printer.""" + + slot_id: int # Storage slot on printer (limited capacity ~20 slots) + extruder_id: int = 0 # 0 or 1 for dual nozzle printers + nozzle_id: str # e.g., "HS00-0.4" (hardened steel 0.4mm) + nozzle_diameter: str # e.g., "0.4" + filament_id: str # Bambu filament identifier + name: str # User-defined name for the profile + k_value: str # Pressure advance coefficient as string, e.g., "0.020000" + n_coef: str = "0.000000" # N coefficient (usually 0) + ams_id: int = 0 # AMS unit ID + tray_id: int = -1 # AMS tray ID (-1 if not linked) + setting_id: str | None = None # Unique setting identifier + + +class KProfileCreate(BaseModel): + """Schema for creating/updating a K-profile.""" + + slot_id: int = 0 # Storage slot, 0 for new profiles + extruder_id: int = 0 + nozzle_id: str + nozzle_diameter: str + filament_id: str + name: str + k_value: str + n_coef: str = "0.000000" + ams_id: int = 0 + tray_id: int = -1 + setting_id: str | None = None + + +class KProfilesResponse(BaseModel): + """Response containing K-profiles from a printer.""" + + profiles: list[KProfile] + nozzle_diameter: str # Current nozzle filter + + +class KProfileDelete(BaseModel): + """Schema for deleting a K-profile.""" + + slot_id: int # cali_idx - calibration index to delete + extruder_id: int = 0 + nozzle_id: str # e.g., "HH00-0.4" + nozzle_diameter: str # e.g., "0.4" + filament_id: str # Bambu filament identifier diff --git a/backend/app/schemas/printer.py b/backend/app/schemas/printer.py index 5c545cc71..11eae4317 100644 --- a/backend/app/schemas/printer.py +++ b/backend/app/schemas/printer.py @@ -27,6 +27,7 @@ class PrinterUpdate(BaseModel): class PrinterResponse(PrinterBase): id: int is_active: bool + nozzle_count: int = 1 # 1 or 2, auto-detected from MQTT created_at: datetime updated_at: datetime diff --git a/backend/app/services/bambu_mqtt.py b/backend/app/services/bambu_mqtt.py index c8b14aafe..0313fd567 100644 --- a/backend/app/services/bambu_mqtt.py +++ b/backend/app/services/bambu_mqtt.py @@ -31,6 +31,22 @@ class HMSError: message: str = "" +@dataclass +class KProfile: + """Pressure advance (K) calibration profile from printer.""" + slot_id: int + extruder_id: int + nozzle_id: str + nozzle_diameter: str + filament_id: str + name: str + k_value: str + n_coef: str = "0.000000" + ams_id: int = 0 + tray_id: int = -1 + setting_id: str | None = None + + @dataclass class PrinterState: connected: bool = False @@ -46,6 +62,7 @@ class PrinterState: gcode_file: str | None = None subtask_id: str | None = None hms_errors: list = field(default_factory=list) # List of HMSError + kprofiles: list = field(default_factory=list) # List of KProfile class BambuMQTTClient: @@ -80,6 +97,11 @@ class BambuMQTTClient: self._logging_enabled: bool = False self._last_message_time: float = 0.0 # Track when we last received a message + # K-profile command tracking + self._sequence_id: int = 0 + self._pending_kprofile_response: asyncio.Event | None = None + self._kprofile_response_data: list | None = None + @property def topic_subscribe(self) -> str: return f"device/{self.serial_number}/report" @@ -140,6 +162,11 @@ class BambuMQTTClient: f"[{self.serial_number}] Received gcode_state: {print_data.get('gcode_state')}, " f"gcode_file: {print_data.get('gcode_file')}, subtask_name: {print_data.get('subtask_name')}" ) + + # Check for K-profile response (extrusion_cali) + if "command" in print_data and print_data.get("command") == "extrusion_cali_get": + self._handle_kprofile_response(print_data) + self._update_state(print_data) def _update_state(self, data: dict): @@ -437,3 +464,200 @@ class BambuMQTTClient: def logging_enabled(self) -> bool: """Check if logging is enabled.""" return self._logging_enabled + + def _handle_kprofile_response(self, data: dict): + """Handle K-profile response from printer.""" + filaments = data.get("filaments", []) + profiles = [] + + # Log first profile to see what fields the printer returns + if filaments and isinstance(filaments[0], dict): + logger.debug(f"[{self.serial_number}] Raw K-profile fields: {list(filaments[0].keys())}") + logger.debug(f"[{self.serial_number}] First K-profile: {filaments[0]}") + + for i, f in enumerate(filaments): + if isinstance(f, dict): + try: + # cali_idx is the actual slot/calibration index from the printer + cali_idx = f.get("cali_idx", i) + profiles.append(KProfile( + slot_id=cali_idx, + extruder_id=int(f.get("extruder_id", 0)), + nozzle_id=str(f.get("nozzle_id", "")), + nozzle_diameter=str(f.get("nozzle_diameter", "0.4")), + filament_id=str(f.get("filament_id", "")), + name=str(f.get("name", "")), + k_value=str(f.get("k_value", "0.000000")), + n_coef=str(f.get("n_coef", "0.000000")), + ams_id=int(f.get("ams_id", 0)), + tray_id=int(f.get("tray_id", -1)), + setting_id=f.get("setting_id"), + )) + except (ValueError, TypeError) as e: + logger.warning(f"Failed to parse K-profile: {e}") + + self.state.kprofiles = profiles + self._kprofile_response_data = profiles + + # Signal that we received the response + if self._pending_kprofile_response: + self._pending_kprofile_response.set() + + logger.info(f"[{self.serial_number}] Received {len(profiles)} K-profiles") + + async def get_kprofiles(self, nozzle_diameter: str = "0.4", timeout: float = 5.0) -> list[KProfile]: + """Request K-profiles from the printer. + + Args: + nozzle_diameter: Filter by nozzle diameter (e.g., "0.4") + timeout: Timeout in seconds to wait for response + + Returns: + List of KProfile objects + """ + if not self._client or not self.state.connected: + logger.warning(f"[{self.serial_number}] Cannot get K-profiles: not connected") + return [] + + # Set up response event + self._sequence_id += 1 + self._pending_kprofile_response = asyncio.Event() + self._kprofile_response_data = None + + # Send the command + command = { + "print": { + "command": "extrusion_cali_get", + "filament_id": "", + "nozzle_diameter": nozzle_diameter, + "sequence_id": str(self._sequence_id), + } + } + + logger.info(f"[{self.serial_number}] Requesting K-profiles for nozzle {nozzle_diameter}") + self._client.publish(self.topic_publish, json.dumps(command)) + + # Wait for response + try: + await asyncio.wait_for(self._pending_kprofile_response.wait(), timeout=timeout) + return self._kprofile_response_data or [] + except asyncio.TimeoutError: + logger.warning(f"[{self.serial_number}] Timeout waiting for K-profiles response") + return [] + finally: + self._pending_kprofile_response = None + + def set_kprofile( + self, + filament_id: str, + name: str, + k_value: str, + nozzle_diameter: str = "0.4", + nozzle_id: str = "HS00-0.4", + extruder_id: int = 0, + setting_id: str | None = None, + slot_id: int = 0, + ) -> bool: + """Set/update a K-profile on the printer. + + Args: + filament_id: Bambu filament identifier + name: Profile name + k_value: Pressure advance value (e.g., "0.020000") + nozzle_diameter: Nozzle diameter (e.g., "0.4") + nozzle_id: Nozzle identifier (e.g., "HS00-0.4") + extruder_id: Extruder ID (0 or 1 for dual nozzle) + setting_id: Existing setting ID for updates, None for new + slot_id: Calibration index (cali_idx) for the profile + + Returns: + True if command was sent, False otherwise + """ + if not self._client or not self.state.connected: + logger.warning(f"[{self.serial_number}] Cannot set K-profile: not connected") + return False + + self._sequence_id += 1 + + # Build the filament entry - printer uses cali_idx for profile identification + # For new profiles (slot_id=0), use cali_idx=-1 to tell printer to create new slot + cali_idx = -1 if slot_id == 0 else slot_id + + # Generate a setting_id for new profiles (required by printer) + # Format: "PF" + 17 random digits + import random + if not setting_id and slot_id == 0: + setting_id = f"PF{random.randint(10000000000000000, 99999999999999999)}" + + filament_entry = { + "ams_id": 0, + "cali_idx": cali_idx, + "extruder_id": extruder_id, + "filament_id": filament_id, + "k_value": k_value, + "n_coef": "0.000000", + "name": name, + "nozzle_diameter": nozzle_diameter, + "nozzle_id": nozzle_id, + "setting_id": setting_id, # Always include setting_id + "tray_id": -1, + } + + command = { + "print": { + "command": "extrusion_cali_set", + "filaments": [filament_entry], + "nozzle_diameter": nozzle_diameter, + "sequence_id": str(self._sequence_id), + } + } + + command_json = json.dumps(command) + logger.info(f"[{self.serial_number}] Setting K-profile: {name} = {k_value} (cali_idx={cali_idx}, new={slot_id==0})") + logger.debug(f"[{self.serial_number}] K-profile command: {command_json}") + self._client.publish(self.topic_publish, command_json) + return True + + def delete_kprofile( + self, + cali_idx: int, + filament_id: str, + nozzle_id: str, + nozzle_diameter: str = "0.4", + extruder_id: int = 0, + ) -> bool: + """Delete a K-profile from the printer. + + Args: + cali_idx: The calibration index (slot_id) of the profile to delete + filament_id: Bambu filament identifier + nozzle_id: Nozzle identifier (e.g., "HH00-0.4") + nozzle_diameter: Nozzle diameter (e.g., "0.4") + extruder_id: Extruder ID (0 or 1 for dual nozzle) + + Returns: + True if command was sent, False otherwise + """ + if not self._client or not self.state.connected: + logger.warning(f"[{self.serial_number}] Cannot delete K-profile: not connected") + return False + + self._sequence_id += 1 + + command = { + "print": { + "command": "extrusion_cali_del", + "sequence_id": str(self._sequence_id), + "extruder_id": extruder_id, + "nozzle_id": nozzle_id, + "filament_id": filament_id, + "cali_idx": cali_idx, + "nozzle_diameter": nozzle_diameter, + } + } + + command_json = json.dumps(command) + logger.info(f"[{self.serial_number}] Deleting K-profile: cali_idx={cali_idx}, filament={filament_id}") + logger.debug(f"[{self.serial_number}] K-profile delete command: {command_json}") + self._client.publish(self.topic_publish, command_json) + return True diff --git a/backend/app/services/printer_manager.py b/backend/app/services/printer_manager.py index 16fd42ed8..848d53902 100644 --- a/backend/app/services/printer_manager.py +++ b/backend/app/services/printer_manager.py @@ -112,6 +112,10 @@ class PrinterManager: return self._clients[printer_id].state.connected return False + def get_client(self, printer_id: int) -> BambuMQTTClient | None: + """Get the MQTT client for a printer.""" + return self._clients.get(printer_id) + def mark_printer_offline(self, printer_id: int): """Mark a printer as offline and trigger status callback. diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 79e41fc15..25222547a 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -6,7 +6,7 @@ import { ArchivesPage } from './pages/ArchivesPage'; import { QueuePage } from './pages/QueuePage'; import { StatsPage } from './pages/StatsPage'; import { SettingsPage } from './pages/SettingsPage'; -import { CloudProfilesPage } from './pages/CloudProfilesPage'; +import { ProfilesPage } from './pages/ProfilesPage'; import { useWebSocket } from './hooks/useWebSocket'; import { ThemeProvider } from './contexts/ThemeContext'; import { ToastProvider } from './contexts/ToastContext'; @@ -38,7 +38,7 @@ function App() { } /> } /> } /> - } /> + } /> } /> diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 5c3765452..894b17055 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -28,6 +28,7 @@ export interface Printer { ip_address: string; access_code: string; model: string | null; + nozzle_count: number; // 1 or 2, auto-detected from MQTT is_active: boolean; auto_archive: boolean; created_at: string; @@ -311,6 +312,48 @@ export interface MQTTLogsResponse { logs: MQTTLogEntry[]; } +// K-Profile types +export interface KProfile { + slot_id: number; + extruder_id: number; + nozzle_id: string; + nozzle_diameter: string; + filament_id: string; + name: string; + k_value: string; + n_coef: string; + ams_id: number; + tray_id: number; + setting_id: string | null; +} + +export interface KProfileCreate { + slot_id?: number; // Storage slot, 0 for new profiles + extruder_id?: number; + nozzle_id: string; + nozzle_diameter: string; + filament_id: string; + name: string; + k_value: string; + n_coef?: string; + ams_id?: number; + tray_id?: number; + setting_id?: string | null; +} + +export interface KProfileDelete { + slot_id: number; // cali_idx - calibration index to delete + extruder_id: number; + nozzle_id: string; // e.g., "HH00-0.4" + nozzle_diameter: string; // e.g., "0.4" + filament_id: string; // Bambu filament identifier +} + +export interface KProfilesResponse { + profiles: KProfile[]; + nozzle_diameter: string; +} + // API functions export const api = { // Printers @@ -642,4 +685,18 @@ export const api = { request<{ message: string }>(`/queue/${id}/cancel`, { method: 'POST' }), stopQueueItem: (id: number) => request<{ message: string }>(`/queue/${id}/stop`, { method: 'POST' }), + + // K-Profiles + getKProfiles: (printerId: number, nozzleDiameter = '0.4') => + request(`/printers/${printerId}/kprofiles/?nozzle_diameter=${nozzleDiameter}`), + setKProfile: (printerId: number, profile: KProfileCreate) => + request<{ success: boolean; message: string }>(`/printers/${printerId}/kprofiles/`, { + method: 'POST', + body: JSON.stringify(profile), + }), + deleteKProfile: (printerId: number, profile: KProfileDelete) => + request<{ success: boolean; message: string }>(`/printers/${printerId}/kprofiles/`, { + method: 'DELETE', + body: JSON.stringify(profile), + }), }; diff --git a/frontend/src/components/KProfilesView.tsx b/frontend/src/components/KProfilesView.tsx new file mode 100644 index 000000000..9deb3b986 --- /dev/null +++ b/frontend/src/components/KProfilesView.tsx @@ -0,0 +1,786 @@ +import React, { useState } from 'react'; +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; +import { + Gauge, + Loader2, + RefreshCw, + Printer, + Plus, + X, + AlertCircle, + WifiOff, + Trash2, + Search, +} from 'lucide-react'; +import { api } from '../api/client'; +import type { KProfile, KProfileCreate, KProfileDelete } from '../api/client'; +import { Card, CardContent } from './Card'; +import { Button } from './Button'; +import { useToast } from '../contexts/ToastContext'; + +interface KProfileCardProps { + profile: KProfile; + onEdit: () => void; +} + +// Truncate to 3 decimal places (like Bambu Studio) instead of rounding +const truncateK = (value: string) => { + const num = parseFloat(value); + return (Math.trunc(num * 1000) / 1000).toFixed(3); +}; + +// Get flow type label from nozzle_id (e.g., "HH00-0.4" -> "HF", "HS00-0.4" -> "S") +const getFlowTypeLabel = (nozzleId: string) => { + if (nozzleId.startsWith('HH')) return 'HF'; // High Flow + return 'S'; // Standard Flow (default) +}; + +// Extract nozzle type prefix from nozzle_id (e.g., "HH00-0.4" -> "HH00") +const getNozzleTypePrefix = (nozzleId: string) => { + const match = nozzleId.match(/^([A-Z]{2}\d{2})/); + return match ? match[1] : 'HH00'; +}; + +// Extract filament name from profile name (e.g., "High Flow_Devil Design PLA Basic" -> "Devil Design PLA Basic") +const extractFilamentName = (profileName: string) => { + // Profile names are formatted as "{Flow Type}_{Filament Name}" or "{Flow Type} {Filament Name}" + // Remove common prefixes - check both underscore and space separators + const prefixes = [ + 'High Flow_', 'High Flow ', // underscore or space + 'Standard_', 'Standard ', + 'HF_', 'HF ', + 'S_', 'S ', + ]; + for (const prefix of prefixes) { + if (profileName.startsWith(prefix)) { + return profileName.slice(prefix.length); + } + } + // If no prefix found, check for underscore separator + const underscoreIdx = profileName.indexOf('_'); + if (underscoreIdx > 0) { + return profileName.slice(underscoreIdx + 1); + } + return profileName; +}; + +function KProfileCard({ profile, onEdit }: KProfileCardProps) { + const flowType = getFlowTypeLabel(profile.nozzle_id); + const diameter = profile.nozzle_diameter; + const profileName = profile.name || 'Unnamed'; + // Extract filament name from profile name (e.g., "High Flow_eSUN ABS+" -> "eSUN ABS+") + const filamentName = extractFilamentName(profile.name || ''); + + return ( + + ); +} + +interface KProfileModalProps { + profile?: KProfile; + printerId: number; + nozzleDiameter: string; + existingProfiles?: KProfile[]; // Existing profiles for filament selection + isDualNozzle?: boolean; // Whether this is a dual-nozzle printer + onClose: () => void; + onSave: () => void; +} + +function KProfileModal({ + profile, + printerId, + nozzleDiameter, + existingProfiles = [], + isDualNozzle = false, + onClose, + onSave, +}: KProfileModalProps) { + const { showToast } = useToast(); + const queryClient = useQueryClient(); + + const [name, setName] = useState(profile?.name || ''); + const [kValue, setKValue] = useState( + profile?.k_value ? truncateK(profile.k_value) : '0.020' + ); + const [filamentId, setFilamentId] = useState(profile?.filament_id || ''); + // Split nozzle into type and diameter + const [nozzleType, setNozzleType] = useState( + profile?.nozzle_id ? getNozzleTypePrefix(profile.nozzle_id) : 'HH00' + ); + const [modalDiameter, setModalDiameter] = useState( + profile?.nozzle_diameter || nozzleDiameter + ); + const [extruderId, setExtruderId] = useState(profile?.extruder_id || 0); + + // Extract unique filaments from existing K-profiles on the printer + // These have valid filament_ids that the printer recognizes + const knownFilaments = React.useMemo(() => { + const filamentMap = new Map(); + for (const p of existingProfiles) { + if (p.filament_id && !filamentMap.has(p.filament_id)) { + const filamentName = extractFilamentName(p.name || ''); + filamentMap.set(p.filament_id, { + id: p.filament_id, + name: filamentName || p.filament_id, + }); + } + } + return Array.from(filamentMap.values()).sort((a, b) => + a.name.localeCompare(b.name) + ); + }, [existingProfiles]); + + const saveMutation = useMutation({ + mutationFn: (data: KProfileCreate) => { + console.log('[KProfile] Calling API...'); + return api.setKProfile(printerId, data); + }, + onSuccess: (result) => { + console.log('[KProfile] Save success:', result); + showToast('K-profile saved'); + queryClient.invalidateQueries({ queryKey: ['kprofiles', printerId] }); + onSave(); + }, + onError: (error: Error) => { + console.error('[KProfile] Save error:', error); + showToast(error.message, 'error'); + }, + }); + + const deleteMutation = useMutation({ + mutationFn: (data: KProfileDelete) => { + console.log('[KProfile] Deleting profile...'); + return api.deleteKProfile(printerId, data); + }, + onSuccess: (result) => { + console.log('[KProfile] Delete success:', result); + showToast('K-profile deleted'); + queryClient.invalidateQueries({ queryKey: ['kprofiles', printerId] }); + onClose(); + }, + onError: (error: Error) => { + console.error('[KProfile] Delete error:', error); + showToast(error.message, 'error'); + }, + }); + + const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); + + const handleDelete = () => { + if (!profile) return; + deleteMutation.mutate({ + slot_id: profile.slot_id, + extruder_id: profile.extruder_id, + nozzle_id: profile.nozzle_id, + nozzle_diameter: profile.nozzle_diameter, + filament_id: profile.filament_id, + }); + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + // Format k_value to 6 decimal places for Bambu protocol + const formattedKValue = parseFloat(kValue).toFixed(6); + // Combine nozzle type and diameter into nozzle_id (e.g., "HH00-0.4") + const nozzleId = `${nozzleType}-${modalDiameter}`; + + // Use the name from the form - it's auto-populated when filament is selected + // but can be edited by the user + const payload = { + name: name, + k_value: formattedKValue, + filament_id: filamentId, + nozzle_id: nozzleId, + nozzle_diameter: modalDiameter, + extruder_id: extruderId, + setting_id: profile?.setting_id, + slot_id: profile?.slot_id ?? 0, + }; + console.log('[KProfile] Saving profile:', payload); + saveMutation.mutate(payload); + }; + + return ( +
+ + +
+

+ {profile ? 'Edit K-Profile' : 'Add K-Profile'} +

+ +
+ +
+ {/* Profile Name - read-only when editing */} +
+ + setName(e.target.value)} + disabled={!!profile} + className={`w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none ${profile ? 'opacity-60 cursor-not-allowed' : ''}`} + placeholder="My PLA Profile" + required + /> +
+ + {/* K-Value - always editable */} +
+ + { + // Allow typing any decimal value + const val = e.target.value; + if (val === '' || /^\d*\.?\d*$/.test(val)) { + setKValue(val); + } + }} + onBlur={(e) => { + // Format to 3 decimal places on blur + const num = parseFloat(e.target.value); + if (!isNaN(num)) { + setKValue((Math.trunc(num * 1000) / 1000).toFixed(3)); + } + }} + className="w-full px-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white focus:border-bambu-green focus:outline-none font-mono" + placeholder="0.020" + required + /> +

+ Typical range: 0.01 - 0.06 for PLA, 0.02 - 0.10 for PETG +

+
+ + {/* Filament - read-only when editing */} +
+ + + {!profile && knownFilaments.length === 0 && ( +

+ No filaments found. Create a K-profile in Bambu Studio first. +

+ )} +
+ + {/* Flow Type and Nozzle Size - read-only when editing */} +
+
+ + +
+
+ + +
+
+ + {/* Extruder - only show for dual-nozzle printers, read-only when editing */} + {isDualNozzle && ( +
+ + +
+ )} + +
+ {profile && ( + + )} + + +
+
+
+
+ + {/* Delete Confirmation Modal */} + {showDeleteConfirm && ( +
+ + +
+
+ +
+
+

Delete Profile

+

This cannot be undone

+
+
+

+ Are you sure you want to delete "{profile?.name}" from the printer? +

+
+ + +
+
+
+
+ )} +
+ ); +} + +type ExtruderFilter = 'all' | 'left' | 'right'; +type FlowTypeFilter = 'all' | 'hf' | 's'; + +export function KProfilesView() { + const [selectedPrinter, setSelectedPrinter] = useState(null); + const [nozzleDiameter, setNozzleDiameter] = useState('0.4'); + const [editingProfile, setEditingProfile] = useState(null); + const [showAddModal, setShowAddModal] = useState(false); + const [searchQuery, setSearchQuery] = useState(''); + const [extruderFilter, setExtruderFilter] = useState('all'); + const [flowTypeFilter, setFlowTypeFilter] = useState('all'); + + // Get available printers + const { data: printers, isLoading: printersLoading } = useQuery({ + queryKey: ['printers'], + queryFn: api.getPrinters, + }); + + // Get K-profiles for selected printer + const { + data: kprofiles, + isLoading: kprofilesLoading, + error: kprofilesError, + refetch: refetchProfiles, + } = useQuery({ + queryKey: ['kprofiles', selectedPrinter, nozzleDiameter], + queryFn: () => api.getKProfiles(selectedPrinter!, nozzleDiameter), + enabled: !!selectedPrinter, + retry: false, + }); + + // Check if error is due to printer not being connected + const isOfflineError = kprofilesError?.message?.includes('not connected'); + + // Filter profiles based on search query, extruder filter, and flow type + const filteredProfiles = React.useMemo(() => { + if (!kprofiles?.profiles) return []; + + return kprofiles.profiles.filter((p) => { + // Search filter - match name or filament_id (case-insensitive) + const query = searchQuery.toLowerCase(); + const matchesSearch = + !query || + p.name.toLowerCase().includes(query) || + p.filament_id.toLowerCase().includes(query); + + // Extruder filter + const matchesExtruder = + extruderFilter === 'all' || + (extruderFilter === 'left' && p.extruder_id === 1) || + (extruderFilter === 'right' && p.extruder_id === 0); + + // Flow type filter (HH = High Flow, HS = Standard) + const matchesFlowType = + flowTypeFilter === 'all' || + (flowTypeFilter === 'hf' && p.nozzle_id.startsWith('HH')) || + (flowTypeFilter === 's' && p.nozzle_id.startsWith('HS')); + + return matchesSearch && matchesExtruder && matchesFlowType; + }); + }, [kprofiles?.profiles, searchQuery, extruderFilter, flowTypeFilter]); + + // Auto-select first connected printer + const connectedPrinters = printers?.filter((p) => p.is_active) || []; + if (!selectedPrinter && connectedPrinters.length > 0) { + setSelectedPrinter(connectedPrinters[0].id); + } + + // Check if selected printer is dual-nozzle (auto-detected from MQTT temperature data) + const selectedPrinterData = printers?.find((p) => p.id === selectedPrinter); + const isDualNozzle = selectedPrinterData?.nozzle_count === 2; + + if (printersLoading) { + return ( +
+ +
+ ); + } + + if (!printers || printers.length === 0) { + return ( + + + +

No Printers Configured

+

+ Add a printer in Settings to manage K-profiles +

+
+
+ ); + } + + if (connectedPrinters.length === 0) { + return ( + + + +

No Active Printers

+

+ Enable a printer connection to view its K-profiles +

+
+
+ ); + } + + return ( + <> + {/* Printer & Nozzle Selector */} +
+
+ + +
+ +
+ + +
+ +
+ + +
+
+ + {/* Search & Filter Row */} +
+
+ + setSearchQuery(e.target.value)} + placeholder="Search by name or filament..." + className="w-full pl-10 pr-3 py-2 bg-bambu-dark border border-bambu-dark-tertiary rounded-lg text-white placeholder-bambu-gray focus:border-bambu-green focus:outline-none" + /> +
+ {isDualNozzle && ( +
+ +
+ )} +
+ +
+
+ + {/* K-Profiles Grid */} + {kprofilesLoading ? ( +
+ +
+ ) : isOfflineError ? ( + + + +

Printer Offline

+

+ The selected printer is not connected. Power it on to view K-profiles. +

+ +
+
+ ) : filteredProfiles.length > 0 ? ( + isDualNozzle ? ( + // Dual-nozzle: show Left/Right columns +
+ {/* Left Extruder (extruder_id 1 on Bambu) */} +
+

Left Extruder

+
+ {filteredProfiles + .filter((p) => p.extruder_id === 1) + .map((profile) => ( + setEditingProfile(profile)} + /> + ))} +
+
+ {/* Right Extruder (extruder_id 0 on Bambu) */} +
+

Right Extruder

+
+ {filteredProfiles + .filter((p) => p.extruder_id === 0) + .map((profile) => ( + setEditingProfile(profile)} + /> + ))} +
+
+
+ ) : ( + // Single-nozzle: show all profiles in one list +
+ {filteredProfiles.map((profile) => ( + setEditingProfile(profile)} + /> + ))} +
+ ) + ) : searchQuery || extruderFilter !== 'all' || flowTypeFilter !== 'all' ? ( + + + +

No Matching Profiles

+

+ No profiles match your search criteria +

+
+
+ ) : ( + + + +

No K-Profiles

+

+ No pressure advance profiles found for {nozzleDiameter}mm nozzle +

+ +
+
+ )} + + {/* Edit Modal */} + {editingProfile && selectedPrinter && ( + setEditingProfile(null)} + onSave={() => setEditingProfile(null)} + /> + )} + + {/* Add Modal */} + {showAddModal && selectedPrinter && ( + setShowAddModal(false)} + onSave={() => setShowAddModal(false)} + /> + )} + + ); +} diff --git a/frontend/src/components/Layout.tsx b/frontend/src/components/Layout.tsx index 0c659c248..624291378 100644 --- a/frontend/src/components/Layout.tsx +++ b/frontend/src/components/Layout.tsx @@ -16,7 +16,7 @@ export const defaultNavItems: NavItem[] = [ { id: 'archives', to: '/archives', icon: Archive, label: 'Archives' }, { id: 'queue', to: '/queue', icon: Calendar, label: 'Queue' }, { id: 'stats', to: '/stats', icon: BarChart3, label: 'Statistics' }, - { id: 'cloud', to: '/cloud', icon: Cloud, label: 'Cloud Profiles' }, + { id: 'profiles', to: '/profiles', icon: Cloud, label: 'Profiles' }, { id: 'settings', to: '/settings', icon: Settings, label: 'Settings' }, ]; diff --git a/frontend/src/pages/CloudProfilesPage.tsx b/frontend/src/pages/ProfilesPage.tsx similarity index 80% rename from frontend/src/pages/CloudProfilesPage.tsx rename to frontend/src/pages/ProfilesPage.tsx index 802c0caaa..ab51a5387 100644 --- a/frontend/src/pages/CloudProfilesPage.tsx +++ b/frontend/src/pages/ProfilesPage.tsx @@ -13,12 +13,16 @@ import { X, Key, RefreshCw, + Gauge, } from 'lucide-react'; import { api } from '../api/client'; import type { SlicerSetting, SlicerSettingsResponse } from '../api/client'; import { Card, CardContent, CardHeader } from '../components/Card'; import { Button } from '../components/Button'; import { useToast } from '../contexts/ToastContext'; +import { KProfilesView } from '../components/KProfilesView'; + +type ProfileTab = 'cloud' | 'kprofiles'; type LoginStep = 'email' | 'code' | 'token'; @@ -398,9 +402,10 @@ function ProfilesView({ settings }: { settings: SlicerSettingsResponse }) { ); } -export function CloudProfilesPage() { +export function ProfilesPage() { const queryClient = useQueryClient(); const { showToast } = useToast(); + const [activeTab, setActiveTab] = useState('kprofiles'); const { data: status, isLoading: statusLoading } = useQuery({ queryKey: ['cloudStatus'], @@ -438,58 +443,95 @@ export function CloudProfilesPage() { return (
-
-
-

- - Cloud Profiles -

-

- {status?.is_authenticated - ? `Connected as ${status.email}` - : 'Manage your Bambu Cloud slicer presets'} -

-
- {status?.is_authenticated && ( -
- - -
- )} + {/* Page Header */} +
+

Profiles

+

+ Manage your slicer presets and pressure advance calibrations +

- {!status?.is_authenticated ? ( - - ) : settingsLoading ? ( -
- -
- ) : settings ? ( - - ) : ( - - -

Failed to load profiles

- -
-
+ {/* Tab Navigation */} +
+ + +
+ + {/* Cloud Profiles Tab */} + {activeTab === 'cloud' && ( + <> + {/* Cloud Status Header */} +
+

+ {status?.is_authenticated + ? `Connected as ${status.email}` + : 'Connect to Bambu Cloud to access your slicer presets'} +

+ {status?.is_authenticated && ( +
+ + +
+ )} +
+ + {!status?.is_authenticated ? ( + + ) : settingsLoading ? ( +
+ +
+ ) : settings ? ( + + ) : ( + + +

Failed to load profiles

+ +
+
+ )} + )} + + {/* K-Profiles Tab */} + {activeTab === 'kprofiles' && }
); } diff --git a/static/assets/index-B9G6rzsh.css b/static/assets/index-B9G6rzsh.css new file mode 100644 index 000000000..629901c6b --- /dev/null +++ b/static/assets/index-B9G6rzsh.css @@ -0,0 +1 @@ +@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--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-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-700:oklch(37.3% .034 259.733);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--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);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-widest:.1em;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bambu-green:#00ae42;--color-bambu-green-light:#00c64d;--color-bambu-green-dark:#009438;--color-bambu-dark:var(--bg-primary);--color-bambu-dark-secondary:var(--bg-secondary);--color-bambu-dark-tertiary:var(--bg-tertiary);--color-bambu-gray:var(--text-muted);--color-bambu-gray-light:var(--text-secondary);--color-bambu-gray-dark:var(--text-tertiary)}}@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%;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]){appearance:button}::file-selector-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 utilities{.pointer-events-none{pointer-events:none}.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}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\[2px\]{top:2px}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-12{right:calc(var(--spacing)*12)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-6{bottom:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-12{left:calc(var(--spacing)*12)}.left-\[2px\]{left:2px}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-60,.z-\[60\]{z-index:60}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-4{grid-column:span 4/span 4}.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-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.-mt-2{margin-top:calc(var(--spacing)*-2)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-64{margin-left:calc(var(--spacing)*64)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-1{height:calc(var(--spacing)*1)}.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-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-28{height:calc(var(--spacing)*28)}.h-64{height:calc(var(--spacing)*64)}.h-\[80vh\]{height:80vh}.h-\[160px\]{height:160px}.h-full{height:100%}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[48px\]{min-height:48px}.min-h-\[120px\]{min-height:120px}.min-h-\[400px\]{min-height:400px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.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-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.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-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-36{width:calc(var(--spacing)*36)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[90vw\]{max-width:90vw}.max-w-\[100px\]{max-width:100px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-48{min-width:calc(var(--spacing)*48)}.min-w-\[80px\]{min-width:80px}.min-w-\[160px\]{min-width:160px}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);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)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-90{rotate:-90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*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-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}: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-bambu-dark-tertiary>:not(:last-child)){border-color:var(--color-bambu-dark-tertiary)}.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}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.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-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-bambu-dark-tertiary{border-color:var(--color-bambu-dark-tertiary)}.border-bambu-green{border-color:var(--color-bambu-green)}.border-bambu-green\/50{border-color:#00ae4280}@supports (color:color-mix(in lab,red,red)){.border-bambu-green\/50{border-color:color-mix(in oklab,var(--color-bambu-green)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-gray-700{border-color:var(--color-gray-700)}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500)30%,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\/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-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-yellow-500{border-color:var(--color-yellow-500)}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-bambu-dark{background-color:var(--color-bambu-dark)}.bg-bambu-dark-secondary{background-color:var(--color-bambu-dark-secondary)}.bg-bambu-dark-tertiary{background-color:var(--color-bambu-dark-tertiary)}.bg-bambu-dark\/30{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/30{background-color:color-mix(in oklab,var(--color-bambu-dark)30%,transparent)}}.bg-bambu-dark\/50{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/50{background-color:color-mix(in oklab,var(--color-bambu-dark)50%,transparent)}}.bg-bambu-dark\/80{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/80{background-color:color-mix(in oklab,var(--color-bambu-dark)80%,transparent)}}.bg-bambu-dark\/90{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/90{background-color:color-mix(in oklab,var(--color-bambu-dark)90%,transparent)}}.bg-bambu-gray\/20{background-color:var(--color-bambu-gray)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-gray\/20{background-color:color-mix(in oklab,var(--color-bambu-gray)20%,transparent)}}.bg-bambu-green{background-color:var(--color-bambu-green)}.bg-bambu-green\/10{background-color:#00ae421a}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/10{background-color:color-mix(in oklab,var(--color-bambu-green)10%,transparent)}}.bg-bambu-green\/20{background-color:#00ae4233}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/20{background-color:color-mix(in oklab,var(--color-bambu-green)20%,transparent)}}.bg-bambu-green\/30{background-color:#00ae424d}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/30{background-color:color-mix(in oklab,var(--color-bambu-green)30%,transparent)}}.bg-bambu-green\/50{background-color:#00ae4280}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/50{background-color:color-mix(in oklab,var(--color-bambu-green)50%,transparent)}}.bg-bambu-green\/75{background-color:#00ae42bf}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/75{background-color:color-mix(in oklab,var(--color-bambu-green)75%,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-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/10{background-color:color-mix(in oklab,var(--color-blue-400)10%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,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-gray-400\/10{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.bg-gray-400\/10{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\/10{background-color:#05df721a}@supports (color:color-mix(in lab,red,red)){.bg-green-400\/10{background-color:color-mix(in oklab,var(--color-green-400)10%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/20{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.bg-orange-400\/10{background-color:#ff8b1a1a}@supports (color:color-mix(in lab,red,red)){.bg-orange-400\/10{background-color:color-mix(in oklab,var(--color-orange-400)10%,transparent)}}.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-purple-500\/80{background-color:#ac4bffcc}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/80{background-color:color-mix(in oklab,var(--color-purple-500)80%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.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\/30{background-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/30{background-color:color-mix(in oklab,var(--color-red-500)30%,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-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-400\/10{background-color:#fac8001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-400\/10{background-color:color-mix(in oklab,var(--color-yellow-400)10%,transparent)}}.bg-yellow-400\/20{background-color:#fac80033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-400\/20{background-color:color-mix(in oklab,var(--color-yellow-400)20%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.fill-yellow-400{fill:var(--color-yellow-400)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\[10px\]{font-size:10px}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-bambu-dark-tertiary{color:var(--color-bambu-dark-tertiary)}.text-bambu-gray{color:var(--color-bambu-gray)}.text-bambu-gray-light{color:var(--color-bambu-gray-light)}.text-bambu-gray\/30{color:var(--color-bambu-gray)}@supports (color:color-mix(in lab,red,red)){.text-bambu-gray\/30{color:color-mix(in oklab,var(--color-bambu-gray)30%,transparent)}}.text-bambu-gray\/50{color:var(--color-bambu-gray)}@supports (color:color-mix(in lab,red,red)){.text-bambu-gray\/50{color:color-mix(in oklab,var(--color-bambu-gray)50%,transparent)}}.text-bambu-green{color:var(--color-bambu-green)}.text-blue-400{color:var(--color-blue-400)}.text-gray-400{color:var(--color-gray-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-white{color:var(--color-white)}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.placeholder-bambu-gray::placeholder{color:var(--color-bambu-gray)}.accent-bambu-green{accent-color:var(--color-bambu-green)}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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-1{--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-bambu-green{--tw-ring-color:var(--color-bambu-green)}.ring-white{--tw-ring-color:var(--color-white)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.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,)}.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-300{--tw-duration:.3s;transition-duration:.3s}@media(hover:hover){.group-hover\:opacity-50:is(:where(.group):hover *){opacity:.5}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-checked\:bg-bambu-green:is(:where(.peer):checked~*){background-color:var(--color-bambu-green)}.peer-focus\:outline-none:is(:where(.peer):focus~*){--tw-outline-style:none;outline-style:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-0:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.before\:right-0:before{content:var(--tw-content);right:calc(var(--spacing)*0)}.before\:left-0:before{content:var(--tw-content);left:calc(var(--spacing)*0)}.before\:h-0\.5:before{content:var(--tw-content);height:calc(var(--spacing)*.5)}.before\:bg-bambu-green:before{content:var(--tw-content);background-color:var(--color-bambu-green)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing)*4)}.after\:h-5:after{content:var(--tw-content);height:calc(var(--spacing)*5)}.after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing)*4)}.after\:w-5:after{content:var(--tw-content);width:calc(var(--spacing)*5)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.peer-checked\:after\:translate-x-full:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.peer-checked\:after\:border-white:is(:where(.peer):checked~*):after{content:var(--tw-content);border-color:var(--color-white)}@media(hover:hover){.hover\:border-bambu-gray:hover{border-color:var(--color-bambu-gray)}.hover\:border-bambu-green:hover{border-color:var(--color-bambu-green)}.hover\:border-white\/40:hover{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/40:hover{border-color:color-mix(in oklab,var(--color-white)40%,transparent)}}.hover\:bg-bambu-dark:hover{background-color:var(--color-bambu-dark)}.hover\:bg-bambu-dark-secondary:hover{background-color:var(--color-bambu-dark-secondary)}.hover\:bg-bambu-dark-tertiary:hover,.hover\:bg-bambu-dark-tertiary\/30:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/30:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)30%,transparent)}}.hover\:bg-bambu-dark-tertiary\/50:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/50:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)50%,transparent)}}.hover\:bg-bambu-dark-tertiary\/70:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/70:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)70%,transparent)}}.hover\:bg-bambu-dark-tertiary\/80:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/80:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)80%,transparent)}}.hover\:bg-bambu-gray-dark:hover{background-color:var(--color-bambu-gray-dark)}.hover\:bg-bambu-green-dark:hover{background-color:var(--color-bambu-green-dark)}.hover\:bg-bambu-green-light:hover{background-color:var(--color-bambu-green-light)}.hover\:bg-bambu-green\/20:hover{background-color:#00ae4233}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-green\/20:hover{background-color:color-mix(in oklab,var(--color-bambu-green)20%,transparent)}}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}}.hover\:bg-black\/80:hover{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/80:hover{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-red-400\/10:hover{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-400\/10:hover{background-color:color-mix(in oklab,var(--color-red-400)10%,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-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-yellow-600:hover{background-color:var(--color-yellow-600)}.hover\:text-bambu-green:hover{color:var(--color-bambu-green)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}}.focus\:border-bambu-green:focus{border-color:var(--color-bambu-green)}.focus\:ring-2:focus{--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\:ring-bambu-gray:focus{--tw-ring-color:var(--color-bambu-gray)}.focus\:ring-bambu-green:focus{--tw-ring-color:var(--color-bambu-green)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-bambu-dark:focus{--tw-ring-offset-color:var(--color-bambu-dark)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:inline{display:inline}.sm\:h-4{height:calc(var(--spacing)*4)}.sm\:w-4{width:calc(var(--spacing)*4)}.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\:p-1\.5{padding:calc(var(--spacing)*1.5)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:64rem){.lg\:w-80{width:calc(var(--spacing)*80)}.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\:flex-row{flex-direction:row}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-slider-thumb\]\:h-3::-webkit-slider-thumb{height:calc(var(--spacing)*3)}.\[\&\:\:-webkit-slider-thumb\]\:w-3::-webkit-slider-thumb{width:calc(var(--spacing)*3)}.\[\&\:\:-webkit-slider-thumb\]\:cursor-pointer::-webkit-slider-thumb{cursor:pointer}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-slider-thumb\]\:bg-bambu-green::-webkit-slider-thumb{background-color:var(--color-bambu-green)}}:root{--bg-primary:#f5f5f5;--bg-secondary:#fff;--bg-tertiary:#e5e5e5;--text-primary:#1a1a1a;--text-secondary:#4a4a4a;--text-muted:#6b6b6b;--text-tertiary:gray;--border-color:#d4d4d4;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,sans-serif;font-weight:400;line-height:1.5}.dark{--bg-primary:#1a1a1a;--bg-secondary:#2d2d2d;--bg-tertiary:#3d3d3d;--text-primary:#fff;--text-secondary:#a0a0a0;--text-muted:gray;--text-tertiary:#4a4a4a;--border-color:#3d3d3d}body{background-color:var(--bg-primary);color:var(--text-primary);min-height:100vh;margin:0;transition:background-color .2s,color .2s}#root{min-height:100vh}.text-white{color:var(--text-primary)}.bg-bambu-dark,.bg-bambu-dark-secondary,.bg-bambu-dark-tertiary,.border-bambu-dark-tertiary{transition:background-color .2s,border-color .2s}@keyframes slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.animate-slide-in{animation:.2s ease-out slide-in}@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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@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-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--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-content:""}}} diff --git a/static/assets/index-BzGdgzuX.css b/static/assets/index-BzGdgzuX.css deleted file mode 100644 index eb8c7dad2..000000000 --- a/static/assets/index-BzGdgzuX.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";@layer properties,theme,base,components,utilities;@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--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-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-700:oklch(37.3% .034 259.733);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--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);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-widest:.1em;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bambu-green:#00ae42;--color-bambu-green-light:#00c64d;--color-bambu-green-dark:#009438;--color-bambu-dark:var(--bg-primary);--color-bambu-dark-secondary:var(--bg-secondary);--color-bambu-dark-tertiary:var(--bg-tertiary);--color-bambu-gray:var(--text-muted);--color-bambu-gray-light:var(--text-secondary);--color-bambu-gray-dark:var(--text-tertiary)}}@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%;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]){appearance:button}::file-selector-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 utilities{.pointer-events-none{pointer-events:none}.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}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.-top-1{top:calc(var(--spacing)*-1)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\[2px\]{top:2px}.top-full{top:100%}.-right-1{right:calc(var(--spacing)*-1)}.right-0{right:calc(var(--spacing)*0)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.right-12{right:calc(var(--spacing)*12)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-6{bottom:calc(var(--spacing)*6)}.left-0{left:calc(var(--spacing)*0)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-4{left:calc(var(--spacing)*4)}.left-12{left:calc(var(--spacing)*12)}.left-\[2px\]{left:2px}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-60{z-index:60}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-4{grid-column:span 4/span 4}.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-2{margin-inline:calc(var(--spacing)*2)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.-mt-2{margin-top:calc(var(--spacing)*-2)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-0\.5{margin-left:calc(var(--spacing)*.5)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-8{margin-left:calc(var(--spacing)*8)}.ml-16{margin-left:calc(var(--spacing)*16)}.ml-64{margin-left:calc(var(--spacing)*64)}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.h-1{height:calc(var(--spacing)*1)}.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-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-28{height:calc(var(--spacing)*28)}.h-64{height:calc(var(--spacing)*64)}.h-\[80vh\]{height:80vh}.h-\[160px\]{height:160px}.h-full{height:100%}.max-h-40{max-height:calc(var(--spacing)*40)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-\[48px\]{min-height:48px}.min-h-\[120px\]{min-height:120px}.min-h-\[400px\]{min-height:400px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.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-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.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-16{width:calc(var(--spacing)*16)}.w-20{width:calc(var(--spacing)*20)}.w-28{width:calc(var(--spacing)*28)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-96{width:calc(var(--spacing)*96)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[90vw\]{max-width:90vw}.max-w-\[100px\]{max-width:100px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[80px\]{min-width:80px}.min-w-\[160px\]{min-width:160px}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-0{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);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)}.scale-110{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.-rotate-90{rotate:-90deg}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.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:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*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-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}: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-bambu-dark-tertiary>:not(:last-child)){border-color:var(--color-bambu-dark-tertiary)}.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}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.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-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-bambu-dark-tertiary{border-color:var(--color-bambu-dark-tertiary)}.border-bambu-green{border-color:var(--color-bambu-green)}.border-bambu-green\/50{border-color:#00ae4280}@supports (color:color-mix(in lab,red,red)){.border-bambu-green\/50{border-color:color-mix(in oklab,var(--color-bambu-green)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-gray-700{border-color:var(--color-gray-700)}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500)30%,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\/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-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab,red,red)){.border-white\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.border-yellow-500{border-color:var(--color-yellow-500)}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500)30%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-bambu-dark{background-color:var(--color-bambu-dark)}.bg-bambu-dark-secondary{background-color:var(--color-bambu-dark-secondary)}.bg-bambu-dark-tertiary{background-color:var(--color-bambu-dark-tertiary)}.bg-bambu-dark\/30{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/30{background-color:color-mix(in oklab,var(--color-bambu-dark)30%,transparent)}}.bg-bambu-dark\/50{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/50{background-color:color-mix(in oklab,var(--color-bambu-dark)50%,transparent)}}.bg-bambu-dark\/80{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/80{background-color:color-mix(in oklab,var(--color-bambu-dark)80%,transparent)}}.bg-bambu-dark\/90{background-color:var(--color-bambu-dark)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-dark\/90{background-color:color-mix(in oklab,var(--color-bambu-dark)90%,transparent)}}.bg-bambu-gray\/20{background-color:var(--color-bambu-gray)}@supports (color:color-mix(in lab,red,red)){.bg-bambu-gray\/20{background-color:color-mix(in oklab,var(--color-bambu-gray)20%,transparent)}}.bg-bambu-green{background-color:var(--color-bambu-green)}.bg-bambu-green\/10{background-color:#00ae421a}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/10{background-color:color-mix(in oklab,var(--color-bambu-green)10%,transparent)}}.bg-bambu-green\/20{background-color:#00ae4233}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/20{background-color:color-mix(in oklab,var(--color-bambu-green)20%,transparent)}}.bg-bambu-green\/30{background-color:#00ae424d}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/30{background-color:color-mix(in oklab,var(--color-bambu-green)30%,transparent)}}.bg-bambu-green\/50{background-color:#00ae4280}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/50{background-color:color-mix(in oklab,var(--color-bambu-green)50%,transparent)}}.bg-bambu-green\/75{background-color:#00ae42bf}@supports (color:color-mix(in lab,red,red)){.bg-bambu-green\/75{background-color:color-mix(in oklab,var(--color-bambu-green)75%,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-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.bg-black\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/10{background-color:color-mix(in oklab,var(--color-blue-400)10%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,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-gray-400\/10{background-color:#99a1af1a}@supports (color:color-mix(in lab,red,red)){.bg-gray-400\/10{background-color:color-mix(in oklab,var(--color-gray-400)10%,transparent)}}.bg-green-400{background-color:var(--color-green-400)}.bg-green-400\/10{background-color:#05df721a}@supports (color:color-mix(in lab,red,red)){.bg-green-400\/10{background-color:color-mix(in oklab,var(--color-green-400)10%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500)10%,transparent)}}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/20{background-color:color-mix(in oklab,var(--color-green-500)20%,transparent)}}.bg-orange-400\/10{background-color:#ff8b1a1a}@supports (color:color-mix(in lab,red,red)){.bg-orange-400\/10{background-color:color-mix(in oklab,var(--color-orange-400)10%,transparent)}}.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-purple-500\/80{background-color:#ac4bffcc}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/80{background-color:color-mix(in oklab,var(--color-purple-500)80%,transparent)}}.bg-red-400{background-color:var(--color-red-400)}.bg-red-400\/10{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.bg-red-400\/10{background-color:color-mix(in oklab,var(--color-red-400)10%,transparent)}}.bg-red-500{background-color:var(--color-red-500)}.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\/30{background-color:#fb2c364d}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/30{background-color:color-mix(in oklab,var(--color-red-500)30%,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-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-yellow-400\/10{background-color:#fac8001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-400\/10{background-color:color-mix(in oklab,var(--color-yellow-400)10%,transparent)}}.bg-yellow-400\/20{background-color:#fac80033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-400\/20{background-color:color-mix(in oklab,var(--color-yellow-400)20%,transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500)10%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500)20%,transparent)}}.fill-yellow-400{fill:var(--color-yellow-400)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.object-left{object-position:left}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-12{padding:calc(var(--spacing)*12)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-12{padding-block:calc(var(--spacing)*12)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-3{padding-top:calc(var(--spacing)*3)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-3{padding-right:calc(var(--spacing)*3)}.pr-4{padding-right:calc(var(--spacing)*4)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-10{padding-left:calc(var(--spacing)*10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\[10px\]{font-size:10px}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-pre-wrap{white-space:pre-wrap}.text-bambu-dark-tertiary{color:var(--color-bambu-dark-tertiary)}.text-bambu-gray{color:var(--color-bambu-gray)}.text-bambu-gray-light{color:var(--color-bambu-gray-light)}.text-bambu-gray\/30{color:var(--color-bambu-gray)}@supports (color:color-mix(in lab,red,red)){.text-bambu-gray\/30{color:color-mix(in oklab,var(--color-bambu-gray)30%,transparent)}}.text-bambu-gray\/50{color:var(--color-bambu-gray)}@supports (color:color-mix(in lab,red,red)){.text-bambu-gray\/50{color:color-mix(in oklab,var(--color-bambu-gray)50%,transparent)}}.text-bambu-green{color:var(--color-bambu-green)}.text-blue-400{color:var(--color-blue-400)}.text-gray-400{color:var(--color-gray-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-white{color:var(--color-white)}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab,red,red)){.text-white\/80{color:color-mix(in oklab,var(--color-white)80%,transparent)}}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.accent-bambu-green{accent-color:var(--color-bambu-green)}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-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-1{--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-bambu-green{--tw-ring-color:var(--color-bambu-green)}.ring-white{--tw-ring-color:var(--color-white)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.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,)}.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-300{--tw-duration:.3s;transition-duration:.3s}@media(hover:hover){.group-hover\:opacity-50:is(:where(.group):hover *){opacity:.5}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.peer-checked\:bg-bambu-green:is(:where(.peer):checked~*){background-color:var(--color-bambu-green)}.peer-focus\:outline-none:is(:where(.peer):focus~*){--tw-outline-style:none;outline-style:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-0:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.before\:right-0:before{content:var(--tw-content);right:calc(var(--spacing)*0)}.before\:left-0:before{content:var(--tw-content);left:calc(var(--spacing)*0)}.before\:h-0\.5:before{content:var(--tw-content);height:calc(var(--spacing)*.5)}.before\:bg-bambu-green:before{content:var(--tw-content);background-color:var(--color-bambu-green)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-\[2px\]:after{content:var(--tw-content);top:2px}.after\:left-\[2px\]:after{content:var(--tw-content);left:2px}.after\:h-4:after{content:var(--tw-content);height:calc(var(--spacing)*4)}.after\:h-5:after{content:var(--tw-content);height:calc(var(--spacing)*5)}.after\:w-4:after{content:var(--tw-content);width:calc(var(--spacing)*4)}.after\:w-5:after{content:var(--tw-content);width:calc(var(--spacing)*5)}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:bg-white:after{content:var(--tw-content);background-color:var(--color-white)}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.peer-checked\:after\:translate-x-full:is(:where(.peer):checked~*):after{content:var(--tw-content);--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.peer-checked\:after\:border-white:is(:where(.peer):checked~*):after{content:var(--tw-content);border-color:var(--color-white)}@media(hover:hover){.hover\:border-bambu-gray:hover{border-color:var(--color-bambu-gray)}.hover\:border-bambu-green:hover{border-color:var(--color-bambu-green)}.hover\:border-white\/40:hover{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/40:hover{border-color:color-mix(in oklab,var(--color-white)40%,transparent)}}.hover\:bg-bambu-dark:hover{background-color:var(--color-bambu-dark)}.hover\:bg-bambu-dark-secondary:hover{background-color:var(--color-bambu-dark-secondary)}.hover\:bg-bambu-dark-tertiary:hover,.hover\:bg-bambu-dark-tertiary\/30:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/30:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)30%,transparent)}}.hover\:bg-bambu-dark-tertiary\/50:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/50:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)50%,transparent)}}.hover\:bg-bambu-dark-tertiary\/70:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/70:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)70%,transparent)}}.hover\:bg-bambu-dark-tertiary\/80:hover{background-color:var(--color-bambu-dark-tertiary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-dark-tertiary\/80:hover{background-color:color-mix(in oklab,var(--color-bambu-dark-tertiary)80%,transparent)}}.hover\:bg-bambu-gray-dark:hover{background-color:var(--color-bambu-gray-dark)}.hover\:bg-bambu-green-dark:hover{background-color:var(--color-bambu-green-dark)}.hover\:bg-bambu-green-light:hover{background-color:var(--color-bambu-green-light)}.hover\:bg-bambu-green\/20:hover{background-color:#00ae4233}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bambu-green\/20:hover{background-color:color-mix(in oklab,var(--color-bambu-green)20%,transparent)}}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}}.hover\:bg-black\/80:hover{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/80:hover{background-color:color-mix(in oklab,var(--color-black)80%,transparent)}}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-red-400\/10:hover{background-color:#ff65681a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-red-400\/10:hover{background-color:color-mix(in oklab,var(--color-red-400)10%,transparent)}}.hover\:bg-red-600:hover{background-color:var(--color-red-600)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-yellow-600:hover{background-color:var(--color-yellow-600)}.hover\:text-bambu-green:hover{color:var(--color-bambu-green)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}}.focus\:border-bambu-green:focus{border-color:var(--color-bambu-green)}.focus\:ring-2:focus{--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\:ring-bambu-gray:focus{--tw-ring-color:var(--color-bambu-gray)}.focus\:ring-bambu-green:focus{--tw-ring-color:var(--color-bambu-green)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:ring-offset-bambu-dark:focus{--tw-ring-offset-color:var(--color-bambu-dark)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:inline{display:inline}.sm\:h-4{height:calc(var(--spacing)*4)}.sm\:w-4{width:calc(var(--spacing)*4)}.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\:p-1\.5{padding:calc(var(--spacing)*1.5)}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:64rem){.lg\:w-80{width:calc(var(--spacing)*80)}.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\:flex-row{flex-direction:row}}@media(min-width:80rem){.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-slider-thumb\]\:h-3::-webkit-slider-thumb{height:calc(var(--spacing)*3)}.\[\&\:\:-webkit-slider-thumb\]\:w-3::-webkit-slider-thumb{width:calc(var(--spacing)*3)}.\[\&\:\:-webkit-slider-thumb\]\:cursor-pointer::-webkit-slider-thumb{cursor:pointer}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-slider-thumb\]\:bg-bambu-green::-webkit-slider-thumb{background-color:var(--color-bambu-green)}}:root{--bg-primary:#f5f5f5;--bg-secondary:#fff;--bg-tertiary:#e5e5e5;--text-primary:#1a1a1a;--text-secondary:#4a4a4a;--text-muted:#6b6b6b;--text-tertiary:gray;--border-color:#d4d4d4;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,sans-serif;font-weight:400;line-height:1.5}.dark{--bg-primary:#1a1a1a;--bg-secondary:#2d2d2d;--bg-tertiary:#3d3d3d;--text-primary:#fff;--text-secondary:#a0a0a0;--text-muted:gray;--text-tertiary:#4a4a4a;--border-color:#3d3d3d}body{background-color:var(--bg-primary);color:var(--text-primary);min-height:100vh;margin:0;transition:background-color .2s,color .2s}#root{min-height:100vh}.text-white{color:var(--text-primary)}.bg-bambu-dark,.bg-bambu-dark-secondary,.bg-bambu-dark-tertiary,.border-bambu-dark-tertiary{transition:background-color .2s,border-color .2s}@keyframes slide-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.animate-slide-in{animation:.2s ease-out slide-in}@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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@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-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@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-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--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-content:""}}} diff --git a/static/assets/index-DUMaPDwX.js b/static/assets/index-MvaVdELS.js similarity index 62% rename from static/assets/index-DUMaPDwX.js rename to static/assets/index-MvaVdELS.js index 02792082a..daa900c30 100644 --- a/static/assets/index-DUMaPDwX.js +++ b/static/assets/index-MvaVdELS.js @@ -1,18 +1,18 @@ -function fee(t,e){for(var n=0;ni[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&i(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function i(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}})();var Jx=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Gs(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var FE={exports:{}},cg={};var XU;function hee(){if(XU)return cg;XU=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(i,r,a){var s=null;if(a!==void 0&&(s=""+a),r.key!==void 0&&(s=""+r.key),"key"in r){a={};for(var o in r)o!=="key"&&(a[o]=r[o])}else a=r;return r=a.ref,{$$typeof:t,type:i,key:s,ref:r!==void 0?r:null,props:a}}return cg.Fragment=e,cg.jsx=n,cg.jsxs=n,cg}var KU;function pee(){return KU||(KU=1,FE.exports=hee()),FE.exports}var _=pee(),zE={exports:{}},$t={};var YU;function mee(){if(YU)return $t;YU=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),s=Symbol.for("react.context"),o=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),c=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),f=Symbol.for("react.activity"),p=Symbol.iterator;function m(B){return B===null||typeof B!="object"?null:(B=p&&B[p]||B["@@iterator"],typeof B=="function"?B:null)}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,x={};function g(B,X,re){this.props=B,this.context=X,this.refs=x,this.updater=re||y}g.prototype.isReactComponent={},g.prototype.setState=function(B,X){if(typeof B!="object"&&typeof B!="function"&&B!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,B,X,"setState")},g.prototype.forceUpdate=function(B){this.updater.enqueueForceUpdate(this,B,"forceUpdate")};function M(){}M.prototype=g.prototype;function w(B,X,re){this.props=B,this.context=X,this.refs=x,this.updater=re||y}var E=w.prototype=new M;E.constructor=w,b(E,g.prototype),E.isPureReactComponent=!0;var A=Array.isArray;function N(){}var T={H:null,A:null,T:null,S:null},U=Object.prototype.hasOwnProperty;function P(B,X,re){var ce=re.ref;return{$$typeof:t,type:B,key:X,ref:ce!==void 0?ce:null,props:re}}function O(B,X){return P(B.type,X,B.props)}function j(B){return typeof B=="object"&&B!==null&&B.$$typeof===t}function F(B){var X={"=":"=0",":":"=2"};return"$"+B.replace(/[=:]/g,function(re){return X[re]})}var W=/\/+/g;function L(B,X){return typeof B=="object"&&B!==null&&B.key!=null?F(""+B.key):X.toString(36)}function $(B){switch(B.status){case"fulfilled":return B.value;case"rejected":throw B.reason;default:switch(typeof B.status=="string"?B.then(N,N):(B.status="pending",B.then(function(X){B.status==="pending"&&(B.status="fulfilled",B.value=X)},function(X){B.status==="pending"&&(B.status="rejected",B.reason=X)})),B.status){case"fulfilled":return B.value;case"rejected":throw B.reason}}throw B}function q(B,X,re,ce,xe){var me=typeof B;(me==="undefined"||me==="boolean")&&(B=null);var ye=!1;if(B===null)ye=!0;else switch(me){case"bigint":case"string":case"number":ye=!0;break;case"object":switch(B.$$typeof){case t:case e:ye=!0;break;case d:return ye=B._init,q(ye(B._payload),X,re,ce,xe)}}if(ye)return xe=xe(B),ye=ce===""?"."+L(B,0):ce,A(xe)?(re="",ye!=null&&(re=ye.replace(W,"$&/")+"/"),q(xe,X,re,"",function(we){return we})):xe!=null&&(j(xe)&&(xe=O(xe,re+(xe.key==null||B&&B.key===xe.key?"":(""+xe.key).replace(W,"$&/")+"/")+ye)),X.push(xe)),1;ye=0;var De=ce===""?".":ce+":";if(A(B))for(var he=0;he>>1,se=q[J];if(0>>1;Jr(re,Y))cer(xe,re)?(q[J]=xe,q[ce]=Y,J=ce):(q[J]=re,q[X]=Y,J=X);else if(cer(xe,Y))q[J]=xe,q[ce]=Y,J=ce;else break e}}return G}function r(q,G){var Y=q.sortIndex-G.sortIndex;return Y!==0?Y:q.id-G.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,o=s.now();t.unstable_now=function(){return s.now()-o}}var l=[],c=[],d=1,f=null,p=3,m=!1,y=!1,b=!1,x=!1,g=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function E(q){for(var G=n(c);G!==null;){if(G.callback===null)i(c);else if(G.startTime<=q)i(c),G.sortIndex=G.expirationTime,e(l,G);else break;G=n(c)}}function A(q){if(b=!1,E(q),!y)if(n(l)!==null)y=!0,N||(N=!0,F());else{var G=n(c);G!==null&&$(A,G.startTime-q)}}var N=!1,T=-1,U=5,P=-1;function O(){return x?!0:!(t.unstable_now()-Pq&&O());){var J=f.callback;if(typeof J=="function"){f.callback=null,p=f.priorityLevel;var se=J(f.expirationTime<=q);if(q=t.unstable_now(),typeof se=="function"){f.callback=se,E(q),G=!0;break t}f===n(l)&&i(l),E(q)}else i(l);f=n(l)}if(f!==null)G=!0;else{var B=n(c);B!==null&&$(A,B.startTime-q),G=!1}}break e}finally{f=null,p=Y,m=!1}G=void 0}}finally{G?F():N=!1}}}var F;if(typeof w=="function")F=function(){w(j)};else if(typeof MessageChannel<"u"){var W=new MessageChannel,L=W.port2;W.port1.onmessage=j,F=function(){L.postMessage(null)}}else F=function(){g(j,0)};function $(q,G){T=g(function(){q(t.unstable_now())},G)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(q){q.callback=null},t.unstable_forceFrameRate=function(q){0>q||125J?(q.sortIndex=Y,e(c,q),n(l)===null&&q===n(c)&&(b?(M(T),T=-1):b=!0,$(A,Y-J))):(q.sortIndex=se,e(l,q),y||m||(y=!0,N||(N=!0,F()))),q},t.unstable_shouldYield=O,t.unstable_wrapCallback=function(q){var G=p;return function(){var Y=p;p=G;try{return q.apply(this,arguments)}finally{p=Y}}}})(HE)),HE}var JU;function xee(){return JU||(JU=1,jE.exports=vee()),jE.exports}var VE={exports:{}},Gr={};var e4;function yee(){if(e4)return Gr;e4=1;var t=Yp();function e(l){var c="https://react.dev/errors/"+l;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),VE.exports=yee(),VE.exports}var n4;function bee(){if(n4)return ug;n4=1;var t=xee(),e=Yp(),n=BV();function i(u){var h="https://react.dev/errors/"+u;if(1se||(u.current=J[se],J[se]=null,se--)}function re(u,h){se++,J[se]=u.current,u.current=h}var ce=B(null),xe=B(null),me=B(null),ye=B(null);function De(u,h){switch(re(me,h),re(xe,u),re(ce,null),h.nodeType){case 9:case 11:u=(u=h.documentElement)&&(u=u.namespaceURI)?vU(u):0;break;default:if(u=h.tagName,h=h.namespaceURI)h=vU(h),u=xU(h,u);else switch(u){case"svg":u=1;break;case"math":u=2;break;default:u=0}}X(ce),re(ce,u)}function he(){X(ce),X(xe),X(me)}function we(u){u.memoizedState!==null&&re(ye,u);var h=ce.current,v=xU(h,u.type);h!==v&&(re(xe,u),re(ce,v))}function Be(u){xe.current===u&&(X(ce),X(xe)),ye.current===u&&(X(ye),ag._currentValue=Y)}var le,ut;function z(u){if(le===void 0)try{throw Error()}catch(v){var h=v.stack.trim().match(/\n( *(at )?)/);le=h&&h[1]||"",ut=-1i[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&i(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function i(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}})();var ey=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function $s(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var jE={exports:{}},dg={};var QU;function xee(){if(QU)return dg;QU=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function n(i,r,a){var s=null;if(a!==void 0&&(s=""+a),r.key!==void 0&&(s=""+r.key),"key"in r){a={};for(var o in r)o!=="key"&&(a[o]=r[o])}else a=r;return r=a.ref,{$$typeof:t,type:i,key:s,ref:r!==void 0?r:null,props:a}}return dg.Fragment=e,dg.jsx=n,dg.jsxs=n,dg}var JU;function yee(){return JU||(JU=1,jE.exports=xee()),jE.exports}var _=yee(),BE={exports:{}},$t={};var e4;function bee(){if(e4)return $t;e4=1;var t=Symbol.for("react.transitional.element"),e=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),a=Symbol.for("react.consumer"),s=Symbol.for("react.context"),o=Symbol.for("react.forward_ref"),l=Symbol.for("react.suspense"),c=Symbol.for("react.memo"),d=Symbol.for("react.lazy"),f=Symbol.for("react.activity"),p=Symbol.iterator;function m(j){return j===null||typeof j!="object"?null:(j=p&&j[p]||j["@@iterator"],typeof j=="function"?j:null)}var y={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,x={};function g(j,X,re){this.props=j,this.context=X,this.refs=x,this.updater=re||y}g.prototype.isReactComponent={},g.prototype.setState=function(j,X){if(typeof j!="object"&&typeof j!="function"&&j!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,j,X,"setState")},g.prototype.forceUpdate=function(j){this.updater.enqueueForceUpdate(this,j,"forceUpdate")};function M(){}M.prototype=g.prototype;function w(j,X,re){this.props=j,this.context=X,this.refs=x,this.updater=re||y}var E=w.prototype=new M;E.constructor=w,b(E,g.prototype),E.isPureReactComponent=!0;var A=Array.isArray;function P(){}var C={H:null,A:null,T:null,S:null},F=Object.prototype.hasOwnProperty;function N(j,X,re){var ce=re.ref;return{$$typeof:t,type:j,key:X,ref:ce!==void 0?ce:null,props:re}}function O(j,X){return N(j.type,X,j.props)}function B(j){return typeof j=="object"&&j!==null&&j.$$typeof===t}function I(j){var X={"=":"=0",":":"=2"};return"$"+j.replace(/[=:]/g,function(re){return X[re]})}var G=/\/+/g;function L(j,X){return typeof j=="object"&&j!==null&&j.key!=null?I(""+j.key):X.toString(36)}function $(j){switch(j.status){case"fulfilled":return j.value;case"rejected":throw j.reason;default:switch(typeof j.status=="string"?j.then(P,P):(j.status="pending",j.then(function(X){j.status==="pending"&&(j.status="fulfilled",j.value=X)},function(X){j.status==="pending"&&(j.status="rejected",j.reason=X)})),j.status){case"fulfilled":return j.value;case"rejected":throw j.reason}}throw j}function q(j,X,re,ce,xe){var me=typeof j;(me==="undefined"||me==="boolean")&&(j=null);var ye=!1;if(j===null)ye=!0;else switch(me){case"bigint":case"string":case"number":ye=!0;break;case"object":switch(j.$$typeof){case t:case e:ye=!0;break;case d:return ye=j._init,q(ye(j._payload),X,re,ce,xe)}}if(ye)return xe=xe(j),ye=ce===""?"."+L(j,0):ce,A(xe)?(re="",ye!=null&&(re=ye.replace(G,"$&/")+"/"),q(xe,X,re,"",function(we){return we})):xe!=null&&(B(xe)&&(xe=O(xe,re+(xe.key==null||j&&j.key===xe.key?"":(""+xe.key).replace(G,"$&/")+"/")+ye)),X.push(xe)),1;ye=0;var De=ce===""?".":ce+":";if(A(j))for(var he=0;he>>1,se=q[J];if(0>>1;Jr(re,Y))cer(xe,re)?(q[J]=xe,q[ce]=Y,J=ce):(q[J]=re,q[X]=Y,J=X);else if(cer(xe,Y))q[J]=xe,q[ce]=Y,J=ce;else break e}}return W}function r(q,W){var Y=q.sortIndex-W.sortIndex;return Y!==0?Y:q.id-W.id}if(t.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,o=s.now();t.unstable_now=function(){return s.now()-o}}var l=[],c=[],d=1,f=null,p=3,m=!1,y=!1,b=!1,x=!1,g=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,w=typeof setImmediate<"u"?setImmediate:null;function E(q){for(var W=n(c);W!==null;){if(W.callback===null)i(c);else if(W.startTime<=q)i(c),W.sortIndex=W.expirationTime,e(l,W);else break;W=n(c)}}function A(q){if(b=!1,E(q),!y)if(n(l)!==null)y=!0,P||(P=!0,I());else{var W=n(c);W!==null&&$(A,W.startTime-q)}}var P=!1,C=-1,F=5,N=-1;function O(){return x?!0:!(t.unstable_now()-Nq&&O());){var J=f.callback;if(typeof J=="function"){f.callback=null,p=f.priorityLevel;var se=J(f.expirationTime<=q);if(q=t.unstable_now(),typeof se=="function"){f.callback=se,E(q),W=!0;break t}f===n(l)&&i(l),E(q)}else i(l);f=n(l)}if(f!==null)W=!0;else{var j=n(c);j!==null&&$(A,j.startTime-q),W=!1}}break e}finally{f=null,p=Y,m=!1}W=void 0}}finally{W?I():P=!1}}}var I;if(typeof w=="function")I=function(){w(B)};else if(typeof MessageChannel<"u"){var G=new MessageChannel,L=G.port2;G.port1.onmessage=B,I=function(){L.postMessage(null)}}else I=function(){g(B,0)};function $(q,W){C=g(function(){q(t.unstable_now())},W)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(q){q.callback=null},t.unstable_forceFrameRate=function(q){0>q||125J?(q.sortIndex=Y,e(c,q),n(l)===null&&q===n(c)&&(b?(M(C),C=-1):b=!0,$(A,Y-J))):(q.sortIndex=se,e(l,q),y||m||(y=!0,P||(P=!0,I()))),q},t.unstable_shouldYield=O,t.unstable_wrapCallback=function(q){var W=p;return function(){var Y=p;p=W;try{return q.apply(this,arguments)}finally{p=Y}}}})(GE)),GE}var i4;function wee(){return i4||(i4=1,VE.exports=See()),VE.exports}var $E={exports:{}},Gr={};var r4;function Mee(){if(r4)return Gr;r4=1;var t=Qp();function e(l){var c="https://react.dev/errors/"+l;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),$E.exports=Mee(),$E.exports}var s4;function Eee(){if(s4)return fg;s4=1;var t=wee(),e=Qp(),n=$V();function i(u){var h="https://react.dev/errors/"+u;if(1se||(u.current=J[se],J[se]=null,se--)}function re(u,h){se++,J[se]=u.current,u.current=h}var ce=j(null),xe=j(null),me=j(null),ye=j(null);function De(u,h){switch(re(me,h),re(xe,u),re(ce,null),h.nodeType){case 9:case 11:u=(u=h.documentElement)&&(u=u.namespaceURI)?_U(u):0;break;default:if(u=h.tagName,h=h.namespaceURI)h=_U(h),u=SU(h,u);else switch(u){case"svg":u=1;break;case"math":u=2;break;default:u=0}}X(ce),re(ce,u)}function he(){X(ce),X(xe),X(me)}function we(u){u.memoizedState!==null&&re(ye,u);var h=ce.current,v=SU(h,u.type);h!==v&&(re(xe,u),re(ce,v))}function je(u){xe.current===u&&(X(ce),X(xe)),ye.current===u&&(X(ye),og._currentValue=Y)}var le,ut;function z(u){if(le===void 0)try{throw Error()}catch(v){var h=v.stack.trim().match(/\n( *(at )?)/);le=h&&h[1]||"",ut=-1)":-1R||_e[S]!==ze[R]){var Qe=` `+_e[S].replace(" at new "," at ");return u.displayName&&Qe.includes("")&&(Qe=Qe.replace("",u.displayName)),Qe}while(1<=S&&0<=R);break}}}finally{V=!1,Error.prepareStackTrace=v}return(v=u?u.displayName||u.name:"")?z(v):""}function Q(u,h){switch(u.tag){case 26:case 27:case 5:return z(u.type);case 16:return z("Lazy");case 13:return u.child!==h&&h!==null?z("Suspense Fallback"):z("Suspense");case 19:return z("SuspenseList");case 0:case 15:return ie(u.type,!1);case 11:return ie(u.type.render,!1);case 1:return ie(u.type,!0);case 31:return z("Activity");default:return""}}function ee(u){try{var h="",v=null;do h+=Q(u,v),v=u,u=u.return;while(u);return h}catch(S){return` Error generating stack: `+S.message+` -`+S.stack}}var ae=Object.prototype.hasOwnProperty,Pe=t.unstable_scheduleCallback,Re=t.unstable_cancelCallback,te=t.unstable_shouldYield,I=t.unstable_requestPaint,k=t.unstable_now,K=t.unstable_getCurrentPriorityLevel,pe=t.unstable_ImmediatePriority,ve=t.unstable_UserBlockingPriority,fe=t.unstable_NormalPriority,Ye=t.unstable_LowPriority,Le=t.unstable_IdlePriority,qe=t.log,it=t.unstable_setDisableYieldValue,Ie=null,Ne=null;function dt(u){if(typeof qe=="function"&&it(u),Ne&&typeof Ne.setStrictMode=="function")try{Ne.setStrictMode(Ie,u)}catch{}}var et=Math.clz32?Math.clz32:ue,Je=Math.log,st=Math.LN2;function ue(u){return u>>>=0,u===0?32:31-(Je(u)/st|0)|0}var tt=256,de=262144,ke=4194304;function Me(u){var h=u&42;if(h!==0)return h;switch(u&-u){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return u&261888;case 262144:case 524288:case 1048576:case 2097152:return u&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return u&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return u}}function ge(u,h,v){var S=u.pendingLanes;if(S===0)return 0;var R=0,D=u.suspendedLanes,H=u.pingedLanes;u=u.warmLanes;var ne=S&134217727;return ne!==0?(S=ne&~D,S!==0?R=Me(S):(H&=ne,H!==0?R=Me(H):v||(v=ne&~u,v!==0&&(R=Me(v))))):(ne=S&~D,ne!==0?R=Me(ne):H!==0?R=Me(H):v||(v=S&~u,v!==0&&(R=Me(v)))),R===0?0:h!==0&&h!==R&&(h&D)===0&&(D=R&-R,v=h&-h,D>=v||D===32&&(v&4194048)!==0)?h:R}function je(u,h){return(u.pendingLanes&~(u.suspendedLanes&~u.pingedLanes)&h)===0}function at(u,h){switch(u){case 1:case 2:case 4:case 8:case 64:return h+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return h+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function yt(){var u=ke;return ke<<=1,(ke&62914560)===0&&(ke=4194304),u}function Ct(u){for(var h=[],v=0;31>v;v++)h.push(u);return h}function tn(u,h){u.pendingLanes|=h,h!==268435456&&(u.suspendedLanes=0,u.pingedLanes=0,u.warmLanes=0)}function Dt(u,h,v,S,R,D){var H=u.pendingLanes;u.pendingLanes=v,u.suspendedLanes=0,u.pingedLanes=0,u.warmLanes=0,u.expiredLanes&=v,u.entangledLanes&=v,u.errorRecoveryDisabledLanes&=v,u.shellSuspendCounter=0;var ne=u.entanglements,_e=u.expirationTimes,ze=u.hiddenUpdates;for(v=H&~v;0"u")return null;try{return u.activeElement||u.body}catch{return u.body}}var Ei=/[\n"\\]/g;function Mn(u){return u.replace(Ei,function(h){return"\\"+h.charCodeAt(0).toString(16)+" "})}function qs(u,h,v,S,R,D,H,ne){u.name="",H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"?u.type=H:u.removeAttribute("type"),h!=null?H==="number"?(h===0&&u.value===""||u.value!=h)&&(u.value=""+rn(h)):u.value!==""+rn(h)&&(u.value=""+rn(h)):H!=="submit"&&H!=="reset"||u.removeAttribute("value"),h!=null?hr(u,H,rn(h)):v!=null?hr(u,H,rn(v)):S!=null&&u.removeAttribute("value"),R==null&&D!=null&&(u.defaultChecked=!!D),R!=null&&(u.checked=R&&typeof R!="function"&&typeof R!="symbol"),ne!=null&&typeof ne!="function"&&typeof ne!="symbol"&&typeof ne!="boolean"?u.name=""+rn(ne):u.removeAttribute("name")}function An(u,h,v,S,R,D,H,ne){if(D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"&&(u.type=D),h!=null||v!=null){if(!(D!=="submit"&&D!=="reset"||h!=null)){Gt(u);return}v=v!=null?""+rn(v):"",h=h!=null?""+rn(h):v,ne||h===u.value||(u.value=h),u.defaultValue=h}S=S??R,S=typeof S!="function"&&typeof S!="symbol"&&!!S,u.checked=ne?u.checked:!!S,u.defaultChecked=!!S,H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"&&(u.name=H),Gt(u)}function hr(u,h,v){h==="number"&&gi(u.ownerDocument)===u||u.defaultValue===""+v||(u.defaultValue=""+v)}function Ki(u,h,v,S){if(u=u.options,h){h={};for(var R=0;R"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Fw=!1;if(nl)try{var wm={};Object.defineProperty(wm,"passive",{get:function(){Fw=!0}}),window.addEventListener("test",wm,wm),window.removeEventListener("test",wm,wm)}catch{Fw=!1}var _c=null,zw=null,$v=null;function xk(){if($v)return $v;var u,h=zw,v=h.length,S,R="value"in _c?_c.value:_c.textContent,D=R.length;for(u=0;u=Am),Mk=" ",Ek=!1;function Ak(u,h){switch(u){case"keyup":return kQ.indexOf(h.keyCode)!==-1;case"keydown":return h.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Tk(u){return u=u.detail,typeof u=="object"&&"data"in u?u.data:null}var Ff=!1;function IQ(u,h){switch(u){case"compositionend":return Tk(h);case"keypress":return h.which!==32?null:(Ek=!0,Mk);case"textInput":return u=h.data,u===Mk&&Ek?null:u;default:return null}}function UQ(u,h){if(Ff)return u==="compositionend"||!Gw&&Ak(u,h)?(u=xk(),$v=zw=_c=null,Ff=!1,u):null;switch(u){case"paste":return null;case"keypress":if(!(h.ctrlKey||h.altKey||h.metaKey)||h.ctrlKey&&h.altKey){if(h.char&&1=h)return{node:v,offset:h-u};u=S}e:{for(;v;){if(v.nextSibling){v=v.nextSibling;break e}v=v.parentNode}v=void 0}v=Lk(v)}}function Uk(u,h){return u&&h?u===h?!0:u&&u.nodeType===3?!1:h&&h.nodeType===3?Uk(u,h.parentNode):"contains"in u?u.contains(h):u.compareDocumentPosition?!!(u.compareDocumentPosition(h)&16):!1:!1}function Fk(u){u=u!=null&&u.ownerDocument!=null&&u.ownerDocument.defaultView!=null?u.ownerDocument.defaultView:window;for(var h=gi(u.document);h instanceof u.HTMLIFrameElement;){try{var v=typeof h.contentWindow.location.href=="string"}catch{v=!1}if(v)u=h.contentWindow;else break;h=gi(u.document)}return h}function qw(u){var h=u&&u.nodeName&&u.nodeName.toLowerCase();return h&&(h==="input"&&(u.type==="text"||u.type==="search"||u.type==="tel"||u.type==="url"||u.type==="password")||h==="textarea"||u.contentEditable==="true")}var $Q=nl&&"documentMode"in document&&11>=document.documentMode,zf=null,Xw=null,Nm=null,Kw=!1;function zk(u,h,v){var S=v.window===v?v.document:v.nodeType===9?v:v.ownerDocument;Kw||zf==null||zf!==gi(S)||(S=zf,"selectionStart"in S&&qw(S)?S={start:S.selectionStart,end:S.selectionEnd}:(S=(S.ownerDocument&&S.ownerDocument.defaultView||window).getSelection(),S={anchorNode:S.anchorNode,anchorOffset:S.anchorOffset,focusNode:S.focusNode,focusOffset:S.focusOffset}),Nm&&Rm(Nm,S)||(Nm=S,S=Fx(Xw,"onSelect"),0>=H,R-=H,_o=1<<32-et(h)+R|v<Xt?(dn=Nt,Nt=null):dn=Nt.sibling;var xn=Ve(Oe,Nt,Fe[Xt],nt);if(xn===null){Nt===null&&(Nt=dn);break}u&&Nt&&xn.alternate===null&&h(Oe,Nt),Ee=D(xn,Ee,Xt),vn===null?Lt=xn:vn.sibling=xn,vn=xn,Nt=dn}if(Xt===Fe.length)return v(Oe,Nt),hn&&rl(Oe,Xt),Lt;if(Nt===null){for(;XtXt?(dn=Nt,Nt=null):dn=Nt.sibling;var Vc=Ve(Oe,Nt,xn.value,nt);if(Vc===null){Nt===null&&(Nt=dn);break}u&&Nt&&Vc.alternate===null&&h(Oe,Nt),Ee=D(Vc,Ee,Xt),vn===null?Lt=Vc:vn.sibling=Vc,vn=Vc,Nt=dn}if(xn.done)return v(Oe,Nt),hn&&rl(Oe,Xt),Lt;if(Nt===null){for(;!xn.done;Xt++,xn=Fe.next())xn=rt(Oe,xn.value,nt),xn!==null&&(Ee=D(xn,Ee,Xt),vn===null?Lt=xn:vn.sibling=xn,vn=xn);return hn&&rl(Oe,Xt),Lt}for(Nt=S(Nt);!xn.done;Xt++,xn=Fe.next())xn=Ke(Nt,Oe,Xt,xn.value,nt),xn!==null&&(u&&xn.alternate!==null&&Nt.delete(xn.key===null?Xt:xn.key),Ee=D(xn,Ee,Xt),vn===null?Lt=xn:vn.sibling=xn,vn=xn);return u&&Nt.forEach(function(dee){return h(Oe,dee)}),hn&&rl(Oe,Xt),Lt}function On(Oe,Ee,Fe,nt){if(typeof Fe=="object"&&Fe!==null&&Fe.type===b&&Fe.key===null&&(Fe=Fe.props.children),typeof Fe=="object"&&Fe!==null){switch(Fe.$$typeof){case m:e:{for(var Lt=Fe.key;Ee!==null;){if(Ee.key===Lt){if(Lt=Fe.type,Lt===b){if(Ee.tag===7){v(Oe,Ee.sibling),nt=R(Ee,Fe.props.children),nt.return=Oe,Oe=nt;break e}}else if(Ee.elementType===Lt||typeof Lt=="object"&&Lt!==null&&Lt.$$typeof===U&&cd(Lt)===Ee.type){v(Oe,Ee.sibling),nt=R(Ee,Fe.props),Im(nt,Fe),nt.return=Oe,Oe=nt;break e}v(Oe,Ee);break}else h(Oe,Ee);Ee=Ee.sibling}Fe.type===b?(nt=rd(Fe.props.children,Oe.mode,nt,Fe.key),nt.return=Oe,Oe=nt):(nt=tx(Fe.type,Fe.key,Fe.props,null,Oe.mode,nt),Im(nt,Fe),nt.return=Oe,Oe=nt)}return H(Oe);case y:e:{for(Lt=Fe.key;Ee!==null;){if(Ee.key===Lt)if(Ee.tag===4&&Ee.stateNode.containerInfo===Fe.containerInfo&&Ee.stateNode.implementation===Fe.implementation){v(Oe,Ee.sibling),nt=R(Ee,Fe.children||[]),nt.return=Oe,Oe=nt;break e}else{v(Oe,Ee);break}else h(Oe,Ee);Ee=Ee.sibling}nt=nM(Fe,Oe.mode,nt),nt.return=Oe,Oe=nt}return H(Oe);case U:return Fe=cd(Fe),On(Oe,Ee,Fe,nt)}if($(Fe))return Tt(Oe,Ee,Fe,nt);if(F(Fe)){if(Lt=F(Fe),typeof Lt!="function")throw Error(i(150));return Fe=Lt.call(Fe),zt(Oe,Ee,Fe,nt)}if(typeof Fe.then=="function")return On(Oe,Ee,lx(Fe),nt);if(Fe.$$typeof===w)return On(Oe,Ee,rx(Oe,Fe),nt);cx(Oe,Fe)}return typeof Fe=="string"&&Fe!==""||typeof Fe=="number"||typeof Fe=="bigint"?(Fe=""+Fe,Ee!==null&&Ee.tag===6?(v(Oe,Ee.sibling),nt=R(Ee,Fe),nt.return=Oe,Oe=nt):(v(Oe,Ee),nt=tM(Fe,Oe.mode,nt),nt.return=Oe,Oe=nt),H(Oe)):v(Oe,Ee)}return function(Oe,Ee,Fe,nt){try{Lm=0;var Lt=On(Oe,Ee,Fe,nt);return Yf=null,Lt}catch(Nt){if(Nt===Kf||Nt===sx)throw Nt;var vn=ja(29,Nt,null,Oe.mode);return vn.lanes=nt,vn.return=Oe,vn}finally{}}}var dd=lL(!0),cL=lL(!1),Ac=!1;function pM(u){u.updateQueue={baseState:u.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function mM(u,h){u=u.updateQueue,h.updateQueue===u&&(h.updateQueue={baseState:u.baseState,firstBaseUpdate:u.firstBaseUpdate,lastBaseUpdate:u.lastBaseUpdate,shared:u.shared,callbacks:null})}function Tc(u){return{lane:u,tag:0,payload:null,callback:null,next:null}}function Cc(u,h,v){var S=u.updateQueue;if(S===null)return null;if(S=S.shared,(wn&2)!==0){var R=S.pending;return R===null?h.next=h:(h.next=R.next,R.next=h),S.pending=h,h=ex(u),Wk(u,null,v),h}return Jv(u,S,h,v),ex(u)}function Um(u,h,v){if(h=h.updateQueue,h!==null&&(h=h.shared,(v&4194048)!==0)){var S=h.lanes;S&=u.pendingLanes,v|=S,h.lanes=v,jn(u,v)}}function gM(u,h){var v=u.updateQueue,S=u.alternate;if(S!==null&&(S=S.updateQueue,v===S)){var R=null,D=null;if(v=v.firstBaseUpdate,v!==null){do{var H={lane:v.lane,tag:v.tag,payload:v.payload,callback:null,next:null};D===null?R=D=H:D=D.next=H,v=v.next}while(v!==null);D===null?R=D=h:D=D.next=h}else R=D=h;v={baseState:S.baseState,firstBaseUpdate:R,lastBaseUpdate:D,shared:S.shared,callbacks:S.callbacks},u.updateQueue=v;return}u=v.lastBaseUpdate,u===null?v.firstBaseUpdate=h:u.next=h,v.lastBaseUpdate=h}var vM=!1;function Fm(){if(vM){var u=Xf;if(u!==null)throw u}}function zm(u,h,v,S){vM=!1;var R=u.updateQueue;Ac=!1;var D=R.firstBaseUpdate,H=R.lastBaseUpdate,ne=R.shared.pending;if(ne!==null){R.shared.pending=null;var _e=ne,ze=_e.next;_e.next=null,H===null?D=ze:H.next=ze,H=_e;var Qe=u.alternate;Qe!==null&&(Qe=Qe.updateQueue,ne=Qe.lastBaseUpdate,ne!==H&&(ne===null?Qe.firstBaseUpdate=ze:ne.next=ze,Qe.lastBaseUpdate=_e))}if(D!==null){var rt=R.baseState;H=0,Qe=ze=_e=null,ne=D;do{var Ve=ne.lane&-536870913,Ke=Ve!==ne.lane;if(Ke?(un&Ve)===Ve:(S&Ve)===Ve){Ve!==0&&Ve===qf&&(vM=!0),Qe!==null&&(Qe=Qe.next={lane:0,tag:ne.tag,payload:ne.payload,callback:null,next:null});e:{var Tt=u,zt=ne;Ve=h;var On=v;switch(zt.tag){case 1:if(Tt=zt.payload,typeof Tt=="function"){rt=Tt.call(On,rt,Ve);break e}rt=Tt;break e;case 3:Tt.flags=Tt.flags&-65537|128;case 0:if(Tt=zt.payload,Ve=typeof Tt=="function"?Tt.call(On,rt,Ve):Tt,Ve==null)break e;rt=f({},rt,Ve);break e;case 2:Ac=!0}}Ve=ne.callback,Ve!==null&&(u.flags|=64,Ke&&(u.flags|=8192),Ke=R.callbacks,Ke===null?R.callbacks=[Ve]:Ke.push(Ve))}else Ke={lane:Ve,tag:ne.tag,payload:ne.payload,callback:ne.callback,next:null},Qe===null?(ze=Qe=Ke,_e=rt):Qe=Qe.next=Ke,H|=Ve;if(ne=ne.next,ne===null){if(ne=R.shared.pending,ne===null)break;Ke=ne,ne=Ke.next,Ke.next=null,R.lastBaseUpdate=Ke,R.shared.pending=null}}while(!0);Qe===null&&(_e=rt),R.baseState=_e,R.firstBaseUpdate=ze,R.lastBaseUpdate=Qe,D===null&&(R.shared.lanes=0),Oc|=H,u.lanes=H,u.memoizedState=rt}}function uL(u,h){if(typeof u!="function")throw Error(i(191,u));u.call(h)}function dL(u,h){var v=u.callbacks;if(v!==null)for(u.callbacks=null,u=0;uD?D:8;var H=q.T,ne={};q.T=ne,IM(u,!1,h,v);try{var _e=R(),ze=q.S;if(ze!==null&&ze(ne,_e),_e!==null&&typeof _e=="object"&&typeof _e.then=="function"){var Qe=eJ(_e,S);Hm(u,h,Qe,Wa(u))}else Hm(u,h,S,Wa(u))}catch(rt){Hm(u,h,{then:function(){},status:"rejected",reason:rt},Wa())}finally{G.p=D,H!==null&&ne.types!==null&&(H.types=ne.types),q.T=H}}function sJ(){}function kM(u,h,v,S){if(u.tag!==5)throw Error(i(476));var R=VL(u).queue;HL(u,R,h,Y,v===null?sJ:function(){return GL(u),v(S)})}function VL(u){var h=u.memoizedState;if(h!==null)return h;h={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ll,lastRenderedState:Y},next:null};var v={};return h.next={memoizedState:v,baseState:v,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ll,lastRenderedState:v},next:null},u.memoizedState=h,u=u.alternate,u!==null&&(u.memoizedState=h),h}function GL(u){var h=VL(u);h.next===null&&(h=u.alternate.memoizedState),Hm(u,h.next.queue,{},Wa())}function LM(){return Nr(ag)}function $L(){return Ti().memoizedState}function WL(){return Ti().memoizedState}function oJ(u){for(var h=u.return;h!==null;){switch(h.tag){case 24:case 3:var v=Wa();u=Tc(v);var S=Cc(h,u,v);S!==null&&(Ma(S,h,v),Um(S,h,v)),h={cache:uM()},u.payload=h;return}h=h.return}}function lJ(u,h,v){var S=Wa();v={lane:S,revertLane:0,gesture:null,action:v,hasEagerState:!1,eagerState:null,next:null},yx(u)?XL(h,v):(v=Jw(u,h,v,S),v!==null&&(Ma(v,u,S),KL(v,h,S)))}function qL(u,h,v){var S=Wa();Hm(u,h,v,S)}function Hm(u,h,v,S){var R={lane:S,revertLane:0,gesture:null,action:v,hasEagerState:!1,eagerState:null,next:null};if(yx(u))XL(h,R);else{var D=u.alternate;if(u.lanes===0&&(D===null||D.lanes===0)&&(D=h.lastRenderedReducer,D!==null))try{var H=h.lastRenderedState,ne=D(H,v);if(R.hasEagerState=!0,R.eagerState=ne,Ba(ne,H))return Jv(u,h,R,0),Hn===null&&Qv(),!1}catch{}finally{}if(v=Jw(u,h,R,S),v!==null)return Ma(v,u,S),KL(v,h,S),!0}return!1}function IM(u,h,v,S){if(S={lane:2,revertLane:pE(),gesture:null,action:S,hasEagerState:!1,eagerState:null,next:null},yx(u)){if(h)throw Error(i(479))}else h=Jw(u,v,S,2),h!==null&&Ma(h,u,2)}function yx(u){var h=u.alternate;return u===qt||h!==null&&h===qt}function XL(u,h){Qf=fx=!0;var v=u.pending;v===null?h.next=h:(h.next=v.next,v.next=h),u.pending=h}function KL(u,h,v){if((v&4194048)!==0){var S=h.lanes;S&=u.pendingLanes,v|=S,h.lanes=v,jn(u,v)}}var Vm={readContext:Nr,use:mx,useCallback:vi,useContext:vi,useEffect:vi,useImperativeHandle:vi,useLayoutEffect:vi,useInsertionEffect:vi,useMemo:vi,useReducer:vi,useRef:vi,useState:vi,useDebugValue:vi,useDeferredValue:vi,useTransition:vi,useSyncExternalStore:vi,useId:vi,useHostTransitionStatus:vi,useFormState:vi,useActionState:vi,useOptimistic:vi,useMemoCache:vi,useCacheRefresh:vi};Vm.useEffectEvent=vi;var YL={readContext:Nr,use:mx,useCallback:function(u,h){return aa().memoizedState=[u,h===void 0?null:h],u},useContext:Nr,useEffect:OL,useImperativeHandle:function(u,h,v){v=v!=null?v.concat([u]):null,vx(4194308,4,UL.bind(null,h,u),v)},useLayoutEffect:function(u,h){return vx(4194308,4,u,h)},useInsertionEffect:function(u,h){vx(4,2,u,h)},useMemo:function(u,h){var v=aa();h=h===void 0?null:h;var S=u();if(fd){dt(!0);try{u()}finally{dt(!1)}}return v.memoizedState=[S,h],S},useReducer:function(u,h,v){var S=aa();if(v!==void 0){var R=v(h);if(fd){dt(!0);try{v(h)}finally{dt(!1)}}}else R=h;return S.memoizedState=S.baseState=R,u={pending:null,lanes:0,dispatch:null,lastRenderedReducer:u,lastRenderedState:R},S.queue=u,u=u.dispatch=lJ.bind(null,qt,u),[S.memoizedState,u]},useRef:function(u){var h=aa();return u={current:u},h.memoizedState=u},useState:function(u){u=RM(u);var h=u.queue,v=qL.bind(null,qt,h);return h.dispatch=v,[u.memoizedState,v]},useDebugValue:DM,useDeferredValue:function(u,h){var v=aa();return OM(v,u,h)},useTransition:function(){var u=RM(!1);return u=HL.bind(null,qt,u.queue,!0,!1),aa().memoizedState=u,[!1,u]},useSyncExternalStore:function(u,h,v){var S=qt,R=aa();if(hn){if(v===void 0)throw Error(i(407));v=v()}else{if(v=h(),Hn===null)throw Error(i(349));(un&127)!==0||vL(S,h,v)}R.memoizedState=v;var D={value:v,getSnapshot:h};return R.queue=D,OL(yL.bind(null,S,D,u),[u]),S.flags|=2048,eh(9,{destroy:void 0},xL.bind(null,S,D,v,h),null),v},useId:function(){var u=aa(),h=Hn.identifierPrefix;if(hn){var v=So,S=_o;v=(S&~(1<<32-et(S)-1)).toString(32)+v,h="_"+h+"R_"+v,v=hx++,0<\/script>",D=D.removeChild(D.firstChild);break;case"select":D=typeof S.is=="string"?H.createElement("select",{is:S.is}):H.createElement("select"),S.multiple?D.multiple=!0:S.size&&(D.size=S.size);break;default:D=typeof S.is=="string"?H.createElement(R,{is:S.is}):H.createElement(R)}}D[li]=h,D[Mi]=S;e:for(H=h.child;H!==null;){if(H.tag===5||H.tag===6)D.appendChild(H.stateNode);else if(H.tag!==4&&H.tag!==27&&H.child!==null){H.child.return=H,H=H.child;continue}if(H===h)break e;for(;H.sibling===null;){if(H.return===null||H.return===h)break e;H=H.return}H.sibling.return=H.return,H=H.sibling}h.stateNode=D;e:switch(Dr(D,R,S),R){case"button":case"input":case"select":case"textarea":S=!!S.autoFocus;break e;case"img":S=!0;break e;default:S=!1}S&&ul(h)}}return Zn(h),YM(h,h.type,u===null?null:u.memoizedProps,h.pendingProps,v),null;case 6:if(u&&h.stateNode!=null)u.memoizedProps!==S&&ul(h);else{if(typeof S!="string"&&h.stateNode===null)throw Error(i(166));if(u=me.current,$f(h)){if(u=h.stateNode,v=h.memoizedProps,S=null,R=Rr,R!==null)switch(R.tag){case 27:case 5:S=R.memoizedProps}u[li]=h,u=!!(u.nodeValue===v||S!==null&&S.suppressHydrationWarning===!0||mU(u.nodeValue,v)),u||Mc(h,!0)}else u=zx(u).createTextNode(S),u[li]=h,h.stateNode=u}return Zn(h),null;case 31:if(v=h.memoizedState,u===null||u.memoizedState!==null){if(S=$f(h),v!==null){if(u===null){if(!S)throw Error(i(318));if(u=h.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(i(557));u[li]=h}else ad(),(h.flags&128)===0&&(h.memoizedState=null),h.flags|=4;Zn(h),u=!1}else v=sM(),u!==null&&u.memoizedState!==null&&(u.memoizedState.hydrationErrors=v),u=!0;if(!u)return h.flags&256?(Va(h),h):(Va(h),null);if((h.flags&128)!==0)throw Error(i(558))}return Zn(h),null;case 13:if(S=h.memoizedState,u===null||u.memoizedState!==null&&u.memoizedState.dehydrated!==null){if(R=$f(h),S!==null&&S.dehydrated!==null){if(u===null){if(!R)throw Error(i(318));if(R=h.memoizedState,R=R!==null?R.dehydrated:null,!R)throw Error(i(317));R[li]=h}else ad(),(h.flags&128)===0&&(h.memoizedState=null),h.flags|=4;Zn(h),R=!1}else R=sM(),u!==null&&u.memoizedState!==null&&(u.memoizedState.hydrationErrors=R),R=!0;if(!R)return h.flags&256?(Va(h),h):(Va(h),null)}return Va(h),(h.flags&128)!==0?(h.lanes=v,h):(v=S!==null,u=u!==null&&u.memoizedState!==null,v&&(S=h.child,R=null,S.alternate!==null&&S.alternate.memoizedState!==null&&S.alternate.memoizedState.cachePool!==null&&(R=S.alternate.memoizedState.cachePool.pool),D=null,S.memoizedState!==null&&S.memoizedState.cachePool!==null&&(D=S.memoizedState.cachePool.pool),D!==R&&(S.flags|=2048)),v!==u&&v&&(h.child.flags|=8192),Mx(h,h.updateQueue),Zn(h),null);case 4:return he(),u===null&&xE(h.stateNode.containerInfo),Zn(h),null;case 10:return sl(h.type),Zn(h),null;case 19:if(X(Ai),S=h.memoizedState,S===null)return Zn(h),null;if(R=(h.flags&128)!==0,D=S.rendering,D===null)if(R)$m(S,!1);else{if(xi!==0||u!==null&&(u.flags&128)!==0)for(u=h.child;u!==null;){if(D=dx(u),D!==null){for(h.flags|=128,$m(S,!1),u=D.updateQueue,h.updateQueue=u,Mx(h,u),h.subtreeFlags=0,u=v,v=h.child;v!==null;)qk(v,u),v=v.sibling;return re(Ai,Ai.current&1|2),hn&&rl(h,S.treeForkCount),h.child}u=u.sibling}S.tail!==null&&k()>Rx&&(h.flags|=128,R=!0,$m(S,!1),h.lanes=4194304)}else{if(!R)if(u=dx(D),u!==null){if(h.flags|=128,R=!0,u=u.updateQueue,h.updateQueue=u,Mx(h,u),$m(S,!0),S.tail===null&&S.tailMode==="hidden"&&!D.alternate&&!hn)return Zn(h),null}else 2*k()-S.renderingStartTime>Rx&&v!==536870912&&(h.flags|=128,R=!0,$m(S,!1),h.lanes=4194304);S.isBackwards?(D.sibling=h.child,h.child=D):(u=S.last,u!==null?u.sibling=D:h.child=D,S.last=D)}return S.tail!==null?(u=S.tail,S.rendering=u,S.tail=u.sibling,S.renderingStartTime=k(),u.sibling=null,v=Ai.current,re(Ai,R?v&1|2:v&1),hn&&rl(h,S.treeForkCount),u):(Zn(h),null);case 22:case 23:return Va(h),yM(),S=h.memoizedState!==null,u!==null?u.memoizedState!==null!==S&&(h.flags|=8192):S&&(h.flags|=8192),S?(v&536870912)!==0&&(h.flags&128)===0&&(Zn(h),h.subtreeFlags&6&&(h.flags|=8192)):Zn(h),v=h.updateQueue,v!==null&&Mx(h,v.retryQueue),v=null,u!==null&&u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),S=null,h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(S=h.memoizedState.cachePool.pool),S!==v&&(h.flags|=2048),u!==null&&X(ld),null;case 24:return v=null,u!==null&&(v=u.memoizedState.cache),h.memoizedState.cache!==v&&(h.flags|=2048),sl(Oi),Zn(h),null;case 25:return null;case 30:return null}throw Error(i(156,h.tag))}function hJ(u,h){switch(rM(h),h.tag){case 1:return u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 3:return sl(Oi),he(),u=h.flags,(u&65536)!==0&&(u&128)===0?(h.flags=u&-65537|128,h):null;case 26:case 27:case 5:return Be(h),null;case 31:if(h.memoizedState!==null){if(Va(h),h.alternate===null)throw Error(i(340));ad()}return u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 13:if(Va(h),u=h.memoizedState,u!==null&&u.dehydrated!==null){if(h.alternate===null)throw Error(i(340));ad()}return u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 19:return X(Ai),null;case 4:return he(),null;case 10:return sl(h.type),null;case 22:case 23:return Va(h),yM(),u!==null&&X(ld),u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 24:return sl(Oi),null;case 25:return null;default:return null}}function bI(u,h){switch(rM(h),h.tag){case 3:sl(Oi),he();break;case 26:case 27:case 5:Be(h);break;case 4:he();break;case 31:h.memoizedState!==null&&Va(h);break;case 13:Va(h);break;case 19:X(Ai);break;case 10:sl(h.type);break;case 22:case 23:Va(h),yM(),u!==null&&X(ld);break;case 24:sl(Oi)}}function Wm(u,h){try{var v=h.updateQueue,S=v!==null?v.lastEffect:null;if(S!==null){var R=S.next;v=R;do{if((v.tag&u)===u){S=void 0;var D=v.create,H=v.inst;S=D(),H.destroy=S}v=v.next}while(v!==R)}}catch(ne){Cn(h,h.return,ne)}}function Pc(u,h,v){try{var S=h.updateQueue,R=S!==null?S.lastEffect:null;if(R!==null){var D=R.next;S=D;do{if((S.tag&u)===u){var H=S.inst,ne=H.destroy;if(ne!==void 0){H.destroy=void 0,R=h;var _e=v,ze=ne;try{ze()}catch(Qe){Cn(R,_e,Qe)}}}S=S.next}while(S!==D)}}catch(Qe){Cn(h,h.return,Qe)}}function _I(u){var h=u.updateQueue;if(h!==null){var v=u.stateNode;try{dL(h,v)}catch(S){Cn(u,u.return,S)}}}function SI(u,h,v){v.props=hd(u.type,u.memoizedProps),v.state=u.memoizedState;try{v.componentWillUnmount()}catch(S){Cn(u,h,S)}}function qm(u,h){try{var v=u.ref;if(v!==null){switch(u.tag){case 26:case 27:case 5:var S=u.stateNode;break;case 30:S=u.stateNode;break;default:S=u.stateNode}typeof v=="function"?u.refCleanup=v(S):v.current=S}}catch(R){Cn(u,h,R)}}function wo(u,h){var v=u.ref,S=u.refCleanup;if(v!==null)if(typeof S=="function")try{S()}catch(R){Cn(u,h,R)}finally{u.refCleanup=null,u=u.alternate,u!=null&&(u.refCleanup=null)}else if(typeof v=="function")try{v(null)}catch(R){Cn(u,h,R)}else v.current=null}function wI(u){var h=u.type,v=u.memoizedProps,S=u.stateNode;try{e:switch(h){case"button":case"input":case"select":case"textarea":v.autoFocus&&S.focus();break e;case"img":v.src?S.src=v.src:v.srcSet&&(S.srcset=v.srcSet)}}catch(R){Cn(u,u.return,R)}}function ZM(u,h,v){try{var S=u.stateNode;LJ(S,u.type,v,h),S[Mi]=h}catch(R){Cn(u,u.return,R)}}function MI(u){return u.tag===5||u.tag===3||u.tag===26||u.tag===27&&Fc(u.type)||u.tag===4}function QM(u){e:for(;;){for(;u.sibling===null;){if(u.return===null||MI(u.return))return null;u=u.return}for(u.sibling.return=u.return,u=u.sibling;u.tag!==5&&u.tag!==6&&u.tag!==18;){if(u.tag===27&&Fc(u.type)||u.flags&2||u.child===null||u.tag===4)continue e;u.child.return=u,u=u.child}if(!(u.flags&2))return u.stateNode}}function JM(u,h,v){var S=u.tag;if(S===5||S===6)u=u.stateNode,h?(v.nodeType===9?v.body:v.nodeName==="HTML"?v.ownerDocument.body:v).insertBefore(u,h):(h=v.nodeType===9?v.body:v.nodeName==="HTML"?v.ownerDocument.body:v,h.appendChild(u),v=v._reactRootContainer,v!=null||h.onclick!==null||(h.onclick=tl));else if(S!==4&&(S===27&&Fc(u.type)&&(v=u.stateNode,h=null),u=u.child,u!==null))for(JM(u,h,v),u=u.sibling;u!==null;)JM(u,h,v),u=u.sibling}function Ex(u,h,v){var S=u.tag;if(S===5||S===6)u=u.stateNode,h?v.insertBefore(u,h):v.appendChild(u);else if(S!==4&&(S===27&&Fc(u.type)&&(v=u.stateNode),u=u.child,u!==null))for(Ex(u,h,v),u=u.sibling;u!==null;)Ex(u,h,v),u=u.sibling}function EI(u){var h=u.stateNode,v=u.memoizedProps;try{for(var S=u.type,R=h.attributes;R.length;)h.removeAttributeNode(R[0]);Dr(h,S,v),h[li]=u,h[Mi]=v}catch(D){Cn(u,u.return,D)}}var dl=!1,Ii=!1,eE=!1,AI=typeof WeakSet=="function"?WeakSet:Set,mr=null;function pJ(u,h){if(u=u.containerInfo,_E=Wx,u=Fk(u),qw(u)){if("selectionStart"in u)var v={start:u.selectionStart,end:u.selectionEnd};else e:{v=(v=u.ownerDocument)&&v.defaultView||window;var S=v.getSelection&&v.getSelection();if(S&&S.rangeCount!==0){v=S.anchorNode;var R=S.anchorOffset,D=S.focusNode;S=S.focusOffset;try{v.nodeType,D.nodeType}catch{v=null;break e}var H=0,ne=-1,_e=-1,ze=0,Qe=0,rt=u,Ve=null;t:for(;;){for(var Ke;rt!==v||R!==0&&rt.nodeType!==3||(ne=H+R),rt!==D||S!==0&&rt.nodeType!==3||(_e=H+S),rt.nodeType===3&&(H+=rt.nodeValue.length),(Ke=rt.firstChild)!==null;)Ve=rt,rt=Ke;for(;;){if(rt===u)break t;if(Ve===v&&++ze===R&&(ne=H),Ve===D&&++Qe===S&&(_e=H),(Ke=rt.nextSibling)!==null)break;rt=Ve,Ve=rt.parentNode}rt=Ke}v=ne===-1||_e===-1?null:{start:ne,end:_e}}else v=null}v=v||{start:0,end:0}}else v=null;for(SE={focusedElem:u,selectionRange:v},Wx=!1,mr=h;mr!==null;)if(h=mr,u=h.child,(h.subtreeFlags&1028)!==0&&u!==null)u.return=h,mr=u;else for(;mr!==null;){switch(h=mr,D=h.alternate,u=h.flags,h.tag){case 0:if((u&4)!==0&&(u=h.updateQueue,u=u!==null?u.events:null,u!==null))for(v=0;v title"))),Dr(D,S,v),D[li]=u,Te(D),S=D;break e;case"link":var H=DU("link","href",R).get(S+(v.href||""));if(H){for(var ne=0;neOn&&(H=On,On=zt,zt=H);var Oe=Ik(ne,zt),Ee=Ik(ne,On);if(Oe&&Ee&&(Ke.rangeCount!==1||Ke.anchorNode!==Oe.node||Ke.anchorOffset!==Oe.offset||Ke.focusNode!==Ee.node||Ke.focusOffset!==Ee.offset)){var Fe=rt.createRange();Fe.setStart(Oe.node,Oe.offset),Ke.removeAllRanges(),zt>On?(Ke.addRange(Fe),Ke.extend(Ee.node,Ee.offset)):(Fe.setEnd(Ee.node,Ee.offset),Ke.addRange(Fe))}}}}for(rt=[],Ke=ne;Ke=Ke.parentNode;)Ke.nodeType===1&&rt.push({element:Ke,left:Ke.scrollLeft,top:Ke.scrollTop});for(typeof ne.focus=="function"&&ne.focus(),ne=0;nev?32:v,q.T=null,v=oE,oE=null;var D=Lc,H=gl;if(Yi=0,ah=Lc=null,gl=0,(wn&6)!==0)throw Error(i(331));var ne=wn;if(wn|=4,UI(D.current),kI(D,D.current,H,v),wn=ne,Jm(0,!1),Ne&&typeof Ne.onPostCommitFiberRoot=="function")try{Ne.onPostCommitFiberRoot(Ie,D)}catch{}return!0}finally{G.p=R,q.T=S,tU(u,h)}}function iU(u,h,v){h=ds(v,h),h=BM(u.stateNode,h,2),u=Cc(u,h,2),u!==null&&(tn(u,2),Mo(u))}function Cn(u,h,v){if(u.tag===3)iU(u,u,v);else for(;h!==null;){if(h.tag===3){iU(h,u,v);break}else if(h.tag===1){var S=h.stateNode;if(typeof h.type.getDerivedStateFromError=="function"||typeof S.componentDidCatch=="function"&&(kc===null||!kc.has(S))){u=ds(v,u),v=rI(2),S=Cc(h,v,2),S!==null&&(aI(v,S,h,u),tn(S,2),Mo(S));break}}h=h.return}}function dE(u,h,v){var S=u.pingCache;if(S===null){S=u.pingCache=new vJ;var R=new Set;S.set(h,R)}else R=S.get(h),R===void 0&&(R=new Set,S.set(h,R));R.has(v)||(iE=!0,R.add(v),u=SJ.bind(null,u,h,v),h.then(u,u))}function SJ(u,h,v){var S=u.pingCache;S!==null&&S.delete(h),u.pingedLanes|=u.suspendedLanes&v,u.warmLanes&=~v,Hn===u&&(un&v)===v&&(xi===4||xi===3&&(un&62914560)===un&&300>k()-Cx?(wn&2)===0&&sh(u,0):rE|=v,rh===un&&(rh=0)),Mo(u)}function rU(u,h){h===0&&(h=yt()),u=id(u,h),u!==null&&(tn(u,h),Mo(u))}function wJ(u){var h=u.memoizedState,v=0;h!==null&&(v=h.retryLane),rU(u,v)}function MJ(u,h){var v=0;switch(u.tag){case 31:case 13:var S=u.stateNode,R=u.memoizedState;R!==null&&(v=R.retryLane);break;case 19:S=u.stateNode;break;case 22:S=u.stateNode._retryCache;break;default:throw Error(i(314))}S!==null&&S.delete(h),rU(u,v)}function EJ(u,h){return Pe(u,h)}var Lx=null,lh=null,fE=!1,Ix=!1,hE=!1,Uc=0;function Mo(u){u!==lh&&u.next===null&&(lh===null?Lx=lh=u:lh=lh.next=u),Ix=!0,fE||(fE=!0,TJ())}function Jm(u,h){if(!hE&&Ix){hE=!0;do for(var v=!1,S=Lx;S!==null;){if(u!==0){var R=S.pendingLanes;if(R===0)var D=0;else{var H=S.suspendedLanes,ne=S.pingedLanes;D=(1<<31-et(42|u)+1)-1,D&=R&~(H&~ne),D=D&201326741?D&201326741|1:D?D|2:0}D!==0&&(v=!0,lU(S,D))}else D=un,D=ge(S,S===Hn?D:0,S.cancelPendingCommit!==null||S.timeoutHandle!==-1),(D&3)===0||je(S,D)||(v=!0,lU(S,D));S=S.next}while(v);hE=!1}}function AJ(){aU()}function aU(){Ix=fE=!1;var u=0;Uc!==0&&UJ()&&(u=Uc);for(var h=k(),v=null,S=Lx;S!==null;){var R=S.next,D=sU(S,h);D===0?(S.next=null,v===null?Lx=R:v.next=R,R===null&&(lh=v)):(v=S,(u!==0||(D&3)!==0)&&(Ix=!0)),S=R}Yi!==0&&Yi!==5||Jm(u),Uc!==0&&(Uc=0)}function sU(u,h){for(var v=u.suspendedLanes,S=u.pingedLanes,R=u.expirationTimes,D=u.pendingLanes&-62914561;0ne)break;var Qe=_e.transferSize,rt=_e.initiatorType;Qe&&gU(rt)&&(_e=_e.responseEnd,H+=Qe*(_e"u"?null:document;function CU(u,h,v){var S=ch;if(S&&typeof h=="string"&&h){var R=Mn(h);R='link[rel="'+u+'"][href="'+R+'"]',typeof v=="string"&&(R+='[crossorigin="'+v+'"]'),TU.has(R)||(TU.add(R),u={rel:u,crossOrigin:v,href:h},S.querySelector(R)===null&&(h=S.createElement("link"),Dr(h,"link",u),Te(h),S.head.appendChild(h)))}}function WJ(u){vl.D(u),CU("dns-prefetch",u,null)}function qJ(u,h){vl.C(u,h),CU("preconnect",u,h)}function XJ(u,h,v){vl.L(u,h,v);var S=ch;if(S&&u&&h){var R='link[rel="preload"][as="'+Mn(h)+'"]';h==="image"&&v&&v.imageSrcSet?(R+='[imagesrcset="'+Mn(v.imageSrcSet)+'"]',typeof v.imageSizes=="string"&&(R+='[imagesizes="'+Mn(v.imageSizes)+'"]')):R+='[href="'+Mn(u)+'"]';var D=R;switch(h){case"style":D=uh(u);break;case"script":D=dh(u)}vs.has(D)||(u=f({rel:"preload",href:h==="image"&&v&&v.imageSrcSet?void 0:u,as:h},v),vs.set(D,u),S.querySelector(R)!==null||h==="style"&&S.querySelector(ig(D))||h==="script"&&S.querySelector(rg(D))||(h=S.createElement("link"),Dr(h,"link",u),Te(h),S.head.appendChild(h)))}}function KJ(u,h){vl.m(u,h);var v=ch;if(v&&u){var S=h&&typeof h.as=="string"?h.as:"script",R='link[rel="modulepreload"][as="'+Mn(S)+'"][href="'+Mn(u)+'"]',D=R;switch(S){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":D=dh(u)}if(!vs.has(D)&&(u=f({rel:"modulepreload",href:u},h),vs.set(D,u),v.querySelector(R)===null)){switch(S){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(v.querySelector(rg(D)))return}S=v.createElement("link"),Dr(S,"link",u),Te(S),v.head.appendChild(S)}}}function YJ(u,h,v){vl.S(u,h,v);var S=ch;if(S&&u){var R=Ce(S).hoistableStyles,D=uh(u);h=h||"default";var H=R.get(D);if(!H){var ne={loading:0,preload:null};if(H=S.querySelector(ig(D)))ne.loading=5;else{u=f({rel:"stylesheet",href:u,"data-precedence":h},v),(v=vs.get(D))&&RE(u,v);var _e=H=S.createElement("link");Te(_e),Dr(_e,"link",u),_e._p=new Promise(function(ze,Qe){_e.onload=ze,_e.onerror=Qe}),_e.addEventListener("load",function(){ne.loading|=1}),_e.addEventListener("error",function(){ne.loading|=2}),ne.loading|=4,jx(H,h,S)}H={type:"stylesheet",instance:H,count:1,state:ne},R.set(D,H)}}}function ZJ(u,h){vl.X(u,h);var v=ch;if(v&&u){var S=Ce(v).hoistableScripts,R=dh(u),D=S.get(R);D||(D=v.querySelector(rg(R)),D||(u=f({src:u,async:!0},h),(h=vs.get(R))&&NE(u,h),D=v.createElement("script"),Te(D),Dr(D,"link",u),v.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},S.set(R,D))}}function QJ(u,h){vl.M(u,h);var v=ch;if(v&&u){var S=Ce(v).hoistableScripts,R=dh(u),D=S.get(R);D||(D=v.querySelector(rg(R)),D||(u=f({src:u,async:!0,type:"module"},h),(h=vs.get(R))&&NE(u,h),D=v.createElement("script"),Te(D),Dr(D,"link",u),v.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},S.set(R,D))}}function RU(u,h,v,S){var R=(R=me.current)?Bx(R):null;if(!R)throw Error(i(446));switch(u){case"meta":case"title":return null;case"style":return typeof v.precedence=="string"&&typeof v.href=="string"?(h=uh(v.href),v=Ce(R).hoistableStyles,S=v.get(h),S||(S={type:"style",instance:null,count:0,state:null},v.set(h,S)),S):{type:"void",instance:null,count:0,state:null};case"link":if(v.rel==="stylesheet"&&typeof v.href=="string"&&typeof v.precedence=="string"){u=uh(v.href);var D=Ce(R).hoistableStyles,H=D.get(u);if(H||(R=R.ownerDocument||R,H={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},D.set(u,H),(D=R.querySelector(ig(u)))&&!D._p&&(H.instance=D,H.state.loading=5),vs.has(u)||(v={rel:"preload",as:"style",href:v.href,crossOrigin:v.crossOrigin,integrity:v.integrity,media:v.media,hrefLang:v.hrefLang,referrerPolicy:v.referrerPolicy},vs.set(u,v),D||JJ(R,u,v,H.state))),h&&S===null)throw Error(i(528,""));return H}if(h&&S!==null)throw Error(i(529,""));return null;case"script":return h=v.async,v=v.src,typeof v=="string"&&h&&typeof h!="function"&&typeof h!="symbol"?(h=dh(v),v=Ce(R).hoistableScripts,S=v.get(h),S||(S={type:"script",instance:null,count:0,state:null},v.set(h,S)),S):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,u))}}function uh(u){return'href="'+Mn(u)+'"'}function ig(u){return'link[rel="stylesheet"]['+u+"]"}function NU(u){return f({},u,{"data-precedence":u.precedence,precedence:null})}function JJ(u,h,v,S){u.querySelector('link[rel="preload"][as="style"]['+h+"]")?S.loading=1:(h=u.createElement("link"),S.preload=h,h.addEventListener("load",function(){return S.loading|=1}),h.addEventListener("error",function(){return S.loading|=2}),Dr(h,"link",v),Te(h),u.head.appendChild(h))}function dh(u){return'[src="'+Mn(u)+'"]'}function rg(u){return"script[async]"+u}function PU(u,h,v){if(h.count++,h.instance===null)switch(h.type){case"style":var S=u.querySelector('style[data-href~="'+Mn(v.href)+'"]');if(S)return h.instance=S,Te(S),S;var R=f({},v,{"data-href":v.href,"data-precedence":v.precedence,href:null,precedence:null});return S=(u.ownerDocument||u).createElement("style"),Te(S),Dr(S,"style",R),jx(S,v.precedence,u),h.instance=S;case"stylesheet":R=uh(v.href);var D=u.querySelector(ig(R));if(D)return h.state.loading|=4,h.instance=D,Te(D),D;S=NU(v),(R=vs.get(R))&&RE(S,R),D=(u.ownerDocument||u).createElement("link"),Te(D);var H=D;return H._p=new Promise(function(ne,_e){H.onload=ne,H.onerror=_e}),Dr(D,"link",S),h.state.loading|=4,jx(D,v.precedence,u),h.instance=D;case"script":return D=dh(v.src),(R=u.querySelector(rg(D)))?(h.instance=R,Te(R),R):(S=v,(R=vs.get(D))&&(S=f({},v),NE(S,R)),u=u.ownerDocument||u,R=u.createElement("script"),Te(R),Dr(R,"link",S),u.head.appendChild(R),h.instance=R);case"void":return null;default:throw Error(i(443,h.type))}else h.type==="stylesheet"&&(h.state.loading&4)===0&&(S=h.instance,h.state.loading|=4,jx(S,v.precedence,u));return h.instance}function jx(u,h,v){for(var S=v.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),R=S.length?S[S.length-1]:null,D=R,H=0;H title"):null)}function eee(u,h,v){if(v===1||h.itemProp!=null)return!1;switch(u){case"meta":case"title":return!0;case"style":if(typeof h.precedence!="string"||typeof h.href!="string"||h.href==="")break;return!0;case"link":if(typeof h.rel!="string"||typeof h.href!="string"||h.href===""||h.onLoad||h.onError)break;switch(h.rel){case"stylesheet":return u=h.disabled,typeof h.precedence=="string"&&u==null;default:return!0}case"script":if(h.async&&typeof h.async!="function"&&typeof h.async!="symbol"&&!h.onLoad&&!h.onError&&h.src&&typeof h.src=="string")return!0}return!1}function kU(u){return!(u.type==="stylesheet"&&(u.state.loading&3)===0)}function tee(u,h,v,S){if(v.type==="stylesheet"&&(typeof S.media!="string"||matchMedia(S.media).matches!==!1)&&(v.state.loading&4)===0){if(v.instance===null){var R=uh(S.href),D=h.querySelector(ig(R));if(D){h=D._p,h!==null&&typeof h=="object"&&typeof h.then=="function"&&(u.count++,u=Vx.bind(u),h.then(u,u)),v.state.loading|=4,v.instance=D,Te(D);return}D=h.ownerDocument||h,S=NU(S),(R=vs.get(R))&&RE(S,R),D=D.createElement("link"),Te(D);var H=D;H._p=new Promise(function(ne,_e){H.onload=ne,H.onerror=_e}),Dr(D,"link",S),v.instance=D}u.stylesheets===null&&(u.stylesheets=new Map),u.stylesheets.set(v,h),(h=v.state.preload)&&(v.state.loading&3)===0&&(u.count++,v=Vx.bind(u),h.addEventListener("load",v),h.addEventListener("error",v))}}var PE=0;function nee(u,h){return u.stylesheets&&u.count===0&&$x(u,u.stylesheets),0PE?50:800)+h);return u.unsuspend=v,function(){u.unsuspend=null,clearTimeout(S),clearTimeout(R)}}:null}function Vx(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$x(this,this.stylesheets);else if(this.unsuspend){var u=this.unsuspend;this.unsuspend=null,u()}}}var Gx=null;function $x(u,h){u.stylesheets=null,u.unsuspend!==null&&(u.count++,Gx=new Map,h.forEach(iee,u),Gx=null,Vx.call(u))}function iee(u,h){if(!(h.state.loading&4)){var v=Gx.get(u);if(v)var S=v.get(null);else{v=new Map,Gx.set(u,v);for(var R=u.querySelectorAll("link[data-precedence],style[data-precedence]"),D=0;D"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),BE.exports=bee(),BE.exports}var See=_ee();var r4="popstate";function wee(t={}){function e(i,r){let{pathname:a,search:s,hash:o}=i.location;return A2("",{pathname:a,search:s,hash:o},r.state&&r.state.usr||null,r.state&&r.state.key||"default")}function n(i,r){return typeof r=="string"?r:h0(r)}return Eee(e,n,null,t)}function di(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function mo(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function Mee(){return Math.random().toString(36).substring(2,10)}function a4(t,e){return{usr:t.state,key:t.key,idx:e}}function A2(t,e,n=null,i){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?Zp(e):e,state:n,key:e&&e.key||i||Mee()}}function h0({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Zp(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let i=t.indexOf("?");i>=0&&(e.search=t.substring(i),t=t.substring(0,i)),t&&(e.pathname=t)}return e}function Eee(t,e,n,i={}){let{window:r=document.defaultView,v5Compat:a=!1}=i,s=r.history,o="POP",l=null,c=d();c==null&&(c=0,s.replaceState({...s.state,idx:c},""));function d(){return(s.state||{idx:null}).idx}function f(){o="POP";let x=d(),g=x==null?null:x-c;c=x,l&&l({action:o,location:b.location,delta:g})}function p(x,g){o="PUSH";let M=A2(b.location,x,g);c=d()+1;let w=a4(M,c),E=b.createHref(M);try{s.pushState(w,"",E)}catch(A){if(A instanceof DOMException&&A.name==="DataCloneError")throw A;r.location.assign(E)}a&&l&&l({action:o,location:b.location,delta:1})}function m(x,g){o="REPLACE";let M=A2(b.location,x,g);c=d();let w=a4(M,c),E=b.createHref(M);s.replaceState(w,"",E),a&&l&&l({action:o,location:b.location,delta:0})}function y(x){return Aee(x)}let b={get action(){return o},get location(){return t(r,s)},listen(x){if(l)throw new Error("A history only accepts one active listener");return r.addEventListener(r4,f),l=x,()=>{r.removeEventListener(r4,f),l=null}},createHref(x){return e(r,x)},createURL:y,encodeLocation(x){let g=y(x);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:p,replace:m,go(x){return s.go(x)}};return b}function Aee(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),di(n,"No window.location.(origin|href) available to create URL");let i=typeof t=="string"?t:h0(t);return i=i.replace(/ $/,"%20"),!e&&i.startsWith("//")&&(i=n+i),new URL(i,n)}function jV(t,e,n="/"){return Tee(t,e,n,!1)}function Tee(t,e,n,i){let r=typeof e=="string"?Zp(e):e,a=tc(r.pathname||"/",n);if(a==null)return null;let s=HV(t);Cee(s);let o=null;for(let l=0;o==null&&l{let d={relativePath:c===void 0?s.path||"":c,caseSensitive:s.caseSensitive===!0,childrenIndex:o,route:s};if(d.relativePath.startsWith("/")){if(!d.relativePath.startsWith(i)&&l)return;di(d.relativePath.startsWith(i),`Absolute route path "${d.relativePath}" nested under path "${i}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),d.relativePath=d.relativePath.slice(i.length)}let f=ql([i,d.relativePath]),p=n.concat(d);s.children&&s.children.length>0&&(di(s.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${f}".`),HV(s.children,e,p,f,l)),!(s.path==null&&!s.index)&&e.push({path:f,score:Lee(f,s.index),routesMeta:p})};return t.forEach((s,o)=>{if(s.path===""||!s.path?.includes("?"))a(s,o);else for(let l of VV(s.path))a(s,o,!0,l)}),e}function VV(t){let e=t.split("/");if(e.length===0)return[];let[n,...i]=e,r=n.endsWith("?"),a=n.replace(/\?$/,"");if(i.length===0)return r?[a,""]:[a];let s=VV(i.join("/")),o=[];return o.push(...s.map(l=>l===""?a:[a,l].join("/"))),r&&o.push(...s),o.map(l=>t.startsWith("/")&&l===""?"/":l)}function Cee(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:Iee(e.routesMeta.map(i=>i.childrenIndex),n.routesMeta.map(i=>i.childrenIndex)))}var Ree=/^:[\w-]+$/,Nee=3,Pee=2,Dee=1,Oee=10,kee=-2,s4=t=>t==="*";function Lee(t,e){let n=t.split("/"),i=n.length;return n.some(s4)&&(i+=kee),e&&(i+=Pee),n.filter(r=>!s4(r)).reduce((r,a)=>r+(Ree.test(a)?Nee:a===""?Dee:Oee),i)}function Iee(t,e){return t.length===e.length&&t.slice(0,-1).every((i,r)=>i===e[r])?t[t.length-1]-e[e.length-1]:0}function Uee(t,e,n=!1){let{routesMeta:i}=t,r={},a="/",s=[];for(let o=0;o{if(d==="*"){let y=o[p]||"";s=a.slice(0,a.length-y.length).replace(/(.)\/+$/,"$1")}const m=o[p];return f&&!m?c[d]=void 0:c[d]=(m||"").replace(/%2F/g,"/"),c},{}),pathname:a,pathnameBase:s,pattern:t}}function Fee(t,e=!1,n=!0){mo(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let i=[],r="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,o,l)=>(i.push({paramName:o,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(i.push({paramName:"*"}),r+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?r+="\\/*$":t!==""&&t!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,e?void 0:"i"),i]}function zee(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return mo(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function tc(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,i=t.charAt(n);return i&&i!=="/"?null:t.slice(n)||"/"}var Bee=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,jee=t=>Bee.test(t);function Hee(t,e="/"){let{pathname:n,search:i="",hash:r=""}=typeof t=="string"?Zp(t):t,a;if(n)if(jee(n))a=n;else{if(n.includes("//")){let s=n;n=n.replace(/\/\/+/g,"/"),mo(!1,`Pathnames cannot have embedded double slashes - normalizing ${s} -> ${n}`)}n.startsWith("/")?a=o4(n.substring(1),"/"):a=o4(n,e)}else a=e;return{pathname:a,search:$ee(i),hash:Wee(r)}}function o4(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(r=>{r===".."?n.length>1&&n.pop():r!=="."&&n.push(r)}),n.length>1?n.join("/"):"/"}function GE(t,e,n,i){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(i)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Vee(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function GV(t){let e=Vee(t);return e.map((n,i)=>i===e.length-1?n.pathname:n.pathnameBase)}function $V(t,e,n,i=!1){let r;typeof t=="string"?r=Zp(t):(r={...t},di(!r.pathname||!r.pathname.includes("?"),GE("?","pathname","search",r)),di(!r.pathname||!r.pathname.includes("#"),GE("#","pathname","hash",r)),di(!r.search||!r.search.includes("#"),GE("#","search","hash",r)));let a=t===""||r.pathname==="",s=a?"/":r.pathname,o;if(s==null)o=n;else{let f=e.length-1;if(!i&&s.startsWith("..")){let p=s.split("/");for(;p[0]==="..";)p.shift(),f-=1;r.pathname=p.join("/")}o=f>=0?e[f]:"/"}let l=Hee(r,o),c=s&&s!=="/"&&s.endsWith("/"),d=(a||s===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(c||d)&&(l.pathname+="/"),l}var ql=t=>t.join("/").replace(/\/\/+/g,"/"),Gee=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),$ee=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,Wee=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function qee(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var WV=["POST","PUT","PATCH","DELETE"];new Set(WV);var Xee=["GET",...WV];new Set(Xee);var Qp=C.createContext(null);Qp.displayName="DataRouter";var oS=C.createContext(null);oS.displayName="DataRouterState";C.createContext(!1);var qV=C.createContext({isTransitioning:!1});qV.displayName="ViewTransition";var Kee=C.createContext(new Map);Kee.displayName="Fetchers";var Yee=C.createContext(null);Yee.displayName="Await";var Yo=C.createContext(null);Yo.displayName="Navigation";var rv=C.createContext(null);rv.displayName="Location";var Zo=C.createContext({outlet:null,matches:[],isDataRoute:!1});Zo.displayName="Route";var RN=C.createContext(null);RN.displayName="RouteError";function Zee(t,{relative:e}={}){di(av(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:i}=C.useContext(Yo),{hash:r,pathname:a,search:s}=sv(t,{relative:e}),o=a;return n!=="/"&&(o=a==="/"?n:ql([n,a])),i.createHref({pathname:o,search:s,hash:r})}function av(){return C.useContext(rv)!=null}function qu(){return di(av(),"useLocation() may be used only in the context of a component."),C.useContext(rv).location}var XV="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function KV(t){C.useContext(Yo).static||C.useLayoutEffect(t)}function YV(){let{isDataRoute:t}=C.useContext(Zo);return t?fte():Qee()}function Qee(){di(av(),"useNavigate() may be used only in the context of a component.");let t=C.useContext(Qp),{basename:e,navigator:n}=C.useContext(Yo),{matches:i}=C.useContext(Zo),{pathname:r}=qu(),a=JSON.stringify(GV(i)),s=C.useRef(!1);return KV(()=>{s.current=!0}),C.useCallback((l,c={})=>{if(mo(s.current,XV),!s.current)return;if(typeof l=="number"){n.go(l);return}let d=$V(l,JSON.parse(a),r,c.relative==="path");t==null&&e!=="/"&&(d.pathname=d.pathname==="/"?e:ql([e,d.pathname])),(c.replace?n.replace:n.push)(d,c.state,c)},[e,n,a,r,t])}var Jee=C.createContext(null);function ete(t){let e=C.useContext(Zo).outlet;return C.useMemo(()=>e&&C.createElement(Jee.Provider,{value:t},e),[e,t])}function sv(t,{relative:e}={}){let{matches:n}=C.useContext(Zo),{pathname:i}=qu(),r=JSON.stringify(GV(n));return C.useMemo(()=>$V(t,JSON.parse(r),i,e==="path"),[t,r,i,e])}function tte(t,e){return ZV(t,e)}function ZV(t,e,n,i,r){di(av(),"useRoutes() may be used only in the context of a component.");let{navigator:a}=C.useContext(Yo),{matches:s}=C.useContext(Zo),o=s[s.length-1],l=o?o.params:{},c=o?o.pathname:"/",d=o?o.pathnameBase:"/",f=o&&o.route;{let M=f&&f.path||"";QV(c,!f||M.endsWith("*")||M.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${c}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. +`+S.stack}}var ae=Object.prototype.hasOwnProperty,Pe=t.unstable_scheduleCallback,Re=t.unstable_cancelCallback,te=t.unstable_shouldYield,U=t.unstable_requestPaint,k=t.unstable_now,K=t.unstable_getCurrentPriorityLevel,pe=t.unstable_ImmediatePriority,ve=t.unstable_UserBlockingPriority,fe=t.unstable_NormalPriority,Ye=t.unstable_LowPriority,Le=t.unstable_IdlePriority,qe=t.log,it=t.unstable_setDisableYieldValue,Ie=null,Ne=null;function ft(u){if(typeof qe=="function"&&it(u),Ne&&typeof Ne.setStrictMode=="function")try{Ne.setStrictMode(Ie,u)}catch{}}var et=Math.clz32?Math.clz32:ue,Je=Math.log,st=Math.LN2;function ue(u){return u>>>=0,u===0?32:31-(Je(u)/st|0)|0}var tt=256,de=262144,ke=4194304;function Me(u){var h=u&42;if(h!==0)return h;switch(u&-u){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return u&261888;case 262144:case 524288:case 1048576:case 2097152:return u&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return u&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return u}}function ge(u,h,v){var S=u.pendingLanes;if(S===0)return 0;var R=0,D=u.suspendedLanes,H=u.pingedLanes;u=u.warmLanes;var ne=S&134217727;return ne!==0?(S=ne&~D,S!==0?R=Me(S):(H&=ne,H!==0?R=Me(H):v||(v=ne&~u,v!==0&&(R=Me(v))))):(ne=S&~D,ne!==0?R=Me(ne):H!==0?R=Me(H):v||(v=S&~u,v!==0&&(R=Me(v)))),R===0?0:h!==0&&h!==R&&(h&D)===0&&(D=R&-R,v=h&-h,D>=v||D===32&&(v&4194048)!==0)?h:R}function Be(u,h){return(u.pendingLanes&~(u.suspendedLanes&~u.pingedLanes)&h)===0}function at(u,h){switch(u){case 1:case 2:case 4:case 8:case 64:return h+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return h+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function yt(){var u=ke;return ke<<=1,(ke&62914560)===0&&(ke=4194304),u}function Ct(u){for(var h=[],v=0;31>v;v++)h.push(u);return h}function tn(u,h){u.pendingLanes|=h,h!==268435456&&(u.suspendedLanes=0,u.pingedLanes=0,u.warmLanes=0)}function Dt(u,h,v,S,R,D){var H=u.pendingLanes;u.pendingLanes=v,u.suspendedLanes=0,u.pingedLanes=0,u.warmLanes=0,u.expiredLanes&=v,u.entangledLanes&=v,u.errorRecoveryDisabledLanes&=v,u.shellSuspendCounter=0;var ne=u.entanglements,_e=u.expirationTimes,ze=u.hiddenUpdates;for(v=H&~v;0"u")return null;try{return u.activeElement||u.body}catch{return u.body}}var Ei=/[\n"\\]/g;function En(u){return u.replace(Ei,function(h){return"\\"+h.charCodeAt(0).toString(16)+" "})}function Xs(u,h,v,S,R,D,H,ne){u.name="",H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"?u.type=H:u.removeAttribute("type"),h!=null?H==="number"?(h===0&&u.value===""||u.value!=h)&&(u.value=""+rn(h)):u.value!==""+rn(h)&&(u.value=""+rn(h)):H!=="submit"&&H!=="reset"||u.removeAttribute("value"),h!=null?hr(u,H,rn(h)):v!=null?hr(u,H,rn(v)):S!=null&&u.removeAttribute("value"),R==null&&D!=null&&(u.defaultChecked=!!D),R!=null&&(u.checked=R&&typeof R!="function"&&typeof R!="symbol"),ne!=null&&typeof ne!="function"&&typeof ne!="symbol"&&typeof ne!="boolean"?u.name=""+rn(ne):u.removeAttribute("name")}function Cn(u,h,v,S,R,D,H,ne){if(D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"&&(u.type=D),h!=null||v!=null){if(!(D!=="submit"&&D!=="reset"||h!=null)){Gt(u);return}v=v!=null?""+rn(v):"",h=h!=null?""+rn(h):v,ne||h===u.value||(u.value=h),u.defaultValue=h}S=S??R,S=typeof S!="function"&&typeof S!="symbol"&&!!S,u.checked=ne?u.checked:!!S,u.defaultChecked=!!S,H!=null&&typeof H!="function"&&typeof H!="symbol"&&typeof H!="boolean"&&(u.name=H),Gt(u)}function hr(u,h,v){h==="number"&&vi(u.ownerDocument)===u||u.defaultValue===""+v||(u.defaultValue=""+v)}function Yi(u,h,v,S){if(u=u.options,h){h={};for(var R=0;R"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),jw=!1;if(il)try{var Em={};Object.defineProperty(Em,"passive",{get:function(){jw=!0}}),window.addEventListener("test",Em,Em),window.removeEventListener("test",Em,Em)}catch{jw=!1}var Sc=null,Bw=null,Wv=null;function Sk(){if(Wv)return Wv;var u,h=Bw,v=h.length,S,R="value"in Sc?Sc.value:Sc.textContent,D=R.length;for(u=0;u=Cm),Ck=" ",Rk=!1;function Nk(u,h){switch(u){case"keyup":return zQ.indexOf(h.keyCode)!==-1;case"keydown":return h.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Pk(u){return u=u.detail,typeof u=="object"&&"data"in u?u.data:null}var zf=!1;function BQ(u,h){switch(u){case"compositionend":return Pk(h);case"keypress":return h.which!==32?null:(Rk=!0,Ck);case"textInput":return u=h.data,u===Ck&&Rk?null:u;default:return null}}function HQ(u,h){if(zf)return u==="compositionend"||!Ww&&Nk(u,h)?(u=Sk(),Wv=Bw=Sc=null,zf=!1,u):null;switch(u){case"paste":return null;case"keypress":if(!(h.ctrlKey||h.altKey||h.metaKey)||h.ctrlKey&&h.altKey){if(h.char&&1=h)return{node:v,offset:h-u};u=S}e:{for(;v;){if(v.nextSibling){v=v.nextSibling;break e}v=v.parentNode}v=void 0}v=zk(v)}}function Bk(u,h){return u&&h?u===h?!0:u&&u.nodeType===3?!1:h&&h.nodeType===3?Bk(u,h.parentNode):"contains"in u?u.contains(h):u.compareDocumentPosition?!!(u.compareDocumentPosition(h)&16):!1:!1}function Hk(u){u=u!=null&&u.ownerDocument!=null&&u.ownerDocument.defaultView!=null?u.ownerDocument.defaultView:window;for(var h=vi(u.document);h instanceof u.HTMLIFrameElement;){try{var v=typeof h.contentWindow.location.href=="string"}catch{v=!1}if(v)u=h.contentWindow;else break;h=vi(u.document)}return h}function Kw(u){var h=u&&u.nodeName&&u.nodeName.toLowerCase();return h&&(h==="input"&&(u.type==="text"||u.type==="search"||u.type==="tel"||u.type==="url"||u.type==="password")||h==="textarea"||u.contentEditable==="true")}var YQ=il&&"documentMode"in document&&11>=document.documentMode,jf=null,Yw=null,Dm=null,Zw=!1;function Vk(u,h,v){var S=v.window===v?v.document:v.nodeType===9?v:v.ownerDocument;Zw||jf==null||jf!==vi(S)||(S=jf,"selectionStart"in S&&Kw(S)?S={start:S.selectionStart,end:S.selectionEnd}:(S=(S.ownerDocument&&S.ownerDocument.defaultView||window).getSelection(),S={anchorNode:S.anchorNode,anchorOffset:S.anchorOffset,focusNode:S.focusNode,focusOffset:S.focusOffset}),Dm&&Pm(Dm,S)||(Dm=S,S=zx(Yw,"onSelect"),0>=H,R-=H,So=1<<32-et(h)+R|v<Xt?(dn=Pt,Pt=null):dn=Pt.sibling;var yn=Ve(Oe,Pt,Fe[Xt],nt);if(yn===null){Pt===null&&(Pt=dn);break}u&&Pt&&yn.alternate===null&&h(Oe,Pt),Ee=D(yn,Ee,Xt),xn===null?Lt=yn:xn.sibling=yn,xn=yn,Pt=dn}if(Xt===Fe.length)return v(Oe,Pt),pn&&al(Oe,Xt),Lt;if(Pt===null){for(;XtXt?(dn=Pt,Pt=null):dn=Pt.sibling;var Gc=Ve(Oe,Pt,yn.value,nt);if(Gc===null){Pt===null&&(Pt=dn);break}u&&Pt&&Gc.alternate===null&&h(Oe,Pt),Ee=D(Gc,Ee,Xt),xn===null?Lt=Gc:xn.sibling=Gc,xn=Gc,Pt=dn}if(yn.done)return v(Oe,Pt),pn&&al(Oe,Xt),Lt;if(Pt===null){for(;!yn.done;Xt++,yn=Fe.next())yn=rt(Oe,yn.value,nt),yn!==null&&(Ee=D(yn,Ee,Xt),xn===null?Lt=yn:xn.sibling=yn,xn=yn);return pn&&al(Oe,Xt),Lt}for(Pt=S(Pt);!yn.done;Xt++,yn=Fe.next())yn=Ke(Pt,Oe,Xt,yn.value,nt),yn!==null&&(u&&yn.alternate!==null&&Pt.delete(yn.key===null?Xt:yn.key),Ee=D(yn,Ee,Xt),xn===null?Lt=yn:xn.sibling=yn,xn=yn);return u&&Pt.forEach(function(gee){return h(Oe,gee)}),pn&&al(Oe,Xt),Lt}function Ln(Oe,Ee,Fe,nt){if(typeof Fe=="object"&&Fe!==null&&Fe.type===b&&Fe.key===null&&(Fe=Fe.props.children),typeof Fe=="object"&&Fe!==null){switch(Fe.$$typeof){case m:e:{for(var Lt=Fe.key;Ee!==null;){if(Ee.key===Lt){if(Lt=Fe.type,Lt===b){if(Ee.tag===7){v(Oe,Ee.sibling),nt=R(Ee,Fe.props.children),nt.return=Oe,Oe=nt;break e}}else if(Ee.elementType===Lt||typeof Lt=="object"&&Lt!==null&&Lt.$$typeof===F&&ud(Lt)===Ee.type){v(Oe,Ee.sibling),nt=R(Ee,Fe.props),Fm(nt,Fe),nt.return=Oe,Oe=nt;break e}v(Oe,Ee);break}else h(Oe,Ee);Ee=Ee.sibling}Fe.type===b?(nt=ad(Fe.props.children,Oe.mode,nt,Fe.key),nt.return=Oe,Oe=nt):(nt=nx(Fe.type,Fe.key,Fe.props,null,Oe.mode,nt),Fm(nt,Fe),nt.return=Oe,Oe=nt)}return H(Oe);case y:e:{for(Lt=Fe.key;Ee!==null;){if(Ee.key===Lt)if(Ee.tag===4&&Ee.stateNode.containerInfo===Fe.containerInfo&&Ee.stateNode.implementation===Fe.implementation){v(Oe,Ee.sibling),nt=R(Ee,Fe.children||[]),nt.return=Oe,Oe=nt;break e}else{v(Oe,Ee);break}else h(Oe,Ee);Ee=Ee.sibling}nt=rM(Fe,Oe.mode,nt),nt.return=Oe,Oe=nt}return H(Oe);case F:return Fe=ud(Fe),Ln(Oe,Ee,Fe,nt)}if($(Fe))return Tt(Oe,Ee,Fe,nt);if(I(Fe)){if(Lt=I(Fe),typeof Lt!="function")throw Error(i(150));return Fe=Lt.call(Fe),zt(Oe,Ee,Fe,nt)}if(typeof Fe.then=="function")return Ln(Oe,Ee,cx(Fe),nt);if(Fe.$$typeof===w)return Ln(Oe,Ee,ax(Oe,Fe),nt);ux(Oe,Fe)}return typeof Fe=="string"&&Fe!==""||typeof Fe=="number"||typeof Fe=="bigint"?(Fe=""+Fe,Ee!==null&&Ee.tag===6?(v(Oe,Ee.sibling),nt=R(Ee,Fe),nt.return=Oe,Oe=nt):(v(Oe,Ee),nt=iM(Fe,Oe.mode,nt),nt.return=Oe,Oe=nt),H(Oe)):v(Oe,Ee)}return function(Oe,Ee,Fe,nt){try{Um=0;var Lt=Ln(Oe,Ee,Fe,nt);return Zf=null,Lt}catch(Pt){if(Pt===Yf||Pt===ox)throw Pt;var xn=Ba(29,Pt,null,Oe.mode);return xn.lanes=nt,xn.return=Oe,xn}finally{}}}var fd=fL(!0),hL=fL(!1),Tc=!1;function gM(u){u.updateQueue={baseState:u.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function vM(u,h){u=u.updateQueue,h.updateQueue===u&&(h.updateQueue={baseState:u.baseState,firstBaseUpdate:u.firstBaseUpdate,lastBaseUpdate:u.lastBaseUpdate,shared:u.shared,callbacks:null})}function Cc(u){return{lane:u,tag:0,payload:null,callback:null,next:null}}function Rc(u,h,v){var S=u.updateQueue;if(S===null)return null;if(S=S.shared,(Mn&2)!==0){var R=S.pending;return R===null?h.next=h:(h.next=R.next,R.next=h),S.pending=h,h=tx(u),Yk(u,null,v),h}return ex(u,S,h,v),tx(u)}function zm(u,h,v){if(h=h.updateQueue,h!==null&&(h=h.shared,(v&4194048)!==0)){var S=h.lanes;S&=u.pendingLanes,v|=S,h.lanes=v,$n(u,v)}}function xM(u,h){var v=u.updateQueue,S=u.alternate;if(S!==null&&(S=S.updateQueue,v===S)){var R=null,D=null;if(v=v.firstBaseUpdate,v!==null){do{var H={lane:v.lane,tag:v.tag,payload:v.payload,callback:null,next:null};D===null?R=D=H:D=D.next=H,v=v.next}while(v!==null);D===null?R=D=h:D=D.next=h}else R=D=h;v={baseState:S.baseState,firstBaseUpdate:R,lastBaseUpdate:D,shared:S.shared,callbacks:S.callbacks},u.updateQueue=v;return}u=v.lastBaseUpdate,u===null?v.firstBaseUpdate=h:u.next=h,v.lastBaseUpdate=h}var yM=!1;function jm(){if(yM){var u=Kf;if(u!==null)throw u}}function Bm(u,h,v,S){yM=!1;var R=u.updateQueue;Tc=!1;var D=R.firstBaseUpdate,H=R.lastBaseUpdate,ne=R.shared.pending;if(ne!==null){R.shared.pending=null;var _e=ne,ze=_e.next;_e.next=null,H===null?D=ze:H.next=ze,H=_e;var Qe=u.alternate;Qe!==null&&(Qe=Qe.updateQueue,ne=Qe.lastBaseUpdate,ne!==H&&(ne===null?Qe.firstBaseUpdate=ze:ne.next=ze,Qe.lastBaseUpdate=_e))}if(D!==null){var rt=R.baseState;H=0,Qe=ze=_e=null,ne=D;do{var Ve=ne.lane&-536870913,Ke=Ve!==ne.lane;if(Ke?(un&Ve)===Ve:(S&Ve)===Ve){Ve!==0&&Ve===Xf&&(yM=!0),Qe!==null&&(Qe=Qe.next={lane:0,tag:ne.tag,payload:ne.payload,callback:null,next:null});e:{var Tt=u,zt=ne;Ve=h;var Ln=v;switch(zt.tag){case 1:if(Tt=zt.payload,typeof Tt=="function"){rt=Tt.call(Ln,rt,Ve);break e}rt=Tt;break e;case 3:Tt.flags=Tt.flags&-65537|128;case 0:if(Tt=zt.payload,Ve=typeof Tt=="function"?Tt.call(Ln,rt,Ve):Tt,Ve==null)break e;rt=f({},rt,Ve);break e;case 2:Tc=!0}}Ve=ne.callback,Ve!==null&&(u.flags|=64,Ke&&(u.flags|=8192),Ke=R.callbacks,Ke===null?R.callbacks=[Ve]:Ke.push(Ve))}else Ke={lane:Ve,tag:ne.tag,payload:ne.payload,callback:ne.callback,next:null},Qe===null?(ze=Qe=Ke,_e=rt):Qe=Qe.next=Ke,H|=Ve;if(ne=ne.next,ne===null){if(ne=R.shared.pending,ne===null)break;Ke=ne,ne=Ke.next,Ke.next=null,R.lastBaseUpdate=Ke,R.shared.pending=null}}while(!0);Qe===null&&(_e=rt),R.baseState=_e,R.firstBaseUpdate=ze,R.lastBaseUpdate=Qe,D===null&&(R.shared.lanes=0),kc|=H,u.lanes=H,u.memoizedState=rt}}function pL(u,h){if(typeof u!="function")throw Error(i(191,u));u.call(h)}function mL(u,h){var v=u.callbacks;if(v!==null)for(u.callbacks=null,u=0;uD?D:8;var H=q.T,ne={};q.T=ne,FM(u,!1,h,v);try{var _e=R(),ze=q.S;if(ze!==null&&ze(ne,_e),_e!==null&&typeof _e=="object"&&typeof _e.then=="function"){var Qe=aJ(_e,S);Gm(u,h,Qe,Wa(u))}else Gm(u,h,S,Wa(u))}catch(rt){Gm(u,h,{then:function(){},status:"rejected",reason:rt},Wa())}finally{W.p=D,H!==null&&ne.types!==null&&(H.types=ne.types),q.T=H}}function dJ(){}function IM(u,h,v,S){if(u.tag!==5)throw Error(i(476));var R=qL(u).queue;WL(u,R,h,Y,v===null?dJ:function(){return XL(u),v(S)})}function qL(u){var h=u.memoizedState;if(h!==null)return h;h={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:cl,lastRenderedState:Y},next:null};var v={};return h.next={memoizedState:v,baseState:v,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:cl,lastRenderedState:v},next:null},u.memoizedState=h,u=u.alternate,u!==null&&(u.memoizedState=h),h}function XL(u){var h=qL(u);h.next===null&&(h=u.alternate.memoizedState),Gm(u,h.next.queue,{},Wa())}function UM(){return Nr(og)}function KL(){return Ti().memoizedState}function YL(){return Ti().memoizedState}function fJ(u){for(var h=u.return;h!==null;){switch(h.tag){case 24:case 3:var v=Wa();u=Cc(v);var S=Rc(h,u,v);S!==null&&(Ma(S,h,v),zm(S,h,v)),h={cache:fM()},u.payload=h;return}h=h.return}}function hJ(u,h,v){var S=Wa();v={lane:S,revertLane:0,gesture:null,action:v,hasEagerState:!1,eagerState:null,next:null},bx(u)?QL(h,v):(v=tM(u,h,v,S),v!==null&&(Ma(v,u,S),JL(v,h,S)))}function ZL(u,h,v){var S=Wa();Gm(u,h,v,S)}function Gm(u,h,v,S){var R={lane:S,revertLane:0,gesture:null,action:v,hasEagerState:!1,eagerState:null,next:null};if(bx(u))QL(h,R);else{var D=u.alternate;if(u.lanes===0&&(D===null||D.lanes===0)&&(D=h.lastRenderedReducer,D!==null))try{var H=h.lastRenderedState,ne=D(H,v);if(R.hasEagerState=!0,R.eagerState=ne,ja(ne,H))return ex(u,h,R,0),Wn===null&&Jv(),!1}catch{}finally{}if(v=tM(u,h,R,S),v!==null)return Ma(v,u,S),JL(v,h,S),!0}return!1}function FM(u,h,v,S){if(S={lane:2,revertLane:gE(),gesture:null,action:S,hasEagerState:!1,eagerState:null,next:null},bx(u)){if(h)throw Error(i(479))}else h=tM(u,v,S,2),h!==null&&Ma(h,u,2)}function bx(u){var h=u.alternate;return u===qt||h!==null&&h===qt}function QL(u,h){Jf=hx=!0;var v=u.pending;v===null?h.next=h:(h.next=v.next,v.next=h),u.pending=h}function JL(u,h,v){if((v&4194048)!==0){var S=h.lanes;S&=u.pendingLanes,v|=S,h.lanes=v,$n(u,v)}}var $m={readContext:Nr,use:gx,useCallback:xi,useContext:xi,useEffect:xi,useImperativeHandle:xi,useLayoutEffect:xi,useInsertionEffect:xi,useMemo:xi,useReducer:xi,useRef:xi,useState:xi,useDebugValue:xi,useDeferredValue:xi,useTransition:xi,useSyncExternalStore:xi,useId:xi,useHostTransitionStatus:xi,useFormState:xi,useActionState:xi,useOptimistic:xi,useMemoCache:xi,useCacheRefresh:xi};$m.useEffectEvent=xi;var eI={readContext:Nr,use:gx,useCallback:function(u,h){return aa().memoizedState=[u,h===void 0?null:h],u},useContext:Nr,useEffect:UL,useImperativeHandle:function(u,h,v){v=v!=null?v.concat([u]):null,xx(4194308,4,BL.bind(null,h,u),v)},useLayoutEffect:function(u,h){return xx(4194308,4,u,h)},useInsertionEffect:function(u,h){xx(4,2,u,h)},useMemo:function(u,h){var v=aa();h=h===void 0?null:h;var S=u();if(hd){ft(!0);try{u()}finally{ft(!1)}}return v.memoizedState=[S,h],S},useReducer:function(u,h,v){var S=aa();if(v!==void 0){var R=v(h);if(hd){ft(!0);try{v(h)}finally{ft(!1)}}}else R=h;return S.memoizedState=S.baseState=R,u={pending:null,lanes:0,dispatch:null,lastRenderedReducer:u,lastRenderedState:R},S.queue=u,u=u.dispatch=hJ.bind(null,qt,u),[S.memoizedState,u]},useRef:function(u){var h=aa();return u={current:u},h.memoizedState=u},useState:function(u){u=PM(u);var h=u.queue,v=ZL.bind(null,qt,h);return h.dispatch=v,[u.memoizedState,v]},useDebugValue:kM,useDeferredValue:function(u,h){var v=aa();return LM(v,u,h)},useTransition:function(){var u=PM(!1);return u=WL.bind(null,qt,u.queue,!0,!1),aa().memoizedState=u,[!1,u]},useSyncExternalStore:function(u,h,v){var S=qt,R=aa();if(pn){if(v===void 0)throw Error(i(407));v=v()}else{if(v=h(),Wn===null)throw Error(i(349));(un&127)!==0||_L(S,h,v)}R.memoizedState=v;var D={value:v,getSnapshot:h};return R.queue=D,UL(wL.bind(null,S,D,u),[u]),S.flags|=2048,th(9,{destroy:void 0},SL.bind(null,S,D,v,h),null),v},useId:function(){var u=aa(),h=Wn.identifierPrefix;if(pn){var v=wo,S=So;v=(S&~(1<<32-et(S)-1)).toString(32)+v,h="_"+h+"R_"+v,v=px++,0<\/script>",D=D.removeChild(D.firstChild);break;case"select":D=typeof S.is=="string"?H.createElement("select",{is:S.is}):H.createElement("select"),S.multiple?D.multiple=!0:S.size&&(D.size=S.size);break;default:D=typeof S.is=="string"?H.createElement(R,{is:S.is}):H.createElement(R)}}D[di]=h,D[Mi]=S;e:for(H=h.child;H!==null;){if(H.tag===5||H.tag===6)D.appendChild(H.stateNode);else if(H.tag!==4&&H.tag!==27&&H.child!==null){H.child.return=H,H=H.child;continue}if(H===h)break e;for(;H.sibling===null;){if(H.return===null||H.return===h)break e;H=H.return}H.sibling.return=H.return,H=H.sibling}h.stateNode=D;e:switch(Dr(D,R,S),R){case"button":case"input":case"select":case"textarea":S=!!S.autoFocus;break e;case"img":S=!0;break e;default:S=!1}S&&dl(h)}}return ei(h),QM(h,h.type,u===null?null:u.memoizedProps,h.pendingProps,v),null;case 6:if(u&&h.stateNode!=null)u.memoizedProps!==S&&dl(h);else{if(typeof S!="string"&&h.stateNode===null)throw Error(i(166));if(u=me.current,Wf(h)){if(u=h.stateNode,v=h.memoizedProps,S=null,R=Rr,R!==null)switch(R.tag){case 27:case 5:S=R.memoizedProps}u[di]=h,u=!!(u.nodeValue===v||S!==null&&S.suppressHydrationWarning===!0||yU(u.nodeValue,v)),u||Ec(h,!0)}else u=jx(u).createTextNode(S),u[di]=h,h.stateNode=u}return ei(h),null;case 31:if(v=h.memoizedState,u===null||u.memoizedState!==null){if(S=Wf(h),v!==null){if(u===null){if(!S)throw Error(i(318));if(u=h.memoizedState,u=u!==null?u.dehydrated:null,!u)throw Error(i(557));u[di]=h}else sd(),(h.flags&128)===0&&(h.memoizedState=null),h.flags|=4;ei(h),u=!1}else v=lM(),u!==null&&u.memoizedState!==null&&(u.memoizedState.hydrationErrors=v),u=!0;if(!u)return h.flags&256?(Va(h),h):(Va(h),null);if((h.flags&128)!==0)throw Error(i(558))}return ei(h),null;case 13:if(S=h.memoizedState,u===null||u.memoizedState!==null&&u.memoizedState.dehydrated!==null){if(R=Wf(h),S!==null&&S.dehydrated!==null){if(u===null){if(!R)throw Error(i(318));if(R=h.memoizedState,R=R!==null?R.dehydrated:null,!R)throw Error(i(317));R[di]=h}else sd(),(h.flags&128)===0&&(h.memoizedState=null),h.flags|=4;ei(h),R=!1}else R=lM(),u!==null&&u.memoizedState!==null&&(u.memoizedState.hydrationErrors=R),R=!0;if(!R)return h.flags&256?(Va(h),h):(Va(h),null)}return Va(h),(h.flags&128)!==0?(h.lanes=v,h):(v=S!==null,u=u!==null&&u.memoizedState!==null,v&&(S=h.child,R=null,S.alternate!==null&&S.alternate.memoizedState!==null&&S.alternate.memoizedState.cachePool!==null&&(R=S.alternate.memoizedState.cachePool.pool),D=null,S.memoizedState!==null&&S.memoizedState.cachePool!==null&&(D=S.memoizedState.cachePool.pool),D!==R&&(S.flags|=2048)),v!==u&&v&&(h.child.flags|=8192),Ex(h,h.updateQueue),ei(h),null);case 4:return he(),u===null&&bE(h.stateNode.containerInfo),ei(h),null;case 10:return ol(h.type),ei(h),null;case 19:if(X(Ai),S=h.memoizedState,S===null)return ei(h),null;if(R=(h.flags&128)!==0,D=S.rendering,D===null)if(R)qm(S,!1);else{if(yi!==0||u!==null&&(u.flags&128)!==0)for(u=h.child;u!==null;){if(D=fx(u),D!==null){for(h.flags|=128,qm(S,!1),u=D.updateQueue,h.updateQueue=u,Ex(h,u),h.subtreeFlags=0,u=v,v=h.child;v!==null;)Zk(v,u),v=v.sibling;return re(Ai,Ai.current&1|2),pn&&al(h,S.treeForkCount),h.child}u=u.sibling}S.tail!==null&&k()>Nx&&(h.flags|=128,R=!0,qm(S,!1),h.lanes=4194304)}else{if(!R)if(u=fx(D),u!==null){if(h.flags|=128,R=!0,u=u.updateQueue,h.updateQueue=u,Ex(h,u),qm(S,!0),S.tail===null&&S.tailMode==="hidden"&&!D.alternate&&!pn)return ei(h),null}else 2*k()-S.renderingStartTime>Nx&&v!==536870912&&(h.flags|=128,R=!0,qm(S,!1),h.lanes=4194304);S.isBackwards?(D.sibling=h.child,h.child=D):(u=S.last,u!==null?u.sibling=D:h.child=D,S.last=D)}return S.tail!==null?(u=S.tail,S.rendering=u,S.tail=u.sibling,S.renderingStartTime=k(),u.sibling=null,v=Ai.current,re(Ai,R?v&1|2:v&1),pn&&al(h,S.treeForkCount),u):(ei(h),null);case 22:case 23:return Va(h),_M(),S=h.memoizedState!==null,u!==null?u.memoizedState!==null!==S&&(h.flags|=8192):S&&(h.flags|=8192),S?(v&536870912)!==0&&(h.flags&128)===0&&(ei(h),h.subtreeFlags&6&&(h.flags|=8192)):ei(h),v=h.updateQueue,v!==null&&Ex(h,v.retryQueue),v=null,u!==null&&u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),S=null,h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(S=h.memoizedState.cachePool.pool),S!==v&&(h.flags|=2048),u!==null&&X(cd),null;case 24:return v=null,u!==null&&(v=u.memoizedState.cache),h.memoizedState.cache!==v&&(h.flags|=2048),ol(Oi),ei(h),null;case 25:return null;case 30:return null}throw Error(i(156,h.tag))}function xJ(u,h){switch(sM(h),h.tag){case 1:return u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 3:return ol(Oi),he(),u=h.flags,(u&65536)!==0&&(u&128)===0?(h.flags=u&-65537|128,h):null;case 26:case 27:case 5:return je(h),null;case 31:if(h.memoizedState!==null){if(Va(h),h.alternate===null)throw Error(i(340));sd()}return u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 13:if(Va(h),u=h.memoizedState,u!==null&&u.dehydrated!==null){if(h.alternate===null)throw Error(i(340));sd()}return u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 19:return X(Ai),null;case 4:return he(),null;case 10:return ol(h.type),null;case 22:case 23:return Va(h),_M(),u!==null&&X(cd),u=h.flags,u&65536?(h.flags=u&-65537|128,h):null;case 24:return ol(Oi),null;case 25:return null;default:return null}}function MI(u,h){switch(sM(h),h.tag){case 3:ol(Oi),he();break;case 26:case 27:case 5:je(h);break;case 4:he();break;case 31:h.memoizedState!==null&&Va(h);break;case 13:Va(h);break;case 19:X(Ai);break;case 10:ol(h.type);break;case 22:case 23:Va(h),_M(),u!==null&&X(cd);break;case 24:ol(Oi)}}function Xm(u,h){try{var v=h.updateQueue,S=v!==null?v.lastEffect:null;if(S!==null){var R=S.next;v=R;do{if((v.tag&u)===u){S=void 0;var D=v.create,H=v.inst;S=D(),H.destroy=S}v=v.next}while(v!==R)}}catch(ne){Nn(h,h.return,ne)}}function Dc(u,h,v){try{var S=h.updateQueue,R=S!==null?S.lastEffect:null;if(R!==null){var D=R.next;S=D;do{if((S.tag&u)===u){var H=S.inst,ne=H.destroy;if(ne!==void 0){H.destroy=void 0,R=h;var _e=v,ze=ne;try{ze()}catch(Qe){Nn(R,_e,Qe)}}}S=S.next}while(S!==D)}}catch(Qe){Nn(h,h.return,Qe)}}function EI(u){var h=u.updateQueue;if(h!==null){var v=u.stateNode;try{mL(h,v)}catch(S){Nn(u,u.return,S)}}}function AI(u,h,v){v.props=pd(u.type,u.memoizedProps),v.state=u.memoizedState;try{v.componentWillUnmount()}catch(S){Nn(u,h,S)}}function Km(u,h){try{var v=u.ref;if(v!==null){switch(u.tag){case 26:case 27:case 5:var S=u.stateNode;break;case 30:S=u.stateNode;break;default:S=u.stateNode}typeof v=="function"?u.refCleanup=v(S):v.current=S}}catch(R){Nn(u,h,R)}}function Mo(u,h){var v=u.ref,S=u.refCleanup;if(v!==null)if(typeof S=="function")try{S()}catch(R){Nn(u,h,R)}finally{u.refCleanup=null,u=u.alternate,u!=null&&(u.refCleanup=null)}else if(typeof v=="function")try{v(null)}catch(R){Nn(u,h,R)}else v.current=null}function TI(u){var h=u.type,v=u.memoizedProps,S=u.stateNode;try{e:switch(h){case"button":case"input":case"select":case"textarea":v.autoFocus&&S.focus();break e;case"img":v.src?S.src=v.src:v.srcSet&&(S.srcset=v.srcSet)}}catch(R){Nn(u,u.return,R)}}function JM(u,h,v){try{var S=u.stateNode;jJ(S,u.type,v,h),S[Mi]=h}catch(R){Nn(u,u.return,R)}}function CI(u){return u.tag===5||u.tag===3||u.tag===26||u.tag===27&&zc(u.type)||u.tag===4}function eE(u){e:for(;;){for(;u.sibling===null;){if(u.return===null||CI(u.return))return null;u=u.return}for(u.sibling.return=u.return,u=u.sibling;u.tag!==5&&u.tag!==6&&u.tag!==18;){if(u.tag===27&&zc(u.type)||u.flags&2||u.child===null||u.tag===4)continue e;u.child.return=u,u=u.child}if(!(u.flags&2))return u.stateNode}}function tE(u,h,v){var S=u.tag;if(S===5||S===6)u=u.stateNode,h?(v.nodeType===9?v.body:v.nodeName==="HTML"?v.ownerDocument.body:v).insertBefore(u,h):(h=v.nodeType===9?v.body:v.nodeName==="HTML"?v.ownerDocument.body:v,h.appendChild(u),v=v._reactRootContainer,v!=null||h.onclick!==null||(h.onclick=nl));else if(S!==4&&(S===27&&zc(u.type)&&(v=u.stateNode,h=null),u=u.child,u!==null))for(tE(u,h,v),u=u.sibling;u!==null;)tE(u,h,v),u=u.sibling}function Ax(u,h,v){var S=u.tag;if(S===5||S===6)u=u.stateNode,h?v.insertBefore(u,h):v.appendChild(u);else if(S!==4&&(S===27&&zc(u.type)&&(v=u.stateNode),u=u.child,u!==null))for(Ax(u,h,v),u=u.sibling;u!==null;)Ax(u,h,v),u=u.sibling}function RI(u){var h=u.stateNode,v=u.memoizedProps;try{for(var S=u.type,R=h.attributes;R.length;)h.removeAttributeNode(R[0]);Dr(h,S,v),h[di]=u,h[Mi]=v}catch(D){Nn(u,u.return,D)}}var fl=!1,Ii=!1,nE=!1,NI=typeof WeakSet=="function"?WeakSet:Set,mr=null;function yJ(u,h){if(u=u.containerInfo,wE=qx,u=Hk(u),Kw(u)){if("selectionStart"in u)var v={start:u.selectionStart,end:u.selectionEnd};else e:{v=(v=u.ownerDocument)&&v.defaultView||window;var S=v.getSelection&&v.getSelection();if(S&&S.rangeCount!==0){v=S.anchorNode;var R=S.anchorOffset,D=S.focusNode;S=S.focusOffset;try{v.nodeType,D.nodeType}catch{v=null;break e}var H=0,ne=-1,_e=-1,ze=0,Qe=0,rt=u,Ve=null;t:for(;;){for(var Ke;rt!==v||R!==0&&rt.nodeType!==3||(ne=H+R),rt!==D||S!==0&&rt.nodeType!==3||(_e=H+S),rt.nodeType===3&&(H+=rt.nodeValue.length),(Ke=rt.firstChild)!==null;)Ve=rt,rt=Ke;for(;;){if(rt===u)break t;if(Ve===v&&++ze===R&&(ne=H),Ve===D&&++Qe===S&&(_e=H),(Ke=rt.nextSibling)!==null)break;rt=Ve,Ve=rt.parentNode}rt=Ke}v=ne===-1||_e===-1?null:{start:ne,end:_e}}else v=null}v=v||{start:0,end:0}}else v=null;for(ME={focusedElem:u,selectionRange:v},qx=!1,mr=h;mr!==null;)if(h=mr,u=h.child,(h.subtreeFlags&1028)!==0&&u!==null)u.return=h,mr=u;else for(;mr!==null;){switch(h=mr,D=h.alternate,u=h.flags,h.tag){case 0:if((u&4)!==0&&(u=h.updateQueue,u=u!==null?u.events:null,u!==null))for(v=0;v title"))),Dr(D,S,v),D[di]=u,Te(D),S=D;break e;case"link":var H=IU("link","href",R).get(S+(v.href||""));if(H){for(var ne=0;neLn&&(H=Ln,Ln=zt,zt=H);var Oe=jk(ne,zt),Ee=jk(ne,Ln);if(Oe&&Ee&&(Ke.rangeCount!==1||Ke.anchorNode!==Oe.node||Ke.anchorOffset!==Oe.offset||Ke.focusNode!==Ee.node||Ke.focusOffset!==Ee.offset)){var Fe=rt.createRange();Fe.setStart(Oe.node,Oe.offset),Ke.removeAllRanges(),zt>Ln?(Ke.addRange(Fe),Ke.extend(Ee.node,Ee.offset)):(Fe.setEnd(Ee.node,Ee.offset),Ke.addRange(Fe))}}}}for(rt=[],Ke=ne;Ke=Ke.parentNode;)Ke.nodeType===1&&rt.push({element:Ke,left:Ke.scrollLeft,top:Ke.scrollTop});for(typeof ne.focus=="function"&&ne.focus(),ne=0;nev?32:v,q.T=null,v=cE,cE=null;var D=Ic,H=vl;if(Zi=0,sh=Ic=null,vl=0,(Mn&6)!==0)throw Error(i(331));var ne=Mn;if(Mn|=4,BI(D.current),FI(D,D.current,H,v),Mn=ne,tg(0,!1),Ne&&typeof Ne.onPostCommitFiberRoot=="function")try{Ne.onPostCommitFiberRoot(Ie,D)}catch{}return!0}finally{W.p=R,q.T=S,aU(u,h)}}function oU(u,h,v){h=fs(v,h),h=HM(u.stateNode,h,2),u=Rc(u,h,2),u!==null&&(tn(u,2),Eo(u))}function Nn(u,h,v){if(u.tag===3)oU(u,u,v);else for(;h!==null;){if(h.tag===3){oU(h,u,v);break}else if(h.tag===1){var S=h.stateNode;if(typeof h.type.getDerivedStateFromError=="function"||typeof S.componentDidCatch=="function"&&(Lc===null||!Lc.has(S))){u=fs(v,u),v=lI(2),S=Rc(h,v,2),S!==null&&(cI(v,S,h,u),tn(S,2),Eo(S));break}}h=h.return}}function hE(u,h,v){var S=u.pingCache;if(S===null){S=u.pingCache=new SJ;var R=new Set;S.set(h,R)}else R=S.get(h),R===void 0&&(R=new Set,S.set(h,R));R.has(v)||(aE=!0,R.add(v),u=TJ.bind(null,u,h,v),h.then(u,u))}function TJ(u,h,v){var S=u.pingCache;S!==null&&S.delete(h),u.pingedLanes|=u.suspendedLanes&v,u.warmLanes&=~v,Wn===u&&(un&v)===v&&(yi===4||yi===3&&(un&62914560)===un&&300>k()-Rx?(Mn&2)===0&&oh(u,0):sE|=v,ah===un&&(ah=0)),Eo(u)}function lU(u,h){h===0&&(h=yt()),u=rd(u,h),u!==null&&(tn(u,h),Eo(u))}function CJ(u){var h=u.memoizedState,v=0;h!==null&&(v=h.retryLane),lU(u,v)}function RJ(u,h){var v=0;switch(u.tag){case 31:case 13:var S=u.stateNode,R=u.memoizedState;R!==null&&(v=R.retryLane);break;case 19:S=u.stateNode;break;case 22:S=u.stateNode._retryCache;break;default:throw Error(i(314))}S!==null&&S.delete(h),lU(u,v)}function NJ(u,h){return Pe(u,h)}var Ix=null,ch=null,pE=!1,Ux=!1,mE=!1,Fc=0;function Eo(u){u!==ch&&u.next===null&&(ch===null?Ix=ch=u:ch=ch.next=u),Ux=!0,pE||(pE=!0,DJ())}function tg(u,h){if(!mE&&Ux){mE=!0;do for(var v=!1,S=Ix;S!==null;){if(u!==0){var R=S.pendingLanes;if(R===0)var D=0;else{var H=S.suspendedLanes,ne=S.pingedLanes;D=(1<<31-et(42|u)+1)-1,D&=R&~(H&~ne),D=D&201326741?D&201326741|1:D?D|2:0}D!==0&&(v=!0,fU(S,D))}else D=un,D=ge(S,S===Wn?D:0,S.cancelPendingCommit!==null||S.timeoutHandle!==-1),(D&3)===0||Be(S,D)||(v=!0,fU(S,D));S=S.next}while(v);mE=!1}}function PJ(){cU()}function cU(){Ux=pE=!1;var u=0;Fc!==0&&HJ()&&(u=Fc);for(var h=k(),v=null,S=Ix;S!==null;){var R=S.next,D=uU(S,h);D===0?(S.next=null,v===null?Ix=R:v.next=R,R===null&&(ch=v)):(v=S,(u!==0||(D&3)!==0)&&(Ux=!0)),S=R}Zi!==0&&Zi!==5||tg(u),Fc!==0&&(Fc=0)}function uU(u,h){for(var v=u.suspendedLanes,S=u.pingedLanes,R=u.expirationTimes,D=u.pendingLanes&-62914561;0ne)break;var Qe=_e.transferSize,rt=_e.initiatorType;Qe&&bU(rt)&&(_e=_e.responseEnd,H+=Qe*(_e"u"?null:document;function DU(u,h,v){var S=uh;if(S&&typeof h=="string"&&h){var R=En(h);R='link[rel="'+u+'"][href="'+R+'"]',typeof v=="string"&&(R+='[crossorigin="'+v+'"]'),PU.has(R)||(PU.add(R),u={rel:u,crossOrigin:v,href:h},S.querySelector(R)===null&&(h=S.createElement("link"),Dr(h,"link",u),Te(h),S.head.appendChild(h)))}}function ZJ(u){xl.D(u),DU("dns-prefetch",u,null)}function QJ(u,h){xl.C(u,h),DU("preconnect",u,h)}function JJ(u,h,v){xl.L(u,h,v);var S=uh;if(S&&u&&h){var R='link[rel="preload"][as="'+En(h)+'"]';h==="image"&&v&&v.imageSrcSet?(R+='[imagesrcset="'+En(v.imageSrcSet)+'"]',typeof v.imageSizes=="string"&&(R+='[imagesizes="'+En(v.imageSizes)+'"]')):R+='[href="'+En(u)+'"]';var D=R;switch(h){case"style":D=dh(u);break;case"script":D=fh(u)}xs.has(D)||(u=f({rel:"preload",href:h==="image"&&v&&v.imageSrcSet?void 0:u,as:h},v),xs.set(D,u),S.querySelector(R)!==null||h==="style"&&S.querySelector(ag(D))||h==="script"&&S.querySelector(sg(D))||(h=S.createElement("link"),Dr(h,"link",u),Te(h),S.head.appendChild(h)))}}function eee(u,h){xl.m(u,h);var v=uh;if(v&&u){var S=h&&typeof h.as=="string"?h.as:"script",R='link[rel="modulepreload"][as="'+En(S)+'"][href="'+En(u)+'"]',D=R;switch(S){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":D=fh(u)}if(!xs.has(D)&&(u=f({rel:"modulepreload",href:u},h),xs.set(D,u),v.querySelector(R)===null)){switch(S){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(v.querySelector(sg(D)))return}S=v.createElement("link"),Dr(S,"link",u),Te(S),v.head.appendChild(S)}}}function tee(u,h,v){xl.S(u,h,v);var S=uh;if(S&&u){var R=Ce(S).hoistableStyles,D=dh(u);h=h||"default";var H=R.get(D);if(!H){var ne={loading:0,preload:null};if(H=S.querySelector(ag(D)))ne.loading=5;else{u=f({rel:"stylesheet",href:u,"data-precedence":h},v),(v=xs.get(D))&&PE(u,v);var _e=H=S.createElement("link");Te(_e),Dr(_e,"link",u),_e._p=new Promise(function(ze,Qe){_e.onload=ze,_e.onerror=Qe}),_e.addEventListener("load",function(){ne.loading|=1}),_e.addEventListener("error",function(){ne.loading|=2}),ne.loading|=4,Hx(H,h,S)}H={type:"stylesheet",instance:H,count:1,state:ne},R.set(D,H)}}}function nee(u,h){xl.X(u,h);var v=uh;if(v&&u){var S=Ce(v).hoistableScripts,R=fh(u),D=S.get(R);D||(D=v.querySelector(sg(R)),D||(u=f({src:u,async:!0},h),(h=xs.get(R))&&DE(u,h),D=v.createElement("script"),Te(D),Dr(D,"link",u),v.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},S.set(R,D))}}function iee(u,h){xl.M(u,h);var v=uh;if(v&&u){var S=Ce(v).hoistableScripts,R=fh(u),D=S.get(R);D||(D=v.querySelector(sg(R)),D||(u=f({src:u,async:!0,type:"module"},h),(h=xs.get(R))&&DE(u,h),D=v.createElement("script"),Te(D),Dr(D,"link",u),v.head.appendChild(D)),D={type:"script",instance:D,count:1,state:null},S.set(R,D))}}function OU(u,h,v,S){var R=(R=me.current)?Bx(R):null;if(!R)throw Error(i(446));switch(u){case"meta":case"title":return null;case"style":return typeof v.precedence=="string"&&typeof v.href=="string"?(h=dh(v.href),v=Ce(R).hoistableStyles,S=v.get(h),S||(S={type:"style",instance:null,count:0,state:null},v.set(h,S)),S):{type:"void",instance:null,count:0,state:null};case"link":if(v.rel==="stylesheet"&&typeof v.href=="string"&&typeof v.precedence=="string"){u=dh(v.href);var D=Ce(R).hoistableStyles,H=D.get(u);if(H||(R=R.ownerDocument||R,H={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},D.set(u,H),(D=R.querySelector(ag(u)))&&!D._p&&(H.instance=D,H.state.loading=5),xs.has(u)||(v={rel:"preload",as:"style",href:v.href,crossOrigin:v.crossOrigin,integrity:v.integrity,media:v.media,hrefLang:v.hrefLang,referrerPolicy:v.referrerPolicy},xs.set(u,v),D||ree(R,u,v,H.state))),h&&S===null)throw Error(i(528,""));return H}if(h&&S!==null)throw Error(i(529,""));return null;case"script":return h=v.async,v=v.src,typeof v=="string"&&h&&typeof h!="function"&&typeof h!="symbol"?(h=fh(v),v=Ce(R).hoistableScripts,S=v.get(h),S||(S={type:"script",instance:null,count:0,state:null},v.set(h,S)),S):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,u))}}function dh(u){return'href="'+En(u)+'"'}function ag(u){return'link[rel="stylesheet"]['+u+"]"}function kU(u){return f({},u,{"data-precedence":u.precedence,precedence:null})}function ree(u,h,v,S){u.querySelector('link[rel="preload"][as="style"]['+h+"]")?S.loading=1:(h=u.createElement("link"),S.preload=h,h.addEventListener("load",function(){return S.loading|=1}),h.addEventListener("error",function(){return S.loading|=2}),Dr(h,"link",v),Te(h),u.head.appendChild(h))}function fh(u){return'[src="'+En(u)+'"]'}function sg(u){return"script[async]"+u}function LU(u,h,v){if(h.count++,h.instance===null)switch(h.type){case"style":var S=u.querySelector('style[data-href~="'+En(v.href)+'"]');if(S)return h.instance=S,Te(S),S;var R=f({},v,{"data-href":v.href,"data-precedence":v.precedence,href:null,precedence:null});return S=(u.ownerDocument||u).createElement("style"),Te(S),Dr(S,"style",R),Hx(S,v.precedence,u),h.instance=S;case"stylesheet":R=dh(v.href);var D=u.querySelector(ag(R));if(D)return h.state.loading|=4,h.instance=D,Te(D),D;S=kU(v),(R=xs.get(R))&&PE(S,R),D=(u.ownerDocument||u).createElement("link"),Te(D);var H=D;return H._p=new Promise(function(ne,_e){H.onload=ne,H.onerror=_e}),Dr(D,"link",S),h.state.loading|=4,Hx(D,v.precedence,u),h.instance=D;case"script":return D=fh(v.src),(R=u.querySelector(sg(D)))?(h.instance=R,Te(R),R):(S=v,(R=xs.get(D))&&(S=f({},v),DE(S,R)),u=u.ownerDocument||u,R=u.createElement("script"),Te(R),Dr(R,"link",S),u.head.appendChild(R),h.instance=R);case"void":return null;default:throw Error(i(443,h.type))}else h.type==="stylesheet"&&(h.state.loading&4)===0&&(S=h.instance,h.state.loading|=4,Hx(S,v.precedence,u));return h.instance}function Hx(u,h,v){for(var S=v.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),R=S.length?S[S.length-1]:null,D=R,H=0;H title"):null)}function aee(u,h,v){if(v===1||h.itemProp!=null)return!1;switch(u){case"meta":case"title":return!0;case"style":if(typeof h.precedence!="string"||typeof h.href!="string"||h.href==="")break;return!0;case"link":if(typeof h.rel!="string"||typeof h.href!="string"||h.href===""||h.onLoad||h.onError)break;switch(h.rel){case"stylesheet":return u=h.disabled,typeof h.precedence=="string"&&u==null;default:return!0}case"script":if(h.async&&typeof h.async!="function"&&typeof h.async!="symbol"&&!h.onLoad&&!h.onError&&h.src&&typeof h.src=="string")return!0}return!1}function FU(u){return!(u.type==="stylesheet"&&(u.state.loading&3)===0)}function see(u,h,v,S){if(v.type==="stylesheet"&&(typeof S.media!="string"||matchMedia(S.media).matches!==!1)&&(v.state.loading&4)===0){if(v.instance===null){var R=dh(S.href),D=h.querySelector(ag(R));if(D){h=D._p,h!==null&&typeof h=="object"&&typeof h.then=="function"&&(u.count++,u=Gx.bind(u),h.then(u,u)),v.state.loading|=4,v.instance=D,Te(D);return}D=h.ownerDocument||h,S=kU(S),(R=xs.get(R))&&PE(S,R),D=D.createElement("link"),Te(D);var H=D;H._p=new Promise(function(ne,_e){H.onload=ne,H.onerror=_e}),Dr(D,"link",S),v.instance=D}u.stylesheets===null&&(u.stylesheets=new Map),u.stylesheets.set(v,h),(h=v.state.preload)&&(v.state.loading&3)===0&&(u.count++,v=Gx.bind(u),h.addEventListener("load",v),h.addEventListener("error",v))}}var OE=0;function oee(u,h){return u.stylesheets&&u.count===0&&Wx(u,u.stylesheets),0OE?50:800)+h);return u.unsuspend=v,function(){u.unsuspend=null,clearTimeout(S),clearTimeout(R)}}:null}function Gx(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Wx(this,this.stylesheets);else if(this.unsuspend){var u=this.unsuspend;this.unsuspend=null,u()}}}var $x=null;function Wx(u,h){u.stylesheets=null,u.unsuspend!==null&&(u.count++,$x=new Map,h.forEach(lee,u),$x=null,Gx.call(u))}function lee(u,h){if(!(h.state.loading&4)){var v=$x.get(u);if(v)var S=v.get(null);else{v=new Map,$x.set(u,v);for(var R=u.querySelectorAll("link[data-precedence],style[data-precedence]"),D=0;D"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(t)}catch(e){console.error(e)}}return t(),HE.exports=Eee(),HE.exports}var Tee=Aee();var l4="popstate";function Cee(t={}){function e(i,r){let{pathname:a,search:s,hash:o}=i.location;return R2("",{pathname:a,search:s,hash:o},r.state&&r.state.usr||null,r.state&&r.state.key||"default")}function n(i,r){return typeof r=="string"?r:m0(r)}return Nee(e,n,null,t)}function hi(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function go(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function Ree(){return Math.random().toString(36).substring(2,10)}function c4(t,e){return{usr:t.state,key:t.key,idx:e}}function R2(t,e,n=null,i){return{pathname:typeof t=="string"?t:t.pathname,search:"",hash:"",...typeof e=="string"?Jp(e):e,state:n,key:e&&e.key||i||Ree()}}function m0({pathname:t="/",search:e="",hash:n=""}){return e&&e!=="?"&&(t+=e.charAt(0)==="?"?e:"?"+e),n&&n!=="#"&&(t+=n.charAt(0)==="#"?n:"#"+n),t}function Jp(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substring(n),t=t.substring(0,n));let i=t.indexOf("?");i>=0&&(e.search=t.substring(i),t=t.substring(0,i)),t&&(e.pathname=t)}return e}function Nee(t,e,n,i={}){let{window:r=document.defaultView,v5Compat:a=!1}=i,s=r.history,o="POP",l=null,c=d();c==null&&(c=0,s.replaceState({...s.state,idx:c},""));function d(){return(s.state||{idx:null}).idx}function f(){o="POP";let x=d(),g=x==null?null:x-c;c=x,l&&l({action:o,location:b.location,delta:g})}function p(x,g){o="PUSH";let M=R2(b.location,x,g);c=d()+1;let w=c4(M,c),E=b.createHref(M);try{s.pushState(w,"",E)}catch(A){if(A instanceof DOMException&&A.name==="DataCloneError")throw A;r.location.assign(E)}a&&l&&l({action:o,location:b.location,delta:1})}function m(x,g){o="REPLACE";let M=R2(b.location,x,g);c=d();let w=c4(M,c),E=b.createHref(M);s.replaceState(w,"",E),a&&l&&l({action:o,location:b.location,delta:0})}function y(x){return Pee(x)}let b={get action(){return o},get location(){return t(r,s)},listen(x){if(l)throw new Error("A history only accepts one active listener");return r.addEventListener(l4,f),l=x,()=>{r.removeEventListener(l4,f),l=null}},createHref(x){return e(r,x)},createURL:y,encodeLocation(x){let g=y(x);return{pathname:g.pathname,search:g.search,hash:g.hash}},push:p,replace:m,go(x){return s.go(x)}};return b}function Pee(t,e=!1){let n="http://localhost";typeof window<"u"&&(n=window.location.origin!=="null"?window.location.origin:window.location.href),hi(n,"No window.location.(origin|href) available to create URL");let i=typeof t=="string"?t:m0(t);return i=i.replace(/ $/,"%20"),!e&&i.startsWith("//")&&(i=n+i),new URL(i,n)}function WV(t,e,n="/"){return Dee(t,e,n,!1)}function Dee(t,e,n,i){let r=typeof e=="string"?Jp(e):e,a=nc(r.pathname||"/",n);if(a==null)return null;let s=qV(t);Oee(s);let o=null;for(let l=0;o==null&&l{let d={relativePath:c===void 0?s.path||"":c,caseSensitive:s.caseSensitive===!0,childrenIndex:o,route:s};if(d.relativePath.startsWith("/")){if(!d.relativePath.startsWith(i)&&l)return;hi(d.relativePath.startsWith(i),`Absolute route path "${d.relativePath}" nested under path "${i}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),d.relativePath=d.relativePath.slice(i.length)}let f=Xl([i,d.relativePath]),p=n.concat(d);s.children&&s.children.length>0&&(hi(s.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${f}".`),qV(s.children,e,p,f,l)),!(s.path==null&&!s.index)&&e.push({path:f,score:jee(f,s.index),routesMeta:p})};return t.forEach((s,o)=>{if(s.path===""||!s.path?.includes("?"))a(s,o);else for(let l of XV(s.path))a(s,o,!0,l)}),e}function XV(t){let e=t.split("/");if(e.length===0)return[];let[n,...i]=e,r=n.endsWith("?"),a=n.replace(/\?$/,"");if(i.length===0)return r?[a,""]:[a];let s=XV(i.join("/")),o=[];return o.push(...s.map(l=>l===""?a:[a,l].join("/"))),r&&o.push(...s),o.map(l=>t.startsWith("/")&&l===""?"/":l)}function Oee(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:Bee(e.routesMeta.map(i=>i.childrenIndex),n.routesMeta.map(i=>i.childrenIndex)))}var kee=/^:[\w-]+$/,Lee=3,Iee=2,Uee=1,Fee=10,zee=-2,u4=t=>t==="*";function jee(t,e){let n=t.split("/"),i=n.length;return n.some(u4)&&(i+=zee),e&&(i+=Iee),n.filter(r=>!u4(r)).reduce((r,a)=>r+(kee.test(a)?Lee:a===""?Uee:Fee),i)}function Bee(t,e){return t.length===e.length&&t.slice(0,-1).every((i,r)=>i===e[r])?t[t.length-1]-e[e.length-1]:0}function Hee(t,e,n=!1){let{routesMeta:i}=t,r={},a="/",s=[];for(let o=0;o{if(d==="*"){let y=o[p]||"";s=a.slice(0,a.length-y.length).replace(/(.)\/+$/,"$1")}const m=o[p];return f&&!m?c[d]=void 0:c[d]=(m||"").replace(/%2F/g,"/"),c},{}),pathname:a,pathnameBase:s,pattern:t}}function Vee(t,e=!1,n=!0){go(t==="*"||!t.endsWith("*")||t.endsWith("/*"),`Route path "${t}" will be treated as if it were "${t.replace(/\*$/,"/*")}" because the \`*\` character must always follow a \`/\` in the pattern. To get rid of this warning, please change the route path to "${t.replace(/\*$/,"/*")}".`);let i=[],r="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,o,l)=>(i.push({paramName:o,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)")).replace(/\/([\w-]+)\?(\/|$)/g,"(/$1)?$2");return t.endsWith("*")?(i.push({paramName:"*"}),r+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?r+="\\/*$":t!==""&&t!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,e?void 0:"i"),i]}function Gee(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return go(!1,`The URL path "${t}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${e}).`),t}}function nc(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,i=t.charAt(n);return i&&i!=="/"?null:t.slice(n)||"/"}var $ee=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Wee=t=>$ee.test(t);function qee(t,e="/"){let{pathname:n,search:i="",hash:r=""}=typeof t=="string"?Jp(t):t,a;if(n)if(Wee(n))a=n;else{if(n.includes("//")){let s=n;n=n.replace(/\/\/+/g,"/"),go(!1,`Pathnames cannot have embedded double slashes - normalizing ${s} -> ${n}`)}n.startsWith("/")?a=d4(n.substring(1),"/"):a=d4(n,e)}else a=e;return{pathname:a,search:Yee(i),hash:Zee(r)}}function d4(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(r=>{r===".."?n.length>1&&n.pop():r!=="."&&n.push(r)}),n.length>1?n.join("/"):"/"}function WE(t,e,n,i){return`Cannot include a '${t}' character in a manually specified \`to.${e}\` field [${JSON.stringify(i)}]. Please separate it out to the \`to.${n}\` field. Alternatively you may provide the full path as a string in and the router will parse it for you.`}function Xee(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function KV(t){let e=Xee(t);return e.map((n,i)=>i===e.length-1?n.pathname:n.pathnameBase)}function YV(t,e,n,i=!1){let r;typeof t=="string"?r=Jp(t):(r={...t},hi(!r.pathname||!r.pathname.includes("?"),WE("?","pathname","search",r)),hi(!r.pathname||!r.pathname.includes("#"),WE("#","pathname","hash",r)),hi(!r.search||!r.search.includes("#"),WE("#","search","hash",r)));let a=t===""||r.pathname==="",s=a?"/":r.pathname,o;if(s==null)o=n;else{let f=e.length-1;if(!i&&s.startsWith("..")){let p=s.split("/");for(;p[0]==="..";)p.shift(),f-=1;r.pathname=p.join("/")}o=f>=0?e[f]:"/"}let l=qee(r,o),c=s&&s!=="/"&&s.endsWith("/"),d=(a||s===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(c||d)&&(l.pathname+="/"),l}var Xl=t=>t.join("/").replace(/\/\/+/g,"/"),Kee=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),Yee=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,Zee=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function Qee(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}Object.getOwnPropertyNames(Object.prototype).sort().join("\0");var ZV=["POST","PUT","PATCH","DELETE"];new Set(ZV);var Jee=["GET",...ZV];new Set(Jee);var em=T.createContext(null);em.displayName="DataRouter";var cS=T.createContext(null);cS.displayName="DataRouterState";T.createContext(!1);var QV=T.createContext({isTransitioning:!1});QV.displayName="ViewTransition";var ete=T.createContext(new Map);ete.displayName="Fetchers";var tte=T.createContext(null);tte.displayName="Await";var Yo=T.createContext(null);Yo.displayName="Navigation";var av=T.createContext(null);av.displayName="Location";var Zo=T.createContext({outlet:null,matches:[],isDataRoute:!1});Zo.displayName="Route";var ON=T.createContext(null);ON.displayName="RouteError";function nte(t,{relative:e}={}){hi(sv(),"useHref() may be used only in the context of a component.");let{basename:n,navigator:i}=T.useContext(Yo),{hash:r,pathname:a,search:s}=ov(t,{relative:e}),o=a;return n!=="/"&&(o=a==="/"?n:Xl([n,a])),i.createHref({pathname:o,search:s,hash:r})}function sv(){return T.useContext(av)!=null}function qu(){return hi(sv(),"useLocation() may be used only in the context of a component."),T.useContext(av).location}var JV="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function eG(t){T.useContext(Yo).static||T.useLayoutEffect(t)}function tG(){let{isDataRoute:t}=T.useContext(Zo);return t?vte():ite()}function ite(){hi(sv(),"useNavigate() may be used only in the context of a component.");let t=T.useContext(em),{basename:e,navigator:n}=T.useContext(Yo),{matches:i}=T.useContext(Zo),{pathname:r}=qu(),a=JSON.stringify(KV(i)),s=T.useRef(!1);return eG(()=>{s.current=!0}),T.useCallback((l,c={})=>{if(go(s.current,JV),!s.current)return;if(typeof l=="number"){n.go(l);return}let d=YV(l,JSON.parse(a),r,c.relative==="path");t==null&&e!=="/"&&(d.pathname=d.pathname==="/"?e:Xl([e,d.pathname])),(c.replace?n.replace:n.push)(d,c.state,c)},[e,n,a,r,t])}var rte=T.createContext(null);function ate(t){let e=T.useContext(Zo).outlet;return T.useMemo(()=>e&&T.createElement(rte.Provider,{value:t},e),[e,t])}function ov(t,{relative:e}={}){let{matches:n}=T.useContext(Zo),{pathname:i}=qu(),r=JSON.stringify(KV(n));return T.useMemo(()=>YV(t,JSON.parse(r),i,e==="path"),[t,r,i,e])}function ste(t,e){return nG(t,e)}function nG(t,e,n,i,r){hi(sv(),"useRoutes() may be used only in the context of a component.");let{navigator:a}=T.useContext(Yo),{matches:s}=T.useContext(Zo),o=s[s.length-1],l=o?o.params:{},c=o?o.pathname:"/",d=o?o.pathnameBase:"/",f=o&&o.route;{let M=f&&f.path||"";iG(c,!f||M.endsWith("*")||M.endsWith("*?"),`You rendered descendant (or called \`useRoutes()\`) at "${c}" (under ) but the parent route path has no trailing "*". This means if you navigate deeper, the parent won't match anymore and therefore the child routes will never render. -Please change the parent to .`)}let p=qu(),m;if(e){let M=typeof e=="string"?Zp(e):e;di(d==="/"||M.pathname?.startsWith(d),`When overriding the location using \`\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${d}" but pathname "${M.pathname}" was given in the \`location\` prop.`),m=M}else m=p;let y=m.pathname||"/",b=y;if(d!=="/"){let M=d.replace(/^\//,"").split("/");b="/"+y.replace(/^\//,"").split("/").slice(M.length).join("/")}let x=jV(t,{pathname:b});mo(f||x!=null,`No routes matched location "${m.pathname}${m.search}${m.hash}" `),mo(x==null||x[x.length-1].route.element!==void 0||x[x.length-1].route.Component!==void 0||x[x.length-1].route.lazy!==void 0,`Matched leaf route at location "${m.pathname}${m.search}${m.hash}" does not have an element or Component. This means it will render an with a null value by default resulting in an "empty" page.`);let g=ste(x&&x.map(M=>Object.assign({},M,{params:Object.assign({},l,M.params),pathname:ql([d,a.encodeLocation?a.encodeLocation(M.pathname.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:M.pathname]),pathnameBase:M.pathnameBase==="/"?d:ql([d,a.encodeLocation?a.encodeLocation(M.pathnameBase.replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:M.pathnameBase])})),s,n,i,r);return e&&g?C.createElement(rv.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",...m},navigationType:"POP"}},g):g}function nte(){let t=dte(),e=qee(t)?`${t.status} ${t.statusText}`:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,i="rgba(200,200,200, 0.5)",r={padding:"0.5rem",backgroundColor:i},a={padding:"2px 4px",backgroundColor:i},s=null;return console.error("Error handled by React Router default ErrorBoundary:",t),s=C.createElement(C.Fragment,null,C.createElement("p",null,"💿 Hey developer 👋"),C.createElement("p",null,"You can provide a way better UX than this when your app throws errors by providing your own ",C.createElement("code",{style:a},"ErrorBoundary")," or"," ",C.createElement("code",{style:a},"errorElement")," prop on your route.")),C.createElement(C.Fragment,null,C.createElement("h2",null,"Unexpected Application Error!"),C.createElement("h3",{style:{fontStyle:"italic"}},e),n?C.createElement("pre",{style:r},n):null,s)}var ite=C.createElement(nte,null),rte=class extends C.Component{constructor(t){super(t),this.state={location:t.location,revalidation:t.revalidation,error:t.error}}static getDerivedStateFromError(t){return{error:t}}static getDerivedStateFromProps(t,e){return e.location!==t.location||e.revalidation!=="idle"&&t.revalidation==="idle"?{error:t.error,location:t.location,revalidation:t.revalidation}:{error:t.error!==void 0?t.error:e.error,location:e.location,revalidation:t.revalidation||e.revalidation}}componentDidCatch(t,e){this.props.onError?this.props.onError(t,e):console.error("React Router caught the following error during render",t)}render(){return this.state.error!==void 0?C.createElement(Zo.Provider,{value:this.props.routeContext},C.createElement(RN.Provider,{value:this.state.error,children:this.props.component})):this.props.children}};function ate({routeContext:t,match:e,children:n}){let i=C.useContext(Qp);return i&&i.static&&i.staticContext&&(e.route.errorElement||e.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=e.route.id),C.createElement(Zo.Provider,{value:t},n)}function ste(t,e=[],n=null,i=null,r=null){if(t==null){if(!n)return null;if(n.errors)t=n.matches;else if(e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let a=t,s=n?.errors;if(s!=null){let d=a.findIndex(f=>f.route.id&&s?.[f.route.id]!==void 0);di(d>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(s).join(",")}`),a=a.slice(0,Math.min(a.length,d+1))}let o=!1,l=-1;if(n)for(let d=0;d=0?a=a.slice(0,l+1):a=[a[0]];break}}}let c=n&&i?(d,f)=>{i(d,{location:n.location,params:n.matches?.[0]?.params??{},errorInfo:f})}:void 0;return a.reduceRight((d,f,p)=>{let m,y=!1,b=null,x=null;n&&(m=s&&f.route.id?s[f.route.id]:void 0,b=f.route.errorElement||ite,o&&(l<0&&p===0?(QV("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),y=!0,x=null):l===p&&(y=!0,x=f.route.hydrateFallbackElement||null)));let g=e.concat(a.slice(0,p+1)),M=()=>{let w;return m?w=b:y?w=x:f.route.Component?w=C.createElement(f.route.Component,null):f.route.element?w=f.route.element:w=d,C.createElement(ate,{match:f,routeContext:{outlet:d,matches:g,isDataRoute:n!=null},children:w})};return n&&(f.route.ErrorBoundary||f.route.errorElement||p===0)?C.createElement(rte,{location:n.location,revalidation:n.revalidation,component:b,error:m,children:M(),routeContext:{outlet:null,matches:g,isDataRoute:!0},onError:c}):M()},null)}function NN(t){return`${t} must be used within a data router. See https://reactrouter.com/en/main/routers/picking-a-router.`}function ote(t){let e=C.useContext(Qp);return di(e,NN(t)),e}function lte(t){let e=C.useContext(oS);return di(e,NN(t)),e}function cte(t){let e=C.useContext(Zo);return di(e,NN(t)),e}function PN(t){let e=cte(t),n=e.matches[e.matches.length-1];return di(n.route.id,`${t} can only be used on routes that contain a unique "id"`),n.route.id}function ute(){return PN("useRouteId")}function dte(){let t=C.useContext(RN),e=lte("useRouteError"),n=PN("useRouteError");return t!==void 0?t:e.errors?.[n]}function fte(){let{router:t}=ote("useNavigate"),e=PN("useNavigate"),n=C.useRef(!1);return KV(()=>{n.current=!0}),C.useCallback(async(r,a={})=>{mo(n.current,XV),n.current&&(typeof r=="number"?t.navigate(r):await t.navigate(r,{fromRouteId:e,...a}))},[t,e])}var l4={};function QV(t,e,n){!e&&!l4[t]&&(l4[t]=!0,mo(!1,n))}C.memo(hte);function hte({routes:t,future:e,state:n,unstable_onError:i}){return ZV(t,void 0,n,i,e)}function pte(t){return ete(t.context)}function ru(t){di(!1,"A is only ever to be used as the child of element, never rendered directly. Please wrap your in a .")}function mte({basename:t="/",children:e=null,location:n,navigationType:i="POP",navigator:r,static:a=!1}){di(!av(),"You cannot render a inside another . You should never have more than one in your app.");let s=t.replace(/^\/*/,"/"),o=C.useMemo(()=>({basename:s,navigator:r,static:a,future:{}}),[s,r,a]);typeof n=="string"&&(n=Zp(n));let{pathname:l="/",search:c="",hash:d="",state:f=null,key:p="default"}=n,m=C.useMemo(()=>{let y=tc(l,s);return y==null?null:{location:{pathname:y,search:c,hash:d,state:f,key:p},navigationType:i}},[s,l,c,d,f,p,i]);return mo(m!=null,` is not able to match the URL "${l}${c}${d}" because it does not start with the basename, so the won't render anything.`),m==null?null:C.createElement(Yo.Provider,{value:o},C.createElement(rv.Provider,{children:e,value:m}))}function gte({children:t,location:e}){return tte(T2(t),e)}function T2(t,e=[]){let n=[];return C.Children.forEach(t,(i,r)=>{if(!C.isValidElement(i))return;let a=[...e,r];if(i.type===C.Fragment){n.push.apply(n,T2(i.props.children,a));return}di(i.type===ru,`[${typeof i.type=="string"?i.type:i.type.name}] is not a component. All component children of must be a or `),di(!i.props.index||!i.props.children,"An index route cannot have child routes.");let s={id:i.props.id||a.join("-"),caseSensitive:i.props.caseSensitive,element:i.props.element,Component:i.props.Component,index:i.props.index,path:i.props.path,middleware:i.props.middleware,loader:i.props.loader,action:i.props.action,hydrateFallbackElement:i.props.hydrateFallbackElement,HydrateFallback:i.props.HydrateFallback,errorElement:i.props.errorElement,ErrorBoundary:i.props.ErrorBoundary,hasErrorBoundary:i.props.hasErrorBoundary===!0||i.props.ErrorBoundary!=null||i.props.errorElement!=null,shouldRevalidate:i.props.shouldRevalidate,handle:i.props.handle,lazy:i.props.lazy};i.props.children&&(s.children=T2(i.props.children,a)),n.push(s)}),n}var Db="get",Ob="application/x-www-form-urlencoded";function lS(t){return t!=null&&typeof t.tagName=="string"}function vte(t){return lS(t)&&t.tagName.toLowerCase()==="button"}function xte(t){return lS(t)&&t.tagName.toLowerCase()==="form"}function yte(t){return lS(t)&&t.tagName.toLowerCase()==="input"}function bte(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function _te(t,e){return t.button===0&&(!e||e==="_self")&&!bte(t)}var ey=null;function Ste(){if(ey===null)try{new FormData(document.createElement("form"),0),ey=!1}catch{ey=!0}return ey}var wte=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function $E(t){return t!=null&&!wte.has(t)?(mo(!1,`"${t}" is not a valid \`encType\` for \`
\`/\`\` and will default to "${Ob}"`),null):t}function Mte(t,e){let n,i,r,a,s;if(xte(t)){let o=t.getAttribute("action");i=o?tc(o,e):null,n=t.getAttribute("method")||Db,r=$E(t.getAttribute("enctype"))||Ob,a=new FormData(t)}else if(vte(t)||yte(t)&&(t.type==="submit"||t.type==="image")){let o=t.form;if(o==null)throw new Error('Cannot submit a